@zxyycom/vibe-check 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (767) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +154 -0
  3. package/dist/esm/check/check.mjs +5 -0
  4. package/dist/esm/check/check.mjs.map +1 -0
  5. package/dist/esm/check/descriptor-validation.mjs +37 -0
  6. package/dist/esm/check/descriptor-validation.mjs.map +1 -0
  7. package/dist/esm/check/descriptor.mjs +2 -0
  8. package/dist/esm/check/descriptor.mjs.map +1 -0
  9. package/dist/esm/check/inherited-collection.mjs +62 -0
  10. package/dist/esm/check/inherited-collection.mjs.map +1 -0
  11. package/dist/esm/check/options-snapshot.mjs +75 -0
  12. package/dist/esm/check/options-snapshot.mjs.map +1 -0
  13. package/dist/esm/check-settlement/fact-validation.mjs +216 -0
  14. package/dist/esm/check-settlement/fact-validation.mjs.map +1 -0
  15. package/dist/esm/check-settlement/facts.mjs +2 -0
  16. package/dist/esm/check-settlement/facts.mjs.map +1 -0
  17. package/dist/esm/check-settlement/outcome-normalization.mjs +80 -0
  18. package/dist/esm/check-settlement/outcome-normalization.mjs.map +1 -0
  19. package/dist/esm/check-settlement/record-store.mjs +59 -0
  20. package/dist/esm/check-settlement/record-store.mjs.map +1 -0
  21. package/dist/esm/check-settlement/session.mjs +179 -0
  22. package/dist/esm/check-settlement/session.mjs.map +1 -0
  23. package/dist/esm/data-boundary/canonical-data.mjs +159 -0
  24. package/dist/esm/data-boundary/canonical-data.mjs.map +1 -0
  25. package/dist/esm/data-boundary/canonical-json.mjs +2 -0
  26. package/dist/esm/data-boundary/canonical-json.mjs.map +1 -0
  27. package/dist/esm/data-boundary/closed-values.mjs +98 -0
  28. package/dist/esm/data-boundary/closed-values.mjs.map +1 -0
  29. package/dist/esm/data-boundary/value-shapes.mjs +13 -0
  30. package/dist/esm/data-boundary/value-shapes.mjs.map +1 -0
  31. package/dist/esm/finding-waivers/reconciliation.mjs +84 -0
  32. package/dist/esm/finding-waivers/reconciliation.mjs.map +1 -0
  33. package/dist/esm/index.mjs +26 -0
  34. package/dist/esm/index.mjs.map +1 -0
  35. package/dist/esm/machine-output/v4/atomic-publication.mjs +102 -0
  36. package/dist/esm/machine-output/v4/atomic-publication.mjs.map +1 -0
  37. package/dist/esm/machine-output/v4/freeze-publication-value.mjs +14 -0
  38. package/dist/esm/machine-output/v4/freeze-publication-value.mjs.map +1 -0
  39. package/dist/esm/machine-output/v4/projection.mjs +23 -0
  40. package/dist/esm/machine-output/v4/projection.mjs.map +1 -0
  41. package/dist/esm/machine-output/v4/publication-invariants.mjs +59 -0
  42. package/dist/esm/machine-output/v4/publication-invariants.mjs.map +1 -0
  43. package/dist/esm/machine-output/v4/publication-model.mjs +19 -0
  44. package/dist/esm/machine-output/v4/publication-model.mjs.map +1 -0
  45. package/dist/esm/machine-output/v4/publish.mjs +20 -0
  46. package/dist/esm/machine-output/v4/publish.mjs.map +1 -0
  47. package/dist/esm/machine-output/v4/records-fingerprint.mjs +9 -0
  48. package/dist/esm/machine-output/v4/records-fingerprint.mjs.map +1 -0
  49. package/dist/esm/machine-output/v4/schema-identities.mjs +8 -0
  50. package/dist/esm/machine-output/v4/schema-identities.mjs.map +1 -0
  51. package/dist/esm/machine-output/v4/schema.mjs +50 -0
  52. package/dist/esm/machine-output/v4/schema.mjs.map +1 -0
  53. package/dist/esm/machine-output/v4/serializers.mjs +9 -0
  54. package/dist/esm/machine-output/v4/serializers.mjs.map +1 -0
  55. package/dist/esm/machine-output/v4/validation-result.mjs +16 -0
  56. package/dist/esm/machine-output/v4/validation-result.mjs.map +1 -0
  57. package/dist/esm/machine-output/v4/validation.mjs +131 -0
  58. package/dist/esm/machine-output/v4/validation.mjs.map +1 -0
  59. package/dist/esm/package-checks/code-quality-findings/policy.mjs +49 -0
  60. package/dist/esm/package-checks/code-quality-findings/policy.mjs.map +1 -0
  61. package/dist/esm/package-checks/duplicate-detection/area-policy.mjs +71 -0
  62. package/dist/esm/package-checks/duplicate-detection/area-policy.mjs.map +1 -0
  63. package/dist/esm/package-checks/duplicate-detection/cache/cache-contract.mjs +2 -0
  64. package/dist/esm/package-checks/duplicate-detection/cache/cache-contract.mjs.map +1 -0
  65. package/dist/esm/package-checks/duplicate-detection/cache/identity.mjs +37 -0
  66. package/dist/esm/package-checks/duplicate-detection/cache/identity.mjs.map +1 -0
  67. package/dist/esm/package-checks/duplicate-detection/cache/key.mjs +38 -0
  68. package/dist/esm/package-checks/duplicate-detection/cache/key.mjs.map +1 -0
  69. package/dist/esm/package-checks/duplicate-detection/cache/payload.mjs +47 -0
  70. package/dist/esm/package-checks/duplicate-detection/cache/payload.mjs.map +1 -0
  71. package/dist/esm/package-checks/duplicate-detection/cache/store.mjs +44 -0
  72. package/dist/esm/package-checks/duplicate-detection/cache/store.mjs.map +1 -0
  73. package/dist/esm/package-checks/duplicate-detection/default-check.mjs +39 -0
  74. package/dist/esm/package-checks/duplicate-detection/default-check.mjs.map +1 -0
  75. package/dist/esm/package-checks/duplicate-detection/execution.mjs +124 -0
  76. package/dist/esm/package-checks/duplicate-detection/execution.mjs.map +1 -0
  77. package/dist/esm/package-checks/duplicate-detection/final-data.mjs +6 -0
  78. package/dist/esm/package-checks/duplicate-detection/final-data.mjs.map +1 -0
  79. package/dist/esm/package-checks/duplicate-detection/jscpd/availability.mjs +77 -0
  80. package/dist/esm/package-checks/duplicate-detection/jscpd/availability.mjs.map +1 -0
  81. package/dist/esm/package-checks/duplicate-detection/jscpd/command-path.mjs +6 -0
  82. package/dist/esm/package-checks/duplicate-detection/jscpd/command-path.mjs.map +1 -0
  83. package/dist/esm/package-checks/duplicate-detection/jscpd/command-resolution.mjs +87 -0
  84. package/dist/esm/package-checks/duplicate-detection/jscpd/command-resolution.mjs.map +1 -0
  85. package/dist/esm/package-checks/duplicate-detection/jscpd/json-report.mjs +94 -0
  86. package/dist/esm/package-checks/duplicate-detection/jscpd/json-report.mjs.map +1 -0
  87. package/dist/esm/package-checks/duplicate-detection/jscpd/scanner-contract.mjs +2 -0
  88. package/dist/esm/package-checks/duplicate-detection/jscpd/scanner-contract.mjs.map +1 -0
  89. package/dist/esm/package-checks/duplicate-detection/jscpd/scanner.mjs +180 -0
  90. package/dist/esm/package-checks/duplicate-detection/jscpd/scanner.mjs.map +1 -0
  91. package/dist/esm/package-checks/duplicate-detection/jscpd/scoped-fragments.mjs +10 -0
  92. package/dist/esm/package-checks/duplicate-detection/jscpd/scoped-fragments.mjs.map +1 -0
  93. package/dist/esm/package-checks/duplicate-detection/measurement-model.mjs +2 -0
  94. package/dist/esm/package-checks/duplicate-detection/measurement-model.mjs.map +1 -0
  95. package/dist/esm/package-checks/duplicate-detection/measurement.mjs +151 -0
  96. package/dist/esm/package-checks/duplicate-detection/measurement.mjs.map +1 -0
  97. package/dist/esm/package-checks/duplicate-detection/options-resolution.mjs +126 -0
  98. package/dist/esm/package-checks/duplicate-detection/options-resolution.mjs.map +1 -0
  99. package/dist/esm/package-checks/duplicate-detection/options-validation.mjs +60 -0
  100. package/dist/esm/package-checks/duplicate-detection/options-validation.mjs.map +1 -0
  101. package/dist/esm/package-checks/duplicate-detection/options.mjs +2 -0
  102. package/dist/esm/package-checks/duplicate-detection/options.mjs.map +1 -0
  103. package/dist/esm/package-checks/duplicate-detection/project-revision.mjs +5 -0
  104. package/dist/esm/package-checks/duplicate-detection/project-revision.mjs.map +1 -0
  105. package/dist/esm/package-checks/duplicate-detection/records.mjs +119 -0
  106. package/dist/esm/package-checks/duplicate-detection/records.mjs.map +1 -0
  107. package/dist/esm/package-checks/file-metrics/constructor.mjs +39 -0
  108. package/dist/esm/package-checks/file-metrics/constructor.mjs.map +1 -0
  109. package/dist/esm/package-checks/file-metrics/execution.mjs +170 -0
  110. package/dist/esm/package-checks/file-metrics/execution.mjs.map +1 -0
  111. package/dist/esm/package-checks/file-metrics/final-data.mjs +6 -0
  112. package/dist/esm/package-checks/file-metrics/final-data.mjs.map +1 -0
  113. package/dist/esm/package-checks/file-metrics/measurement-model.mjs +2 -0
  114. package/dist/esm/package-checks/file-metrics/measurement-model.mjs.map +1 -0
  115. package/dist/esm/package-checks/file-metrics/measurement.mjs +33 -0
  116. package/dist/esm/package-checks/file-metrics/measurement.mjs.map +1 -0
  117. package/dist/esm/package-checks/file-metrics/options-resolution.mjs +171 -0
  118. package/dist/esm/package-checks/file-metrics/options-resolution.mjs.map +1 -0
  119. package/dist/esm/package-checks/file-metrics/options-validation.mjs +82 -0
  120. package/dist/esm/package-checks/file-metrics/options-validation.mjs.map +1 -0
  121. package/dist/esm/package-checks/file-metrics/options.mjs +2 -0
  122. package/dist/esm/package-checks/file-metrics/options.mjs.map +1 -0
  123. package/dist/esm/package-checks/file-metrics/records.mjs +109 -0
  124. package/dist/esm/package-checks/file-metrics/records.mjs.map +1 -0
  125. package/dist/esm/package-checks/file-metrics/scc/availability.mjs +59 -0
  126. package/dist/esm/package-checks/file-metrics/scc/availability.mjs.map +1 -0
  127. package/dist/esm/package-checks/file-metrics/scc/csv.mjs +17 -0
  128. package/dist/esm/package-checks/file-metrics/scc/csv.mjs.map +1 -0
  129. package/dist/esm/package-checks/file-metrics/scc/parser.mjs +145 -0
  130. package/dist/esm/package-checks/file-metrics/scc/parser.mjs.map +1 -0
  131. package/dist/esm/package-checks/file-metrics/scc/scanner.mjs +54 -0
  132. package/dist/esm/package-checks/file-metrics/scc/scanner.mjs.map +1 -0
  133. package/dist/esm/package-checks/final-data-parsing.mjs +35 -0
  134. package/dist/esm/package-checks/final-data-parsing.mjs.map +1 -0
  135. package/dist/esm/package-checks/function-metrics/analysis.mjs +96 -0
  136. package/dist/esm/package-checks/function-metrics/analysis.mjs.map +1 -0
  137. package/dist/esm/package-checks/function-metrics/constructor.mjs +43 -0
  138. package/dist/esm/package-checks/function-metrics/constructor.mjs.map +1 -0
  139. package/dist/esm/package-checks/function-metrics/execution.mjs +178 -0
  140. package/dist/esm/package-checks/function-metrics/execution.mjs.map +1 -0
  141. package/dist/esm/package-checks/function-metrics/final-data.mjs +6 -0
  142. package/dist/esm/package-checks/function-metrics/final-data.mjs.map +1 -0
  143. package/dist/esm/package-checks/function-metrics/lizard/availability.mjs +64 -0
  144. package/dist/esm/package-checks/function-metrics/lizard/availability.mjs.map +1 -0
  145. package/dist/esm/package-checks/function-metrics/lizard/csv.mjs +17 -0
  146. package/dist/esm/package-checks/function-metrics/lizard/csv.mjs.map +1 -0
  147. package/dist/esm/package-checks/function-metrics/lizard/parser.mjs +138 -0
  148. package/dist/esm/package-checks/function-metrics/lizard/parser.mjs.map +1 -0
  149. package/dist/esm/package-checks/function-metrics/lizard/scanner.mjs +35 -0
  150. package/dist/esm/package-checks/function-metrics/lizard/scanner.mjs.map +1 -0
  151. package/dist/esm/package-checks/function-metrics/measurement-model.mjs +2 -0
  152. package/dist/esm/package-checks/function-metrics/measurement-model.mjs.map +1 -0
  153. package/dist/esm/package-checks/function-metrics/measurement.mjs +35 -0
  154. package/dist/esm/package-checks/function-metrics/measurement.mjs.map +1 -0
  155. package/dist/esm/package-checks/function-metrics/options-resolution.mjs +171 -0
  156. package/dist/esm/package-checks/function-metrics/options-resolution.mjs.map +1 -0
  157. package/dist/esm/package-checks/function-metrics/options-validation.mjs +71 -0
  158. package/dist/esm/package-checks/function-metrics/options-validation.mjs.map +1 -0
  159. package/dist/esm/package-checks/function-metrics/options.mjs +2 -0
  160. package/dist/esm/package-checks/function-metrics/options.mjs.map +1 -0
  161. package/dist/esm/package-checks/function-metrics/records.mjs +133 -0
  162. package/dist/esm/package-checks/function-metrics/records.mjs.map +1 -0
  163. package/dist/esm/package-checks/function-metrics/target-files.mjs +75 -0
  164. package/dist/esm/package-checks/function-metrics/target-files.mjs.map +1 -0
  165. package/dist/esm/package-checks/host-environment/error-message.mjs +4 -0
  166. package/dist/esm/package-checks/host-environment/error-message.mjs.map +1 -0
  167. package/dist/esm/package-checks/host-environment/filesystem.mjs +81 -0
  168. package/dist/esm/package-checks/host-environment/filesystem.mjs.map +1 -0
  169. package/dist/esm/package-checks/host-environment/git.mjs +51 -0
  170. package/dist/esm/package-checks/host-environment/git.mjs.map +1 -0
  171. package/dist/esm/package-checks/host-environment/path.mjs +18 -0
  172. package/dist/esm/package-checks/host-environment/path.mjs.map +1 -0
  173. package/dist/esm/package-checks/host-environment/process/command.mjs +13 -0
  174. package/dist/esm/package-checks/host-environment/process/command.mjs.map +1 -0
  175. package/dist/esm/package-checks/host-environment/process/contract.mjs +2 -0
  176. package/dist/esm/package-checks/host-environment/process/contract.mjs.map +1 -0
  177. package/dist/esm/package-checks/host-environment/process/env.mjs +19 -0
  178. package/dist/esm/package-checks/host-environment/process/env.mjs.map +1 -0
  179. package/dist/esm/package-checks/host-environment/process/failure.mjs +34 -0
  180. package/dist/esm/package-checks/host-environment/process/failure.mjs.map +1 -0
  181. package/dist/esm/package-checks/host-environment/process/result.mjs +33 -0
  182. package/dist/esm/package-checks/host-environment/process/result.mjs.map +1 -0
  183. package/dist/esm/package-checks/host-environment/process/runner.mjs +30 -0
  184. package/dist/esm/package-checks/host-environment/process/runner.mjs.map +1 -0
  185. package/dist/esm/package-checks/json-document/strict-document.mjs +163 -0
  186. package/dist/esm/package-checks/json-document/strict-document.mjs.map +1 -0
  187. package/dist/esm/package-checks/json-schema-validation/default-check.mjs +39 -0
  188. package/dist/esm/package-checks/json-schema-validation/default-check.mjs.map +1 -0
  189. package/dist/esm/package-checks/json-schema-validation/execution-stages.mjs +141 -0
  190. package/dist/esm/package-checks/json-schema-validation/execution-stages.mjs.map +1 -0
  191. package/dist/esm/package-checks/json-schema-validation/final-data.mjs +64 -0
  192. package/dist/esm/package-checks/json-schema-validation/final-data.mjs.map +1 -0
  193. package/dist/esm/package-checks/json-schema-validation/issue-collector.mjs +35 -0
  194. package/dist/esm/package-checks/json-schema-validation/issue-collector.mjs.map +1 -0
  195. package/dist/esm/package-checks/json-schema-validation/json-schema-validation.mjs +118 -0
  196. package/dist/esm/package-checks/json-schema-validation/json-schema-validation.mjs.map +1 -0
  197. package/dist/esm/package-checks/json-schema-validation/options-resolution.mjs +45 -0
  198. package/dist/esm/package-checks/json-schema-validation/options-resolution.mjs.map +1 -0
  199. package/dist/esm/package-checks/json-schema-validation/options-validation.mjs +212 -0
  200. package/dist/esm/package-checks/json-schema-validation/options-validation.mjs.map +1 -0
  201. package/dist/esm/package-checks/json-schema-validation/options.mjs +2 -0
  202. package/dist/esm/package-checks/json-schema-validation/options.mjs.map +1 -0
  203. package/dist/esm/package-checks/json-schema-validation/reference-resolver.mjs +128 -0
  204. package/dist/esm/package-checks/json-schema-validation/reference-resolver.mjs.map +1 -0
  205. package/dist/esm/package-checks/json-schema-validation/remote-response.mjs +71 -0
  206. package/dist/esm/package-checks/json-schema-validation/remote-response.mjs.map +1 -0
  207. package/dist/esm/package-checks/json-schema-validation/schema-engine.mjs +190 -0
  208. package/dist/esm/package-checks/json-schema-validation/schema-engine.mjs.map +1 -0
  209. package/dist/esm/package-checks/json-schema-validation/schema-policy.mjs +234 -0
  210. package/dist/esm/package-checks/json-schema-validation/schema-policy.mjs.map +1 -0
  211. package/dist/esm/package-checks/json-validation/default-check.mjs +39 -0
  212. package/dist/esm/package-checks/json-validation/default-check.mjs.map +1 -0
  213. package/dist/esm/package-checks/json-validation/final-data.mjs +27 -0
  214. package/dist/esm/package-checks/json-validation/final-data.mjs.map +1 -0
  215. package/dist/esm/package-checks/json-validation/json-validation.mjs +138 -0
  216. package/dist/esm/package-checks/json-validation/json-validation.mjs.map +1 -0
  217. package/dist/esm/package-checks/json-validation/options-resolution.mjs +33 -0
  218. package/dist/esm/package-checks/json-validation/options-resolution.mjs.map +1 -0
  219. package/dist/esm/package-checks/json-validation/options-validation.mjs +16 -0
  220. package/dist/esm/package-checks/json-validation/options-validation.mjs.map +1 -0
  221. package/dist/esm/package-checks/json-validation/options.mjs +2 -0
  222. package/dist/esm/package-checks/json-validation/options.mjs.map +1 -0
  223. package/dist/esm/package-checks/maintenance-reminders/assessment-results.mjs +73 -0
  224. package/dist/esm/package-checks/maintenance-reminders/assessment-results.mjs.map +1 -0
  225. package/dist/esm/package-checks/maintenance-reminders/final-data.mjs +153 -0
  226. package/dist/esm/package-checks/maintenance-reminders/final-data.mjs.map +1 -0
  227. package/dist/esm/package-checks/maintenance-reminders/maintenance-reminders.mjs +155 -0
  228. package/dist/esm/package-checks/maintenance-reminders/maintenance-reminders.mjs.map +1 -0
  229. package/dist/esm/package-checks/maintenance-reminders/maintenance-support.mjs +58 -0
  230. package/dist/esm/package-checks/maintenance-reminders/maintenance-support.mjs.map +1 -0
  231. package/dist/esm/package-checks/maintenance-reminders/measurement.mjs +125 -0
  232. package/dist/esm/package-checks/maintenance-reminders/measurement.mjs.map +1 -0
  233. package/dist/esm/package-checks/maintenance-reminders/options-validation.mjs +72 -0
  234. package/dist/esm/package-checks/maintenance-reminders/options-validation.mjs.map +1 -0
  235. package/dist/esm/package-checks/markdown-link-validation/default-check.mjs +55 -0
  236. package/dist/esm/package-checks/markdown-link-validation/default-check.mjs.map +1 -0
  237. package/dist/esm/package-checks/markdown-link-validation/execution.mjs +199 -0
  238. package/dist/esm/package-checks/markdown-link-validation/execution.mjs.map +1 -0
  239. package/dist/esm/package-checks/markdown-link-validation/filesystem-probes.mjs +109 -0
  240. package/dist/esm/package-checks/markdown-link-validation/filesystem-probes.mjs.map +1 -0
  241. package/dist/esm/package-checks/markdown-link-validation/final-data.mjs +28 -0
  242. package/dist/esm/package-checks/markdown-link-validation/final-data.mjs.map +1 -0
  243. package/dist/esm/package-checks/markdown-link-validation/local-resolution.mjs +158 -0
  244. package/dist/esm/package-checks/markdown-link-validation/local-resolution.mjs.map +1 -0
  245. package/dist/esm/package-checks/markdown-link-validation/local-resolver.mjs +17 -0
  246. package/dist/esm/package-checks/markdown-link-validation/local-resolver.mjs.map +1 -0
  247. package/dist/esm/package-checks/markdown-link-validation/markdown-parser.mjs +191 -0
  248. package/dist/esm/package-checks/markdown-link-validation/markdown-parser.mjs.map +1 -0
  249. package/dist/esm/package-checks/markdown-link-validation/options-resolution.mjs +83 -0
  250. package/dist/esm/package-checks/markdown-link-validation/options-resolution.mjs.map +1 -0
  251. package/dist/esm/package-checks/markdown-link-validation/options-validation.mjs +50 -0
  252. package/dist/esm/package-checks/markdown-link-validation/options-validation.mjs.map +1 -0
  253. package/dist/esm/package-checks/markdown-link-validation/options.mjs +2 -0
  254. package/dist/esm/package-checks/markdown-link-validation/options.mjs.map +1 -0
  255. package/dist/esm/package-checks/markdown-link-validation/records.mjs +32 -0
  256. package/dist/esm/package-checks/markdown-link-validation/records.mjs.map +1 -0
  257. package/dist/esm/package-checks/markdown-link-validation/resolver-engine.mjs +196 -0
  258. package/dist/esm/package-checks/markdown-link-validation/resolver-engine.mjs.map +1 -0
  259. package/dist/esm/package-checks/markdown-link-validation/target-descriptor.mjs +23 -0
  260. package/dist/esm/package-checks/markdown-link-validation/target-descriptor.mjs.map +1 -0
  261. package/dist/esm/package-checks/markdown-link-validation/traversal-result.mjs +41 -0
  262. package/dist/esm/package-checks/markdown-link-validation/traversal-result.mjs.map +1 -0
  263. package/dist/esm/package-checks/project-files/collection.mjs +142 -0
  264. package/dist/esm/package-checks/project-files/collection.mjs.map +1 -0
  265. package/dist/esm/package-checks/project-files/config-glob.mjs +11 -0
  266. package/dist/esm/package-checks/project-files/config-glob.mjs.map +1 -0
  267. package/dist/esm/package-checks/project-files/configuration.mjs +104 -0
  268. package/dist/esm/package-checks/project-files/configuration.mjs.map +1 -0
  269. package/dist/esm/package-checks/project-files/exact-input-measurement.mjs +24 -0
  270. package/dist/esm/package-checks/project-files/exact-input-measurement.mjs.map +1 -0
  271. package/dist/esm/package-checks/project-files/file-fingerprint.mjs +36 -0
  272. package/dist/esm/package-checks/project-files/file-fingerprint.mjs.map +1 -0
  273. package/dist/esm/package-checks/project-files/gitlink-revision.mjs +57 -0
  274. package/dist/esm/package-checks/project-files/gitlink-revision.mjs.map +1 -0
  275. package/dist/esm/package-checks/project-files/gitlink-worktree.mjs +72 -0
  276. package/dist/esm/package-checks/project-files/gitlink-worktree.mjs.map +1 -0
  277. package/dist/esm/package-checks/project-files/input-eligibility.mjs +13 -0
  278. package/dist/esm/package-checks/project-files/input-eligibility.mjs.map +1 -0
  279. package/dist/esm/package-checks/project-files/reported-path.mjs +30 -0
  280. package/dist/esm/package-checks/project-files/reported-path.mjs.map +1 -0
  281. package/dist/esm/package-checks/project-files/revision-paths.mjs +19 -0
  282. package/dist/esm/package-checks/project-files/revision-paths.mjs.map +1 -0
  283. package/dist/esm/package-checks/project-files/revision-worktree-files.mjs +102 -0
  284. package/dist/esm/package-checks/project-files/revision-worktree-files.mjs.map +1 -0
  285. package/dist/esm/project-definition/check-tree/authoring.mjs +242 -0
  286. package/dist/esm/project-definition/check-tree/authoring.mjs.map +1 -0
  287. package/dist/esm/project-definition/check-tree/materialization.mjs +50 -0
  288. package/dist/esm/project-definition/check-tree/materialization.mjs.map +1 -0
  289. package/dist/esm/project-definition/check-tree/resolution.mjs +60 -0
  290. package/dist/esm/project-definition/check-tree/resolution.mjs.map +1 -0
  291. package/dist/esm/project-definition/output-defaults.mjs +7 -0
  292. package/dist/esm/project-definition/output-defaults.mjs.map +1 -0
  293. package/dist/esm/project-definition/output-validation.mjs +44 -0
  294. package/dist/esm/project-definition/output-validation.mjs.map +1 -0
  295. package/dist/esm/project-definition/project-definition-validation.mjs +95 -0
  296. package/dist/esm/project-definition/project-definition-validation.mjs.map +1 -0
  297. package/dist/esm/project-definition/project-definition.mjs +92 -0
  298. package/dist/esm/project-definition/project-definition.mjs.map +1 -0
  299. package/dist/esm/project-run/aggregation.mjs +66 -0
  300. package/dist/esm/project-run/aggregation.mjs.map +1 -0
  301. package/dist/esm/project-run/check-execution/callback.mjs +70 -0
  302. package/dist/esm/project-run/check-execution/callback.mjs.map +1 -0
  303. package/dist/esm/project-run/check-execution/dependencies.mjs +50 -0
  304. package/dist/esm/project-run/check-execution/dependencies.mjs.map +1 -0
  305. package/dist/esm/project-run/check-execution/execution-finalization.mjs +103 -0
  306. package/dist/esm/project-run/check-execution/execution-finalization.mjs.map +1 -0
  307. package/dist/esm/project-run/check-execution/execution-settlement.mjs +90 -0
  308. package/dist/esm/project-run/check-execution/execution-settlement.mjs.map +1 -0
  309. package/dist/esm/project-run/check-execution/messages.mjs +38 -0
  310. package/dist/esm/project-run/check-execution/messages.mjs.map +1 -0
  311. package/dist/esm/project-run/check-execution/plan.mjs +35 -0
  312. package/dist/esm/project-run/check-execution/plan.mjs.map +1 -0
  313. package/dist/esm/project-run/check-execution/preflight-result.mjs +83 -0
  314. package/dist/esm/project-run/check-execution/preflight-result.mjs.map +1 -0
  315. package/dist/esm/project-run/check-execution/preflight.mjs +186 -0
  316. package/dist/esm/project-run/check-execution/preflight.mjs.map +1 -0
  317. package/dist/esm/project-run/check-execution/resolved-checks.mjs +168 -0
  318. package/dist/esm/project-run/check-execution/resolved-checks.mjs.map +1 -0
  319. package/dist/esm/project-run/check-execution/terminal-result.mjs +49 -0
  320. package/dist/esm/project-run/check-execution/terminal-result.mjs.map +1 -0
  321. package/dist/esm/project-run/completion.mjs +173 -0
  322. package/dist/esm/project-run/completion.mjs.map +1 -0
  323. package/dist/esm/project-run/controls/contract.mjs +2 -0
  324. package/dist/esm/project-run/controls/contract.mjs.map +1 -0
  325. package/dist/esm/project-run/controls/outputs-override-validation.mjs +61 -0
  326. package/dist/esm/project-run/controls/outputs-override-validation.mjs.map +1 -0
  327. package/dist/esm/project-run/controls/validation-result.mjs +2 -0
  328. package/dist/esm/project-run/controls/validation-result.mjs.map +1 -0
  329. package/dist/esm/project-run/controls/validation.mjs +156 -0
  330. package/dist/esm/project-run/controls/validation.mjs.map +1 -0
  331. package/dist/esm/project-run/diagnostic-logging/diagnostic-detail-rendering.mjs +182 -0
  332. package/dist/esm/project-run/diagnostic-logging/diagnostic-detail-rendering.mjs.map +1 -0
  333. package/dist/esm/project-run/diagnostic-logging/logger.mjs +242 -0
  334. package/dist/esm/project-run/diagnostic-logging/logger.mjs.map +1 -0
  335. package/dist/esm/project-run/invocation-creation.mjs +111 -0
  336. package/dist/esm/project-run/invocation-creation.mjs.map +1 -0
  337. package/dist/esm/project-run/invocation.mjs +195 -0
  338. package/dist/esm/project-run/invocation.mjs.map +1 -0
  339. package/dist/esm/project-run/machine-publication.mjs +16 -0
  340. package/dist/esm/project-run/machine-publication.mjs.map +1 -0
  341. package/dist/esm/project-run/output-configuration.mjs +17 -0
  342. package/dist/esm/project-run/output-configuration.mjs.map +1 -0
  343. package/dist/esm/project-run/output-status.mjs +43 -0
  344. package/dist/esm/project-run/output-status.mjs.map +1 -0
  345. package/dist/esm/project-run/progress-rendering/presentation.mjs +135 -0
  346. package/dist/esm/project-run/progress-rendering/presentation.mjs.map +1 -0
  347. package/dist/esm/project-run/progress-rendering/renderer-formatting.mjs +100 -0
  348. package/dist/esm/project-run/progress-rendering/renderer-formatting.mjs.map +1 -0
  349. package/dist/esm/project-run/progress-rendering/renderer-lifecycle.mjs +123 -0
  350. package/dist/esm/project-run/progress-rendering/renderer-lifecycle.mjs.map +1 -0
  351. package/dist/esm/project-run/progress-rendering/renderer.mjs +12 -0
  352. package/dist/esm/project-run/progress-rendering/renderer.mjs.map +1 -0
  353. package/dist/esm/project-run/project-context.mjs +8 -0
  354. package/dist/esm/project-run/project-context.mjs.map +1 -0
  355. package/dist/esm/project-run/result.mjs +54 -0
  356. package/dist/esm/project-run/result.mjs.map +1 -0
  357. package/dist/esm/project-run/run.mjs +23 -0
  358. package/dist/esm/project-run/run.mjs.map +1 -0
  359. package/dist/esm/project-run/task-scheduler/execution-state.mjs +66 -0
  360. package/dist/esm/project-run/task-scheduler/execution-state.mjs.map +1 -0
  361. package/dist/esm/project-run/task-scheduler/graph-validation.mjs +119 -0
  362. package/dist/esm/project-run/task-scheduler/graph-validation.mjs.map +1 -0
  363. package/dist/esm/project-run/task-scheduler/graph.mjs +116 -0
  364. package/dist/esm/project-run/task-scheduler/graph.mjs.map +1 -0
  365. package/dist/esm/project-run/task-scheduler/scheduler-admission-decision.mjs +82 -0
  366. package/dist/esm/project-run/task-scheduler/scheduler-admission-decision.mjs.map +1 -0
  367. package/dist/esm/project-run/task-scheduler/scheduler-blocker-summary.mjs +27 -0
  368. package/dist/esm/project-run/task-scheduler/scheduler-blocker-summary.mjs.map +1 -0
  369. package/dist/esm/project-run/task-scheduler/scheduler-decision-inspection.mjs +125 -0
  370. package/dist/esm/project-run/task-scheduler/scheduler-decision-inspection.mjs.map +1 -0
  371. package/dist/esm/project-run/task-scheduler/scheduler-decision-model.mjs +45 -0
  372. package/dist/esm/project-run/task-scheduler/scheduler-decision-model.mjs.map +1 -0
  373. package/dist/esm/project-run/task-scheduler/scheduler-decision.mjs +74 -0
  374. package/dist/esm/project-run/task-scheduler/scheduler-decision.mjs.map +1 -0
  375. package/dist/esm/project-run/task-scheduler/scheduler.mjs +147 -0
  376. package/dist/esm/project-run/task-scheduler/scheduler.mjs.map +1 -0
  377. package/docs/api-mechanics.md +205 -0
  378. package/docs/checks/duplicate-detection.md +195 -0
  379. package/docs/checks/file-metrics.md +229 -0
  380. package/docs/checks/function-metrics.md +222 -0
  381. package/docs/checks/json-schema-validation.md +190 -0
  382. package/docs/checks/json-validation.md +133 -0
  383. package/docs/checks/maintenance-reminders.md +158 -0
  384. package/docs/checks/markdown-link-validation.md +192 -0
  385. package/docs/examples/artifacts/mixed-outcomes/definition.ts +195 -0
  386. package/docs/examples/artifacts/mixed-outcomes/records.ndjson +2 -0
  387. package/docs/examples/artifacts/mixed-outcomes/run.json +70 -0
  388. package/docs/output.md +97 -0
  389. package/docs/schemas/vibe-check-record.schema.json +33 -0
  390. package/docs/schemas/vibe-check-run.schema.json +173 -0
  391. package/index.mjs +1 -0
  392. package/package.json +49 -0
  393. package/src/check/check.ts +497 -0
  394. package/src/check/descriptor-validation.ts +60 -0
  395. package/src/check/descriptor.ts +5 -0
  396. package/src/check/inherited-collection.ts +101 -0
  397. package/src/check/options-snapshot.ts +80 -0
  398. package/src/check-settlement/fact-validation.ts +289 -0
  399. package/src/check-settlement/facts.ts +27 -0
  400. package/src/check-settlement/outcome-normalization.ts +118 -0
  401. package/src/check-settlement/record-store.ts +73 -0
  402. package/src/check-settlement/session.ts +257 -0
  403. package/src/data-boundary/canonical-data.ts +188 -0
  404. package/src/data-boundary/canonical-json.ts +11 -0
  405. package/src/data-boundary/closed-values.ts +126 -0
  406. package/src/data-boundary/value-shapes.ts +15 -0
  407. package/src/finding-waivers/reconciliation.ts +176 -0
  408. package/src/index.ts +123 -0
  409. package/src/machine-output/v4/atomic-publication.ts +123 -0
  410. package/src/machine-output/v4/freeze-publication-value.ts +12 -0
  411. package/src/machine-output/v4/projection.ts +36 -0
  412. package/src/machine-output/v4/publication-invariants.ts +89 -0
  413. package/src/machine-output/v4/publication-model.ts +38 -0
  414. package/src/machine-output/v4/publish.ts +23 -0
  415. package/src/machine-output/v4/records-fingerprint.ts +12 -0
  416. package/src/machine-output/v4/schema-identities.ts +8 -0
  417. package/src/machine-output/v4/schema.ts +97 -0
  418. package/src/machine-output/v4/serializers.ts +18 -0
  419. package/src/machine-output/v4/validation-result.ts +59 -0
  420. package/src/machine-output/v4/validation.ts +166 -0
  421. package/src/package-checks/code-quality-findings/policy.ts +85 -0
  422. package/src/package-checks/duplicate-detection/area-policy.ts +103 -0
  423. package/src/package-checks/duplicate-detection/cache/cache-contract.ts +49 -0
  424. package/src/package-checks/duplicate-detection/cache/identity.ts +61 -0
  425. package/src/package-checks/duplicate-detection/cache/key.ts +46 -0
  426. package/src/package-checks/duplicate-detection/cache/payload.ts +78 -0
  427. package/src/package-checks/duplicate-detection/cache/store.ts +77 -0
  428. package/src/package-checks/duplicate-detection/default-check.ts +50 -0
  429. package/src/package-checks/duplicate-detection/execution.ts +168 -0
  430. package/src/package-checks/duplicate-detection/final-data.ts +10 -0
  431. package/src/package-checks/duplicate-detection/jscpd/availability.ts +137 -0
  432. package/src/package-checks/duplicate-detection/jscpd/command-path.ts +8 -0
  433. package/src/package-checks/duplicate-detection/jscpd/command-resolution.ts +112 -0
  434. package/src/package-checks/duplicate-detection/jscpd/json-report.ts +137 -0
  435. package/src/package-checks/duplicate-detection/jscpd/scanner-contract.ts +18 -0
  436. package/src/package-checks/duplicate-detection/jscpd/scanner.ts +257 -0
  437. package/src/package-checks/duplicate-detection/jscpd/scoped-fragments.ts +17 -0
  438. package/src/package-checks/duplicate-detection/measurement-model.ts +44 -0
  439. package/src/package-checks/duplicate-detection/measurement.ts +223 -0
  440. package/src/package-checks/duplicate-detection/options-resolution.ts +162 -0
  441. package/src/package-checks/duplicate-detection/options-validation.ts +75 -0
  442. package/src/package-checks/duplicate-detection/options.ts +72 -0
  443. package/src/package-checks/duplicate-detection/project-revision.ts +5 -0
  444. package/src/package-checks/duplicate-detection/records.ts +171 -0
  445. package/src/package-checks/file-metrics/constructor.ts +46 -0
  446. package/src/package-checks/file-metrics/execution.ts +233 -0
  447. package/src/package-checks/file-metrics/final-data.ts +10 -0
  448. package/src/package-checks/file-metrics/measurement-model.ts +10 -0
  449. package/src/package-checks/file-metrics/measurement.ts +52 -0
  450. package/src/package-checks/file-metrics/options-resolution.ts +213 -0
  451. package/src/package-checks/file-metrics/options-validation.ts +104 -0
  452. package/src/package-checks/file-metrics/options.ts +91 -0
  453. package/src/package-checks/file-metrics/records.ts +182 -0
  454. package/src/package-checks/file-metrics/scc/availability.ts +100 -0
  455. package/src/package-checks/file-metrics/scc/csv.ts +20 -0
  456. package/src/package-checks/file-metrics/scc/parser.ts +223 -0
  457. package/src/package-checks/file-metrics/scc/scanner.ts +68 -0
  458. package/src/package-checks/final-data-parsing.ts +49 -0
  459. package/src/package-checks/function-metrics/analysis.ts +138 -0
  460. package/src/package-checks/function-metrics/constructor.ts +55 -0
  461. package/src/package-checks/function-metrics/execution.ts +263 -0
  462. package/src/package-checks/function-metrics/final-data.ts +10 -0
  463. package/src/package-checks/function-metrics/lizard/availability.ts +90 -0
  464. package/src/package-checks/function-metrics/lizard/csv.ts +20 -0
  465. package/src/package-checks/function-metrics/lizard/parser.ts +179 -0
  466. package/src/package-checks/function-metrics/lizard/scanner.ts +62 -0
  467. package/src/package-checks/function-metrics/measurement-model.ts +30 -0
  468. package/src/package-checks/function-metrics/measurement.ts +57 -0
  469. package/src/package-checks/function-metrics/options-resolution.ts +215 -0
  470. package/src/package-checks/function-metrics/options-validation.ts +89 -0
  471. package/src/package-checks/function-metrics/options.ts +84 -0
  472. package/src/package-checks/function-metrics/records.ts +254 -0
  473. package/src/package-checks/function-metrics/target-files.ts +85 -0
  474. package/src/package-checks/host-environment/error-message.ts +3 -0
  475. package/src/package-checks/host-environment/filesystem.ts +110 -0
  476. package/src/package-checks/host-environment/git.ts +68 -0
  477. package/src/package-checks/host-environment/path.ts +20 -0
  478. package/src/package-checks/host-environment/process/command.ts +21 -0
  479. package/src/package-checks/host-environment/process/contract.ts +56 -0
  480. package/src/package-checks/host-environment/process/env.ts +25 -0
  481. package/src/package-checks/host-environment/process/failure.ts +40 -0
  482. package/src/package-checks/host-environment/process/result.ts +39 -0
  483. package/src/package-checks/host-environment/process/runner.ts +47 -0
  484. package/src/package-checks/json-document/strict-document.ts +209 -0
  485. package/src/package-checks/json-schema-validation/default-check.ts +54 -0
  486. package/src/package-checks/json-schema-validation/execution-stages.ts +230 -0
  487. package/src/package-checks/json-schema-validation/final-data.ts +115 -0
  488. package/src/package-checks/json-schema-validation/issue-collector.ts +43 -0
  489. package/src/package-checks/json-schema-validation/json-schema-validation.ts +191 -0
  490. package/src/package-checks/json-schema-validation/options-resolution.ts +61 -0
  491. package/src/package-checks/json-schema-validation/options-validation.ts +256 -0
  492. package/src/package-checks/json-schema-validation/options.ts +66 -0
  493. package/src/package-checks/json-schema-validation/reference-resolver.ts +165 -0
  494. package/src/package-checks/json-schema-validation/remote-response.ts +84 -0
  495. package/src/package-checks/json-schema-validation/schema-engine.ts +263 -0
  496. package/src/package-checks/json-schema-validation/schema-policy.ts +275 -0
  497. package/src/package-checks/json-validation/default-check.ts +48 -0
  498. package/src/package-checks/json-validation/final-data.ts +46 -0
  499. package/src/package-checks/json-validation/json-validation.ts +212 -0
  500. package/src/package-checks/json-validation/options-resolution.ts +50 -0
  501. package/src/package-checks/json-validation/options-validation.ts +27 -0
  502. package/src/package-checks/json-validation/options.ts +18 -0
  503. package/src/package-checks/maintenance-reminders/assessment-results.ts +117 -0
  504. package/src/package-checks/maintenance-reminders/final-data.ts +239 -0
  505. package/src/package-checks/maintenance-reminders/maintenance-reminders.ts +264 -0
  506. package/src/package-checks/maintenance-reminders/maintenance-support.ts +67 -0
  507. package/src/package-checks/maintenance-reminders/measurement.ts +183 -0
  508. package/src/package-checks/maintenance-reminders/options-validation.ts +88 -0
  509. package/src/package-checks/markdown-link-validation/default-check.ts +70 -0
  510. package/src/package-checks/markdown-link-validation/execution.ts +325 -0
  511. package/src/package-checks/markdown-link-validation/filesystem-probes.ts +127 -0
  512. package/src/package-checks/markdown-link-validation/final-data.ts +47 -0
  513. package/src/package-checks/markdown-link-validation/local-resolution.ts +306 -0
  514. package/src/package-checks/markdown-link-validation/local-resolver.ts +51 -0
  515. package/src/package-checks/markdown-link-validation/markdown-parser.ts +302 -0
  516. package/src/package-checks/markdown-link-validation/options-resolution.ts +114 -0
  517. package/src/package-checks/markdown-link-validation/options-validation.ts +72 -0
  518. package/src/package-checks/markdown-link-validation/options.ts +50 -0
  519. package/src/package-checks/markdown-link-validation/records.ts +77 -0
  520. package/src/package-checks/markdown-link-validation/resolver-engine.ts +276 -0
  521. package/src/package-checks/markdown-link-validation/target-descriptor.ts +34 -0
  522. package/src/package-checks/markdown-link-validation/traversal-result.ts +58 -0
  523. package/src/package-checks/project-files/collection.ts +199 -0
  524. package/src/package-checks/project-files/config-glob.ts +17 -0
  525. package/src/package-checks/project-files/configuration.ts +152 -0
  526. package/src/package-checks/project-files/exact-input-measurement.ts +38 -0
  527. package/src/package-checks/project-files/file-fingerprint.ts +46 -0
  528. package/src/package-checks/project-files/gitlink-revision.ts +82 -0
  529. package/src/package-checks/project-files/gitlink-worktree.ts +106 -0
  530. package/src/package-checks/project-files/input-eligibility.ts +21 -0
  531. package/src/package-checks/project-files/reported-path.ts +35 -0
  532. package/src/package-checks/project-files/revision-paths.ts +34 -0
  533. package/src/package-checks/project-files/revision-worktree-files.ts +148 -0
  534. package/src/project-definition/check-tree/authoring.ts +332 -0
  535. package/src/project-definition/check-tree/materialization.ts +56 -0
  536. package/src/project-definition/check-tree/resolution.ts +108 -0
  537. package/src/project-definition/output-defaults.ts +6 -0
  538. package/src/project-definition/output-validation.ts +54 -0
  539. package/src/project-definition/project-definition-validation.ts +123 -0
  540. package/src/project-definition/project-definition.ts +184 -0
  541. package/src/project-run/aggregation.ts +90 -0
  542. package/src/project-run/check-execution/callback.ts +106 -0
  543. package/src/project-run/check-execution/dependencies.ts +70 -0
  544. package/src/project-run/check-execution/execution-finalization.ts +177 -0
  545. package/src/project-run/check-execution/execution-settlement.ts +147 -0
  546. package/src/project-run/check-execution/messages.ts +46 -0
  547. package/src/project-run/check-execution/plan.ts +46 -0
  548. package/src/project-run/check-execution/preflight-result.ts +131 -0
  549. package/src/project-run/check-execution/preflight.ts +321 -0
  550. package/src/project-run/check-execution/resolved-checks.ts +285 -0
  551. package/src/project-run/check-execution/terminal-result.ts +74 -0
  552. package/src/project-run/completion.ts +263 -0
  553. package/src/project-run/controls/contract.ts +24 -0
  554. package/src/project-run/controls/outputs-override-validation.ts +86 -0
  555. package/src/project-run/controls/validation-result.ts +12 -0
  556. package/src/project-run/controls/validation.ts +176 -0
  557. package/src/project-run/diagnostic-logging/diagnostic-detail-rendering.ts +223 -0
  558. package/src/project-run/diagnostic-logging/logger.ts +325 -0
  559. package/src/project-run/invocation-creation.ts +160 -0
  560. package/src/project-run/invocation.ts +303 -0
  561. package/src/project-run/machine-publication.ts +23 -0
  562. package/src/project-run/output-configuration.ts +24 -0
  563. package/src/project-run/output-status.ts +69 -0
  564. package/src/project-run/progress-rendering/presentation.ts +189 -0
  565. package/src/project-run/progress-rendering/renderer-formatting.ts +141 -0
  566. package/src/project-run/progress-rendering/renderer-lifecycle.ts +152 -0
  567. package/src/project-run/progress-rendering/renderer.ts +68 -0
  568. package/src/project-run/project-context.ts +11 -0
  569. package/src/project-run/result.ts +175 -0
  570. package/src/project-run/run.ts +50 -0
  571. package/src/project-run/task-scheduler/execution-state.ts +153 -0
  572. package/src/project-run/task-scheduler/graph-validation.ts +176 -0
  573. package/src/project-run/task-scheduler/graph.ts +185 -0
  574. package/src/project-run/task-scheduler/scheduler-admission-decision.ts +177 -0
  575. package/src/project-run/task-scheduler/scheduler-blocker-summary.ts +42 -0
  576. package/src/project-run/task-scheduler/scheduler-decision-inspection.ts +199 -0
  577. package/src/project-run/task-scheduler/scheduler-decision-model.ts +158 -0
  578. package/src/project-run/task-scheduler/scheduler-decision.ts +103 -0
  579. package/src/project-run/task-scheduler/scheduler.ts +228 -0
  580. package/third-party-licenses/momoa-3.3.12-LICENSE +201 -0
  581. package/types/check/check.d.ts +350 -0
  582. package/types/check/descriptor-validation.d.ts +18 -0
  583. package/types/check/descriptor.d.ts +5 -0
  584. package/types/check/inherited-collection.d.ts +35 -0
  585. package/types/check/options-snapshot.d.ts +2 -0
  586. package/types/check-settlement/fact-validation.d.ts +14 -0
  587. package/types/check-settlement/facts.d.ts +19 -0
  588. package/types/check-settlement/outcome-normalization.d.ts +9 -0
  589. package/types/check-settlement/record-store.d.ts +14 -0
  590. package/types/check-settlement/session.d.ts +41 -0
  591. package/types/data-boundary/canonical-data.d.ts +13 -0
  592. package/types/data-boundary/canonical-json.d.ts +6 -0
  593. package/types/data-boundary/closed-values.d.ts +8 -0
  594. package/types/data-boundary/value-shapes.d.ts +4 -0
  595. package/types/finding-waivers/reconciliation.d.ts +66 -0
  596. package/types/index.d.ts +57 -0
  597. package/types/machine-output/v4/atomic-publication.d.ts +9 -0
  598. package/types/machine-output/v4/freeze-publication-value.d.ts +6 -0
  599. package/types/machine-output/v4/projection.d.ts +7 -0
  600. package/types/machine-output/v4/publication-invariants.d.ts +3 -0
  601. package/types/machine-output/v4/publication-model.d.ts +15 -0
  602. package/types/machine-output/v4/publish.d.ts +7 -0
  603. package/types/machine-output/v4/records-fingerprint.d.ts +4 -0
  604. package/types/machine-output/v4/schema-identities.d.ts +7 -0
  605. package/types/machine-output/v4/schema.d.ts +44 -0
  606. package/types/machine-output/v4/serializers.d.ts +6 -0
  607. package/types/machine-output/v4/validation-result.d.ts +26 -0
  608. package/types/machine-output/v4/validation.d.ts +6 -0
  609. package/types/package-checks/code-quality-findings/policy.d.ts +20 -0
  610. package/types/package-checks/duplicate-detection/area-policy.d.ts +3 -0
  611. package/types/package-checks/duplicate-detection/cache/cache-contract.d.ts +48 -0
  612. package/types/package-checks/duplicate-detection/cache/identity.d.ts +17 -0
  613. package/types/package-checks/duplicate-detection/cache/key.d.ts +4 -0
  614. package/types/package-checks/duplicate-detection/cache/payload.d.ts +4 -0
  615. package/types/package-checks/duplicate-detection/cache/store.d.ts +18 -0
  616. package/types/package-checks/duplicate-detection/default-check.d.ts +11 -0
  617. package/types/package-checks/duplicate-detection/execution.d.ts +11 -0
  618. package/types/package-checks/duplicate-detection/final-data.d.ts +5 -0
  619. package/types/package-checks/duplicate-detection/jscpd/availability.d.ts +19 -0
  620. package/types/package-checks/duplicate-detection/jscpd/command-path.d.ts +1 -0
  621. package/types/package-checks/duplicate-detection/jscpd/command-resolution.d.ts +23 -0
  622. package/types/package-checks/duplicate-detection/jscpd/json-report.d.ts +2 -0
  623. package/types/package-checks/duplicate-detection/jscpd/scanner-contract.d.ts +11 -0
  624. package/types/package-checks/duplicate-detection/jscpd/scanner.d.ts +21 -0
  625. package/types/package-checks/duplicate-detection/jscpd/scoped-fragments.d.ts +4 -0
  626. package/types/package-checks/duplicate-detection/measurement-model.d.ts +36 -0
  627. package/types/package-checks/duplicate-detection/measurement.d.ts +14 -0
  628. package/types/package-checks/duplicate-detection/options-resolution.d.ts +3 -0
  629. package/types/package-checks/duplicate-detection/options-validation.d.ts +1 -0
  630. package/types/package-checks/duplicate-detection/options.d.ts +65 -0
  631. package/types/package-checks/duplicate-detection/project-revision.d.ts +1 -0
  632. package/types/package-checks/duplicate-detection/records.d.ts +22 -0
  633. package/types/package-checks/file-metrics/constructor.d.ts +11 -0
  634. package/types/package-checks/file-metrics/execution.d.ts +11 -0
  635. package/types/package-checks/file-metrics/final-data.d.ts +5 -0
  636. package/types/package-checks/file-metrics/measurement-model.d.ts +12 -0
  637. package/types/package-checks/file-metrics/measurement.d.ts +13 -0
  638. package/types/package-checks/file-metrics/options-resolution.d.ts +3 -0
  639. package/types/package-checks/file-metrics/options-validation.d.ts +3 -0
  640. package/types/package-checks/file-metrics/options.d.ts +75 -0
  641. package/types/package-checks/file-metrics/records.d.ts +43 -0
  642. package/types/package-checks/file-metrics/scc/availability.d.ts +18 -0
  643. package/types/package-checks/file-metrics/scc/csv.d.ts +1 -0
  644. package/types/package-checks/file-metrics/scc/parser.d.ts +25 -0
  645. package/types/package-checks/file-metrics/scc/scanner.d.ts +14 -0
  646. package/types/package-checks/final-data-parsing.d.ts +9 -0
  647. package/types/package-checks/function-metrics/analysis.d.ts +10 -0
  648. package/types/package-checks/function-metrics/constructor.d.ts +11 -0
  649. package/types/package-checks/function-metrics/execution.d.ts +7 -0
  650. package/types/package-checks/function-metrics/final-data.d.ts +5 -0
  651. package/types/package-checks/function-metrics/lizard/availability.d.ts +11 -0
  652. package/types/package-checks/function-metrics/lizard/csv.d.ts +1 -0
  653. package/types/package-checks/function-metrics/lizard/parser.d.ts +17 -0
  654. package/types/package-checks/function-metrics/lizard/scanner.d.ts +15 -0
  655. package/types/package-checks/function-metrics/measurement-model.d.ts +26 -0
  656. package/types/package-checks/function-metrics/measurement.d.ts +21 -0
  657. package/types/package-checks/function-metrics/options-resolution.d.ts +3 -0
  658. package/types/package-checks/function-metrics/options-validation.d.ts +3 -0
  659. package/types/package-checks/function-metrics/options.d.ts +76 -0
  660. package/types/package-checks/function-metrics/records.d.ts +37 -0
  661. package/types/package-checks/function-metrics/target-files.d.ts +3 -0
  662. package/types/package-checks/host-environment/error-message.d.ts +1 -0
  663. package/types/package-checks/host-environment/filesystem.d.ts +19 -0
  664. package/types/package-checks/host-environment/git.d.ts +13 -0
  665. package/types/package-checks/host-environment/path.d.ts +3 -0
  666. package/types/package-checks/host-environment/process/command.d.ts +7 -0
  667. package/types/package-checks/host-environment/process/contract.d.ts +50 -0
  668. package/types/package-checks/host-environment/process/env.d.ts +16 -0
  669. package/types/package-checks/host-environment/process/failure.d.ts +4 -0
  670. package/types/package-checks/host-environment/process/result.d.ts +2 -0
  671. package/types/package-checks/host-environment/process/runner.d.ts +3 -0
  672. package/types/package-checks/json-document/strict-document.d.ts +35 -0
  673. package/types/package-checks/json-schema-validation/default-check.d.ts +11 -0
  674. package/types/package-checks/json-schema-validation/execution-stages.d.ts +27 -0
  675. package/types/package-checks/json-schema-validation/final-data.d.ts +15 -0
  676. package/types/package-checks/json-schema-validation/issue-collector.d.ts +12 -0
  677. package/types/package-checks/json-schema-validation/json-schema-validation.d.ts +42 -0
  678. package/types/package-checks/json-schema-validation/options-resolution.d.ts +3 -0
  679. package/types/package-checks/json-schema-validation/options-validation.d.ts +2 -0
  680. package/types/package-checks/json-schema-validation/options.d.ts +53 -0
  681. package/types/package-checks/json-schema-validation/reference-resolver.d.ts +23 -0
  682. package/types/package-checks/json-schema-validation/remote-response.d.ts +2 -0
  683. package/types/package-checks/json-schema-validation/schema-engine.d.ts +33 -0
  684. package/types/package-checks/json-schema-validation/schema-policy.d.ts +17 -0
  685. package/types/package-checks/json-validation/default-check.d.ts +11 -0
  686. package/types/package-checks/json-validation/final-data.d.ts +10 -0
  687. package/types/package-checks/json-validation/json-validation.d.ts +28 -0
  688. package/types/package-checks/json-validation/options-resolution.d.ts +3 -0
  689. package/types/package-checks/json-validation/options-validation.d.ts +2 -0
  690. package/types/package-checks/json-validation/options.d.ts +13 -0
  691. package/types/package-checks/maintenance-reminders/assessment-results.d.ts +10 -0
  692. package/types/package-checks/maintenance-reminders/final-data.d.ts +47 -0
  693. package/types/package-checks/maintenance-reminders/maintenance-reminders.d.ts +111 -0
  694. package/types/package-checks/maintenance-reminders/maintenance-support.d.ts +7 -0
  695. package/types/package-checks/maintenance-reminders/measurement.d.ts +10 -0
  696. package/types/package-checks/maintenance-reminders/options-validation.d.ts +3 -0
  697. package/types/package-checks/markdown-link-validation/default-check.d.ts +27 -0
  698. package/types/package-checks/markdown-link-validation/execution.d.ts +12 -0
  699. package/types/package-checks/markdown-link-validation/filesystem-probes.d.ts +10 -0
  700. package/types/package-checks/markdown-link-validation/final-data.d.ts +10 -0
  701. package/types/package-checks/markdown-link-validation/local-resolution.d.ts +92 -0
  702. package/types/package-checks/markdown-link-validation/local-resolver.d.ts +5 -0
  703. package/types/package-checks/markdown-link-validation/markdown-parser.d.ts +37 -0
  704. package/types/package-checks/markdown-link-validation/options-resolution.d.ts +3 -0
  705. package/types/package-checks/markdown-link-validation/options-validation.d.ts +2 -0
  706. package/types/package-checks/markdown-link-validation/options.d.ts +43 -0
  707. package/types/package-checks/markdown-link-validation/records.d.ts +37 -0
  708. package/types/package-checks/markdown-link-validation/resolver-engine.d.ts +15 -0
  709. package/types/package-checks/markdown-link-validation/target-descriptor.d.ts +5 -0
  710. package/types/package-checks/markdown-link-validation/traversal-result.d.ts +12 -0
  711. package/types/package-checks/project-files/collection.d.ts +9 -0
  712. package/types/package-checks/project-files/config-glob.d.ts +5 -0
  713. package/types/package-checks/project-files/configuration.d.ts +31 -0
  714. package/types/package-checks/project-files/exact-input-measurement.d.ts +12 -0
  715. package/types/package-checks/project-files/file-fingerprint.d.ts +7 -0
  716. package/types/package-checks/project-files/gitlink-revision.d.ts +9 -0
  717. package/types/package-checks/project-files/gitlink-worktree.d.ts +26 -0
  718. package/types/package-checks/project-files/input-eligibility.d.ts +7 -0
  719. package/types/package-checks/project-files/reported-path.d.ts +1 -0
  720. package/types/package-checks/project-files/revision-paths.d.ts +12 -0
  721. package/types/package-checks/project-files/revision-worktree-files.d.ts +5 -0
  722. package/types/project-definition/check-tree/authoring.d.ts +41 -0
  723. package/types/project-definition/check-tree/materialization.d.ts +4 -0
  724. package/types/project-definition/check-tree/resolution.d.ts +25 -0
  725. package/types/project-definition/output-defaults.d.ts +14 -0
  726. package/types/project-definition/output-validation.d.ts +3 -0
  727. package/types/project-definition/project-definition-validation.d.ts +6 -0
  728. package/types/project-definition/project-definition.d.ts +88 -0
  729. package/types/project-run/aggregation.d.ts +7 -0
  730. package/types/project-run/check-execution/callback.d.ts +24 -0
  731. package/types/project-run/check-execution/dependencies.d.ts +9 -0
  732. package/types/project-run/check-execution/execution-finalization.d.ts +18 -0
  733. package/types/project-run/check-execution/execution-settlement.d.ts +41 -0
  734. package/types/project-run/check-execution/messages.d.ts +3 -0
  735. package/types/project-run/check-execution/plan.d.ts +10 -0
  736. package/types/project-run/check-execution/preflight-result.d.ts +23 -0
  737. package/types/project-run/check-execution/preflight.d.ts +27 -0
  738. package/types/project-run/check-execution/resolved-checks.d.ts +51 -0
  739. package/types/project-run/check-execution/terminal-result.d.ts +27 -0
  740. package/types/project-run/completion.d.ts +14 -0
  741. package/types/project-run/controls/contract.d.ts +24 -0
  742. package/types/project-run/controls/outputs-override-validation.d.ts +3 -0
  743. package/types/project-run/controls/validation-result.d.ts +14 -0
  744. package/types/project-run/controls/validation.d.ts +3 -0
  745. package/types/project-run/diagnostic-logging/diagnostic-detail-rendering.d.ts +11 -0
  746. package/types/project-run/diagnostic-logging/logger.d.ts +33 -0
  747. package/types/project-run/invocation-creation.d.ts +12 -0
  748. package/types/project-run/invocation.d.ts +34 -0
  749. package/types/project-run/machine-publication.d.ts +10 -0
  750. package/types/project-run/output-configuration.d.ts +3 -0
  751. package/types/project-run/output-status.d.ts +21 -0
  752. package/types/project-run/progress-rendering/presentation.d.ts +28 -0
  753. package/types/project-run/progress-rendering/renderer-formatting.d.ts +23 -0
  754. package/types/project-run/progress-rendering/renderer-lifecycle.d.ts +24 -0
  755. package/types/project-run/progress-rendering/renderer.d.ts +44 -0
  756. package/types/project-run/project-context.d.ts +7 -0
  757. package/types/project-run/result.d.ts +99 -0
  758. package/types/project-run/run.d.ts +18 -0
  759. package/types/project-run/task-scheduler/execution-state.d.ts +67 -0
  760. package/types/project-run/task-scheduler/graph-validation.d.ts +11 -0
  761. package/types/project-run/task-scheduler/graph.d.ts +40 -0
  762. package/types/project-run/task-scheduler/scheduler-admission-decision.d.ts +8 -0
  763. package/types/project-run/task-scheduler/scheduler-blocker-summary.d.ts +4 -0
  764. package/types/project-run/task-scheduler/scheduler-decision-inspection.d.ts +24 -0
  765. package/types/project-run/task-scheduler/scheduler-decision-model.d.ts +94 -0
  766. package/types/project-run/task-scheduler/scheduler-decision.d.ts +8 -0
  767. package/types/project-run/task-scheduler/scheduler.d.ts +3 -0
