@hawkeyexl/manni 4.12.4 → 4.13.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 (186) hide show
  1. package/README.md +1 -1
  2. package/dist/{batch-UHLVBMYM.js → batch-OB2FXT47.js} +12 -12
  3. package/dist/{build-4RPXBSAO.js → build-4BL24BG3.js} +13 -13
  4. package/dist/{calibrate-POL5DCJ6.js → calibrate-AEDJ7N7G.js} +13 -13
  5. package/dist/{capture-I7ZYG7NZ.js → capture-TP3P4YNL.js} +12 -12
  6. package/dist/{check-6TEG5TM6.js → check-5IYH42KS.js} +14 -14
  7. package/dist/{check-3O2PZ7TZ.js → check-LU5YC3L4.js} +12 -12
  8. package/dist/{check-V7JUDAPS.js → check-NBN2YK2J.js} +13 -13
  9. package/dist/{check-DGOUTC3V.js → check-S55MH66H.js} +11 -11
  10. package/dist/{chunk-6KONPVHQ.js → chunk-3BVDFQ6Y.js} +2 -2
  11. package/dist/{chunk-JAPSZ44X.js → chunk-3HUCB4Z3.js} +4 -4
  12. package/dist/{chunk-LWMB7JRE.js → chunk-3O6U4ICM.js} +2 -2
  13. package/dist/{chunk-3QUCVYNX.js → chunk-3XGTNN3M.js} +3 -3
  14. package/dist/{chunk-AATCO43N.js → chunk-52WO7ESI.js} +3 -3
  15. package/dist/{chunk-TBAMBLF3.js → chunk-6ZFJWUUH.js} +132 -15
  16. package/dist/chunk-6ZFJWUUH.js.map +1 -0
  17. package/dist/{chunk-7TVIFCGT.js → chunk-7JPL3CUC.js} +2 -2
  18. package/dist/{chunk-RLPWXF5R.js → chunk-7RNONVHI.js} +6 -6
  19. package/dist/{chunk-WWKXPPN5.js → chunk-BMBAAPGN.js} +3 -3
  20. package/dist/{chunk-BGRP44SX.js → chunk-BQXY76JB.js} +4 -4
  21. package/dist/{chunk-N5JSOJY6.js → chunk-CODWRUAD.js} +2 -2
  22. package/dist/{chunk-5OKSFNUV.js → chunk-DQOM3DEU.js} +5 -5
  23. package/dist/{chunk-QUG53QGZ.js → chunk-E6BVUDGY.js} +3 -3
  24. package/dist/{chunk-PSPNIAOP.js → chunk-EQ7E6HMG.js} +8 -8
  25. package/dist/{chunk-7JUIJ7Q5.js → chunk-GWI6JPTT.js} +3 -3
  26. package/dist/{chunk-VXU75N5R.js → chunk-HIEGOW7X.js} +3 -3
  27. package/dist/{chunk-GNUZ37L2.js → chunk-HKTGHLBA.js} +2 -2
  28. package/dist/{chunk-GNUZ37L2.js.map → chunk-HKTGHLBA.js.map} +1 -1
  29. package/dist/{chunk-Y4TDIUG6.js → chunk-HY6ROJTH.js} +2 -2
  30. package/dist/{chunk-PP22XDW2.js → chunk-IGQMBHFY.js} +6 -6
  31. package/dist/{chunk-J4ZOTZII.js → chunk-J5NOWIJ3.js} +6 -6
  32. package/dist/{chunk-XEYS3KAZ.js → chunk-JUL2PRQN.js} +4 -4
  33. package/dist/{chunk-NLELGEKL.js → chunk-KE2F7QES.js} +5 -5
  34. package/dist/{chunk-EBZ4QKKX.js → chunk-LNGSE7V2.js} +2 -2
  35. package/dist/{chunk-EU4HDGG4.js → chunk-LSFXNAHU.js} +7 -7
  36. package/dist/{chunk-SSDSV52B.js → chunk-N6A6DJUO.js} +4 -4
  37. package/dist/{chunk-Z42MO7SO.js → chunk-NSAW7U42.js} +2 -2
  38. package/dist/{chunk-KRKNZ3IV.js → chunk-NTEYYYKL.js} +34 -10
  39. package/dist/chunk-NTEYYYKL.js.map +1 -0
  40. package/dist/{chunk-7QH2ZI4F.js → chunk-NWUXRV6N.js} +52 -27
  41. package/dist/chunk-NWUXRV6N.js.map +1 -0
  42. package/dist/{chunk-QWE3WLV4.js → chunk-OBXCJZ6R.js} +5 -5
  43. package/dist/{chunk-VFL3ERMI.js → chunk-OREHJQNN.js} +2 -2
  44. package/dist/{chunk-DTXLFSAB.js → chunk-OUAH7XF2.js} +2 -2
  45. package/dist/{chunk-ZCJUSQM7.js → chunk-OYIWF3B2.js} +10 -10
  46. package/dist/{chunk-HP43LH7E.js → chunk-PA7CMQGD.js} +2 -2
  47. package/dist/{chunk-5NNPEPVM.js → chunk-PCGBXHSE.js} +3 -3
  48. package/dist/{chunk-TR2XFZPR.js → chunk-QKT67PFE.js} +3 -3
  49. package/dist/{chunk-YGFIQ6Y5.js → chunk-SCLXVTFZ.js} +1 -1
  50. package/dist/{chunk-YGFIQ6Y5.js.map → chunk-SCLXVTFZ.js.map} +1 -1
  51. package/dist/{chunk-PNUM6RHR.js → chunk-TDCOKKMI.js} +3 -3
  52. package/dist/{chunk-X4GQ4HPY.js → chunk-TQ3W6RKG.js} +2 -2
  53. package/dist/{chunk-EX6E2P6Z.js → chunk-ULDV2LUI.js} +2 -2
  54. package/dist/{chunk-XP4RNQZL.js → chunk-UQMLCIRX.js} +242 -15
  55. package/dist/chunk-UQMLCIRX.js.map +1 -0
  56. package/dist/{chunk-KQRYW4DN.js → chunk-VNYXK7TM.js} +3 -3
  57. package/dist/{chunk-3FXPIZXL.js → chunk-VOXOBUTX.js} +2 -2
  58. package/dist/{chunk-4IW6FAUN.js → chunk-VYBYUQIP.js} +7 -7
  59. package/dist/{chunk-4TGIGVFO.js → chunk-WVXCN5DS.js} +4 -4
  60. package/dist/{chunk-J67EOBN3.js → chunk-X4MPUD4B.js} +3 -3
  61. package/dist/{chunk-W7EZJPRX.js → chunk-Y6M4JFKG.js} +3 -3
  62. package/dist/{chunk-U4SY2TJS.js → chunk-YZ4TJLZQ.js} +7 -7
  63. package/dist/{cli-USPQURPP.js → cli-4JHQCPHU.js} +2 -2
  64. package/dist/{cli-UL2IFH3R.js → cli-7DETHSNW.js} +15 -15
  65. package/dist/{cli-4ANSKDPD.js → cli-AZKWTCFV.js} +9 -9
  66. package/dist/{cli-2OQKCKRD.js → cli-BW5VOFOZ.js} +8 -8
  67. package/dist/{cli-5QGP6R63.js → cli-DGFLJ2DD.js} +2 -2
  68. package/dist/{cli-SDTXHLCA.js → cli-ECVT4YXR.js} +16 -16
  69. package/dist/{cli-IE3CYYHA.js → cli-G66X7YMP.js} +54 -15
  70. package/dist/cli-G66X7YMP.js.map +1 -0
  71. package/dist/{cli-2Q5FODAX.js → cli-H5LVGOVT.js} +31 -31
  72. package/dist/{cli-RQRMZKKM.js → cli-KYTCJYXK.js} +16 -16
  73. package/dist/{cli-SGSS6FXE.js → cli-L5B2RVV2.js} +19 -19
  74. package/dist/{cli-RQSCBJJY.js → cli-RP5E7XHC.js} +13 -13
  75. package/dist/cli.js +14 -14
  76. package/dist/docmeta.js +8 -8
  77. package/dist/{github-PBIYRH5S.js → github-DJQ4MWNZ.js} +13 -13
  78. package/dist/{github-RJG2MAWB.js → github-UWTDM2J2.js} +11 -11
  79. package/dist/index.d.ts +76 -4
  80. package/dist/index.js +47 -37
  81. package/dist/index.js.map +1 -1
  82. package/dist/{json-PQURAHQ5.js → json-LCVPMEAM.js} +11 -11
  83. package/dist/{labels-FMLO2URZ.js → labels-OQXBVM4A.js} +10 -10
  84. package/dist/{lint-N2CY66JX.js → lint-O7XRHKFP.js} +13 -13
  85. package/dist/{list-VBFNFEXV.js → list-OOOCLOAL.js} +11 -11
  86. package/dist/{list-OMHTVFDY.js → list-OYQ5XPN2.js} +11 -11
  87. package/dist/{page-X3HYSH6D.js → page-XPX5XJZE.js} +10 -10
  88. package/dist/{prepare-IQMB262G.js → prepare-VMBIQYAM.js} +11 -11
  89. package/dist/{pretty-22PXIEOV.js → pretty-KG6TMOEI.js} +12 -12
  90. package/dist/{pretty-K5BOCKBB.js → pretty-KSTZMBUF.js} +11 -11
  91. package/dist/{reporters-324OWH36.js → reporters-AQU4W3KY.js} +4 -4
  92. package/dist/{reporters-5LIYYE6M.js → reporters-FBYLPKD4.js} +12 -12
  93. package/dist/{run-4EKG6EMI.js → run-KUGTU3TT.js} +11 -11
  94. package/dist/{term-2ADSKGZW.js → term-SI3VM6EM.js} +15 -15
  95. package/dist/{validate-LRYUEZLJ.js → validate-NQO7TFSN.js} +5 -5
  96. package/package.json +1 -1
  97. package/plugin/manni/.claude-plugin/plugin.json +1 -1
  98. package/plugin/manni/skills/fix/SKILL.md +4 -2
  99. package/schemas/lint/template.json +6 -1
  100. package/templates/lint/tgdp/concept.yaml +27 -13
  101. package/templates/lint/tgdp/how-to.yaml +35 -21
  102. package/templates/lint/tgdp/readme.yaml +69 -25
  103. package/templates/lint/tgdp/reference.yaml +44 -31
  104. package/templates/lint/tgdp/release-notes.yaml +48 -19
  105. package/templates/lint/tgdp/troubleshooting.yaml +45 -31
  106. package/templates/lint/tgdp/tutorial.yaml +35 -19
  107. package/dist/chunk-7QH2ZI4F.js.map +0 -1
  108. package/dist/chunk-KRKNZ3IV.js.map +0 -1
  109. package/dist/chunk-TBAMBLF3.js.map +0 -1
  110. package/dist/chunk-XP4RNQZL.js.map +0 -1
  111. package/dist/cli-IE3CYYHA.js.map +0 -1
  112. /package/dist/{batch-UHLVBMYM.js.map → batch-OB2FXT47.js.map} +0 -0
  113. /package/dist/{build-4RPXBSAO.js.map → build-4BL24BG3.js.map} +0 -0
  114. /package/dist/{calibrate-POL5DCJ6.js.map → calibrate-AEDJ7N7G.js.map} +0 -0
  115. /package/dist/{capture-I7ZYG7NZ.js.map → capture-TP3P4YNL.js.map} +0 -0
  116. /package/dist/{check-3O2PZ7TZ.js.map → check-5IYH42KS.js.map} +0 -0
  117. /package/dist/{check-6TEG5TM6.js.map → check-LU5YC3L4.js.map} +0 -0
  118. /package/dist/{check-V7JUDAPS.js.map → check-NBN2YK2J.js.map} +0 -0
  119. /package/dist/{check-DGOUTC3V.js.map → check-S55MH66H.js.map} +0 -0
  120. /package/dist/{chunk-6KONPVHQ.js.map → chunk-3BVDFQ6Y.js.map} +0 -0
  121. /package/dist/{chunk-JAPSZ44X.js.map → chunk-3HUCB4Z3.js.map} +0 -0
  122. /package/dist/{chunk-LWMB7JRE.js.map → chunk-3O6U4ICM.js.map} +0 -0
  123. /package/dist/{chunk-3QUCVYNX.js.map → chunk-3XGTNN3M.js.map} +0 -0
  124. /package/dist/{chunk-AATCO43N.js.map → chunk-52WO7ESI.js.map} +0 -0
  125. /package/dist/{chunk-7TVIFCGT.js.map → chunk-7JPL3CUC.js.map} +0 -0
  126. /package/dist/{chunk-RLPWXF5R.js.map → chunk-7RNONVHI.js.map} +0 -0
  127. /package/dist/{chunk-WWKXPPN5.js.map → chunk-BMBAAPGN.js.map} +0 -0
  128. /package/dist/{chunk-BGRP44SX.js.map → chunk-BQXY76JB.js.map} +0 -0
  129. /package/dist/{chunk-N5JSOJY6.js.map → chunk-CODWRUAD.js.map} +0 -0
  130. /package/dist/{chunk-5OKSFNUV.js.map → chunk-DQOM3DEU.js.map} +0 -0
  131. /package/dist/{chunk-QUG53QGZ.js.map → chunk-E6BVUDGY.js.map} +0 -0
  132. /package/dist/{chunk-PSPNIAOP.js.map → chunk-EQ7E6HMG.js.map} +0 -0
  133. /package/dist/{chunk-7JUIJ7Q5.js.map → chunk-GWI6JPTT.js.map} +0 -0
  134. /package/dist/{chunk-VXU75N5R.js.map → chunk-HIEGOW7X.js.map} +0 -0
  135. /package/dist/{chunk-Y4TDIUG6.js.map → chunk-HY6ROJTH.js.map} +0 -0
  136. /package/dist/{chunk-PP22XDW2.js.map → chunk-IGQMBHFY.js.map} +0 -0
  137. /package/dist/{chunk-J4ZOTZII.js.map → chunk-J5NOWIJ3.js.map} +0 -0
  138. /package/dist/{chunk-XEYS3KAZ.js.map → chunk-JUL2PRQN.js.map} +0 -0
  139. /package/dist/{chunk-NLELGEKL.js.map → chunk-KE2F7QES.js.map} +0 -0
  140. /package/dist/{chunk-EBZ4QKKX.js.map → chunk-LNGSE7V2.js.map} +0 -0
  141. /package/dist/{chunk-EU4HDGG4.js.map → chunk-LSFXNAHU.js.map} +0 -0
  142. /package/dist/{chunk-SSDSV52B.js.map → chunk-N6A6DJUO.js.map} +0 -0
  143. /package/dist/{chunk-Z42MO7SO.js.map → chunk-NSAW7U42.js.map} +0 -0
  144. /package/dist/{chunk-QWE3WLV4.js.map → chunk-OBXCJZ6R.js.map} +0 -0
  145. /package/dist/{chunk-VFL3ERMI.js.map → chunk-OREHJQNN.js.map} +0 -0
  146. /package/dist/{chunk-DTXLFSAB.js.map → chunk-OUAH7XF2.js.map} +0 -0
  147. /package/dist/{chunk-ZCJUSQM7.js.map → chunk-OYIWF3B2.js.map} +0 -0
  148. /package/dist/{chunk-HP43LH7E.js.map → chunk-PA7CMQGD.js.map} +0 -0
  149. /package/dist/{chunk-5NNPEPVM.js.map → chunk-PCGBXHSE.js.map} +0 -0
  150. /package/dist/{chunk-TR2XFZPR.js.map → chunk-QKT67PFE.js.map} +0 -0
  151. /package/dist/{chunk-PNUM6RHR.js.map → chunk-TDCOKKMI.js.map} +0 -0
  152. /package/dist/{chunk-X4GQ4HPY.js.map → chunk-TQ3W6RKG.js.map} +0 -0
  153. /package/dist/{chunk-EX6E2P6Z.js.map → chunk-ULDV2LUI.js.map} +0 -0
  154. /package/dist/{chunk-KQRYW4DN.js.map → chunk-VNYXK7TM.js.map} +0 -0
  155. /package/dist/{chunk-3FXPIZXL.js.map → chunk-VOXOBUTX.js.map} +0 -0
  156. /package/dist/{chunk-4IW6FAUN.js.map → chunk-VYBYUQIP.js.map} +0 -0
  157. /package/dist/{chunk-4TGIGVFO.js.map → chunk-WVXCN5DS.js.map} +0 -0
  158. /package/dist/{chunk-J67EOBN3.js.map → chunk-X4MPUD4B.js.map} +0 -0
  159. /package/dist/{chunk-W7EZJPRX.js.map → chunk-Y6M4JFKG.js.map} +0 -0
  160. /package/dist/{chunk-U4SY2TJS.js.map → chunk-YZ4TJLZQ.js.map} +0 -0
  161. /package/dist/{cli-USPQURPP.js.map → cli-4JHQCPHU.js.map} +0 -0
  162. /package/dist/{cli-UL2IFH3R.js.map → cli-7DETHSNW.js.map} +0 -0
  163. /package/dist/{cli-4ANSKDPD.js.map → cli-AZKWTCFV.js.map} +0 -0
  164. /package/dist/{cli-2OQKCKRD.js.map → cli-BW5VOFOZ.js.map} +0 -0
  165. /package/dist/{cli-5QGP6R63.js.map → cli-DGFLJ2DD.js.map} +0 -0
  166. /package/dist/{cli-SDTXHLCA.js.map → cli-ECVT4YXR.js.map} +0 -0
  167. /package/dist/{cli-2Q5FODAX.js.map → cli-H5LVGOVT.js.map} +0 -0
  168. /package/dist/{cli-RQRMZKKM.js.map → cli-KYTCJYXK.js.map} +0 -0
  169. /package/dist/{cli-SGSS6FXE.js.map → cli-L5B2RVV2.js.map} +0 -0
  170. /package/dist/{cli-RQSCBJJY.js.map → cli-RP5E7XHC.js.map} +0 -0
  171. /package/dist/{github-PBIYRH5S.js.map → github-DJQ4MWNZ.js.map} +0 -0
  172. /package/dist/{github-RJG2MAWB.js.map → github-UWTDM2J2.js.map} +0 -0
  173. /package/dist/{json-PQURAHQ5.js.map → json-LCVPMEAM.js.map} +0 -0
  174. /package/dist/{labels-FMLO2URZ.js.map → labels-OQXBVM4A.js.map} +0 -0
  175. /package/dist/{lint-N2CY66JX.js.map → lint-O7XRHKFP.js.map} +0 -0
  176. /package/dist/{list-OMHTVFDY.js.map → list-OOOCLOAL.js.map} +0 -0
  177. /package/dist/{list-VBFNFEXV.js.map → list-OYQ5XPN2.js.map} +0 -0
  178. /package/dist/{page-X3HYSH6D.js.map → page-XPX5XJZE.js.map} +0 -0
  179. /package/dist/{prepare-IQMB262G.js.map → prepare-VMBIQYAM.js.map} +0 -0
  180. /package/dist/{pretty-22PXIEOV.js.map → pretty-KG6TMOEI.js.map} +0 -0
  181. /package/dist/{pretty-K5BOCKBB.js.map → pretty-KSTZMBUF.js.map} +0 -0
  182. /package/dist/{reporters-324OWH36.js.map → reporters-AQU4W3KY.js.map} +0 -0
  183. /package/dist/{reporters-5LIYYE6M.js.map → reporters-FBYLPKD4.js.map} +0 -0
  184. /package/dist/{run-4EKG6EMI.js.map → run-KUGTU3TT.js.map} +0 -0
  185. /package/dist/{term-2ADSKGZW.js.map → term-SI3VM6EM.js.map} +0 -0
  186. /package/dist/{validate-LRYUEZLJ.js.map → validate-NQO7TFSN.js.map} +0 -0