@@ -0,0 +1,155 @@
1
+ import { defineCheck } from "../../check/check.mjs";
2
+ import { MAINTENANCE_REMINDER_UNAVAILABLE_REASON, parseMaintenanceRemindersData } from "./final-data.mjs";
3
+ import { runGit } from "./maintenance-support.mjs";
4
+ import { exactRecord, validEntries, validGit } from "./options-validation.mjs";
5
+ import { completedResult, reminderEvaluation, unavailableAssessment, unavailableHistory, unavailableResult } from "./assessment-results.mjs";
6
+ import { measureReminder, parseCommitId, parseFirstParentHistory } from "./measurement.mjs";
7
+ export const MAINTENANCE_REMINDERS_CHECK_ID = "maintenance-reminders";
8
+ const MAINTENANCE_REMINDER_OPTION_KEYS = ["entries", "git"];
9
+ const WHOLE_CHECK_UNAVAILABLE_CODE = Object.freeze({
10
+ invalidOptions: "invalid-options",
11
+ executionCancelled: "execution-cancelled",
12
+ internalFailure: "maintenance-reminders-internal-failure"
13
+ });
14
+ /**
15
+ * 创建一个固定 ID 的普通 Check,并在其局部最终数据中评估多条维护提醒。
16
+ *
17
+ * @remarks 构造函数只接收项目无法可靠推断的提醒政策;它补齐 Git 可执行文件、身份、可见性和直接执行逻辑。返回值仍是普通 Check,可按现有原生对象组合规则替换完整 `options` 分支。
18
+ * @example 创建一个单一 Check 的维护提醒
19
+ * ```ts
20
+ * import { defineConfig, maintenanceReminders, run } from "@zxyycom/vibe-check";
21
+ *
22
+ * // 下列 baseCommit 都是示例占位值;实际使用时,每条都必须替换为该提醒最近一次真实复核对应的完整 commit ID。
23
+ * const maintenance = maintenanceReminders([
24
+ * {
25
+ * id: "documentation-review",
26
+ * baseCommit: "0123456789abcdef0123456789abcdef01234567",
27
+ * limits: { commits: 40, changedLines: 2_000 },
28
+ * message: "Review the documentation structure after this body of change."
29
+ * },
30
+ * {
31
+ * id: "optimization-audit",
32
+ * baseCommit: "89abcdef0123456789abcdef0123456789abcdef",
33
+ * limits: { commits: 80 },
34
+ * message: "Audit optimization quality before this becomes older.",
35
+ * mode: "enforcing"
36
+ * }
37
+ * ]);
38
+ *
39
+ * const definition = defineConfig({
40
+ * checks: [maintenance],
41
+ * outputs: {
42
+ * diagnosticLogging: { enabled: false },
43
+ * machinePublication: { enabled: false },
44
+ * progressRendering: { enabled: false }
45
+ * }
46
+ * });
47
+ *
48
+ * const result = await run(definition);
49
+ * if (result.kind !== "completed") throw new Error(`Run did not complete: ${result.kind}`);
50
+ * ```
51
+ */
52
+ export function maintenanceReminders(entries) {
53
+ return defineCheck({
54
+ checkId: MAINTENANCE_REMINDERS_CHECK_ID,
55
+ displayName: "Maintenance reminders",
56
+ execution: executeMaintenanceReminders,
57
+ parseData: parseMaintenanceRemindersData,
58
+ preflight: (options) => validMaintenanceReminderOptions(options)
59
+ ? { status: "success", preparedOptions: options }
60
+ : {
61
+ status: "failure",
62
+ action: "block",
63
+ reason: { code: "invalid-options" },
64
+ messages: [
65
+ {
66
+ code: "invalid-options",
67
+ level: "error",
68
+ message: "maintenanceReminders options are invalid; recreate the Check with maintenanceReminders(entries) or restore its complete resolved options."
69
+ }
70
+ ]
71
+ },
72
+ options: {
73
+ entries,
74
+ git: { executable: "git" }
75
+ },
76
+ visibility: "attention"
77
+ });
78
+ }
79
+ /** 在普通对象组合后验证完整的选项形状。 */
80
+ export function validMaintenanceReminderOptions(value) {
81
+ const options = exactRecord(value, MAINTENANCE_REMINDER_OPTION_KEYS);
82
+ return options !== undefined && validEntries(options.entries) && validGit(options.git);
83
+ }
84
+ async function executeMaintenanceReminders(context) {
85
+ if (!validMaintenanceReminderOptions(context.options))
86
+ return unavailableResult("invalid-options");
87
+ if (context.signal.aborted)
88
+ return unavailableResult(WHOLE_CHECK_UNAVAILABLE_CODE.executionCancelled);
89
+ try {
90
+ const history = await resolveFirstParentHistory({
91
+ executable: context.options.git.executable,
92
+ projectRoot: context.project.root,
93
+ signal: context.signal
94
+ });
95
+ if (history.kind === "cancelled") {
96
+ return unavailableResult(WHOLE_CHECK_UNAVAILABLE_CODE.executionCancelled);
97
+ }
98
+ if (history.kind === "unavailable") {
99
+ return completedResult(context.options.entries.map((entry) => reminderEvaluation(entry, unavailableAssessment(entry, null, history.reason))));
100
+ }
101
+ const evaluations = [];
102
+ for (const entry of context.options.entries) {
103
+ const measurement = await measureReminder({
104
+ entry,
105
+ executable: context.options.git.executable,
106
+ history: history.value,
107
+ projectRoot: context.project.root,
108
+ signal: context.signal
109
+ });
110
+ if (measurement.kind === "cancelled") {
111
+ return unavailableResult(WHOLE_CHECK_UNAVAILABLE_CODE.executionCancelled);
112
+ }
113
+ evaluations.push(measurement.value);
114
+ }
115
+ return completedResult(evaluations);
116
+ }
117
+ catch {
118
+ return unavailableResult(WHOLE_CHECK_UNAVAILABLE_CODE.internalFailure);
119
+ }
120
+ }
121
+ async function resolveFirstParentHistory(input) {
122
+ const head = await runGit({
123
+ args: ["rev-parse", "--verify", "HEAD^{commit}"],
124
+ executable: input.executable,
125
+ projectRoot: input.projectRoot,
126
+ signal: input.signal
127
+ });
128
+ if (head.kind === "cancelled")
129
+ return head;
130
+ if (head.kind === "failed")
131
+ return unavailableHistory(MAINTENANCE_REMINDER_UNAVAILABLE_REASON.headUnavailable);
132
+ const headCommit = parseCommitId(head.stdout);
133
+ if (headCommit === null)
134
+ return unavailableHistory(MAINTENANCE_REMINDER_UNAVAILABLE_REASON.headInvalid);
135
+ const history = await runGit({
136
+ args: ["rev-list", "--first-parent", "HEAD"],
137
+ executable: input.executable,
138
+ projectRoot: input.projectRoot,
139
+ signal: input.signal
140
+ });
141
+ if (history.kind === "cancelled")
142
+ return history;
143
+ if (history.kind === "failed") {
144
+ return unavailableHistory(MAINTENANCE_REMINDER_UNAVAILABLE_REASON.firstParentHistoryUnavailable);
145
+ }
146
+ const firstParentHistory = parseFirstParentHistory(history.stdout, headCommit);
147
+ if (firstParentHistory === undefined) {
148
+ return unavailableHistory(MAINTENANCE_REMINDER_UNAVAILABLE_REASON.firstParentHistoryInvalid);
149
+ }
150
+ return {
151
+ kind: "succeeded",
152
+ value: firstParentHistory
153
+ };
154
+ }
155
+ //# sourceMappingURL=maintenance-reminders.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maintenance-reminders.mjs","sourceRoot":"","sources":["../../../../src/package-checks/maintenance-reminders/maintenance-reminders.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAIZ,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,uCAAuC,EACvC,6BAA6B,EAG9B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAE3F,MAAM,CAAC,MAAM,8BAA8B,GAAG,uBAAuB,CAAC;AAEtE,MAAM,gCAAgC,GAAsB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AAC/E,MAAM,4BAA4B,GAAG,MAAM,CAAC,MAAM,CAAC;IACjD,cAAc,EAAE,iBAAiB;IACjC,kBAAkB,EAAE,qBAAqB;IACzC,eAAe,EAAE,wCAAwC;CAC1D,CAAC,CAAC;AAgEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAAuC;IAMvC,OAAO,WAAW,CAAC;QACjB,OAAO,EAAE,8BAA8B;QACvC,WAAW,EAAE,uBAAuB;QACpC,SAAS,EAAE,2BAA2B;QACtC,SAAS,EAAE,6BAA6B;QACxC,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CACrB,+BAA+B,CAAC,OAAO,CAAC;YACtC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE;YACjD,CAAC,CAAC;gBACE,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,OAAO;gBACf,MAAM,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE;gBACnC,QAAQ,EAAE;oBACR;wBACE,IAAI,EAAE,iBAAiB;wBACvB,KAAK,EAAE,OAAO;wBACd,OAAO,EACL,2IAA2I;qBAC9I;iBACF;aACF;QACP,OAAO,EAAE;YACP,OAAO;YACP,GAAG,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE;SAC3B;QACD,UAAU,EAAE,WAAW;KACxB,CAAC,CAAC;AACL,CAAC;AAED,yBAAyB;AACzB,MAAM,UAAU,+BAA+B,CAC7C,KAAc;IAEd,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,EAAE,gCAAgC,CAAC,CAAC;IACrE,OAAO,OAAO,KAAK,SAAS,IAAI,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACzF,CAAC;AAED,KAAK,UAAU,2BAA2B,CACxC,OAA0D;IAE1D,IAAI,CAAC,+BAA+B,CAAC,OAAO,CAAC,OAAO,CAAC;QACnD,OAAO,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;IAC9C,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO;QACxB,OAAO,iBAAiB,CAAC,4BAA4B,CAAC,kBAAkB,CAAC,CAAC;IAE5E,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,yBAAyB,CAAC;YAC9C,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU;YAC1C,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI;YACjC,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;QACH,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACjC,OAAO,iBAAiB,CAAC,4BAA4B,CAAC,kBAAkB,CAAC,CAAC;QAC5E,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YACnC,OAAO,eAAe,CACpB,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACpC,kBAAkB,CAAC,KAAK,EAAE,qBAAqB,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAC9E,CACF,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAyB,EAAE,CAAC;QAC7C,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAC5C,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC;gBACxC,KAAK;gBACL,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU;gBAC1C,OAAO,EAAE,OAAO,CAAC,KAAK;gBACtB,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI;gBACjC,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB,CAAC,CAAC;YACH,IAAI,WAAW,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBACrC,OAAO,iBAAiB,CAAC,4BAA4B,CAAC,kBAAkB,CAAC,CAAC;YAC5E,CAAC;YACD,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,eAAe,CAAC,WAAW,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,iBAAiB,CAAC,4BAA4B,CAAC,eAAe,CAAC,CAAC;IACzE,CAAC;AACH,CAAC;AAED,KAAK,UAAU,yBAAyB,CAAC,KAIxC;IACC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC;QACxB,IAAI,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,eAAe,CAAC;QAChD,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,MAAM,EAAE,KAAK,CAAC,MAAM;KACrB,CAAC,CAAC;IACH,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IAC3C,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;QACxB,OAAO,kBAAkB,CAAC,uCAAuC,CAAC,eAAe,CAAC,CAAC;IAErF,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9C,IAAI,UAAU,KAAK,IAAI;QACrB,OAAO,kBAAkB,CAAC,uCAAuC,CAAC,WAAW,CAAC,CAAC;IAEjF,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC;QAC3B,IAAI,EAAE,CAAC,UAAU,EAAE,gBAAgB,EAAE,MAAM,CAAC;QAC5C,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,MAAM,EAAE,KAAK,CAAC,MAAM;KACrB,CAAC,CAAC;IACH,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW;QAAE,OAAO,OAAO,CAAC;IACjD,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,kBAAkB,CACvB,uCAAuC,CAAC,6BAA6B,CACtE,CAAC;IACJ,CAAC;IAED,MAAM,kBAAkB,GAAG,uBAAuB,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC/E,IAAI,kBAAkB,KAAK,SAAS,EAAE,CAAC;QACrC,OAAO,kBAAkB,CAAC,uCAAuC,CAAC,yBAAyB,CAAC,CAAC;IAC/F,CAAC;IAED,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,kBAAkB;KAC1B,CAAC;AACJ,CAAC","sourcesContent":["import {\n defineCheck,\n type CheckExecutionContext,\n type CheckResult,\n type TypedCheckWithOptions\n} from \"../../check/check.ts\";\nimport {\n MAINTENANCE_REMINDER_UNAVAILABLE_REASON,\n parseMaintenanceRemindersData,\n type MaintenanceReminderAssessment,\n type MaintenanceRemindersFinalData\n} from \"./final-data.ts\";\nimport { runGit } from \"./maintenance-support.ts\";\nimport { exactRecord, validEntries, validGit } from \"./options-validation.ts\";\nimport {\n completedResult,\n reminderEvaluation,\n unavailableAssessment,\n unavailableHistory,\n unavailableResult\n} from \"./assessment-results.ts\";\nimport { measureReminder, parseCommitId, parseFirstParentHistory } from \"./measurement.ts\";\n\nexport const MAINTENANCE_REMINDERS_CHECK_ID = \"maintenance-reminders\";\n\nconst MAINTENANCE_REMINDER_OPTION_KEYS: readonly string[] = [\"entries\", \"git\"];\nconst WHOLE_CHECK_UNAVAILABLE_CODE = Object.freeze({\n invalidOptions: \"invalid-options\",\n executionCancelled: \"execution-cancelled\",\n internalFailure: \"maintenance-reminders-internal-failure\"\n});\n\n/** 一项维护提醒的项目政策输入。 */\nexport interface MaintenanceReminder {\n /** 在同一次构造函数调用中唯一的小写短横线命名局部标识。 */\n readonly id: string;\n /** 维护者在完成真实复核后手动推进的不可变完整 Git commit ID。 */\n readonly baseCommit: string;\n /** 超过任一已配置上限时触发该提醒。 */\n readonly limits: Readonly<{\n /** 从基线到 `HEAD` 的 `first-parent` 提交数上限。 */\n readonly commits?: number;\n /** 从基线到 `HEAD` 的累计 Git `numstat` 增加行加删除行上限。 */\n readonly changedLines?: number;\n }>;\n /** 到期或无法评估时展示给人的非空提醒正文。 */\n readonly message: string;\n /** 省略时只提示;`enforcing` 会使到期或不可测量的条目令所属 Check 失败。 */\n readonly mode?: \"advisory\" | \"enforcing\";\n}\n\n/** `maintenanceReminders` 生成且完全由 Check 持有的选项。 */\nexport interface MaintenanceReminderOptions {\n /** 保留作者声明顺序的提醒政策条目。 */\n readonly entries: readonly MaintenanceReminder[];\n /** 执行已提交历史测量的 Git 可执行文件。 */\n readonly git: Readonly<{\n readonly executable: string;\n }>;\n}\n\n/** `maintenance-reminders` whole-Check unavailable outcome 的稳定 reason code。 */\nexport type MaintenanceRemindersUnavailableCode =\n (typeof WHOLE_CHECK_UNAVAILABLE_CODE)[keyof typeof WHOLE_CHECK_UNAVAILABLE_CODE];\nexport type FirstParentHistoryUnavailableReason =\n | typeof MAINTENANCE_REMINDER_UNAVAILABLE_REASON.firstParentHistoryInvalid\n | typeof MAINTENANCE_REMINDER_UNAVAILABLE_REASON.firstParentHistoryUnavailable\n | typeof MAINTENANCE_REMINDER_UNAVAILABLE_REASON.headInvalid\n | typeof MAINTENANCE_REMINDER_UNAVAILABLE_REASON.headUnavailable;\n\nexport type ReminderEvaluation = Readonly<{\n readonly assessment: MaintenanceReminderAssessment;\n readonly message: string;\n}>;\n\nexport type GitCommandResult =\n | Readonly<{ readonly kind: \"cancelled\" }>\n | Readonly<{ readonly kind: \"failed\" }>\n | Readonly<{ readonly kind: \"succeeded\"; readonly stdout: string }>;\n\nexport type FirstParentHistory = Readonly<{\n readonly commits: readonly string[];\n readonly headCommit: string;\n}>;\n\nexport type FirstParentHistoryResolution =\n | Readonly<{ readonly kind: \"cancelled\" }>\n | Readonly<{ readonly kind: \"unavailable\"; readonly reason: FirstParentHistoryUnavailableReason }>\n | Readonly<{ readonly kind: \"succeeded\"; readonly value: FirstParentHistory }>;\n\nexport type ReminderMeasurement =\n | Readonly<{ readonly kind: \"cancelled\" }>\n | Readonly<{ readonly kind: \"succeeded\"; readonly value: ReminderEvaluation }>;\n\n/**\n * 创建一个固定 ID 的普通 Check,并在其局部最终数据中评估多条维护提醒。\n *\n * @remarks 构造函数只接收项目无法可靠推断的提醒政策;它补齐 Git 可执行文件、身份、可见性和直接执行逻辑。返回值仍是普通 Check,可按现有原生对象组合规则替换完整 `options` 分支。\n * @example 创建一个单一 Check 的维护提醒\n * ```ts\n * import { defineConfig, maintenanceReminders, run } from \"@zxyycom/vibe-check\";\n *\n * // 下列 baseCommit 都是示例占位值;实际使用时,每条都必须替换为该提醒最近一次真实复核对应的完整 commit ID。\n * const maintenance = maintenanceReminders([\n * {\n * id: \"documentation-review\",\n * baseCommit: \"0123456789abcdef0123456789abcdef01234567\",\n * limits: { commits: 40, changedLines: 2_000 },\n * message: \"Review the documentation structure after this body of change.\"\n * },\n * {\n * id: \"optimization-audit\",\n * baseCommit: \"89abcdef0123456789abcdef0123456789abcdef\",\n * limits: { commits: 80 },\n * message: \"Audit optimization quality before this becomes older.\",\n * mode: \"enforcing\"\n * }\n * ]);\n *\n * const definition = defineConfig({\n * checks: [maintenance],\n * outputs: {\n * diagnosticLogging: { enabled: false },\n * machinePublication: { enabled: false },\n * progressRendering: { enabled: false }\n * }\n * });\n *\n * const result = await run(definition);\n * if (result.kind !== \"completed\") throw new Error(`Run did not complete: ${result.kind}`);\n * ```\n */\nexport function maintenanceReminders(\n entries: readonly MaintenanceReminder[]\n): TypedCheckWithOptions<\n typeof MAINTENANCE_REMINDERS_CHECK_ID,\n MaintenanceReminderOptions,\n typeof parseMaintenanceRemindersData\n> {\n return defineCheck({\n checkId: MAINTENANCE_REMINDERS_CHECK_ID,\n displayName: \"Maintenance reminders\",\n execution: executeMaintenanceReminders,\n parseData: parseMaintenanceRemindersData,\n preflight: (options) =>\n validMaintenanceReminderOptions(options)\n ? { status: \"success\", preparedOptions: options }\n : {\n status: \"failure\",\n action: \"block\",\n reason: { code: \"invalid-options\" },\n messages: [\n {\n code: \"invalid-options\",\n level: \"error\",\n message:\n \"maintenanceReminders options are invalid; recreate the Check with maintenanceReminders(entries) or restore its complete resolved options.\"\n }\n ]\n },\n options: {\n entries,\n git: { executable: \"git\" }\n },\n visibility: \"attention\"\n });\n}\n\n/** 在普通对象组合后验证完整的选项形状。 */\nexport function validMaintenanceReminderOptions(\n value: unknown\n): value is MaintenanceReminderOptions {\n const options = exactRecord(value, MAINTENANCE_REMINDER_OPTION_KEYS);\n return options !== undefined && validEntries(options.entries) && validGit(options.git);\n}\n\nasync function executeMaintenanceReminders(\n context: CheckExecutionContext<MaintenanceReminderOptions>\n): Promise<CheckResult<MaintenanceRemindersFinalData>> {\n if (!validMaintenanceReminderOptions(context.options))\n return unavailableResult(\"invalid-options\");\n if (context.signal.aborted)\n return unavailableResult(WHOLE_CHECK_UNAVAILABLE_CODE.executionCancelled);\n\n try {\n const history = await resolveFirstParentHistory({\n executable: context.options.git.executable,\n projectRoot: context.project.root,\n signal: context.signal\n });\n if (history.kind === \"cancelled\") {\n return unavailableResult(WHOLE_CHECK_UNAVAILABLE_CODE.executionCancelled);\n }\n\n if (history.kind === \"unavailable\") {\n return completedResult(\n context.options.entries.map((entry) =>\n reminderEvaluation(entry, unavailableAssessment(entry, null, history.reason))\n )\n );\n }\n\n const evaluations: ReminderEvaluation[] = [];\n for (const entry of context.options.entries) {\n const measurement = await measureReminder({\n entry,\n executable: context.options.git.executable,\n history: history.value,\n projectRoot: context.project.root,\n signal: context.signal\n });\n if (measurement.kind === \"cancelled\") {\n return unavailableResult(WHOLE_CHECK_UNAVAILABLE_CODE.executionCancelled);\n }\n evaluations.push(measurement.value);\n }\n return completedResult(evaluations);\n } catch {\n return unavailableResult(WHOLE_CHECK_UNAVAILABLE_CODE.internalFailure);\n }\n}\n\nasync function resolveFirstParentHistory(input: {\n readonly executable: string;\n readonly projectRoot: string;\n readonly signal: AbortSignal;\n}): Promise<FirstParentHistoryResolution> {\n const head = await runGit({\n args: [\"rev-parse\", \"--verify\", \"HEAD^{commit}\"],\n executable: input.executable,\n projectRoot: input.projectRoot,\n signal: input.signal\n });\n if (head.kind === \"cancelled\") return head;\n if (head.kind === \"failed\")\n return unavailableHistory(MAINTENANCE_REMINDER_UNAVAILABLE_REASON.headUnavailable);\n\n const headCommit = parseCommitId(head.stdout);\n if (headCommit === null)\n return unavailableHistory(MAINTENANCE_REMINDER_UNAVAILABLE_REASON.headInvalid);\n\n const history = await runGit({\n args: [\"rev-list\", \"--first-parent\", \"HEAD\"],\n executable: input.executable,\n projectRoot: input.projectRoot,\n signal: input.signal\n });\n if (history.kind === \"cancelled\") return history;\n if (history.kind === \"failed\") {\n return unavailableHistory(\n MAINTENANCE_REMINDER_UNAVAILABLE_REASON.firstParentHistoryUnavailable\n );\n }\n\n const firstParentHistory = parseFirstParentHistory(history.stdout, headCommit);\n if (firstParentHistory === undefined) {\n return unavailableHistory(MAINTENANCE_REMINDER_UNAVAILABLE_REASON.firstParentHistoryInvalid);\n }\n\n return {\n kind: \"succeeded\",\n value: firstParentHistory\n };\n}\n"]}
@@ -0,0 +1,58 @@
1
+ import { spawn } from "node:child_process";
2
+ const MAX_GIT_OUTPUT_BYTES = 64 * 1024 * 1024;
3
+ export async function runGit(input) {
4
+ if (input.signal.aborted)
5
+ return { kind: "cancelled" };
6
+ return new Promise((resolve) => {
7
+ let settled = false;
8
+ let outputBytes = 0;
9
+ let stdout = "";
10
+ let overflowed = false;
11
+ let child;
12
+ const settle = (result) => {
13
+ if (settled)
14
+ return;
15
+ settled = true;
16
+ input.signal.removeEventListener("abort", abort);
17
+ resolve(result);
18
+ };
19
+ const abort = () => {
20
+ child.kill("SIGTERM");
21
+ };
22
+ try {
23
+ child = spawn(input.executable, input.args, {
24
+ cwd: input.projectRoot,
25
+ stdio: ["ignore", "pipe", "ignore"],
26
+ windowsHide: true
27
+ });
28
+ }
29
+ catch {
30
+ settle({ kind: "failed" });
31
+ return;
32
+ }
33
+ input.signal.addEventListener("abort", abort, { once: true });
34
+ child.stdout?.on("data", (chunk) => {
35
+ const text = String(chunk);
36
+ outputBytes += Buffer.byteLength(text);
37
+ if (outputBytes > MAX_GIT_OUTPUT_BYTES) {
38
+ overflowed = true;
39
+ child.kill("SIGTERM");
40
+ return;
41
+ }
42
+ stdout += text;
43
+ });
44
+ child.once("error", () => settle(input.signal.aborted ? { kind: "cancelled" } : { kind: "failed" }));
45
+ child.once("close", (status) => {
46
+ if (input.signal.aborted) {
47
+ settle({ kind: "cancelled" });
48
+ }
49
+ else if (overflowed || status !== 0) {
50
+ settle({ kind: "failed" });
51
+ }
52
+ else {
53
+ settle({ kind: "succeeded", stdout });
54
+ }
55
+ });
56
+ });
57
+ }
58
+ //# sourceMappingURL=maintenance-support.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maintenance-support.mjs","sourceRoot":"","sources":["../../../../src/package-checks/maintenance-reminders/maintenance-support.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAI3C,MAAM,oBAAoB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAE9C,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,KAK5B;IACC,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IAEvD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,UAAU,GAAG,KAAK,CAAC;QACvB,IAAI,KAA+B,CAAC;QAEpC,MAAM,MAAM,GAAG,CAAC,MAAwB,EAAQ,EAAE;YAChD,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACjD,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC,CAAC;QACF,MAAM,KAAK,GAAG,GAAS,EAAE;YACvB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxB,CAAC,CAAC;QAEF,IAAI,CAAC;YACH,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE;gBAC1C,GAAG,EAAE,KAAK,CAAC,WAAW;gBACtB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;gBACnC,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9D,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAsB,EAAE,EAAE;YAClD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAC3B,WAAW,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,WAAW,GAAG,oBAAoB,EAAE,CAAC;gBACvC,UAAU,GAAG,IAAI,CAAC;gBAClB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACtB,OAAO;YACT,CAAC;YACD,MAAM,IAAI,IAAI,CAAC;QACjB,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CACvB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAC1E,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE;YAC7B,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACzB,MAAM,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;YAChC,CAAC;iBAAM,IAAI,UAAU,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtC,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;YACxC,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { spawn } from \"node:child_process\";\n\nimport type { GitCommandResult } from \"./maintenance-reminders.ts\";\n\nconst MAX_GIT_OUTPUT_BYTES = 64 * 1024 * 1024;\n\nexport async function runGit(input: {\n readonly args: readonly string[];\n readonly executable: string;\n readonly projectRoot: string;\n readonly signal: AbortSignal;\n}): Promise<GitCommandResult> {\n if (input.signal.aborted) return { kind: \"cancelled\" };\n\n return new Promise((resolve) => {\n let settled = false;\n let outputBytes = 0;\n let stdout = \"\";\n let overflowed = false;\n let child: ReturnType<typeof spawn>;\n\n const settle = (result: GitCommandResult): void => {\n if (settled) return;\n settled = true;\n input.signal.removeEventListener(\"abort\", abort);\n resolve(result);\n };\n const abort = (): void => {\n child.kill(\"SIGTERM\");\n };\n\n try {\n child = spawn(input.executable, input.args, {\n cwd: input.projectRoot,\n stdio: [\"ignore\", \"pipe\", \"ignore\"],\n windowsHide: true\n });\n } catch {\n settle({ kind: \"failed\" });\n return;\n }\n\n input.signal.addEventListener(\"abort\", abort, { once: true });\n child.stdout?.on(\"data\", (chunk: Buffer | string) => {\n const text = String(chunk);\n outputBytes += Buffer.byteLength(text);\n if (outputBytes > MAX_GIT_OUTPUT_BYTES) {\n overflowed = true;\n child.kill(\"SIGTERM\");\n return;\n }\n stdout += text;\n });\n child.once(\"error\", () =>\n settle(input.signal.aborted ? { kind: \"cancelled\" } : { kind: \"failed\" })\n );\n child.once(\"close\", (status) => {\n if (input.signal.aborted) {\n settle({ kind: \"cancelled\" });\n } else if (overflowed || status !== 0) {\n settle({ kind: \"failed\" });\n } else {\n settle({ kind: \"succeeded\", stdout });\n }\n });\n });\n}\n"]}
@@ -0,0 +1,125 @@
1
+ import { isMaintenanceCommitId } from "./final-data.mjs";
2
+ import { completedMeasurement, modeOf, unavailableAssessment } from "./assessment-results.mjs";
3
+ import { runGit } from "./maintenance-support.mjs";
4
+ export async function measureReminder(input) {
5
+ const base = await resolvedBaseCommit(input);
6
+ if (base.kind === "cancelled")
7
+ return base;
8
+ if (base.kind === "unavailable")
9
+ return unavailableMeasurement(input, base.reason);
10
+ const changedLines = await measuredChangedLines(input, base.value);
11
+ if (changedLines.kind === "cancelled")
12
+ return changedLines;
13
+ if (changedLines.kind === "unavailable")
14
+ return unavailableMeasurement(input, changedLines.reason);
15
+ return completedMeasurement(input.entry, measuredAssessment(input, base.value, changedLines.value));
16
+ }
17
+ async function resolvedBaseCommit(input) {
18
+ const base = await runGit({
19
+ args: ["rev-parse", "--verify", `${input.entry.baseCommit}^{commit}`],
20
+ executable: input.executable,
21
+ projectRoot: input.projectRoot,
22
+ signal: input.signal
23
+ });
24
+ if (base.kind === "cancelled")
25
+ return base;
26
+ if (base.kind === "failed")
27
+ return unavailableMeasure("base-commit-unavailable");
28
+ const baseCommit = parseCommitId(base.stdout);
29
+ if (baseCommit === null)
30
+ return unavailableMeasure("base-commit-unavailable");
31
+ const baseIndex = input.history.commits.indexOf(baseCommit);
32
+ return baseIndex < 0
33
+ ? unavailableMeasure("base-not-first-parent-ancestor")
34
+ : completeMeasure(baseIndex);
35
+ }
36
+ async function measuredChangedLines(input, baseIndex) {
37
+ let changedLines = 0;
38
+ for (const commit of input.history.commits.slice(0, baseIndex)) {
39
+ const numstat = await runGit({
40
+ args: ["diff-tree", "--no-commit-id", "--numstat", "-r", `${commit}^`, commit],
41
+ executable: input.executable,
42
+ projectRoot: input.projectRoot,
43
+ signal: input.signal
44
+ });
45
+ if (numstat.kind === "cancelled")
46
+ return numstat;
47
+ if (numstat.kind === "failed")
48
+ return unavailableMeasure("numstat-unavailable");
49
+ const count = parseChangedLines(numstat.stdout);
50
+ if (count === null || !Number.isSafeInteger(changedLines + count))
51
+ return unavailableMeasure("numstat-invalid");
52
+ changedLines += count;
53
+ }
54
+ return completeMeasure(changedLines);
55
+ }
56
+ function measuredAssessment(input, baseIndex, changedLines) {
57
+ const mode = modeOf(input.entry);
58
+ const exceeded = [
59
+ ...(input.entry.limits.commits !== undefined && baseIndex > input.entry.limits.commits
60
+ ? ["commits"]
61
+ : []),
62
+ ...(input.entry.limits.changedLines !== undefined &&
63
+ changedLines > input.entry.limits.changedLines
64
+ ? ["changed-lines"]
65
+ : [])
66
+ ];
67
+ return {
68
+ assessment: exceeded.length > 0 ? "due" : "clear",
69
+ baseCommit: input.entry.baseCommit,
70
+ changedLines,
71
+ commitCount: baseIndex,
72
+ exceeded,
73
+ headCommit: input.history.headCommit,
74
+ id: input.entry.id,
75
+ mode
76
+ };
77
+ }
78
+ function unavailableMeasurement(input, reason) {
79
+ return completedMeasurement(input.entry, unavailableAssessment(input.entry, input.history.headCommit, reason));
80
+ }
81
+ function completeMeasure(value) {
82
+ return { kind: "complete", value };
83
+ }
84
+ function unavailableMeasure(reason) {
85
+ return { kind: "unavailable", reason };
86
+ }
87
+ export function parseCommitId(stdout) {
88
+ const value = stdout.trim();
89
+ return isMaintenanceCommitId(value) ? value.toLowerCase() : null;
90
+ }
91
+ export function parseFirstParentHistory(stdout, headCommit) {
92
+ const commits = [];
93
+ for (const line of stdout.split(/\r?\n/)) {
94
+ if (line.trim().length === 0)
95
+ continue;
96
+ const commit = parseCommitId(line);
97
+ if (commit === null)
98
+ return undefined;
99
+ commits.push(commit);
100
+ }
101
+ if (commits.length === 0 || commits[0] !== headCommit)
102
+ return undefined;
103
+ return Object.freeze({ commits: Object.freeze(commits), headCommit });
104
+ }
105
+ function parseChangedLines(stdout) {
106
+ let changedLines = 0;
107
+ for (const line of stdout.split(/\r?\n/)) {
108
+ if (line.length === 0)
109
+ continue;
110
+ const [additions, deletions] = line.split("\t", 3);
111
+ if (additions === "-" && deletions === "-")
112
+ continue;
113
+ if (!decimal(additions) || !decimal(deletions))
114
+ return null;
115
+ const count = Number(additions) + Number(deletions);
116
+ if (!Number.isSafeInteger(count) || !Number.isSafeInteger(changedLines + count))
117
+ return null;
118
+ changedLines += count;
119
+ }
120
+ return changedLines;
121
+ }
122
+ function decimal(value) {
123
+ return value !== undefined && /^(?:0|[1-9]\d*)$/.test(value);
124
+ }
125
+ //# sourceMappingURL=measurement.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"measurement.mjs","sourceRoot":"","sources":["../../../../src/package-checks/maintenance-reminders/measurement.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n isMaintenanceCommitId,\n type MaintenanceReminderAssessment,\n type MaintenanceReminderUnavailableReason\n} from \"./final-data.ts\";\nimport { completedMeasurement, modeOf, unavailableAssessment } from \"./assessment-results.ts\";\nimport { runGit } from \"./maintenance-support.ts\";\nimport type {\n FirstParentHistory,\n MaintenanceReminder,\n ReminderMeasurement\n} from \"./maintenance-reminders.ts\";\n\nexport async function measureReminder(input: {\n readonly entry: Readonly<MaintenanceReminder>;\n readonly executable: string;\n readonly history: FirstParentHistory;\n readonly projectRoot: string;\n readonly signal: AbortSignal;\n}): Promise<ReminderMeasurement> {\n const base = await resolvedBaseCommit(input);\n if (base.kind === \"cancelled\") return base;\n if (base.kind === \"unavailable\") return unavailableMeasurement(input, base.reason);\n const changedLines = await measuredChangedLines(input, base.value);\n if (changedLines.kind === \"cancelled\") return changedLines;\n if (changedLines.kind === \"unavailable\")\n return unavailableMeasurement(input, changedLines.reason);\n return completedMeasurement(\n input.entry,\n measuredAssessment(input, base.value, changedLines.value)\n );\n}\n\ntype ReminderMeasureStage<T> =\n | Readonly<{ readonly kind: \"cancelled\" }>\n | Readonly<{ readonly kind: \"complete\"; readonly value: T }>\n | Readonly<{\n readonly kind: \"unavailable\";\n readonly reason: MaintenanceReminderUnavailableReason;\n }>;\n\nasync function resolvedBaseCommit(input: {\n readonly entry: Readonly<MaintenanceReminder>;\n readonly executable: string;\n readonly history: FirstParentHistory;\n readonly projectRoot: string;\n readonly signal: AbortSignal;\n}): Promise<ReminderMeasureStage<number>> {\n const base = await runGit({\n args: [\"rev-parse\", \"--verify\", `${input.entry.baseCommit}^{commit}`],\n executable: input.executable,\n projectRoot: input.projectRoot,\n signal: input.signal\n });\n if (base.kind === \"cancelled\") return base;\n if (base.kind === \"failed\") return unavailableMeasure(\"base-commit-unavailable\");\n\n const baseCommit = parseCommitId(base.stdout);\n if (baseCommit === null) return unavailableMeasure(\"base-commit-unavailable\");\n\n const baseIndex = input.history.commits.indexOf(baseCommit);\n return baseIndex < 0\n ? unavailableMeasure(\"base-not-first-parent-ancestor\")\n : completeMeasure(baseIndex);\n}\n\nasync function measuredChangedLines(\n input: {\n readonly executable: string;\n readonly history: FirstParentHistory;\n readonly projectRoot: string;\n readonly signal: AbortSignal;\n },\n baseIndex: number\n): Promise<ReminderMeasureStage<number>> {\n let changedLines = 0;\n for (const commit of input.history.commits.slice(0, baseIndex)) {\n const numstat = await runGit({\n args: [\"diff-tree\", \"--no-commit-id\", \"--numstat\", \"-r\", `${commit}^`, commit],\n executable: input.executable,\n projectRoot: input.projectRoot,\n signal: input.signal\n });\n if (numstat.kind === \"cancelled\") return numstat;\n if (numstat.kind === \"failed\") return unavailableMeasure(\"numstat-unavailable\");\n const count = parseChangedLines(numstat.stdout);\n if (count === null || !Number.isSafeInteger(changedLines + count))\n return unavailableMeasure(\"numstat-invalid\");\n changedLines += count;\n }\n return completeMeasure(changedLines);\n}\n\nfunction measuredAssessment(\n input: Readonly<{\n readonly entry: Readonly<MaintenanceReminder>;\n readonly history: FirstParentHistory;\n }>,\n baseIndex: number,\n changedLines: number\n): MaintenanceReminderAssessment {\n const mode = modeOf(input.entry);\n const exceeded = [\n ...(input.entry.limits.commits !== undefined && baseIndex > input.entry.limits.commits\n ? ([\"commits\"] as const)\n : []),\n ...(input.entry.limits.changedLines !== undefined &&\n changedLines > input.entry.limits.changedLines\n ? ([\"changed-lines\"] as const)\n : [])\n ];\n return {\n assessment: exceeded.length > 0 ? \"due\" : \"clear\",\n baseCommit: input.entry.baseCommit,\n changedLines,\n commitCount: baseIndex,\n exceeded,\n headCommit: input.history.headCommit,\n id: input.entry.id,\n mode\n };\n}\n\nfunction unavailableMeasurement(\n input: Readonly<{\n readonly entry: Readonly<MaintenanceReminder>;\n readonly history: FirstParentHistory;\n }>,\n reason: MaintenanceReminderUnavailableReason\n): ReminderMeasurement {\n return completedMeasurement(\n input.entry,\n unavailableAssessment(input.entry, input.history.headCommit, reason)\n );\n}\n\nfunction completeMeasure<T>(value: T): ReminderMeasureStage<T> {\n return { kind: \"complete\", value };\n}\n\nfunction unavailableMeasure(\n reason: MaintenanceReminderUnavailableReason\n): ReminderMeasureStage<never> {\n return { kind: \"unavailable\", reason };\n}\n\nexport function parseCommitId(stdout: string): string | null {\n const value = stdout.trim();\n return isMaintenanceCommitId(value) ? value.toLowerCase() : null;\n}\n\nexport function parseFirstParentHistory(\n stdout: string,\n headCommit: string\n): FirstParentHistory | undefined {\n const commits: string[] = [];\n for (const line of stdout.split(/\\r?\\n/)) {\n if (line.trim().length === 0) continue;\n const commit = parseCommitId(line);\n if (commit === null) return undefined;\n commits.push(commit);\n }\n if (commits.length === 0 || commits[0] !== headCommit) return undefined;\n return Object.freeze({ commits: Object.freeze(commits), headCommit });\n}\n\nfunction parseChangedLines(stdout: string): number | null {\n let changedLines = 0;\n for (const line of stdout.split(/\\r?\\n/)) {\n if (line.length === 0) continue;\n const [additions, deletions] = line.split(\"\\t\", 3);\n if (additions === \"-\" && deletions === \"-\") continue;\n if (!decimal(additions) || !decimal(deletions)) return null;\n const count = Number(additions) + Number(deletions);\n if (!Number.isSafeInteger(count) || !Number.isSafeInteger(changedLines + count)) return null;\n changedLines += count;\n }\n return changedLines;\n}\n\nfunction decimal(value: string | undefined): value is string {\n return value !== undefined && /^(?:0|[1-9]\\d*)$/.test(value);\n}\n"]}
@@ -0,0 +1,72 @@
1
+ import { snapshotClosedArray, snapshotClosedRecord } from "../../data-boundary/closed-values.mjs";
2
+ import { isMaintenanceCommitId, isMaintenanceReminderId } from "./final-data.mjs";
3
+ const MAINTENANCE_REMINDER_ENTRY_KEYS = [
4
+ "id",
5
+ "baseCommit",
6
+ "limits",
7
+ "message",
8
+ "mode"
9
+ ];
10
+ const MAINTENANCE_REMINDER_LIMIT_KEYS = ["commits", "changedLines"];
11
+ const MAINTENANCE_REMINDER_GIT_KEYS = ["executable"];
12
+ export function validEntries(value) {
13
+ const entries = snapshotClosedArray(value);
14
+ if (entries === undefined)
15
+ return false;
16
+ const identifiers = new Set();
17
+ return entries.every((candidate) => {
18
+ const entry = snapshotClosedRecord(candidate);
19
+ if (entry === undefined || !validEntry(entry))
20
+ return false;
21
+ const identifier = entry.id;
22
+ if (typeof identifier !== "string" || identifiers.has(identifier))
23
+ return false;
24
+ identifiers.add(identifier);
25
+ return true;
26
+ });
27
+ }
28
+ function validEntry(entry) {
29
+ return (hasExpectedEntryKeys(entry) &&
30
+ validEntryIdentity(entry) &&
31
+ validLimits(entry.limits) &&
32
+ validEntryMode(entry));
33
+ }
34
+ function hasExpectedEntryKeys(entry) {
35
+ return (Object.keys(entry).every((key) => MAINTENANCE_REMINDER_ENTRY_KEYS.includes(key)) &&
36
+ ["id", "baseCommit", "limits", "message"].every((key) => Object.hasOwn(entry, key)));
37
+ }
38
+ function validEntryIdentity(entry) {
39
+ return (isMaintenanceReminderId(entry.id) &&
40
+ isMaintenanceCommitId(entry.baseCommit) &&
41
+ typeof entry.message === "string" &&
42
+ entry.message.length > 0);
43
+ }
44
+ function validEntryMode(entry) {
45
+ return !Object.hasOwn(entry, "mode") || entry.mode === "advisory" || entry.mode === "enforcing";
46
+ }
47
+ export function validGit(value) {
48
+ const git = exactRecord(value, MAINTENANCE_REMINDER_GIT_KEYS);
49
+ return git !== undefined && typeof git.executable === "string" && git.executable.length > 0;
50
+ }
51
+ function validLimits(value) {
52
+ const limits = snapshotClosedRecord(value);
53
+ if (limits === undefined)
54
+ return false;
55
+ const keys = Object.keys(limits);
56
+ return (keys.length > 0 &&
57
+ keys.every((key) => MAINTENANCE_REMINDER_LIMIT_KEYS.includes(key)) &&
58
+ (!Object.hasOwn(limits, "commits") || positiveSafeInteger(limits.commits)) &&
59
+ (!Object.hasOwn(limits, "changedLines") || positiveSafeInteger(limits.changedLines)));
60
+ }
61
+ export function exactRecord(value, keys) {
62
+ const record = snapshotClosedRecord(value);
63
+ return record !== undefined &&
64
+ Object.keys(record).length === keys.length &&
65
+ keys.every((key) => Object.hasOwn(record, key))
66
+ ? record
67
+ : undefined;
68
+ }
69
+ function positiveSafeInteger(value) {
70
+ return typeof value === "number" && Number.isSafeInteger(value) && value > 0;
71
+ }
72
+ //# sourceMappingURL=options-validation.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options-validation.mjs","sourceRoot":"","sources":["../../../../src/package-checks/maintenance-reminders/options-validation.ts"],"names":[],"mappings":"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","sourcesContent":["import { snapshotClosedArray, snapshotClosedRecord } from \"../../data-boundary/closed-values.ts\";\nimport { isMaintenanceCommitId, isMaintenanceReminderId } from \"./final-data.ts\";\n\nconst MAINTENANCE_REMINDER_ENTRY_KEYS: readonly string[] = [\n \"id\",\n \"baseCommit\",\n \"limits\",\n \"message\",\n \"mode\"\n];\nconst MAINTENANCE_REMINDER_LIMIT_KEYS: readonly string[] = [\"commits\", \"changedLines\"];\nconst MAINTENANCE_REMINDER_GIT_KEYS: readonly string[] = [\"executable\"];\n\nexport function validEntries(value: unknown): boolean {\n const entries = snapshotClosedArray(value);\n if (entries === undefined) return false;\n const identifiers = new Set<string>();\n return entries.every((candidate) => {\n const entry = snapshotClosedRecord(candidate);\n if (entry === undefined || !validEntry(entry)) return false;\n const identifier = entry.id;\n if (typeof identifier !== \"string\" || identifiers.has(identifier)) return false;\n identifiers.add(identifier);\n return true;\n });\n}\n\nfunction validEntry(entry: Readonly<Record<string, unknown>>): boolean {\n return (\n hasExpectedEntryKeys(entry) &&\n validEntryIdentity(entry) &&\n validLimits(entry.limits) &&\n validEntryMode(entry)\n );\n}\n\nfunction hasExpectedEntryKeys(entry: Readonly<Record<string, unknown>>): boolean {\n return (\n Object.keys(entry).every((key) => MAINTENANCE_REMINDER_ENTRY_KEYS.includes(key)) &&\n [\"id\", \"baseCommit\", \"limits\", \"message\"].every((key) => Object.hasOwn(entry, key))\n );\n}\n\nfunction validEntryIdentity(entry: Readonly<Record<string, unknown>>): boolean {\n return (\n isMaintenanceReminderId(entry.id) &&\n isMaintenanceCommitId(entry.baseCommit) &&\n typeof entry.message === \"string\" &&\n entry.message.length > 0\n );\n}\n\nfunction validEntryMode(entry: Readonly<Record<string, unknown>>): boolean {\n return !Object.hasOwn(entry, \"mode\") || entry.mode === \"advisory\" || entry.mode === \"enforcing\";\n}\n\nexport function validGit(value: unknown): boolean {\n const git = exactRecord(value, MAINTENANCE_REMINDER_GIT_KEYS);\n return git !== undefined && typeof git.executable === \"string\" && git.executable.length > 0;\n}\n\nfunction validLimits(value: unknown): boolean {\n const limits = snapshotClosedRecord(value);\n if (limits === undefined) return false;\n const keys = Object.keys(limits);\n return (\n keys.length > 0 &&\n keys.every((key) => MAINTENANCE_REMINDER_LIMIT_KEYS.includes(key)) &&\n (!Object.hasOwn(limits, \"commits\") || positiveSafeInteger(limits.commits)) &&\n (!Object.hasOwn(limits, \"changedLines\") || positiveSafeInteger(limits.changedLines))\n );\n}\n\nexport function exactRecord(\n value: unknown,\n keys: readonly string[]\n): Readonly<Record<string, unknown>> | undefined {\n const record = snapshotClosedRecord(value);\n return record !== undefined &&\n Object.keys(record).length === keys.length &&\n keys.every((key) => Object.hasOwn(record, key))\n ? record\n : undefined;\n}\n\nfunction positiveSafeInteger(value: unknown): value is number {\n return typeof value === \"number\" && Number.isSafeInteger(value) && value > 0;\n}\n"]}
@@ -0,0 +1,55 @@
1
+ import { defineCheck } from "../../check/check.mjs";
2
+ import { MARKDOWN_LINK_VALIDATION_CHECK_DEFINITION, executeMarkdownLinkValidation } from "./execution.mjs";
3
+ import { parseMarkdownLinkValidationData } from "./final-data.mjs";
4
+ import { resolveMarkdownLinkValidationOptions } from "./options-resolution.mjs";
5
+ import { validMarkdownLinkValidationOptions } from "./options-validation.mjs";
6
+ /**
7
+ * 使用可省略的 source、target 与 work-limit policy 构造离线 Markdown 引用 Check。
8
+ *
9
+ * @param options - 省略字段由 package 补齐;files 数组是完整替换值,limits fields 可分别省略。
10
+ * @returns 固定 `markdown-link-validation` identity、完整冻结 options、parser 与执行逻辑。
11
+ * @throws {TypeError} input 含未知字段、非法 target policy 或非法 work limit 时抛出。
12
+ * @example 离线 Markdown 本地链接完整性
13
+ * ```ts
14
+ * import { defineConfig, markdownLinkValidation, run } from "@zxyycom/vibe-check";
15
+ *
16
+ * const definition = defineConfig({
17
+ * checks: [markdownLinkValidation()],
18
+ * outputs: {
19
+ * diagnosticLogging: { enabled: false },
20
+ * machinePublication: { enabled: false },
21
+ * progressRendering: { enabled: false }
22
+ * }
23
+ * });
24
+ *
25
+ * const result = await run(definition);
26
+ * if (result.kind !== "completed") throw new Error(`Run did not complete: ${result.kind}`);
27
+ * ```
28
+ */
29
+ export function markdownLinkValidation(options = {}) {
30
+ const resolvedOptions = resolveMarkdownLinkValidationOptions(options);
31
+ if (resolvedOptions === undefined) {
32
+ throw new TypeError("markdownLinkValidation options must match the documented closed policy");
33
+ }
34
+ return defineCheck({
35
+ ...MARKDOWN_LINK_VALIDATION_CHECK_DEFINITION,
36
+ execution: executeMarkdownLinkValidation,
37
+ parseData: parseMarkdownLinkValidationData,
38
+ preflight: (preparedOptions) => validMarkdownLinkValidationOptions(preparedOptions)
39
+ ? { status: "success", preparedOptions }
40
+ : {
41
+ status: "failure",
42
+ action: "block",
43
+ reason: { code: "invalid-options" },
44
+ messages: [
45
+ {
46
+ code: "invalid-options",
47
+ level: "error",
48
+ message: "markdownLinkValidation options are invalid; recreate the Check with markdownLinkValidation(options) or restore its complete resolved options."
49
+ }
50
+ ]
51
+ },
52
+ options: resolvedOptions
53
+ });
54
+ }
55
+ //# sourceMappingURL=default-check.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-check.mjs","sourceRoot":"","sources":["../../../../src/package-checks/markdown-link-validation/default-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA8B,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EACL,yCAAyC,EACzC,6BAA6B,EAC9B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,+BAA+B,EAAE,MAAM,iBAAiB,CAAC;AAKlE,OAAO,EAAE,oCAAoC,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EAAE,kCAAkC,EAAE,MAAM,yBAAyB,CAAC;AAE7E;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,sBAAsB,CACpC,OAAO,GAAkC,EAAE;IAM3C,MAAM,eAAe,GAAG,oCAAoC,CAAC,OAAO,CAAC,CAAC;IACtE,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,IAAI,SAAS,CAAC,wEAAwE,CAAC,CAAC;IAChG,CAAC;IACD,OAAO,WAAW,CAAC;QACjB,GAAG,yCAAyC;QAC5C,SAAS,EAAE,6BAA6B;QACxC,SAAS,EAAE,+BAA+B;QAC1C,SAAS,EAAE,CAAC,eAAe,EAAE,EAAE,CAC7B,kCAAkC,CAAC,eAAe,CAAC;YACjD,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE;YACxC,CAAC,CAAC;gBACE,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,OAAO;gBACf,MAAM,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE;gBACnC,QAAQ,EAAE;oBACR;wBACE,IAAI,EAAE,iBAAiB;wBACvB,KAAK,EAAE,OAAO;wBACd,OAAO,EACL,+IAA+I;qBAClJ;iBACF;aACF;QACP,OAAO,EAAE,eAAe;KACzB,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { defineCheck, type TypedCheckWithOptions } from \"../../check/check.ts\";\nimport {\n MARKDOWN_LINK_VALIDATION_CHECK_DEFINITION,\n executeMarkdownLinkValidation\n} from \"./execution.ts\";\nimport { parseMarkdownLinkValidationData } from \"./final-data.ts\";\nimport type {\n MarkdownLinkValidationOptions,\n ResolvedMarkdownLinkValidationOptions\n} from \"./options.ts\";\nimport { resolveMarkdownLinkValidationOptions } from \"./options-resolution.ts\";\nimport { validMarkdownLinkValidationOptions } from \"./options-validation.ts\";\n\n/**\n * 使用可省略的 source、target 与 work-limit policy 构造离线 Markdown 引用 Check。\n *\n * @param options - 省略字段由 package 补齐;files 数组是完整替换值,limits fields 可分别省略。\n * @returns 固定 `markdown-link-validation` identity、完整冻结 options、parser 与执行逻辑。\n * @throws {TypeError} input 含未知字段、非法 target policy 或非法 work limit 时抛出。\n * @example 离线 Markdown 本地链接完整性\n * ```ts\n * import { defineConfig, markdownLinkValidation, run } from \"@zxyycom/vibe-check\";\n *\n * const definition = defineConfig({\n * checks: [markdownLinkValidation()],\n * outputs: {\n * diagnosticLogging: { enabled: false },\n * machinePublication: { enabled: false },\n * progressRendering: { enabled: false }\n * }\n * });\n *\n * const result = await run(definition);\n * if (result.kind !== \"completed\") throw new Error(`Run did not complete: ${result.kind}`);\n * ```\n */\nexport function markdownLinkValidation(\n options: MarkdownLinkValidationOptions = {}\n): TypedCheckWithOptions<\n \"markdown-link-validation\",\n ResolvedMarkdownLinkValidationOptions,\n typeof parseMarkdownLinkValidationData\n> {\n const resolvedOptions = resolveMarkdownLinkValidationOptions(options);\n if (resolvedOptions === undefined) {\n throw new TypeError(\"markdownLinkValidation options must match the documented closed policy\");\n }\n return defineCheck({\n ...MARKDOWN_LINK_VALIDATION_CHECK_DEFINITION,\n execution: executeMarkdownLinkValidation,\n parseData: parseMarkdownLinkValidationData,\n preflight: (preparedOptions) =>\n validMarkdownLinkValidationOptions(preparedOptions)\n ? { status: \"success\", preparedOptions }\n : {\n status: \"failure\",\n action: \"block\",\n reason: { code: \"invalid-options\" },\n messages: [\n {\n code: \"invalid-options\",\n level: \"error\",\n message:\n \"markdownLinkValidation options are invalid; recreate the Check with markdownLinkValidation(options) or restore its complete resolved options.\"\n }\n ]\n },\n options: resolvedOptions\n });\n}\n"]}