@@ -19,22 +19,22 @@ import {
19
19
  } from "./chunk-SE4JN5XN.js";
20
20
  import {
21
21
  declaredAt
22
- } from "./chunk-VXU75N5R.js";
22
+ } from "./chunk-HIEGOW7X.js";
23
23
  import {
24
24
  metaProvenanceEntries
25
- } from "./chunk-DTXLFSAB.js";
25
+ } from "./chunk-OUAH7XF2.js";
26
26
  import {
27
27
  familyMarks,
28
28
  loadExternalMetadata,
29
29
  memberOf,
30
30
  mergeWithMarks,
31
31
  provenanceEntries
32
- } from "./chunk-EBZ4QKKX.js";
32
+ } from "./chunk-LNGSE7V2.js";
33
33
  import {
34
34
  __default,
35
35
  classifyRef,
36
36
  extractFrontmatter
37
- } from "./chunk-Y4TDIUG6.js";
37
+ } from "./chunk-HY6ROJTH.js";
38
38
  import {
39
39
  findConfigFileSync,
40
40
  ownsKey,
@@ -2960,4 +2960,4 @@ export {
2960
2960
  applySelection,
2961
2961
  runEvals
2962
2962
  };
2963
- //# sourceMappingURL=chunk-QWE3WLV4.js.map
2963
+ //# sourceMappingURL=chunk-OBXCJZ6R.js.map
@@ -8,7 +8,7 @@ import {
8
8
  resolvePages,
9
9
  runConfigOptions,
10
10
  withExternalMetadata
11
- } from "./chunk-QWE3WLV4.js";
11
+ } from "./chunk-OBXCJZ6R.js";
12
12
  import {
13
13
  SUMMARY_FORMATS,
14
14
  parseFormat
@@ -93,4 +93,4 @@ export {
93
93
  runList,
94
94
  renderList
95
95
  };
96
- //# sourceMappingURL=chunk-VFL3ERMI.js.map
96
+ //# sourceMappingURL=chunk-OREHJQNN.js.map
@@ -5,7 +5,7 @@ import {
5
5
  offerPrompt,
6
6
  planRelocation,
7
7
  relocationOffers
8
- } from "./chunk-EBZ4QKKX.js";
8
+ } from "./chunk-LNGSE7V2.js";
9
9
 
10
10
  // src/meta/core/location-writes.ts
11
11
  import { LineCounter, isMap, isNode, isScalar, parseDocument } from "yaml";
@@ -161,4 +161,4 @@ export {
161
161
  mergeMetaProvenance,
162
162
  metaProvenanceEntries
163
163
  };
164
- //# sourceMappingURL=chunk-DTXLFSAB.js.map
164
+ //# sourceMappingURL=chunk-OUAH7XF2.js.map
@@ -16,7 +16,7 @@ import {
16
16
  spliceEntryField,
17
17
  unifiedDiff,
18
18
  withClaimLines
19
- } from "./chunk-U4SY2TJS.js";
19
+ } from "./chunk-YZ4TJLZQ.js";
20
20
  import {
21
21
  CITATIONS_KEY,
22
22
  CITE_SECTION,
@@ -54,10 +54,10 @@ import {
54
54
  stripMarkers,
55
55
  twoManifestsRefusal,
56
56
  urlManifestRefusal
57
- } from "./chunk-5OKSFNUV.js";
57
+ } from "./chunk-DQOM3DEU.js";
58
58
  import {
59
59
  renderCheckGithub
60
- } from "./chunk-KQRYW4DN.js";
60
+ } from "./chunk-VNYXK7TM.js";
61
61
  import {
62
62
  refusalLine,
63
63
  removalLine,
@@ -65,7 +65,7 @@ import {
65
65
  renderRemovePretty,
66
66
  renderUpdatePretty,
67
67
  rewriteLine
68
- } from "./chunk-7JUIJ7Q5.js";
68
+ } from "./chunk-GWI6JPTT.js";
69
69
  import {
70
70
  blockMatches,
71
71
  claimEnd,
@@ -94,7 +94,7 @@ import {
94
94
  toValidationResult,
95
95
  unitAt,
96
96
  unitText
97
- } from "./chunk-4TGIGVFO.js";
97
+ } from "./chunk-WVXCN5DS.js";
98
98
  import {
99
99
  CITE_RULES,
100
100
  CiteError,
@@ -134,7 +134,7 @@ import {
134
134
  spellSource,
135
135
  statementForms,
136
136
  validateEntry
137
- } from "./chunk-J67EOBN3.js";
137
+ } from "./chunk-X4MPUD4B.js";
138
138
  import {
139
139
  renderCheckJson,
140
140
  renderRemoveJson,
@@ -143,7 +143,7 @@ import {
143
143
  import {
144
144
  reencryptData,
145
145
  reencryptMetadata
146
- } from "./chunk-VXU75N5R.js";
146
+ } from "./chunk-HIEGOW7X.js";
147
147
  import {
148
148
  ENCRYPTION_KEY_ENV,
149
149
  MAX_RANGE_LINES,
@@ -170,7 +170,7 @@ import {
170
170
  toBodyLines,
171
171
  toFileLines,
172
172
  writeEncryptionKey
173
- } from "./chunk-EBZ4QKKX.js";
173
+ } from "./chunk-LNGSE7V2.js";
174
174
  import {
175
175
  LEGACY_CONFIG_NAMES,
176
176
  STDIN_TOKEN,
@@ -181,7 +181,7 @@ import {
181
181
  resolveTargetSet,
182
182
  supportedExtensions,
183
183
  writeFileAtomic
184
- } from "./chunk-Y4TDIUG6.js";
184
+ } from "./chunk-HY6ROJTH.js";
185
185
  import {
186
186
  findConfigFile,
187
187
  findFamilyConfigFile,
@@ -931,4 +931,4 @@ export {
931
931
  runKeyRotate,
932
932
  runKeySet
933
933
  };
934
- //# sourceMappingURL=chunk-ZCJUSQM7.js.map
934
+ //# sourceMappingURL=chunk-OYIWF3B2.js.map
@@ -7,7 +7,7 @@ import {
7
7
  isMultilingual,
8
8
  languageOf,
9
9
  plural
10
- } from "./chunk-3QUCVYNX.js";
10
+ } from "./chunk-3XGTNN3M.js";
11
11
  import {
12
12
  palette
13
13
  } from "./chunk-RNVYGWIC.js";
@@ -336,4 +336,4 @@ export {
336
336
  renderValeWiring,
337
337
  renderFormatsPretty
338
338
  };
339
- //# sourceMappingURL=chunk-HP43LH7E.js.map
339
+ //# sourceMappingURL=chunk-PA7CMQGD.js.map
@@ -10,7 +10,7 @@ import {
10
10
  listInTree,
11
11
  resolveArtifacts,
12
12
  safeRead
13
- } from "./chunk-QUG53QGZ.js";
13
+ } from "./chunk-E6BVUDGY.js";
14
14
  import {
15
15
  makeRedactor
16
16
  } from "./chunk-CU57HT2E.js";
@@ -19,7 +19,7 @@ import {
19
19
  } from "./chunk-4TSWU2SU.js";
20
20
  import {
21
21
  extractFrontmatter
22
- } from "./chunk-Y4TDIUG6.js";
22
+ } from "./chunk-HY6ROJTH.js";
23
23
 
24
24
  // src/tracevals/rules/turn.ts
25
25
  var INJECTED = /<(system-reminder|task-notification|ci-monitor-event|local-command-stdout|local-command-stderr|local-command-caveat)>[\s\S]*?<\/\1>/g;
@@ -671,4 +671,4 @@ export {
671
671
  resolveTurnSources,
672
672
  pathKey
673
673
  };
674
- //# sourceMappingURL=chunk-5NNPEPVM.js.map
674
+ //# sourceMappingURL=chunk-PCGBXHSE.js.map
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  discoverArtifacts
4
- } from "./chunk-LWMB7JRE.js";
4
+ } from "./chunk-3O6U4ICM.js";
5
5
  import {
6
6
  parseHookPayload,
7
7
  readStdin
@@ -12,7 +12,7 @@ import {
12
12
  relPosix,
13
13
  sha256Hex,
14
14
  writeManifest
15
- } from "./chunk-QUG53QGZ.js";
15
+ } from "./chunk-E6BVUDGY.js";
16
16
  import {
17
17
  loadConfig
18
18
  } from "./chunk-OKMTUAWO.js";
@@ -212,4 +212,4 @@ export {
212
212
  runCapture,
213
213
  renderCapture
214
214
  };
215
- //# sourceMappingURL=chunk-TR2XFZPR.js.map
215
+ //# sourceMappingURL=chunk-QKT67PFE.js.map
@@ -14,4 +14,4 @@ var LintError = class extends ToolError {
14
14
  export {
15
15
  LintError
16
16
  };
17
- //# sourceMappingURL=chunk-YGFIQ6Y5.js.map
17
+ //# sourceMappingURL=chunk-SCLXVTFZ.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lint/types.ts"],"sourcesContent":["/**\n * The contract every other module is written against.\n *\n * Two shapes matter. `DocumentTree` is what a parser owes the rest of the tool:\n * a nested section tree with real source positions, in a vocabulary that has\n * nothing to do with Markdown. `Finding` is what the tool owes its caller.\n * Everything between the two - matching, rules, reporting - touches neither\n * mdast nor Asciidoctor nor parse5, which is what lets a new input format be\n * one file plus a line in the parser registry.\n */\n\nimport { ToolError } from \"../shared/errors.js\";\nimport type { Severity } from \"../shared/severity.js\";\n\n/**\n * Operational/usage failure. Exits 2; never used for lint findings.\n *\n * Extends the umbrella's `ToolError`, which is what the shared bin runner\n * matches on; the subclass stays so this tool's tests and library callers can\n * match on it by name. Named for its domain, as `A11yError`, `CiteError` and\n * `KeyError` are.\n */\nexport class LintError extends ToolError {\n constructor(message: string) {\n super(message);\n this.name = \"LintError\";\n }\n}\n\n/** A point in a source file. Line and column are 1-based, offset 0-based. */\nexport interface Point {\n line: number;\n column: number;\n offset: number;\n}\n\n/** A half-open source span, `start` inclusive and `end` exclusive. */\nexport interface Position {\n start: Point;\n end: Point;\n}\n\n/**\n * Content kinds a section can hold, named generically so a rule written once\n * works on every format. Each parser maps its own AST onto these: mdast\n * `paragraph`/`code`/`list`, Asciidoctor `paragraph`/`listing`/`ulist`|`olist`,\n * HTML `<p>`/`<pre>`/`<ul>` - all three onto `paragraph`/`codeBlock`/`list`.\n *\n * The vocabulary is wider than any one parser emits today. `table`,\n * `admonition`, `image`, `blockquote`, `definitionList`, and `element` are\n * declared here, and in each `DocumentParser.kinds`, only once a parser\n * actually produces them - see `src/lint/parsers/index.ts`.\n */\nexport type ContentKind =\n | \"paragraph\"\n | \"codeBlock\"\n | \"list\"\n | \"listItem\"\n | \"table\"\n | \"tableRow\"\n | \"tableCell\"\n | \"admonition\"\n | \"image\"\n | \"blockquote\"\n | \"definitionList\"\n | \"definitionItem\"\n | \"element\";\n\nexport interface ContentNodeBase {\n kind: ContentKind;\n position: Position;\n /** Plain-text rendering, used by pattern rules. */\n text: string;\n}\n\nexport interface ParagraphNode extends ContentNodeBase {\n kind: \"paragraph\";\n}\n\nexport interface CodeNode extends ContentNodeBase {\n kind: \"codeBlock\";\n /** Language, when the format carries one. */\n language?: string;\n /** The info-string tail after the language, when the format carries one. */\n fenceInfo?: string;\n}\n\nexport interface ListItemNode {\n kind: \"listItem\";\n position: Position;\n text: string;\n /** Nested content, so item-level paragraph/code/list rules can run. */\n children: ContentNode[];\n}\n\nexport interface ListNode extends ContentNodeBase {\n kind: \"list\";\n ordered: boolean;\n items: ListItemNode[];\n}\n\nexport interface TableCellNode extends ContentNodeBase {\n kind: \"tableCell\";\n children: ContentNode[];\n}\n\nexport interface TableRowNode extends ContentNodeBase {\n kind: \"tableRow\";\n header: boolean;\n children: TableCellNode[];\n}\n\nexport interface TableNode extends ContentNodeBase {\n kind: \"table\";\n children: TableRowNode[];\n}\n\n/**\n * A callout, and the flavor the source gave it.\n *\n * `variant` is optional because not every format names one this vocabulary\n * has. reStructuredText has `hint`, `attention`, `error` and a generic\n * `admonition` directive, and a bare HTML `<aside>` says nothing at all. Those\n * produce an admonition with no variant rather than an invented equivalence:\n * mapping `hint` onto `tip` would make `variant: tip` pass on a page that\n * never said tip. A `variant:` rule reports such a node as a mismatch, and a\n * plain count rule still counts it.\n */\nexport interface AdmonitionNode extends ContentNodeBase {\n kind: \"admonition\";\n variant?: \"note\" | \"tip\" | \"important\" | \"caution\" | \"warning\" | \"danger\";\n children: ContentNode[];\n}\n\nexport interface ImageNode extends ContentNodeBase {\n kind: \"image\";\n url: string;\n alt: string;\n title?: string;\n}\n\nexport interface BlockquoteNode extends ContentNodeBase {\n kind: \"blockquote\";\n children: ContentNode[];\n}\n\nexport interface DefinitionItemNode {\n kind: \"definitionItem\";\n position: Position;\n text: string;\n term: string;\n definition: ContentNode[];\n}\n\nexport interface DefinitionListNode extends ContentNodeBase {\n kind: \"definitionList\";\n children: DefinitionItemNode[];\n}\n\n/**\n * A named wrapper - an MDX/JSX component today, and where HTML and DITA may\n * eventually anchor a custom element. Its children are its own content, never\n * the enclosing section's: a rule reading a section's `children` must not see\n * inside an `<Element>` it did not ask about.\n */\nexport interface ElementNode extends ContentNodeBase {\n kind: \"element\";\n name: string;\n attributes?: Record<string, string | true>;\n children: ContentNode[];\n}\n\nexport type ContentNode =\n | ParagraphNode\n | CodeNode\n | ListNode\n | TableNode\n | AdmonitionNode\n | ImageNode\n | BlockquoteNode\n | DefinitionListNode\n | ElementNode;\n\n/**\n * One section of a document, demarcated by a heading.\n *\n * `slug`/`title`/`level`/`order`/`parentSlug` intentionally match manni graph's\n * `Section` (dockg/src/types.ts), so its graph can be built from this tree.\n *\n * `children` is in document order and is the single source of truth: the\n * paragraph/codeBlock/list counts every rule needs are queries over it, not\n * separately maintained arrays.\n */\nexport interface SectionNode {\n /** Slug of the heading, disambiguated across the document (`install-1`). */\n slug: string;\n /** Heading text, with inline markup flattened. */\n title: string;\n /** Heading level, 1-6. 0 for the implicit lead section before any heading. */\n level: number;\n /** 1-based position among siblings under the same parent. */\n order: number;\n /** Slug of the enclosing section, or null at the top level. */\n parentSlug: string | null;\n /** Span of the title itself. Null for the implicit lead section. */\n titlePosition: Position | null;\n /**\n * The anchor the source itself gives this section, verbatim - an HTML `id`,\n * a DITA `@id`, an AsciiDoc `[[id]]`, a reST `.. _label:` - when it gives\n * one. `slug` stays the slugged title either way: a link written against\n * the source's own id resolves through this, and nothing lint matches on\n * reads it.\n */\n id?: string;\n /**\n * Set on the level-1 section `withMetadataTitle` made from a metadata\n * `title`, so a consumer can tell it from a heading the author wrote. Its\n * `titlePosition` is not enough: a reST title read back as docinfo shares\n * its span with the frontmatter, written or not.\n */\n synthetic?: true;\n /** Span of the whole section: its heading through the last node before the next sibling heading. */\n position: Position;\n /** Direct content, in document order, excluding anything owned by a subsection. */\n children: ContentNode[];\n /** Nested sections, in document order. */\n sections: SectionNode[];\n}\n\n/** What a parser returns for one file. */\nexport interface DocumentTree {\n /** Name of the parser that produced this (`markdown`, `asciidoc`, ...). */\n format: string;\n /** Path the content came from, for error messages. */\n filePath: string;\n /** Raw frontmatter/metadata values, or null when the file carries none. */\n frontmatter: Record<string, unknown> | null;\n /** Span of the frontmatter block, for anchoring findings about it. */\n frontmatterPosition: Position | null;\n /** Top-level sections, in document order. */\n sections: SectionNode[];\n /**\n * Link targets exactly as the source wrote them, in document order, for\n * `manni graph`. No lint rule reads them. Each parser decides what counts:\n * an anchor to elsewhere does, and a stylesheet, a heading's own permalink,\n * or a key reference resolved only at build time does not.\n */\n links: { target: string; position: Position }[];\n}\n\n/**\n * A parser for one input format.\n *\n * Shaped after docmeta's `MetadataExtractor` so the two registries read the\n * same way. A format is registered only when its parser reads it, so every\n * registered format is one the tool reads, and an extension no parser claims is\n * skipped by name rather than parsed as Markdown.\n */\nexport interface DocumentParser {\n /** Stable name, also used as `DocumentTree.format`. */\n name: string;\n /** Human-readable label for `manni lint tools`. */\n label: string;\n /**\n * The content kinds this parser actually emits today. A capability\n * declaration, not the full `ContentKind` vocabulary: a kind absent here is\n * one no rule will ever see from this parser's trees, whatever the format\n * could in principle represent.\n */\n kinds: ContentKind[];\n /** Lowercase file extensions this parser handles, incl. dot (e.g. \".md\"). */\n extensions: string[];\n /**\n * Extensions safe to collect from a directory walk. Defaults to\n * `extensions`.\n *\n * The two differ when an extension is a generic container rather than a\n * documentation format. `.xml` is the case: this parser can read a DocBook\n * or DITA document named explicitly, but a docs tree also contains\n * `pom.xml`, `sitemap.xml`, and `.csproj`, and sweeping those in turns a\n * clean run into a failure about files the user never asked to lint.\n */\n walkExtensions?: string[];\n /** Parse raw file content into the generic tree. */\n parse(content: string, filePath: string): DocumentTree;\n}\n\n/**\n * How much a finding weighs, on the one scale every manni tool speaks\n * (`src/shared/severity.ts`): `notice | warning | error`.\n *\n * Almost every structural finding is an `error`, since a template either\n * describes a document or it does not. `unsupported_content_kind` is the\n * exception and is a `warning`: the rule never ran, so the page may still be\n * fine, and a warning never moves the exit code.\n *\n * The scale is the family's and not this tool's private pair, because a flag\n * or config key two domains both have carries the same name *and* the same\n * values. Re-exported so `lint.Severity` names the same type a caller already\n * has.\n */\nexport type { Severity };\n\n/**\n * One structural violation.\n *\n * The field set is pinned by manni docevals' tool adapter, which reads\n * `{ type, heading, message, position }` off the JSON reporter. Additions are\n * safe; renames are not.\n */\nexport interface Finding {\n /** Machine-readable rule id, e.g. `missing_section`. */\n type: string;\n /** Heading of the section the finding is anchored to, if any. */\n heading: string | null;\n message: string;\n position: Position;\n severity: Severity;\n}\n\n/**\n * Why a file was not linted.\n *\n * `unreadable` is the one that is not about the document: the file was found,\n * claimed by a parser, and then could not be opened - a denied permission, a\n * symlink loop, a page a doc build moved between the walk and the read. It is a\n * skip rather than a finding because nothing was checked, and calling it a\n * finding would report the docs as wrong when the filesystem was.\n */\nexport type SkipReason = \"no-template\" | \"unsupported-format\" | \"unreadable\";\n\n/** Result of linting one file. */\nexport interface FileResult {\n file: string;\n /** True when the file was linted and produced no findings. */\n success: boolean;\n findings: Finding[];\n /** Template id/ref applied, or null when skipped. */\n template: string | null;\n /** Set when the file was skipped rather than linted. */\n skipped?: SkipReason;\n}\n"],"mappings":";;;;;;AAsBO,IAAM,YAAN,cAAwB,UAAU;AAAA,EACvC,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;","names":[]}
1
+ {"version":3,"sources":["../src/lint/types.ts"],"sourcesContent":["/**\n * The contract every other module is written against.\n *\n * Two shapes matter. `DocumentTree` is what a parser owes the rest of the tool:\n * a nested section tree with real source positions, in a vocabulary that has\n * nothing to do with Markdown. `Finding` is what the tool owes its caller.\n * Everything between the two - matching, rules, reporting - touches neither\n * mdast nor Asciidoctor nor parse5, which is what lets a new input format be\n * one file plus a line in the parser registry.\n */\n\nimport { ToolError } from \"../shared/errors.js\";\nimport type { Severity } from \"../shared/severity.js\";\n\n/**\n * Operational/usage failure. Exits 2; never used for lint findings.\n *\n * Extends the umbrella's `ToolError`, which is what the shared bin runner\n * matches on; the subclass stays so this tool's tests and library callers can\n * match on it by name. Named for its domain, as `A11yError`, `CiteError` and\n * `KeyError` are.\n */\nexport class LintError extends ToolError {\n constructor(message: string) {\n super(message);\n this.name = \"LintError\";\n }\n}\n\n/** A point in a source file. Line and column are 1-based, offset 0-based. */\nexport interface Point {\n line: number;\n column: number;\n offset: number;\n}\n\n/** A half-open source span, `start` inclusive and `end` exclusive. */\nexport interface Position {\n start: Point;\n end: Point;\n}\n\n/**\n * Content kinds a section can hold, named generically so a rule written once\n * works on every format. Each parser maps its own AST onto these: mdast\n * `paragraph`/`code`/`list`, Asciidoctor `paragraph`/`listing`/`ulist`|`olist`,\n * HTML `<p>`/`<pre>`/`<ul>` - all three onto `paragraph`/`codeBlock`/`list`.\n *\n * The vocabulary is wider than any one parser emits today. `table`,\n * `admonition`, `image`, `blockquote`, `definitionList`, and `element` are\n * declared here, and in each `DocumentParser.kinds`, only once a parser\n * actually produces them - see `src/lint/parsers/index.ts`.\n */\nexport type ContentKind =\n | \"paragraph\"\n | \"codeBlock\"\n | \"list\"\n | \"listItem\"\n | \"table\"\n | \"tableRow\"\n | \"tableCell\"\n | \"admonition\"\n | \"image\"\n | \"blockquote\"\n | \"definitionList\"\n | \"definitionItem\"\n | \"element\";\n\nexport interface ContentNodeBase {\n kind: ContentKind;\n position: Position;\n /** Plain-text rendering, used by pattern rules. */\n text: string;\n}\n\nexport interface ParagraphNode extends ContentNodeBase {\n kind: \"paragraph\";\n}\n\nexport interface CodeNode extends ContentNodeBase {\n kind: \"codeBlock\";\n /** Language, when the format carries one. */\n language?: string;\n /** The info-string tail after the language, when the format carries one. */\n fenceInfo?: string;\n}\n\nexport interface ListItemNode {\n kind: \"listItem\";\n position: Position;\n text: string;\n /** Nested content, so item-level paragraph/code/list rules can run. */\n children: ContentNode[];\n}\n\nexport interface ListNode extends ContentNodeBase {\n kind: \"list\";\n ordered: boolean;\n items: ListItemNode[];\n}\n\nexport interface TableCellNode extends ContentNodeBase {\n kind: \"tableCell\";\n children: ContentNode[];\n}\n\nexport interface TableRowNode extends ContentNodeBase {\n kind: \"tableRow\";\n header: boolean;\n children: TableCellNode[];\n}\n\nexport interface TableNode extends ContentNodeBase {\n kind: \"table\";\n children: TableRowNode[];\n}\n\n/**\n * A callout, and the flavor the source gave it.\n *\n * `variant` is optional because not every format names one this vocabulary\n * has. reStructuredText has `hint`, `attention`, `error` and a generic\n * `admonition` directive, and a bare HTML `<aside>` says nothing at all. Those\n * produce an admonition with no variant rather than an invented equivalence:\n * mapping `hint` onto `tip` would make `variant: tip` pass on a page that\n * never said tip. A `variant:` rule reports such a node as a mismatch, and a\n * plain count rule still counts it.\n */\nexport interface AdmonitionNode extends ContentNodeBase {\n kind: \"admonition\";\n variant?: \"note\" | \"tip\" | \"important\" | \"caution\" | \"warning\" | \"danger\";\n children: ContentNode[];\n}\n\nexport interface ImageNode extends ContentNodeBase {\n kind: \"image\";\n url: string;\n alt: string;\n title?: string;\n}\n\nexport interface BlockquoteNode extends ContentNodeBase {\n kind: \"blockquote\";\n children: ContentNode[];\n}\n\nexport interface DefinitionItemNode {\n kind: \"definitionItem\";\n position: Position;\n text: string;\n term: string;\n definition: ContentNode[];\n}\n\nexport interface DefinitionListNode extends ContentNodeBase {\n kind: \"definitionList\";\n children: DefinitionItemNode[];\n}\n\n/**\n * A named wrapper - an MDX/JSX component today, and where HTML and DITA may\n * eventually anchor a custom element. Its children are its own content, never\n * the enclosing section's: a rule reading a section's `children` must not see\n * inside an `<Element>` it did not ask about.\n */\nexport interface ElementNode extends ContentNodeBase {\n kind: \"element\";\n name: string;\n attributes?: Record<string, string | true>;\n children: ContentNode[];\n}\n\nexport type ContentNode =\n | ParagraphNode\n | CodeNode\n | ListNode\n | TableNode\n | AdmonitionNode\n | ImageNode\n | BlockquoteNode\n | DefinitionListNode\n | ElementNode;\n\n/**\n * One section of a document, demarcated by a heading.\n *\n * `slug`/`title`/`level`/`order`/`parentSlug` intentionally match manni graph's\n * `Section` (dockg/src/types.ts), so its graph can be built from this tree.\n *\n * `children` is in document order and is the single source of truth: the\n * paragraph/codeBlock/list counts every rule needs are queries over it, not\n * separately maintained arrays.\n */\nexport interface SectionNode {\n /** Slug of the heading, disambiguated across the document (`install-1`). */\n slug: string;\n /** Heading text, with inline markup flattened. */\n title: string;\n /** Heading level, 1-6. 0 for the implicit lead section before any heading. */\n level: number;\n /** 1-based position among siblings under the same parent. */\n order: number;\n /** Slug of the enclosing section, or null at the top level. */\n parentSlug: string | null;\n /** Span of the title itself. Null for the implicit lead section. */\n titlePosition: Position | null;\n /**\n * The anchor the source itself gives this section, verbatim - an HTML `id`,\n * a DITA `@id`, an AsciiDoc `[[id]]`, a reST `.. _label:` - when it gives\n * one. `slug` stays the slugged title either way: a link written against\n * the source's own id resolves through this, and nothing lint matches on\n * reads it.\n */\n id?: string;\n /**\n * Set on the level-1 section `withMetadataTitle` made from a metadata\n * `title`, so a consumer can tell it from a heading the author wrote. Its\n * `titlePosition` is not enough: a reST title read back as docinfo shares\n * its span with the frontmatter, written or not.\n */\n synthetic?: true;\n /** Span of the whole section: its heading through the last node before the next sibling heading. */\n position: Position;\n /** Direct content, in document order, excluding anything owned by a subsection. */\n children: ContentNode[];\n /** Nested sections, in document order. */\n sections: SectionNode[];\n}\n\n/** What a parser returns for one file. */\nexport interface DocumentTree {\n /** Name of the parser that produced this (`markdown`, `asciidoc`, ...). */\n format: string;\n /** Path the content came from, for error messages. */\n filePath: string;\n /** Raw frontmatter/metadata values, or null when the file carries none. */\n frontmatter: Record<string, unknown> | null;\n /** Span of the frontmatter block, for anchoring findings about it. */\n frontmatterPosition: Position | null;\n /** Top-level sections, in document order. */\n sections: SectionNode[];\n /**\n * Link targets exactly as the source wrote them, in document order, for\n * `manni graph`. No lint rule reads them. Each parser decides what counts:\n * an anchor to elsewhere does, and a stylesheet, a heading's own permalink,\n * or a key reference resolved only at build time does not.\n */\n links: { target: string; position: Position }[];\n}\n\n/**\n * A parser for one input format.\n *\n * Shaped after docmeta's `MetadataExtractor` so the two registries read the\n * same way. A format is registered only when its parser reads it, so every\n * registered format is one the tool reads, and an extension no parser claims is\n * skipped by name rather than parsed as Markdown.\n */\nexport interface DocumentParser {\n /** Stable name, also used as `DocumentTree.format`. */\n name: string;\n /** Human-readable label for `manni lint tools`. */\n label: string;\n /**\n * The content kinds this parser actually emits today. A capability\n * declaration, not the full `ContentKind` vocabulary: a kind absent here is\n * one no rule will ever see from this parser's trees, whatever the format\n * could in principle represent.\n */\n kinds: ContentKind[];\n /** Lowercase file extensions this parser handles, incl. dot (e.g. \".md\"). */\n extensions: string[];\n /**\n * Extensions safe to collect from a directory walk. Defaults to\n * `extensions`.\n *\n * The two differ when an extension is a generic container rather than a\n * documentation format. `.xml` is the case: this parser can read a DocBook\n * or DITA document named explicitly, but a docs tree also contains\n * `pom.xml`, `sitemap.xml`, and `.csproj`, and sweeping those in turns a\n * clean run into a failure about files the user never asked to lint.\n */\n walkExtensions?: string[];\n /** Parse raw file content into the generic tree. */\n parse(content: string, filePath: string): DocumentTree;\n}\n\n/**\n * How much a finding weighs, on the one scale every manni tool speaks\n * (`src/shared/severity.ts`): `notice | warning | error`.\n *\n * Almost every structural finding is an `error`, since a template either\n * describes a document or it does not. `unsupported_content_kind` is the\n * exception and is a `warning`: the rule never ran, so the page may still be\n * fine, and a warning never moves the exit code.\n *\n * The scale is the family's and not this tool's private pair, because a flag\n * or config key two domains both have carries the same name *and* the same\n * values. Re-exported so `lint.Severity` names the same type a caller already\n * has.\n */\nexport type { Severity };\n\n/**\n * One structural violation.\n *\n * The field set is pinned by manni docevals' tool adapter, which reads\n * `{ type, heading, message, position }` off the JSON reporter. Additions are\n * safe; renames are not.\n */\nexport interface Finding {\n /** Machine-readable rule id, e.g. `missing_section`. */\n type: string;\n /** Heading of the section the finding is anchored to, if any. */\n heading: string | null;\n message: string;\n position: Position;\n severity: Severity;\n /**\n * The template that judged the page and the rule this finding is about, so\n * an author reads what the section is for beside what is wrong with it.\n * `null` when no template stands behind the finding: a parse failure, an\n * unknown doctype, a broken template, or a tool other than manni.\n */\n template?: FindingTemplate | null;\n}\n\n/** What a template asks for, as a finding carries it. */\nexport interface FindingTemplate {\n /** The template's ref, as `manni lint templates` lists it and `--template` takes it. */\n id: string;\n /** The rule's `id`. `null` for a rule without one, the template itself, or no rule at all. */\n rule: string | null;\n /** The rule's `description`, or `null` when it has none. */\n description: string | null;\n /** The template's `guide`, after `extends`, or `null`. */\n guide: string | null;\n}\n\n/**\n * Why a file was not linted.\n *\n * `unreadable` is the one that is not about the document: the file was found,\n * claimed by a parser, and then could not be opened - a denied permission, a\n * symlink loop, a page a doc build moved between the walk and the read. It is a\n * skip rather than a finding because nothing was checked, and calling it a\n * finding would report the docs as wrong when the filesystem was.\n */\nexport type SkipReason = \"no-template\" | \"unsupported-format\" | \"unreadable\";\n\n/** Result of linting one file. */\nexport interface FileResult {\n file: string;\n /** True when the file was linted and produced no findings. */\n success: boolean;\n findings: Finding[];\n /** Template id/ref applied, or null when skipped. */\n template: string | null;\n /** Set when the file was skipped rather than linted. */\n skipped?: SkipReason;\n}\n"],"mappings":";;;;;;AAsBO,IAAM,YAAN,cAAwB,UAAU;AAAA,EACvC,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;","names":[]}
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  LintError
4
- } from "./chunk-YGFIQ6Y5.js";
4
+ } from "./chunk-SCLXVTFZ.js";
5
5
  import {
6
6
  extractFrontmatter,
7
7
  extractorForExtension,
8
8
  locateFrontmatter
9
- } from "./chunk-Y4TDIUG6.js";
9
+ } from "./chunk-HY6ROJTH.js";
10
10
  import {
11
11
  errorMessage
12
12
  } from "./chunk-G3T47CFV.js";
@@ -3247,4 +3247,4 @@ export {
3247
3247
  unsupportedFormatMessage,
3248
3248
  listFormats
3249
3249
  };
3250
- //# sourceMappingURL=chunk-PNUM6RHR.js.map
3250
+ //# sourceMappingURL=chunk-TDCOKKMI.js.map
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  pathKey
4
- } from "./chunk-5NNPEPVM.js";
4
+ } from "./chunk-PCGBXHSE.js";
5
5
  import {
6
6
  DEFAULT_CAPTURE_DIR,
7
7
  makeRedactor
@@ -230,4 +230,4 @@ export {
230
230
  rollup,
231
231
  writeLedger
232
232
  };
233
- //# sourceMappingURL=chunk-X4GQ4HPY.js.map
233
+ //# sourceMappingURL=chunk-TQ3W6RKG.js.map
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  TERM_FIELDS,
4
4
  displayPath
5
- } from "./chunk-3QUCVYNX.js";
5
+ } from "./chunk-3XGTNN3M.js";
6
6
 
7
7
  // src/term/reporters/json.ts
8
8
  function termEntry(term) {
@@ -49,4 +49,4 @@ export {
49
49
  renderFindingsJson,
50
50
  renderFormatsJson
51
51
  };
52
- //# sourceMappingURL=chunk-EX6E2P6Z.js.map
52
+ //# sourceMappingURL=chunk-ULDV2LUI.js.map
@@ -1,26 +1,34 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  LINT_JOBS,
4
+ classifyRef,
4
5
  listBuiltins,
6
+ loadResolvedTemplate,
7
+ loadTemplate,
5
8
  loadTemplateFile,
6
9
  resolveLintRun,
7
10
  resolveStructureTool
8
- } from "./chunk-7QH2ZI4F.js";
11
+ } from "./chunk-NWUXRV6N.js";
9
12
  import {
10
13
  parserByName,
11
14
  parserForExtension,
12
15
  unsupportedFormatMessage
13
- } from "./chunk-PNUM6RHR.js";
16
+ } from "./chunk-TDCOKKMI.js";
14
17
  import {
15
18
  BLOCK_KINDS,
16
- BLOCK_KIND_NODE
17
- } from "./chunk-TBAMBLF3.js";
19
+ BLOCK_KIND_NODE,
20
+ occurrenceRange,
21
+ quoteList
22
+ } from "./chunk-6ZFJWUUH.js";
18
23
  import {
19
24
  LintError
20
- } from "./chunk-YGFIQ6Y5.js";
25
+ } from "./chunk-SCLXVTFZ.js";
21
26
  import {
22
27
  writeTextAtomic
23
- } from "./chunk-EBZ4QKKX.js";
28
+ } from "./chunk-LNGSE7V2.js";
29
+ import {
30
+ palette
31
+ } from "./chunk-RNVYGWIC.js";
24
32
  import {
25
33
  ToolError,
26
34
  errorMessage
@@ -149,12 +157,15 @@ import { mkdir, readFile } from "node:fs/promises";
149
157
  import { basename, dirname, extname, resolve } from "node:path";
150
158
  var BUILTIN_SOURCE = "builtin";
151
159
  async function runTemplates(opts = {}) {
152
- const templates = listBuiltins().map((builtin) => ({
153
- id: builtin.id,
154
- title: builtin.title,
155
- types: builtin.types,
156
- source: BUILTIN_SOURCE
157
- }));
160
+ const templates = await Promise.all(
161
+ listBuiltins().map(async (builtin) => ({
162
+ id: builtin.id,
163
+ title: builtin.title,
164
+ types: builtin.types,
165
+ source: BUILTIN_SOURCE,
166
+ guide: (await loadTemplate(builtin.id)).guide ?? null
167
+ }))
168
+ );
158
169
  const paths = opts.templates == null ? [] : Array.isArray(opts.templates) ? opts.templates : [opts.templates];
159
170
  for (const path of paths) {
160
171
  const file = await loadTemplateFile(path);
@@ -163,7 +174,8 @@ async function runTemplates(opts = {}) {
163
174
  id,
164
175
  title: "",
165
176
  types: template.types ?? [],
166
- source: path
177
+ source: path,
178
+ guide: template.guide ?? null
167
179
  });
168
180
  }
169
181
  }
@@ -248,6 +260,21 @@ async function runTemplatesInfer(opts) {
248
260
  await writeTextAtomic(absOut, text);
249
261
  return { name, file, text, written: opts.out };
250
262
  }
263
+ async function runTemplateShow(opts) {
264
+ const template = await loadResolvedTemplate(opts.ref);
265
+ const { extends: _extends, id: _id, ...body } = template;
266
+ if (classifyRef(opts.ref).kind === "builtin") {
267
+ const title = listBuiltins().find((b) => b.id === opts.ref)?.title;
268
+ return { id: opts.ref, source: BUILTIN_SOURCE, ...title ? { title } : {}, ...body };
269
+ }
270
+ const hash = opts.ref.lastIndexOf("#");
271
+ const source = hash === -1 ? opts.ref : opts.ref.slice(0, hash);
272
+ const fragment = hash === -1 ? "" : opts.ref.slice(hash + 1);
273
+ const id = fragment || // The `?? ""` is unreachable: loadResolvedTemplate already refused a file
274
+ // with no templates, and one with several but no fragment.
275
+ (Object.keys((await loadTemplateFile(source)).templates ?? {})[0] ?? "");
276
+ return { id, source, ...body };
277
+ }
251
278
 
252
279
  // src/lint/commands/tools.ts
253
280
  var REPORTABLE_KINDS = new Set(Object.values(BLOCK_KIND_NODE));
@@ -289,13 +316,213 @@ async function runTools(opts = {}) {
289
316
  );
290
317
  }
291
318
 
319
+ // src/lint/reporters/template-show.ts
320
+ var SHOW_FORMATS = ["pretty", "json", "markdown"];
321
+ function isShowFormat(value) {
322
+ return SHOW_FORMATS.includes(value);
323
+ }
324
+ function occurrenceWords(rule) {
325
+ const { min, max } = occurrenceRange(rule);
326
+ if (max === 0) return "forbidden";
327
+ if (max === null) {
328
+ if (min === 0) return "optional, repeats";
329
+ if (min === 1) return "required, repeats";
330
+ return `at least ${min}`;
331
+ }
332
+ if (min === 1 && max === 1) return "required";
333
+ if (min === 0 && max === 1) return "optional";
334
+ return `${min} to ${max}`;
335
+ }
336
+ function headingForm(heading) {
337
+ if (heading === void 0) return "(any heading)";
338
+ if (heading === false) return "(no heading)";
339
+ if (typeof heading === "string") return heading;
340
+ if (Array.isArray(heading)) return heading.join(" | ");
341
+ return `/${heading.pattern}/`;
342
+ }
343
+ var NOUNS = {
344
+ paragraphs: "paragraph",
345
+ codeBlocks: "code block",
346
+ lists: "list",
347
+ tables: "table",
348
+ admonitions: "admonition",
349
+ images: "image",
350
+ blockquotes: "blockquote",
351
+ definitionLists: "definition list",
352
+ elements: "element"
353
+ };
354
+ function noun(kind, block) {
355
+ if (kind === "lists" && block.lists?.ordered !== void 0) {
356
+ return block.lists.ordered ? "numbered list" : "bulleted list";
357
+ }
358
+ if (kind === "admonitions" && block.admonitions?.variant !== void 0) {
359
+ return `${block.admonitions.variant} admonition`;
360
+ }
361
+ const tag = block.elements?.tag;
362
+ if (kind === "elements" && tag !== void 0) {
363
+ const tags = Array.isArray(tag) ? tag : [tag];
364
+ return `${tags.map((t) => `"${t}"`).join(" or ")} element`;
365
+ }
366
+ return NOUNS[kind];
367
+ }
368
+ function plural(word, n) {
369
+ return n === 1 ? word : `${word}s`;
370
+ }
371
+ function counted(range, word) {
372
+ const { min, max } = occurrenceRange(range);
373
+ if (max === 0) return `no ${plural(word, 0)}`;
374
+ if (max === null) {
375
+ return min === 0 ? `any number of ${plural(word, 0)}` : `at least ${min} ${plural(word, min)}`;
376
+ }
377
+ if (min === 0) return `at most ${max} ${plural(word, max)}`;
378
+ if (min === max) return `exactly ${min} ${plural(word, min)}`;
379
+ return `${min} to ${max} ${plural(word, max)}`;
380
+ }
381
+ function qualifiers(block) {
382
+ const parts = [];
383
+ if (block.paragraphs?.pattern !== void 0) {
384
+ parts.push(`each matching /${block.paragraphs.pattern}/`);
385
+ }
386
+ const language = block.codeBlocks?.language;
387
+ if (language !== void 0) {
388
+ parts.push(`in ${(Array.isArray(language) ? language : [language]).join(" or ")}`);
389
+ }
390
+ if (block.codeBlocks?.fenceInfo !== void 0) {
391
+ parts.push(`with fence info "${block.codeBlocks.fenceInfo}"`);
392
+ }
393
+ if (block.lists?.items !== void 0) {
394
+ parts.push(`each with ${counted(block.lists.items, "item")}`);
395
+ }
396
+ if (block.tables?.columns !== void 0) {
397
+ parts.push(`with columns ${quoteList(block.tables.columns)}`);
398
+ }
399
+ return parts.map((p) => `, ${p}`).join("");
400
+ }
401
+ function contentLines(rule) {
402
+ const lines = [];
403
+ const contains = rule.contains;
404
+ if (contains !== void 0) {
405
+ for (const kind of BLOCK_KINDS) {
406
+ const range = contains[kind];
407
+ if (range === void 0) continue;
408
+ lines.push(
409
+ `Contains ${counted(range, noun(kind, contains))}${qualifiers({ [kind]: range })}.`
410
+ );
411
+ }
412
+ }
413
+ if (rule.sequence !== void 0) {
414
+ const kinds = rule.sequence.flatMap((entry) => {
415
+ const kind = BLOCK_KINDS.find((k) => entry[k] !== void 0);
416
+ return kind === void 0 ? [] : [noun(kind, entry)];
417
+ });
418
+ lines.push(`In order: ${kinds.join(", ")}.`);
419
+ }
420
+ return lines;
421
+ }
422
+ function detailLines(rule) {
423
+ return [...contentLines(rule), ...rule.description === void 0 ? [] : [rule.description]];
424
+ }
425
+ function prettyRule(c, rule, level, indent, out) {
426
+ const pad = " ".repeat(indent);
427
+ const hashes = "#".repeat(level);
428
+ const occurs = c.dim(occurrenceWords(rule));
429
+ if (rule.repeat !== void 0) {
430
+ const group = rule.id === void 0 ? "(group)" : `(group ${rule.id})`;
431
+ out.push(`${pad}${hashes} ${group} ${occurs}`);
432
+ } else {
433
+ const id = rule.id === void 0 ? "" : `${c.cyan(rule.id)} \xB7 `;
434
+ out.push(`${pad}${hashes} ${headingForm(rule.heading)} ${id}${occurs}`);
435
+ }
436
+ for (const line of detailLines(rule)) out.push(`${pad} ${line}`);
437
+ for (const member of rule.repeat ?? []) prettyRule(c, member, level, indent + 2, out);
438
+ for (const section of rule.sections ?? []) {
439
+ prettyRule(c, section, level + 1, indent + 2, out);
440
+ }
441
+ }
442
+ function renderPrettyShow(show, c) {
443
+ const title = show.title ? ` ${c.dim("\u2014")} ${show.title}` : "";
444
+ const lines = [`${c.bold(show.id)}${title}`];
445
+ if (show.types !== void 0 && show.types.length > 0) {
446
+ lines.push(` types: ${show.types.join(", ")}`);
447
+ }
448
+ if (show.description !== void 0) lines.push(` ${show.description}`);
449
+ for (const line of contentLines(show)) lines.push(` ${line}`);
450
+ if (show.guide !== void 0) lines.push(` Guide: ${show.guide}`);
451
+ const sections = show.sections ?? [];
452
+ if (sections.length > 0) lines.push("");
453
+ for (const section of sections) prettyRule(c, section, 2, 2, lines);
454
+ return lines.join("\n");
455
+ }
456
+ function skeletonRules(rules) {
457
+ const kept = (rules ?? []).filter((rule) => occurrenceRange(rule).max !== 0);
458
+ const last = kept[kept.length - 1];
459
+ if (last !== void 0 && last.id === void 0 && last.heading === void 0 && last.repeat === void 0) {
460
+ kept.pop();
461
+ }
462
+ return kept;
463
+ }
464
+ function sentence(text) {
465
+ const trimmed = text.trim();
466
+ return /[.!?]$/.test(trimmed) ? trimmed : `${trimmed}.`;
467
+ }
468
+ function comment(parts) {
469
+ return `<!-- ${parts.join(" ").replace(/-(?=-)/g, "- ")} -->`;
470
+ }
471
+ function capitalise(text) {
472
+ return text.charAt(0).toUpperCase() + text.slice(1);
473
+ }
474
+ function headingText(heading) {
475
+ if (typeof heading === "string") return heading;
476
+ return Array.isArray(heading) ? heading[0] : void 0;
477
+ }
478
+ function markdownRule(rule, level, out) {
479
+ if (rule.repeat !== void 0) {
480
+ for (const member of skeletonRules(rule.repeat)) markdownRule(member, level, out);
481
+ } else {
482
+ if (rule.heading !== false) {
483
+ const text = headingText(rule.heading) ?? `{${rule.id ?? "section"}}`;
484
+ out.push(`${"#".repeat(level)} ${text}`, "");
485
+ }
486
+ out.push(
487
+ comment([sentence(capitalise(occurrenceWords(rule))), ...detailLines(rule).map(sentence)]),
488
+ ""
489
+ );
490
+ }
491
+ for (const section of skeletonRules(rule.sections)) markdownRule(section, level + 1, out);
492
+ }
493
+ function renderMarkdownShow(show) {
494
+ const lines = [];
495
+ const type = show.types?.[0];
496
+ if (type !== void 0) lines.push("---", `type: ${type}`, "---", "");
497
+ lines.push(`# ${headingText(show.heading) ?? "{Title}"}`, "");
498
+ const parts = [
499
+ sentence(show.id),
500
+ ...contentLines(show),
501
+ ...show.description === void 0 ? [] : [sentence(show.description)],
502
+ ...show.guide === void 0 ? [] : [`Guide: ${show.guide}`]
503
+ ];
504
+ lines.push(comment(parts), "");
505
+ for (const section of skeletonRules(show.sections)) markdownRule(section, 2, lines);
506
+ return lines.join("\n").trimEnd();
507
+ }
508
+ function renderTemplateShow(show, format, opts = {}) {
509
+ if (format === "json") return JSON.stringify(show, null, 2);
510
+ if (format === "markdown") return renderMarkdownShow(show);
511
+ return renderPrettyShow(show, palette(opts.color ?? false));
512
+ }
513
+
292
514
  export {
293
515
  INFER_FORMATS,
294
516
  isInferFormat,
295
517
  BUILTIN_SOURCE,
296
518
  runTemplates,
297
519
  runTemplatesInfer,
520
+ runTemplateShow,
298
521
  BUILT_IN_DEFAULTS,
299
- runTools
522
+ runTools,
523
+ SHOW_FORMATS,
524
+ isShowFormat,
525
+ occurrenceWords,
526
+ renderTemplateShow
300
527
  };
301
- //# sourceMappingURL=chunk-XP4RNQZL.js.map
528
+ //# sourceMappingURL=chunk-UQMLCIRX.js.map