@zxyycom/vibe-check 0.0.1 → 0.0.2

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 (950) hide show
  1. package/README.md +47 -74
  2. package/dist/esm/cache/cache-json-by-key.mjs +189 -0
  3. package/dist/esm/cache/cache-json-by-key.mjs.map +1 -0
  4. package/dist/esm/check/check.mjs.map +1 -1
  5. package/dist/esm/check/finding-presentation.mjs +40 -0
  6. package/dist/esm/check/finding-presentation.mjs.map +1 -0
  7. package/dist/esm/check/inherited-collection.mjs +1 -1
  8. package/dist/esm/check/inherited-collection.mjs.map +1 -1
  9. package/dist/esm/check-settlement/fact-validation.mjs +17 -23
  10. package/dist/esm/check-settlement/fact-validation.mjs.map +1 -1
  11. package/dist/esm/check-settlement/outcome-normalization.mjs +9 -19
  12. package/dist/esm/check-settlement/outcome-normalization.mjs.map +1 -1
  13. package/dist/esm/check-settlement/reason-shape.mjs +12 -0
  14. package/dist/esm/check-settlement/reason-shape.mjs.map +1 -0
  15. package/dist/esm/check-settlement/record-store.mjs +14 -17
  16. package/dist/esm/check-settlement/record-store.mjs.map +1 -1
  17. package/dist/esm/check-settlement/session.mjs +8 -2
  18. package/dist/esm/check-settlement/session.mjs.map +1 -1
  19. package/dist/esm/data-boundary/closed-values.mjs +16 -0
  20. package/dist/esm/data-boundary/closed-values.mjs.map +1 -1
  21. package/dist/esm/data-boundary/value-shapes.mjs +9 -0
  22. package/dist/esm/data-boundary/value-shapes.mjs.map +1 -1
  23. package/dist/esm/index.mjs +9 -2
  24. package/dist/esm/index.mjs.map +1 -1
  25. package/dist/esm/learned-critical-path/duration-model/bounded-history.mjs +56 -0
  26. package/dist/esm/learned-critical-path/duration-model/bounded-history.mjs.map +1 -0
  27. package/dist/esm/learned-critical-path/duration-model/prediction.mjs +122 -0
  28. package/dist/esm/learned-critical-path/duration-model/prediction.mjs.map +1 -0
  29. package/dist/esm/learned-critical-path/duration-model/preparation.mjs +41 -0
  30. package/dist/esm/learned-critical-path/duration-model/preparation.mjs.map +1 -0
  31. package/dist/esm/learned-critical-path/duration-model/recording.mjs +109 -0
  32. package/dist/esm/learned-critical-path/duration-model/recording.mjs.map +1 -0
  33. package/dist/esm/learned-critical-path/duration-model/storage.mjs +187 -0
  34. package/dist/esm/learned-critical-path/duration-model/storage.mjs.map +1 -0
  35. package/dist/esm/learned-critical-path/selection-layers.mjs +28 -0
  36. package/dist/esm/learned-critical-path/selection-layers.mjs.map +1 -0
  37. package/dist/esm/learned-critical-path/static-decision.mjs +55 -0
  38. package/dist/esm/learned-critical-path/static-decision.mjs.map +1 -0
  39. package/dist/esm/learned-critical-path/strategy.mjs +179 -0
  40. package/dist/esm/learned-critical-path/strategy.mjs.map +1 -0
  41. package/dist/esm/machine-output/v4/atomic-publication.mjs +1 -15
  42. package/dist/esm/machine-output/v4/atomic-publication.mjs.map +1 -1
  43. package/dist/esm/package-checks/code-quality-findings/finding-waiver-authoring.mjs +40 -0
  44. package/dist/esm/package-checks/code-quality-findings/finding-waiver-authoring.mjs.map +1 -0
  45. package/dist/esm/package-checks/code-quality-findings/finding-waiver-evidence.mjs +48 -0
  46. package/dist/esm/package-checks/code-quality-findings/finding-waiver-evidence.mjs.map +1 -0
  47. package/dist/esm/package-checks/code-quality-findings/policy.mjs +20 -0
  48. package/dist/esm/package-checks/code-quality-findings/policy.mjs.map +1 -1
  49. package/dist/esm/package-checks/duplicate-detection/area-policy.mjs +15 -7
  50. package/dist/esm/package-checks/duplicate-detection/area-policy.mjs.map +1 -1
  51. package/dist/esm/package-checks/duplicate-detection/cache/identity.mjs +1 -1
  52. package/dist/esm/package-checks/duplicate-detection/cache/identity.mjs.map +1 -1
  53. package/dist/esm/package-checks/duplicate-detection/default-check.mjs +1 -1
  54. package/dist/esm/package-checks/duplicate-detection/default-check.mjs.map +1 -1
  55. package/dist/esm/package-checks/duplicate-detection/execution.mjs +44 -18
  56. package/dist/esm/package-checks/duplicate-detection/execution.mjs.map +1 -1
  57. package/dist/esm/package-checks/duplicate-detection/finding-messages.mjs +59 -0
  58. package/dist/esm/package-checks/duplicate-detection/finding-messages.mjs.map +1 -0
  59. package/dist/esm/package-checks/duplicate-detection/finding-waiver-identity.mjs +55 -0
  60. package/dist/esm/package-checks/duplicate-detection/finding-waiver-identity.mjs.map +1 -0
  61. package/dist/esm/package-checks/duplicate-detection/jscpd/availability.mjs +1 -1
  62. package/dist/esm/package-checks/duplicate-detection/jscpd/availability.mjs.map +1 -1
  63. package/dist/esm/package-checks/duplicate-detection/jscpd/command-resolution.mjs +1 -1
  64. package/dist/esm/package-checks/duplicate-detection/jscpd/command-resolution.mjs.map +1 -1
  65. package/dist/esm/package-checks/duplicate-detection/jscpd/json-report.mjs +15 -5
  66. package/dist/esm/package-checks/duplicate-detection/jscpd/json-report.mjs.map +1 -1
  67. package/dist/esm/package-checks/duplicate-detection/jscpd/scanner.mjs +5 -4
  68. package/dist/esm/package-checks/duplicate-detection/jscpd/scanner.mjs.map +1 -1
  69. package/dist/esm/package-checks/duplicate-detection/options-resolution.mjs +22 -47
  70. package/dist/esm/package-checks/duplicate-detection/options-resolution.mjs.map +1 -1
  71. package/dist/esm/package-checks/duplicate-detection/options-validation.mjs +20 -25
  72. package/dist/esm/package-checks/duplicate-detection/options-validation.mjs.map +1 -1
  73. package/dist/esm/package-checks/duplicate-detection/options.mjs.map +1 -1
  74. package/dist/esm/package-checks/duplicate-detection/records.mjs +27 -6
  75. package/dist/esm/package-checks/duplicate-detection/records.mjs.map +1 -1
  76. package/dist/esm/package-checks/file-metrics/execution.mjs +10 -17
  77. package/dist/esm/package-checks/file-metrics/execution.mjs.map +1 -1
  78. package/dist/esm/package-checks/file-metrics/finding-messages.mjs +22 -0
  79. package/dist/esm/package-checks/file-metrics/finding-messages.mjs.map +1 -0
  80. package/dist/esm/package-checks/file-metrics/options-resolution.mjs +11 -43
  81. package/dist/esm/package-checks/file-metrics/options-resolution.mjs.map +1 -1
  82. package/dist/esm/package-checks/file-metrics/options-validation.mjs +15 -25
  83. package/dist/esm/package-checks/file-metrics/options-validation.mjs.map +1 -1
  84. package/dist/esm/package-checks/file-metrics/records.mjs +2 -9
  85. package/dist/esm/package-checks/file-metrics/records.mjs.map +1 -1
  86. package/dist/esm/package-checks/file-metrics/scc/availability.mjs +1 -1
  87. package/dist/esm/package-checks/file-metrics/scc/availability.mjs.map +1 -1
  88. package/dist/esm/package-checks/file-metrics/scc/parser.mjs +4 -4
  89. package/dist/esm/package-checks/file-metrics/scc/parser.mjs.map +1 -1
  90. package/dist/esm/package-checks/file-metrics/scc/scanner.mjs +2 -2
  91. package/dist/esm/package-checks/file-metrics/scc/scanner.mjs.map +1 -1
  92. package/dist/esm/package-checks/function-metrics/analysis.mjs +56 -15
  93. package/dist/esm/package-checks/function-metrics/analysis.mjs.map +1 -1
  94. package/dist/esm/package-checks/function-metrics/analyzer/analysis-context.mjs +550 -0
  95. package/dist/esm/package-checks/function-metrics/analyzer/analysis-context.mjs.map +1 -0
  96. package/dist/esm/package-checks/function-metrics/analyzer/analysis-model.mjs +332 -0
  97. package/dist/esm/package-checks/function-metrics/analyzer/analysis-model.mjs.map +1 -0
  98. package/dist/esm/package-checks/function-metrics/analyzer/contracts.mjs +7 -0
  99. package/dist/esm/package-checks/function-metrics/analyzer/contracts.mjs.map +1 -0
  100. package/dist/esm/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.mjs +24 -0
  101. package/dist/esm/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.mjs.map +1 -0
  102. package/dist/esm/package-checks/function-metrics/analyzer/extensions/lizardnd.mjs +113 -0
  103. package/dist/esm/package-checks/function-metrics/analyzer/extensions/lizardnd.mjs.map +1 -0
  104. package/dist/esm/package-checks/function-metrics/analyzer/extensions/protocol.mjs +180 -0
  105. package/dist/esm/package-checks/function-metrics/analyzer/extensions/protocol.mjs.map +1 -0
  106. package/dist/esm/package-checks/function-metrics/analyzer/extensions/registry.mjs +121 -0
  107. package/dist/esm/package-checks/function-metrics/analyzer/extensions/registry.mjs.map +1 -0
  108. package/dist/esm/package-checks/function-metrics/analyzer/pipeline.mjs +217 -0
  109. package/dist/esm/package-checks/function-metrics/analyzer/pipeline.mjs.map +1 -0
  110. package/dist/esm/package-checks/function-metrics/analyzer/port-facade.mjs +96 -0
  111. package/dist/esm/package-checks/function-metrics/analyzer/port-facade.mjs.map +1 -0
  112. package/dist/esm/package-checks/function-metrics/analyzer/reader-registry.mjs +76 -0
  113. package/dist/esm/package-checks/function-metrics/analyzer/reader-registry.mjs.map +1 -0
  114. package/dist/esm/package-checks/function-metrics/analyzer/readers/csharp.mjs +88 -0
  115. package/dist/esm/package-checks/function-metrics/analyzer/readers/csharp.mjs.map +1 -0
  116. package/dist/esm/package-checks/function-metrics/analyzer/readers/erlang.mjs +466 -0
  117. package/dist/esm/package-checks/function-metrics/analyzer/readers/erlang.mjs.map +1 -0
  118. package/dist/esm/package-checks/function-metrics/analyzer/readers/fortran.mjs +289 -0
  119. package/dist/esm/package-checks/function-metrics/analyzer/readers/fortran.mjs.map +1 -0
  120. package/dist/esm/package-checks/function-metrics/analyzer/readers/gdscript.mjs +38 -0
  121. package/dist/esm/package-checks/function-metrics/analyzer/readers/gdscript.mjs.map +1 -0
  122. package/dist/esm/package-checks/function-metrics/analyzer/readers/go.mjs +44 -0
  123. package/dist/esm/package-checks/function-metrics/analyzer/readers/go.mjs.map +1 -0
  124. package/dist/esm/package-checks/function-metrics/analyzer/readers/java-body-states.mjs +113 -0
  125. package/dist/esm/package-checks/function-metrics/analyzer/readers/java-body-states.mjs.map +1 -0
  126. package/dist/esm/package-checks/function-metrics/analyzer/readers/java.mjs +247 -0
  127. package/dist/esm/package-checks/function-metrics/analyzer/readers/java.mjs.map +1 -0
  128. package/dist/esm/package-checks/function-metrics/analyzer/readers/javascript.mjs +16 -0
  129. package/dist/esm/package-checks/function-metrics/analyzer/readers/javascript.mjs.map +1 -0
  130. package/dist/esm/package-checks/function-metrics/analyzer/readers/kotlin.mjs +103 -0
  131. package/dist/esm/package-checks/function-metrics/analyzer/readers/kotlin.mjs.map +1 -0
  132. package/dist/esm/package-checks/function-metrics/analyzer/readers/lua.mjs +55 -0
  133. package/dist/esm/package-checks/function-metrics/analyzer/readers/lua.mjs.map +1 -0
  134. package/dist/esm/package-checks/function-metrics/analyzer/readers/objc.mjs +100 -0
  135. package/dist/esm/package-checks/function-metrics/analyzer/readers/objc.mjs.map +1 -0
  136. package/dist/esm/package-checks/function-metrics/analyzer/readers/perl.mjs +367 -0
  137. package/dist/esm/package-checks/function-metrics/analyzer/readers/perl.mjs.map +1 -0
  138. package/dist/esm/package-checks/function-metrics/analyzer/readers/php-states.mjs +260 -0
  139. package/dist/esm/package-checks/function-metrics/analyzer/readers/php-states.mjs.map +1 -0
  140. package/dist/esm/package-checks/function-metrics/analyzer/readers/php.mjs +53 -0
  141. package/dist/esm/package-checks/function-metrics/analyzer/readers/php.mjs.map +1 -0
  142. package/dist/esm/package-checks/function-metrics/analyzer/readers/plsql.mjs +306 -0
  143. package/dist/esm/package-checks/function-metrics/analyzer/readers/plsql.mjs.map +1 -0
  144. package/dist/esm/package-checks/function-metrics/analyzer/readers/python.mjs +402 -0
  145. package/dist/esm/package-checks/function-metrics/analyzer/readers/python.mjs.map +1 -0
  146. package/dist/esm/package-checks/function-metrics/analyzer/readers/r.mjs +214 -0
  147. package/dist/esm/package-checks/function-metrics/analyzer/readers/r.mjs.map +1 -0
  148. package/dist/esm/package-checks/function-metrics/analyzer/readers/ruby.mjs +75 -0
  149. package/dist/esm/package-checks/function-metrics/analyzer/readers/ruby.mjs.map +1 -0
  150. package/dist/esm/package-checks/function-metrics/analyzer/readers/rust.mjs +32 -0
  151. package/dist/esm/package-checks/function-metrics/analyzer/readers/rust.mjs.map +1 -0
  152. package/dist/esm/package-checks/function-metrics/analyzer/readers/scala.mjs +47 -0
  153. package/dist/esm/package-checks/function-metrics/analyzer/readers/scala.mjs.map +1 -0
  154. package/dist/esm/package-checks/function-metrics/analyzer/readers/solidity.mjs +22 -0
  155. package/dist/esm/package-checks/function-metrics/analyzer/readers/solidity.mjs.map +1 -0
  156. package/dist/esm/package-checks/function-metrics/analyzer/readers/st.mjs +142 -0
  157. package/dist/esm/package-checks/function-metrics/analyzer/readers/st.mjs.map +1 -0
  158. package/dist/esm/package-checks/function-metrics/analyzer/readers/swift.mjs +94 -0
  159. package/dist/esm/package-checks/function-metrics/analyzer/readers/swift.mjs.map +1 -0
  160. package/dist/esm/package-checks/function-metrics/analyzer/readers/tsx.mjs +149 -0
  161. package/dist/esm/package-checks/function-metrics/analyzer/readers/tsx.mjs.map +1 -0
  162. package/dist/esm/package-checks/function-metrics/analyzer/readers/ttcn.mjs +79 -0
  163. package/dist/esm/package-checks/function-metrics/analyzer/readers/ttcn.mjs.map +1 -0
  164. package/dist/esm/package-checks/function-metrics/analyzer/readers/typescript.mjs +606 -0
  165. package/dist/esm/package-checks/function-metrics/analyzer/readers/typescript.mjs.map +1 -0
  166. package/dist/esm/package-checks/function-metrics/analyzer/readers/vue.mjs +31 -0
  167. package/dist/esm/package-checks/function-metrics/analyzer/readers/vue.mjs.map +1 -0
  168. package/dist/esm/package-checks/function-metrics/analyzer/readers/zig.mjs +23 -0
  169. package/dist/esm/package-checks/function-metrics/analyzer/readers/zig.mjs.map +1 -0
  170. package/dist/esm/package-checks/function-metrics/analyzer/shared/clike.mjs +492 -0
  171. package/dist/esm/package-checks/function-metrics/analyzer/shared/clike.mjs.map +1 -0
  172. package/dist/esm/package-checks/function-metrics/analyzer/shared/code-reader.mjs +542 -0
  173. package/dist/esm/package-checks/function-metrics/analyzer/shared/code-reader.mjs.map +1 -0
  174. package/dist/esm/package-checks/function-metrics/analyzer/shared/golike.mjs +141 -0
  175. package/dist/esm/package-checks/function-metrics/analyzer/shared/golike.mjs.map +1 -0
  176. package/dist/esm/package-checks/function-metrics/analyzer/shared/js-style-regex.mjs +62 -0
  177. package/dist/esm/package-checks/function-metrics/analyzer/shared/js-style-regex.mjs.map +1 -0
  178. package/dist/esm/package-checks/function-metrics/analyzer/shared/rubylike.mjs +154 -0
  179. package/dist/esm/package-checks/function-metrics/analyzer/shared/rubylike.mjs.map +1 -0
  180. package/dist/esm/package-checks/function-metrics/analyzer/shared/script-language.mjs +36 -0
  181. package/dist/esm/package-checks/function-metrics/analyzer/shared/script-language.mjs.map +1 -0
  182. package/dist/esm/package-checks/function-metrics/analyzer-adapter.mjs +56 -0
  183. package/dist/esm/package-checks/function-metrics/analyzer-adapter.mjs.map +1 -0
  184. package/dist/esm/package-checks/function-metrics/analyzer-worker-contract.mjs +2 -0
  185. package/dist/esm/package-checks/function-metrics/analyzer-worker-contract.mjs.map +1 -0
  186. package/dist/esm/package-checks/function-metrics/analyzer-worker-port.mjs +108 -0
  187. package/dist/esm/package-checks/function-metrics/analyzer-worker-port.mjs.map +1 -0
  188. package/dist/esm/package-checks/function-metrics/analyzer-worker.mjs +24 -0
  189. package/dist/esm/package-checks/function-metrics/analyzer-worker.mjs.map +1 -0
  190. package/dist/esm/package-checks/function-metrics/constructor.mjs +2 -2
  191. package/dist/esm/package-checks/function-metrics/constructor.mjs.map +1 -1
  192. package/dist/esm/package-checks/function-metrics/execution.mjs +51 -33
  193. package/dist/esm/package-checks/function-metrics/execution.mjs.map +1 -1
  194. package/dist/esm/package-checks/function-metrics/finding-messages.mjs +75 -0
  195. package/dist/esm/package-checks/function-metrics/finding-messages.mjs.map +1 -0
  196. package/dist/esm/package-checks/function-metrics/finding-waiver-identity.mjs +28 -0
  197. package/dist/esm/package-checks/function-metrics/finding-waiver-identity.mjs.map +1 -0
  198. package/dist/esm/package-checks/function-metrics/measurement-model.mjs.map +1 -1
  199. package/dist/esm/package-checks/function-metrics/measurement.mjs +161 -26
  200. package/dist/esm/package-checks/function-metrics/measurement.mjs.map +1 -1
  201. package/dist/esm/package-checks/function-metrics/options-resolution.mjs +30 -63
  202. package/dist/esm/package-checks/function-metrics/options-resolution.mjs.map +1 -1
  203. package/dist/esm/package-checks/function-metrics/options-validation.mjs +27 -32
  204. package/dist/esm/package-checks/function-metrics/options-validation.mjs.map +1 -1
  205. package/dist/esm/package-checks/function-metrics/options.mjs.map +1 -1
  206. package/dist/esm/package-checks/function-metrics/records.mjs +31 -1
  207. package/dist/esm/package-checks/function-metrics/records.mjs.map +1 -1
  208. package/dist/esm/package-checks/function-metrics/target-files.mjs +6 -67
  209. package/dist/esm/package-checks/function-metrics/target-files.mjs.map +1 -1
  210. package/dist/esm/package-checks/{file-metrics/scc → host-environment}/csv.mjs +1 -0
  211. package/dist/esm/package-checks/host-environment/csv.mjs.map +1 -0
  212. package/dist/esm/package-checks/host-environment/git.mjs +1 -1
  213. package/dist/esm/package-checks/host-environment/git.mjs.map +1 -1
  214. package/dist/esm/package-checks/host-environment/process.mjs +5 -0
  215. package/dist/esm/package-checks/host-environment/process.mjs.map +1 -0
  216. package/dist/esm/package-checks/json-schema-validation/final-data.mjs.map +1 -1
  217. package/dist/esm/package-checks/json-schema-validation/options-validation.mjs +15 -17
  218. package/dist/esm/package-checks/json-schema-validation/options-validation.mjs.map +1 -1
  219. package/dist/esm/package-checks/json-schema-validation/options.mjs.map +1 -1
  220. package/dist/esm/package-checks/json-validation/final-data.mjs.map +1 -1
  221. package/dist/esm/package-checks/json-validation/options-validation.mjs +4 -10
  222. package/dist/esm/package-checks/json-validation/options-validation.mjs.map +1 -1
  223. package/dist/esm/package-checks/maintenance-reminders/final-data.mjs.map +1 -1
  224. package/dist/esm/package-checks/markdown-link-validation/default-check.mjs +9 -3
  225. package/dist/esm/package-checks/markdown-link-validation/default-check.mjs.map +1 -1
  226. package/dist/esm/package-checks/markdown-link-validation/execution.mjs +27 -24
  227. package/dist/esm/package-checks/markdown-link-validation/execution.mjs.map +1 -1
  228. package/dist/esm/package-checks/markdown-link-validation/filesystem-probes.mjs +82 -53
  229. package/dist/esm/package-checks/markdown-link-validation/filesystem-probes.mjs.map +1 -1
  230. package/dist/esm/package-checks/markdown-link-validation/final-data.mjs.map +1 -1
  231. package/dist/esm/package-checks/markdown-link-validation/finding-messages.mjs +36 -0
  232. package/dist/esm/package-checks/markdown-link-validation/finding-messages.mjs.map +1 -0
  233. package/dist/esm/package-checks/markdown-link-validation/local-resolution.mjs.map +1 -1
  234. package/dist/esm/package-checks/markdown-link-validation/local-resolver.mjs +2 -2
  235. package/dist/esm/package-checks/markdown-link-validation/local-resolver.mjs.map +1 -1
  236. package/dist/esm/package-checks/markdown-link-validation/options-resolution.mjs +26 -4
  237. package/dist/esm/package-checks/markdown-link-validation/options-resolution.mjs.map +1 -1
  238. package/dist/esm/package-checks/markdown-link-validation/options-validation.mjs +24 -11
  239. package/dist/esm/package-checks/markdown-link-validation/options-validation.mjs.map +1 -1
  240. package/dist/esm/package-checks/markdown-link-validation/options.mjs.map +1 -1
  241. package/dist/esm/package-checks/markdown-link-validation/parse-facts-cache-payload.mjs +185 -0
  242. package/dist/esm/package-checks/markdown-link-validation/parse-facts-cache-payload.mjs.map +1 -0
  243. package/dist/esm/package-checks/markdown-link-validation/parse-facts-cache.mjs +131 -0
  244. package/dist/esm/package-checks/markdown-link-validation/parse-facts-cache.mjs.map +1 -0
  245. package/dist/esm/package-checks/markdown-link-validation/resolver-engine.mjs +58 -57
  246. package/dist/esm/package-checks/markdown-link-validation/resolver-engine.mjs.map +1 -1
  247. package/dist/esm/package-checks/markdown-link-validation/source-reader.mjs +54 -0
  248. package/dist/esm/package-checks/markdown-link-validation/source-reader.mjs.map +1 -0
  249. package/dist/esm/package-checks/markdown-link-validation/unavailable-reasons.mjs +16 -0
  250. package/dist/esm/package-checks/markdown-link-validation/unavailable-reasons.mjs.map +1 -0
  251. package/dist/esm/package-checks/project-files/collection.mjs +1 -1
  252. package/dist/esm/package-checks/project-files/collection.mjs.map +1 -1
  253. package/dist/esm/package-checks/project-files/configuration.mjs +2 -10
  254. package/dist/esm/package-checks/project-files/configuration.mjs.map +1 -1
  255. package/dist/esm/package-checks/project-files/gitlink-revision.mjs +1 -1
  256. package/dist/esm/package-checks/project-files/gitlink-revision.mjs.map +1 -1
  257. package/dist/esm/package-checks/project-files/gitlink-worktree.mjs +1 -1
  258. package/dist/esm/package-checks/project-files/gitlink-worktree.mjs.map +1 -1
  259. package/dist/esm/package-checks/project-files/public-collection.mjs +56 -0
  260. package/dist/esm/package-checks/project-files/public-collection.mjs.map +1 -0
  261. package/dist/esm/package-checks/project-files/revision-worktree-files.mjs +1 -1
  262. package/dist/esm/package-checks/project-files/revision-worktree-files.mjs.map +1 -1
  263. package/dist/esm/package-checks/secret-detection/classification.mjs +15 -0
  264. package/dist/esm/package-checks/secret-detection/classification.mjs.map +1 -0
  265. package/dist/esm/package-checks/secret-detection/default-check.mjs +39 -0
  266. package/dist/esm/package-checks/secret-detection/default-check.mjs.map +1 -0
  267. package/dist/esm/package-checks/secret-detection/execution.mjs +172 -0
  268. package/dist/esm/package-checks/secret-detection/execution.mjs.map +1 -0
  269. package/dist/esm/package-checks/secret-detection/final-data.mjs +33 -0
  270. package/dist/esm/package-checks/secret-detection/final-data.mjs.map +1 -0
  271. package/dist/esm/package-checks/secret-detection/finding-waiver-identity.mjs +30 -0
  272. package/dist/esm/package-checks/secret-detection/finding-waiver-identity.mjs.map +1 -0
  273. package/dist/esm/package-checks/secret-detection/input-preparation.mjs +153 -0
  274. package/dist/esm/package-checks/secret-detection/input-preparation.mjs.map +1 -0
  275. package/dist/esm/package-checks/secret-detection/options-resolution.mjs +40 -0
  276. package/dist/esm/package-checks/secret-detection/options-resolution.mjs.map +1 -0
  277. package/dist/esm/package-checks/secret-detection/options-validation.mjs +22 -0
  278. package/dist/esm/package-checks/secret-detection/options-validation.mjs.map +1 -0
  279. package/dist/esm/package-checks/secret-detection/options.mjs +2 -0
  280. package/dist/esm/package-checks/secret-detection/options.mjs.map +1 -0
  281. package/dist/esm/package-checks/secret-detection/records.mjs +31 -0
  282. package/dist/esm/package-checks/secret-detection/records.mjs.map +1 -0
  283. package/dist/esm/package-checks/secret-detection/secretlint/adapter.mjs +85 -0
  284. package/dist/esm/package-checks/secret-detection/secretlint/adapter.mjs.map +1 -0
  285. package/dist/esm/project-definition/check-tree/authoring.mjs +12 -172
  286. package/dist/esm/project-definition/check-tree/authoring.mjs.map +1 -1
  287. package/dist/esm/project-definition/check-tree/check-fields-authoring.mjs +171 -0
  288. package/dist/esm/project-definition/check-tree/check-fields-authoring.mjs.map +1 -0
  289. package/dist/esm/project-definition/check-tree/collection-authoring.mjs +16 -0
  290. package/dist/esm/project-definition/check-tree/collection-authoring.mjs.map +1 -0
  291. package/dist/esm/project-definition/check-tree/materialization.mjs +9 -1
  292. package/dist/esm/project-definition/check-tree/materialization.mjs.map +1 -1
  293. package/dist/esm/project-definition/check-tree/resolution.mjs +45 -13
  294. package/dist/esm/project-definition/check-tree/resolution.mjs.map +1 -1
  295. package/dist/esm/project-definition/check-tree/scheduling-authoring.mjs +73 -0
  296. package/dist/esm/project-definition/check-tree/scheduling-authoring.mjs.map +1 -0
  297. package/dist/esm/project-definition/declarative-snapshot.mjs +73 -0
  298. package/dist/esm/project-definition/declarative-snapshot.mjs.map +1 -0
  299. package/dist/esm/project-definition/output-defaults.mjs +18 -1
  300. package/dist/esm/project-definition/output-defaults.mjs.map +1 -1
  301. package/dist/esm/project-definition/output-validation.mjs +15 -15
  302. package/dist/esm/project-definition/output-validation.mjs.map +1 -1
  303. package/dist/esm/project-definition/progress-rendering-output.mjs +52 -0
  304. package/dist/esm/project-definition/progress-rendering-output.mjs.map +1 -0
  305. package/dist/esm/project-definition/project-definition-validation.mjs +100 -16
  306. package/dist/esm/project-definition/project-definition-validation.mjs.map +1 -1
  307. package/dist/esm/project-definition/project-definition.mjs +52 -47
  308. package/dist/esm/project-definition/project-definition.mjs.map +1 -1
  309. package/dist/esm/project-definition/resource-unit-mapping.mjs +21 -0
  310. package/dist/esm/project-definition/resource-unit-mapping.mjs.map +1 -0
  311. package/dist/esm/project-definition/scheduler-policy.mjs +2 -0
  312. package/dist/esm/project-definition/scheduler-policy.mjs.map +1 -0
  313. package/dist/esm/project-run/admission-strategy-provider/custom-strategy-preparation.mjs +54 -0
  314. package/dist/esm/project-run/admission-strategy-provider/custom-strategy-preparation.mjs.map +1 -0
  315. package/dist/esm/project-run/admission-strategy-provider/prepared-admission-strategy.mjs +2 -0
  316. package/dist/esm/project-run/admission-strategy-provider/prepared-admission-strategy.mjs.map +1 -0
  317. package/dist/esm/project-run/admission-strategy-provider/provider.mjs +23 -0
  318. package/dist/esm/project-run/admission-strategy-provider/provider.mjs.map +1 -0
  319. package/dist/esm/project-run/aggregation.mjs +7 -5
  320. package/dist/esm/project-run/aggregation.mjs.map +1 -1
  321. package/dist/esm/project-run/check-execution/callback.mjs +35 -8
  322. package/dist/esm/project-run/check-execution/callback.mjs.map +1 -1
  323. package/dist/esm/project-run/check-execution/console-capture.mjs +220 -0
  324. package/dist/esm/project-run/check-execution/console-capture.mjs.map +1 -0
  325. package/dist/esm/project-run/check-execution/dependencies.mjs +21 -3
  326. package/dist/esm/project-run/check-execution/dependencies.mjs.map +1 -1
  327. package/dist/esm/project-run/check-execution/execution-finalization.mjs +54 -13
  328. package/dist/esm/project-run/check-execution/execution-finalization.mjs.map +1 -1
  329. package/dist/esm/project-run/check-execution/execution-settlement.mjs +13 -9
  330. package/dist/esm/project-run/check-execution/execution-settlement.mjs.map +1 -1
  331. package/dist/esm/project-run/check-execution/flag-controls.mjs +87 -0
  332. package/dist/esm/project-run/check-execution/flag-controls.mjs.map +1 -0
  333. package/dist/esm/project-run/check-execution/lifecycle.mjs +2 -0
  334. package/dist/esm/project-run/check-execution/lifecycle.mjs.map +1 -0
  335. package/dist/esm/project-run/check-execution/messages.mjs +5 -0
  336. package/dist/esm/project-run/check-execution/messages.mjs.map +1 -1
  337. package/dist/esm/project-run/check-execution/plan.mjs +9 -5
  338. package/dist/esm/project-run/check-execution/plan.mjs.map +1 -1
  339. package/dist/esm/project-run/check-execution/preflight.mjs +18 -32
  340. package/dist/esm/project-run/check-execution/preflight.mjs.map +1 -1
  341. package/dist/esm/project-run/check-execution/resolved-checks.mjs +100 -58
  342. package/dist/esm/project-run/check-execution/resolved-checks.mjs.map +1 -1
  343. package/dist/esm/project-run/check-execution/resolved-execution-result.mjs +2 -0
  344. package/dist/esm/project-run/check-execution/resolved-execution-result.mjs.map +1 -0
  345. package/dist/esm/project-run/{completion.mjs → completion/completion.mjs} +16 -38
  346. package/dist/esm/project-run/completion/completion.mjs.map +1 -0
  347. package/dist/esm/project-run/{machine-publication.mjs → completion/machine-publication.mjs} +1 -1
  348. package/dist/esm/project-run/completion/machine-publication.mjs.map +1 -0
  349. package/dist/esm/project-run/completion/result-resolver.mjs +36 -0
  350. package/dist/esm/project-run/completion/result-resolver.mjs.map +1 -0
  351. package/dist/esm/project-run/controls/contract.mjs.map +1 -1
  352. package/dist/esm/project-run/controls/outputs-override-validation.mjs +67 -47
  353. package/dist/esm/project-run/controls/outputs-override-validation.mjs.map +1 -1
  354. package/dist/esm/project-run/controls/validation-result.mjs.map +1 -1
  355. package/dist/esm/project-run/controls/validation.mjs +75 -11
  356. package/dist/esm/project-run/controls/validation.mjs.map +1 -1
  357. package/dist/esm/project-run/diagnostic-logging/logger.mjs +100 -161
  358. package/dist/esm/project-run/diagnostic-logging/logger.mjs.map +1 -1
  359. package/dist/esm/project-run/diagnostic-logging/observation-rendering.mjs +159 -0
  360. package/dist/esm/project-run/diagnostic-logging/observation-rendering.mjs.map +1 -0
  361. package/dist/esm/project-run/invocation/candidate.mjs +61 -0
  362. package/dist/esm/project-run/invocation/candidate.mjs.map +1 -0
  363. package/dist/esm/project-run/invocation/creation.mjs +79 -0
  364. package/dist/esm/project-run/invocation/creation.mjs.map +1 -0
  365. package/dist/esm/project-run/invocation/paths.mjs +77 -0
  366. package/dist/esm/project-run/invocation/paths.mjs.map +1 -0
  367. package/dist/esm/project-run/invocation/progress.mjs +30 -0
  368. package/dist/esm/project-run/invocation/progress.mjs.map +1 -0
  369. package/dist/esm/project-run/{invocation.mjs → invocation/run.mjs} +78 -92
  370. package/dist/esm/project-run/invocation/run.mjs.map +1 -0
  371. package/dist/esm/project-run/invocation/scheduler.mjs +57 -0
  372. package/dist/esm/project-run/invocation/scheduler.mjs.map +1 -0
  373. package/dist/esm/project-run/{output-configuration.mjs → outputs/configuration.mjs} +3 -2
  374. package/dist/esm/project-run/outputs/configuration.mjs.map +1 -0
  375. package/dist/esm/project-run/outputs/status.mjs +105 -0
  376. package/dist/esm/project-run/outputs/status.mjs.map +1 -0
  377. package/dist/esm/project-run/progress-rendering/presentation.mjs +112 -18
  378. package/dist/esm/project-run/progress-rendering/presentation.mjs.map +1 -1
  379. package/dist/esm/project-run/progress-rendering/renderer-formatting.mjs +108 -19
  380. package/dist/esm/project-run/progress-rendering/renderer-formatting.mjs.map +1 -1
  381. package/dist/esm/project-run/progress-rendering/renderer-lifecycle.mjs +30 -4
  382. package/dist/esm/project-run/progress-rendering/renderer-lifecycle.mjs.map +1 -1
  383. package/dist/esm/project-run/progress-rendering/renderer.mjs +5 -2
  384. package/dist/esm/project-run/progress-rendering/renderer.mjs.map +1 -1
  385. package/dist/esm/project-run/project-context.mjs +1 -1
  386. package/dist/esm/project-run/project-context.mjs.map +1 -1
  387. package/dist/esm/project-run/result.mjs +2 -0
  388. package/dist/esm/project-run/result.mjs.map +1 -1
  389. package/dist/esm/project-run/run.mjs +1 -1
  390. package/dist/esm/project-run/run.mjs.map +1 -1
  391. package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph.mjs +166 -0
  392. package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph.mjs.map +1 -0
  393. package/dist/esm/project-run/task-scheduler/admission-core/core.mjs +163 -0
  394. package/dist/esm/project-run/task-scheduler/admission-core/core.mjs.map +1 -0
  395. package/dist/esm/project-run/task-scheduler/admission-core/input.mjs +119 -0
  396. package/dist/esm/project-run/task-scheduler/admission-core/input.mjs.map +1 -0
  397. package/dist/esm/project-run/task-scheduler/admission-core/projection.mjs +124 -0
  398. package/dist/esm/project-run/task-scheduler/admission-core/projection.mjs.map +1 -0
  399. package/dist/esm/project-run/task-scheduler/admission-core/selection-index.mjs +99 -0
  400. package/dist/esm/project-run/task-scheduler/admission-core/selection-index.mjs.map +1 -0
  401. package/dist/esm/project-run/task-scheduler/admission-core/selection-query.mjs +198 -0
  402. package/dist/esm/project-run/task-scheduler/admission-core/selection-query.mjs.map +1 -0
  403. package/dist/esm/project-run/task-scheduler/admission-core/selection-seed.mjs +151 -0
  404. package/dist/esm/project-run/task-scheduler/admission-core/selection-seed.mjs.map +1 -0
  405. package/dist/esm/project-run/task-scheduler/admission-core/selection-transition.mjs +121 -0
  406. package/dist/esm/project-run/task-scheduler/admission-core/selection-transition.mjs.map +1 -0
  407. package/dist/esm/project-run/task-scheduler/admission-core/selection.mjs +65 -0
  408. package/dist/esm/project-run/task-scheduler/admission-core/selection.mjs.map +1 -0
  409. package/dist/esm/project-run/task-scheduler/admission-scope-layers.mjs +25 -0
  410. package/dist/esm/project-run/task-scheduler/admission-scope-layers.mjs.map +1 -0
  411. package/dist/esm/project-run/task-scheduler/admission-selection-policy.mjs +55 -0
  412. package/dist/esm/project-run/task-scheduler/admission-selection-policy.mjs.map +1 -0
  413. package/dist/esm/project-run/task-scheduler/critical-path-ranking.mjs +46 -0
  414. package/dist/esm/project-run/task-scheduler/critical-path-ranking.mjs.map +1 -0
  415. package/dist/esm/project-run/task-scheduler/custom-admission-policy.mjs +110 -0
  416. package/dist/esm/project-run/task-scheduler/custom-admission-policy.mjs.map +1 -0
  417. package/dist/esm/project-run/task-scheduler/execution-state.mjs +34 -5
  418. package/dist/esm/project-run/task-scheduler/execution-state.mjs.map +1 -1
  419. package/dist/esm/project-run/task-scheduler/forced-block-effect-replay.mjs +46 -0
  420. package/dist/esm/project-run/task-scheduler/forced-block-effect-replay.mjs.map +1 -0
  421. package/dist/esm/project-run/task-scheduler/graph-validation.mjs +54 -26
  422. package/dist/esm/project-run/task-scheduler/graph-validation.mjs.map +1 -1
  423. package/dist/esm/project-run/task-scheduler/graph.mjs +79 -3
  424. package/dist/esm/project-run/task-scheduler/graph.mjs.map +1 -1
  425. package/dist/esm/project-run/task-scheduler/measurement/diagnostics.mjs +207 -0
  426. package/dist/esm/project-run/task-scheduler/measurement/diagnostics.mjs.map +1 -0
  427. package/dist/esm/project-run/task-scheduler/measurement/integrals.mjs +116 -0
  428. package/dist/esm/project-run/task-scheduler/measurement/integrals.mjs.map +1 -0
  429. package/dist/esm/project-run/task-scheduler/measurement/policy.mjs +67 -0
  430. package/dist/esm/project-run/task-scheduler/measurement/policy.mjs.map +1 -0
  431. package/dist/esm/project-run/task-scheduler/measurement/summary.mjs +123 -0
  432. package/dist/esm/project-run/task-scheduler/measurement/summary.mjs.map +1 -0
  433. package/dist/esm/project-run/task-scheduler/measurement/timing.mjs +158 -0
  434. package/dist/esm/project-run/task-scheduler/measurement/timing.mjs.map +1 -0
  435. package/dist/esm/project-run/task-scheduler/scheduler-admission-decision.mjs +90 -62
  436. package/dist/esm/project-run/task-scheduler/scheduler-admission-decision.mjs.map +1 -1
  437. package/dist/esm/project-run/task-scheduler/scheduler-blocker-summary.mjs +20 -6
  438. package/dist/esm/project-run/task-scheduler/scheduler-blocker-summary.mjs.map +1 -1
  439. package/dist/esm/project-run/task-scheduler/scheduler-decision-inspection.mjs +5 -105
  440. package/dist/esm/project-run/task-scheduler/scheduler-decision-inspection.mjs.map +1 -1
  441. package/dist/esm/project-run/task-scheduler/scheduler-decision-model.mjs +0 -9
  442. package/dist/esm/project-run/task-scheduler/scheduler-decision-model.mjs.map +1 -1
  443. package/dist/esm/project-run/task-scheduler/scheduler-decision.mjs +48 -28
  444. package/dist/esm/project-run/task-scheduler/scheduler-decision.mjs.map +1 -1
  445. package/dist/esm/project-run/task-scheduler/scheduler-observation.mjs +89 -0
  446. package/dist/esm/project-run/task-scheduler/scheduler-observation.mjs.map +1 -0
  447. package/dist/esm/project-run/task-scheduler/scheduler-task-lifecycle.mjs +94 -0
  448. package/dist/esm/project-run/task-scheduler/scheduler-task-lifecycle.mjs.map +1 -0
  449. package/dist/esm/project-run/task-scheduler/scheduler-terminal-measurement.mjs +66 -0
  450. package/dist/esm/project-run/task-scheduler/scheduler-terminal-measurement.mjs.map +1 -0
  451. package/dist/esm/project-run/task-scheduler/scheduler.mjs +171 -114
  452. package/dist/esm/project-run/task-scheduler/scheduler.mjs.map +1 -1
  453. package/docs/api-mechanics.md +64 -137
  454. package/docs/changelog.md +157 -0
  455. package/docs/checks/duplicate-detection.md +111 -59
  456. package/docs/checks/file-metrics.md +46 -43
  457. package/docs/checks/function-metrics.md +100 -163
  458. package/docs/checks/json-schema-validation.md +43 -36
  459. package/docs/checks/json-validation.md +38 -25
  460. package/docs/checks/maintenance-reminders.md +41 -29
  461. package/docs/checks/markdown-link-validation.md +82 -54
  462. package/docs/checks/secret-detection.md +129 -0
  463. package/docs/examples/artifacts/mixed-outcomes/definition.ts +5 -5
  464. package/docs/guides/cache-results.md +63 -0
  465. package/docs/guides/callbacks.md +34 -0
  466. package/docs/guides/check-dependencies.md +121 -0
  467. package/docs/guides/collecting-project-files.md +59 -0
  468. package/docs/guides/extending-check-lifecycle.md +112 -0
  469. package/docs/guides/finding-waivers.md +45 -0
  470. package/docs/guides/learned-scheduling.md +83 -0
  471. package/docs/guides/presenting-findings.md +54 -0
  472. package/docs/guides/run-outputs.md +145 -0
  473. package/docs/guides/scheduling.md +208 -0
  474. package/docs/guides/simulating-admission.md +55 -0
  475. package/docs/output.md +11 -20
  476. package/licenses/Lizard-1.24.0-MIT.txt +30 -0
  477. package/{third-party-licenses/momoa-3.3.12-LICENSE → licenses/Lizard-1.24.0-lizard.py-Apache-2.0.txt} +1 -0
  478. package/licenses/Pygments-2.18.0-BSD-2-Clause.txt +25 -0
  479. package/licenses/analyzer-translations-NOTICE.md +24 -0
  480. package/licenses/lizard-1.24.0-provenance.json +957 -0
  481. package/package.json +18 -6
  482. package/src/cache/cache-json-by-key.ts +304 -0
  483. package/src/check/check.ts +67 -17
  484. package/src/check/finding-presentation.ts +67 -0
  485. package/src/check/inherited-collection.ts +1 -1
  486. package/src/check-settlement/fact-validation.ts +29 -39
  487. package/src/check-settlement/outcome-normalization.ts +17 -35
  488. package/src/check-settlement/reason-shape.ts +20 -0
  489. package/src/check-settlement/record-store.ts +18 -15
  490. package/src/check-settlement/session.ts +12 -3
  491. package/src/data-boundary/closed-values.ts +29 -0
  492. package/src/data-boundary/value-shapes.ts +12 -0
  493. package/src/index.ts +70 -2
  494. package/src/learned-critical-path/duration-model/bounded-history.ts +108 -0
  495. package/src/learned-critical-path/duration-model/prediction.ts +181 -0
  496. package/src/learned-critical-path/duration-model/preparation.ts +77 -0
  497. package/src/learned-critical-path/duration-model/recording.ts +208 -0
  498. package/src/learned-critical-path/duration-model/storage.ts +252 -0
  499. package/src/learned-critical-path/selection-layers.ts +72 -0
  500. package/src/learned-critical-path/static-decision.ts +105 -0
  501. package/src/learned-critical-path/strategy.ts +299 -0
  502. package/src/machine-output/v4/atomic-publication.ts +1 -16
  503. package/src/package-checks/code-quality-findings/finding-waiver-authoring.ts +46 -0
  504. package/src/package-checks/code-quality-findings/finding-waiver-evidence.ts +95 -0
  505. package/src/package-checks/code-quality-findings/policy.ts +23 -0
  506. package/src/package-checks/duplicate-detection/area-policy.ts +24 -13
  507. package/src/package-checks/duplicate-detection/cache/identity.ts +1 -1
  508. package/src/package-checks/duplicate-detection/default-check.ts +1 -1
  509. package/src/package-checks/duplicate-detection/execution.ts +82 -22
  510. package/src/package-checks/duplicate-detection/finding-messages.ts +75 -0
  511. package/src/package-checks/duplicate-detection/finding-waiver-identity.ts +68 -0
  512. package/src/package-checks/duplicate-detection/jscpd/availability.ts +1 -1
  513. package/src/package-checks/duplicate-detection/jscpd/command-resolution.ts +1 -1
  514. package/src/package-checks/duplicate-detection/jscpd/json-report.ts +24 -5
  515. package/src/package-checks/duplicate-detection/jscpd/scanner.ts +6 -7
  516. package/src/package-checks/duplicate-detection/options-resolution.ts +32 -57
  517. package/src/package-checks/duplicate-detection/options-validation.ts +23 -31
  518. package/src/package-checks/duplicate-detection/options.ts +21 -1
  519. package/src/package-checks/duplicate-detection/records.ts +65 -12
  520. package/src/package-checks/file-metrics/execution.ts +16 -17
  521. package/src/package-checks/file-metrics/finding-messages.ts +29 -0
  522. package/src/package-checks/file-metrics/options-resolution.ts +19 -52
  523. package/src/package-checks/file-metrics/options-validation.ts +23 -32
  524. package/src/package-checks/file-metrics/records.ts +11 -23
  525. package/src/package-checks/file-metrics/scc/availability.ts +1 -1
  526. package/src/package-checks/file-metrics/scc/parser.ts +4 -4
  527. package/src/package-checks/file-metrics/scc/scanner.ts +2 -2
  528. package/src/package-checks/function-metrics/analysis.ts +76 -21
  529. package/src/package-checks/function-metrics/analyzer/analysis-context.ts +749 -0
  530. package/src/package-checks/function-metrics/analyzer/analysis-model.ts +421 -0
  531. package/src/package-checks/function-metrics/analyzer/contracts.ts +54 -0
  532. package/src/package-checks/function-metrics/analyzer/extension-output.ts +261 -0
  533. package/src/package-checks/function-metrics/analyzer/extensions/extension-base.ts +33 -0
  534. package/src/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.ts +27 -0
  535. package/src/package-checks/function-metrics/analyzer/extensions/lizardnd.ts +144 -0
  536. package/src/package-checks/function-metrics/analyzer/extensions/protocol.ts +345 -0
  537. package/src/package-checks/function-metrics/analyzer/extensions/registry.ts +157 -0
  538. package/src/package-checks/function-metrics/analyzer/pipeline.ts +311 -0
  539. package/src/package-checks/function-metrics/analyzer/port-facade.ts +142 -0
  540. package/src/package-checks/function-metrics/analyzer/reader-registry.ts +84 -0
  541. package/src/package-checks/function-metrics/analyzer/readers/csharp.ts +110 -0
  542. package/src/package-checks/function-metrics/analyzer/readers/erlang.ts +501 -0
  543. package/src/package-checks/function-metrics/analyzer/readers/fortran.ts +294 -0
  544. package/src/package-checks/function-metrics/analyzer/readers/gdscript.ts +42 -0
  545. package/src/package-checks/function-metrics/analyzer/readers/go.ts +53 -0
  546. package/src/package-checks/function-metrics/analyzer/readers/java-body-states.ts +141 -0
  547. package/src/package-checks/function-metrics/analyzer/readers/java.ts +270 -0
  548. package/src/package-checks/function-metrics/analyzer/readers/javascript.ts +19 -0
  549. package/src/package-checks/function-metrics/analyzer/readers/kotlin.ts +120 -0
  550. package/src/package-checks/function-metrics/analyzer/readers/lua.ts +68 -0
  551. package/src/package-checks/function-metrics/analyzer/readers/objc.ts +107 -0
  552. package/src/package-checks/function-metrics/analyzer/readers/perl.ts +340 -0
  553. package/src/package-checks/function-metrics/analyzer/readers/php-states.ts +246 -0
  554. package/src/package-checks/function-metrics/analyzer/readers/php.ts +63 -0
  555. package/src/package-checks/function-metrics/analyzer/readers/plsql.ts +306 -0
  556. package/src/package-checks/function-metrics/analyzer/readers/python.ts +431 -0
  557. package/src/package-checks/function-metrics/analyzer/readers/r.ts +234 -0
  558. package/src/package-checks/function-metrics/analyzer/readers/ruby.ts +88 -0
  559. package/src/package-checks/function-metrics/analyzer/readers/rust.ts +47 -0
  560. package/src/package-checks/function-metrics/analyzer/readers/scala.ts +60 -0
  561. package/src/package-checks/function-metrics/analyzer/readers/solidity.ts +32 -0
  562. package/src/package-checks/function-metrics/analyzer/readers/st.ts +161 -0
  563. package/src/package-checks/function-metrics/analyzer/readers/swift.ts +116 -0
  564. package/src/package-checks/function-metrics/analyzer/readers/tsx.ts +165 -0
  565. package/src/package-checks/function-metrics/analyzer/readers/ttcn.ts +90 -0
  566. package/src/package-checks/function-metrics/analyzer/readers/typescript.ts +593 -0
  567. package/src/package-checks/function-metrics/analyzer/readers/vue.ts +43 -0
  568. package/src/package-checks/function-metrics/analyzer/readers/zig.ts +35 -0
  569. package/src/package-checks/function-metrics/analyzer/shared/clike.ts +541 -0
  570. package/src/package-checks/function-metrics/analyzer/shared/code-reader.ts +682 -0
  571. package/src/package-checks/function-metrics/analyzer/shared/golike.ts +143 -0
  572. package/src/package-checks/function-metrics/analyzer/shared/js-style-regex.ts +75 -0
  573. package/src/package-checks/function-metrics/analyzer/shared/rubylike.ts +161 -0
  574. package/src/package-checks/function-metrics/analyzer/shared/script-language.ts +50 -0
  575. package/src/package-checks/function-metrics/analyzer-adapter.ts +84 -0
  576. package/src/package-checks/function-metrics/analyzer-worker-contract.ts +10 -0
  577. package/src/package-checks/function-metrics/analyzer-worker-port.ts +150 -0
  578. package/src/package-checks/function-metrics/analyzer-worker.ts +31 -0
  579. package/src/package-checks/function-metrics/constructor.ts +2 -2
  580. package/src/package-checks/function-metrics/execution.ts +94 -39
  581. package/src/package-checks/function-metrics/finding-messages.ts +95 -0
  582. package/src/package-checks/function-metrics/finding-waiver-identity.ts +36 -0
  583. package/src/package-checks/function-metrics/measurement-model.ts +15 -1
  584. package/src/package-checks/function-metrics/measurement.ts +221 -36
  585. package/src/package-checks/function-metrics/options-resolution.ts +39 -75
  586. package/src/package-checks/function-metrics/options-validation.ts +30 -39
  587. package/src/package-checks/function-metrics/options.ts +27 -11
  588. package/src/package-checks/function-metrics/records.ts +73 -7
  589. package/src/package-checks/function-metrics/target-files.ts +10 -70
  590. package/src/package-checks/{file-metrics/scc → host-environment}/csv.ts +1 -2
  591. package/src/package-checks/host-environment/git.ts +2 -2
  592. package/src/package-checks/host-environment/process.ts +10 -0
  593. package/src/package-checks/json-schema-validation/final-data.ts +8 -0
  594. package/src/package-checks/json-schema-validation/options-validation.ts +16 -23
  595. package/src/package-checks/json-schema-validation/options.ts +23 -0
  596. package/src/package-checks/json-validation/final-data.ts +5 -0
  597. package/src/package-checks/json-validation/options-validation.ts +4 -18
  598. package/src/package-checks/maintenance-reminders/final-data.ts +18 -0
  599. package/src/package-checks/markdown-link-validation/default-check.ts +9 -3
  600. package/src/package-checks/markdown-link-validation/execution.ts +51 -57
  601. package/src/package-checks/markdown-link-validation/filesystem-probes.ts +108 -51
  602. package/src/package-checks/markdown-link-validation/final-data.ts +5 -0
  603. package/src/package-checks/markdown-link-validation/finding-messages.ts +48 -0
  604. package/src/package-checks/markdown-link-validation/local-resolution.ts +17 -9
  605. package/src/package-checks/markdown-link-validation/local-resolver.ts +5 -2
  606. package/src/package-checks/markdown-link-validation/options-resolution.ts +31 -3
  607. package/src/package-checks/markdown-link-validation/options-validation.ts +27 -19
  608. package/src/package-checks/markdown-link-validation/options.ts +15 -0
  609. package/src/package-checks/markdown-link-validation/parse-facts-cache-payload.ts +246 -0
  610. package/src/package-checks/markdown-link-validation/parse-facts-cache.ts +154 -0
  611. package/src/package-checks/markdown-link-validation/resolver-engine.ts +75 -65
  612. package/src/package-checks/markdown-link-validation/source-reader.ts +86 -0
  613. package/src/package-checks/markdown-link-validation/unavailable-reasons.ts +42 -0
  614. package/src/package-checks/project-files/collection.ts +1 -1
  615. package/src/package-checks/project-files/configuration.ts +3 -14
  616. package/src/package-checks/project-files/gitlink-revision.ts +1 -1
  617. package/src/package-checks/project-files/gitlink-worktree.ts +1 -1
  618. package/src/package-checks/project-files/public-collection.ts +92 -0
  619. package/src/package-checks/project-files/revision-worktree-files.ts +1 -1
  620. package/src/package-checks/secret-detection/classification.ts +30 -0
  621. package/src/package-checks/secret-detection/default-check.ts +50 -0
  622. package/src/package-checks/secret-detection/execution.ts +247 -0
  623. package/src/package-checks/secret-detection/final-data.ts +57 -0
  624. package/src/package-checks/secret-detection/finding-waiver-identity.ts +37 -0
  625. package/src/package-checks/secret-detection/input-preparation.ts +233 -0
  626. package/src/package-checks/secret-detection/options-resolution.ts +65 -0
  627. package/src/package-checks/secret-detection/options-validation.ts +27 -0
  628. package/src/package-checks/secret-detection/options.ts +36 -0
  629. package/src/package-checks/secret-detection/records.ts +77 -0
  630. package/src/package-checks/secret-detection/secretlint/adapter.ts +123 -0
  631. package/src/project-definition/check-tree/authoring.ts +29 -230
  632. package/src/project-definition/check-tree/check-fields-authoring.ts +227 -0
  633. package/src/project-definition/check-tree/collection-authoring.ts +13 -0
  634. package/src/project-definition/check-tree/materialization.ts +9 -1
  635. package/src/project-definition/check-tree/resolution.ts +80 -22
  636. package/src/project-definition/check-tree/scheduling-authoring.ts +114 -0
  637. package/src/project-definition/declarative-snapshot.ts +87 -0
  638. package/src/project-definition/output-defaults.ts +32 -1
  639. package/src/project-definition/output-validation.ts +15 -15
  640. package/src/project-definition/progress-rendering-output.ts +121 -0
  641. package/src/project-definition/project-definition-validation.ts +117 -18
  642. package/src/project-definition/project-definition.ts +198 -61
  643. package/src/project-definition/resource-unit-mapping.ts +25 -0
  644. package/src/project-definition/scheduler-policy.ts +553 -0
  645. package/src/project-run/admission-strategy-provider/custom-strategy-preparation.ts +80 -0
  646. package/src/project-run/admission-strategy-provider/prepared-admission-strategy.ts +27 -0
  647. package/src/project-run/admission-strategy-provider/provider.ts +45 -0
  648. package/src/project-run/aggregation.ts +10 -5
  649. package/src/project-run/check-execution/callback.ts +50 -8
  650. package/src/project-run/check-execution/console-capture.ts +262 -0
  651. package/src/project-run/check-execution/dependencies.ts +43 -6
  652. package/src/project-run/check-execution/execution-finalization.ts +99 -25
  653. package/src/project-run/check-execution/execution-settlement.ts +19 -11
  654. package/src/project-run/check-execution/flag-controls.ts +132 -0
  655. package/src/project-run/check-execution/lifecycle.ts +21 -0
  656. package/src/project-run/check-execution/messages.ts +8 -0
  657. package/src/project-run/check-execution/plan.ts +12 -8
  658. package/src/project-run/check-execution/preflight.ts +23 -43
  659. package/src/project-run/check-execution/resolved-checks.ts +165 -126
  660. package/src/project-run/check-execution/resolved-execution-result.ts +22 -0
  661. package/src/project-run/{completion.ts → completion/completion.ts} +17 -57
  662. package/src/project-run/{machine-publication.ts → completion/machine-publication.ts} +4 -4
  663. package/src/project-run/completion/result-resolver.ts +60 -0
  664. package/src/project-run/controls/contract.ts +25 -2
  665. package/src/project-run/controls/outputs-override-validation.ts +83 -60
  666. package/src/project-run/controls/validation-result.ts +17 -6
  667. package/src/project-run/controls/validation.ts +107 -12
  668. package/src/project-run/diagnostic-logging/logger.ts +132 -207
  669. package/src/project-run/diagnostic-logging/observation-rendering.ts +203 -0
  670. package/src/project-run/invocation/candidate.ts +86 -0
  671. package/src/project-run/invocation/creation.ts +116 -0
  672. package/src/project-run/invocation/paths.ts +154 -0
  673. package/src/project-run/invocation/progress.ts +38 -0
  674. package/src/project-run/{invocation.ts → invocation/run.ts} +125 -120
  675. package/src/project-run/invocation/scheduler.ts +75 -0
  676. package/src/project-run/{output-configuration.ts → outputs/configuration.ts} +6 -5
  677. package/src/project-run/outputs/status.ts +161 -0
  678. package/src/project-run/progress-rendering/presentation.ts +118 -26
  679. package/src/project-run/progress-rendering/renderer-formatting.ts +166 -19
  680. package/src/project-run/progress-rendering/renderer-lifecycle.ts +38 -3
  681. package/src/project-run/progress-rendering/renderer.ts +13 -2
  682. package/src/project-run/project-context.ts +3 -2
  683. package/src/project-run/result.ts +49 -3
  684. package/src/project-run/run.ts +7 -6
  685. package/src/project-run/task-scheduler/admission-core/compiled-graph.ts +316 -0
  686. package/src/project-run/task-scheduler/admission-core/core.ts +278 -0
  687. package/src/project-run/task-scheduler/admission-core/input.ts +138 -0
  688. package/src/project-run/task-scheduler/admission-core/projection.ts +164 -0
  689. package/src/project-run/task-scheduler/admission-core/selection-index.ts +165 -0
  690. package/src/project-run/task-scheduler/admission-core/selection-query.ts +295 -0
  691. package/src/project-run/task-scheduler/admission-core/selection-seed.ts +252 -0
  692. package/src/project-run/task-scheduler/admission-core/selection-transition.ts +236 -0
  693. package/src/project-run/task-scheduler/admission-core/selection.ts +140 -0
  694. package/src/project-run/task-scheduler/admission-core/trace.ts +177 -0
  695. package/src/project-run/task-scheduler/admission-scope-layers.ts +44 -0
  696. package/src/project-run/task-scheduler/admission-selection-policy.ts +116 -0
  697. package/src/project-run/task-scheduler/critical-path-ranking.ts +76 -0
  698. package/src/project-run/task-scheduler/custom-admission-policy.ts +128 -0
  699. package/src/project-run/task-scheduler/execution-state.ts +97 -6
  700. package/src/project-run/task-scheduler/forced-block-effect-replay.ts +68 -0
  701. package/src/project-run/task-scheduler/graph-validation.ts +77 -31
  702. package/src/project-run/task-scheduler/graph.ts +111 -3
  703. package/src/project-run/task-scheduler/measurement/diagnostics.ts +261 -0
  704. package/src/project-run/task-scheduler/measurement/integrals.ts +177 -0
  705. package/src/project-run/task-scheduler/measurement/policy.ts +105 -0
  706. package/src/project-run/task-scheduler/measurement/summary.ts +175 -0
  707. package/src/project-run/task-scheduler/measurement/timing.ts +190 -0
  708. package/src/project-run/task-scheduler/scheduler-admission-decision.ts +143 -134
  709. package/src/project-run/task-scheduler/scheduler-blocker-summary.ts +34 -9
  710. package/src/project-run/task-scheduler/scheduler-decision-inspection.ts +28 -170
  711. package/src/project-run/task-scheduler/scheduler-decision-model.ts +36 -40
  712. package/src/project-run/task-scheduler/scheduler-decision.ts +68 -36
  713. package/src/project-run/task-scheduler/scheduler-observation.ts +124 -0
  714. package/src/project-run/task-scheduler/scheduler-task-lifecycle.ts +150 -0
  715. package/src/project-run/task-scheduler/scheduler-terminal-measurement.ts +95 -0
  716. package/src/project-run/task-scheduler/scheduler.ts +216 -171
  717. package/types/cache/cache-json-by-key.d.ts +53 -0
  718. package/types/check/check.d.ts +62 -17
  719. package/types/check/finding-presentation.d.ts +25 -0
  720. package/types/check/inherited-collection.d.ts +1 -1
  721. package/types/check-settlement/reason-shape.d.ts +5 -0
  722. package/types/check-settlement/record-store.d.ts +2 -2
  723. package/types/check-settlement/session.d.ts +3 -1
  724. package/types/data-boundary/closed-values.d.ts +8 -0
  725. package/types/data-boundary/value-shapes.d.ts +3 -0
  726. package/types/index.d.ts +22 -7
  727. package/types/learned-critical-path/duration-model/bounded-history.d.ts +34 -0
  728. package/types/learned-critical-path/duration-model/prediction.d.ts +32 -0
  729. package/types/learned-critical-path/duration-model/preparation.d.ts +28 -0
  730. package/types/learned-critical-path/duration-model/recording.d.ts +28 -0
  731. package/types/learned-critical-path/duration-model/storage.d.ts +12 -0
  732. package/types/learned-critical-path/selection-layers.d.ts +14 -0
  733. package/types/learned-critical-path/static-decision.d.ts +3 -0
  734. package/types/learned-critical-path/strategy.d.ts +35 -0
  735. package/types/package-checks/code-quality-findings/finding-waiver-authoring.d.ts +7 -0
  736. package/types/package-checks/code-quality-findings/finding-waiver-evidence.d.ts +34 -0
  737. package/types/package-checks/code-quality-findings/policy.d.ts +4 -0
  738. package/types/package-checks/duplicate-detection/area-policy.d.ts +1 -1
  739. package/types/package-checks/duplicate-detection/finding-messages.d.ts +7 -0
  740. package/types/package-checks/duplicate-detection/finding-waiver-identity.d.ts +3 -0
  741. package/types/package-checks/duplicate-detection/jscpd/command-resolution.d.ts +1 -1
  742. package/types/package-checks/duplicate-detection/options.d.ts +18 -1
  743. package/types/package-checks/duplicate-detection/records.d.ts +20 -3
  744. package/types/package-checks/file-metrics/finding-messages.d.ts +4 -0
  745. package/types/package-checks/file-metrics/records.d.ts +5 -10
  746. package/types/package-checks/file-metrics/scc/parser.d.ts +4 -4
  747. package/types/package-checks/function-metrics/analysis.d.ts +1 -1
  748. package/types/package-checks/function-metrics/analyzer/analysis-context.d.ts +174 -0
  749. package/types/package-checks/function-metrics/analyzer/analysis-model.d.ts +135 -0
  750. package/types/package-checks/function-metrics/analyzer/contracts.d.ts +48 -0
  751. package/types/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.d.ts +13 -0
  752. package/types/package-checks/function-metrics/analyzer/extensions/lizardnd.d.ts +28 -0
  753. package/types/package-checks/function-metrics/analyzer/extensions/protocol.d.ts +99 -0
  754. package/types/package-checks/function-metrics/analyzer/extensions/registry.d.ts +34 -0
  755. package/types/package-checks/function-metrics/analyzer/pipeline.d.ts +67 -0
  756. package/types/package-checks/function-metrics/analyzer/port-facade.d.ts +38 -0
  757. package/types/package-checks/function-metrics/analyzer/reader-registry.d.ts +18 -0
  758. package/types/package-checks/function-metrics/analyzer/readers/csharp.d.ts +22 -0
  759. package/types/package-checks/function-metrics/analyzer/readers/erlang.d.ts +22 -0
  760. package/types/package-checks/function-metrics/analyzer/readers/fortran.d.ts +29 -0
  761. package/types/package-checks/function-metrics/analyzer/readers/gdscript.d.ts +18 -0
  762. package/types/package-checks/function-metrics/analyzer/readers/go.d.ts +18 -0
  763. package/types/package-checks/function-metrics/analyzer/readers/java-body-states.d.ts +18 -0
  764. package/types/package-checks/function-metrics/analyzer/readers/java.d.ts +44 -0
  765. package/types/package-checks/function-metrics/analyzer/readers/javascript.d.ts +14 -0
  766. package/types/package-checks/function-metrics/analyzer/readers/kotlin.d.ts +23 -0
  767. package/types/package-checks/function-metrics/analyzer/readers/lua.d.ts +16 -0
  768. package/types/package-checks/function-metrics/analyzer/readers/objc.d.ts +18 -0
  769. package/types/package-checks/function-metrics/analyzer/readers/perl.d.ts +28 -0
  770. package/types/package-checks/function-metrics/analyzer/readers/php-states.d.ts +41 -0
  771. package/types/package-checks/function-metrics/analyzer/readers/php.d.ts +22 -0
  772. package/types/package-checks/function-metrics/analyzer/readers/plsql.d.ts +24 -0
  773. package/types/package-checks/function-metrics/analyzer/readers/python.d.ts +50 -0
  774. package/types/package-checks/function-metrics/analyzer/readers/r.d.ts +22 -0
  775. package/types/package-checks/function-metrics/analyzer/readers/ruby.d.ts +16 -0
  776. package/types/package-checks/function-metrics/analyzer/readers/rust.d.ts +20 -0
  777. package/types/package-checks/function-metrics/analyzer/readers/scala.d.ts +20 -0
  778. package/types/package-checks/function-metrics/analyzer/readers/solidity.d.ts +19 -0
  779. package/types/package-checks/function-metrics/analyzer/readers/st.d.ts +37 -0
  780. package/types/package-checks/function-metrics/analyzer/readers/swift.d.ts +30 -0
  781. package/types/package-checks/function-metrics/analyzer/readers/tsx.d.ts +15 -0
  782. package/types/package-checks/function-metrics/analyzer/readers/ttcn.d.ts +22 -0
  783. package/types/package-checks/function-metrics/analyzer/readers/typescript.d.ts +35 -0
  784. package/types/package-checks/function-metrics/analyzer/readers/vue.d.ts +18 -0
  785. package/types/package-checks/function-metrics/analyzer/readers/zig.d.ts +19 -0
  786. package/types/package-checks/function-metrics/analyzer/shared/clike.d.ts +101 -0
  787. package/types/package-checks/function-metrics/analyzer/shared/code-reader.d.ts +176 -0
  788. package/types/package-checks/function-metrics/analyzer/shared/golike.d.ts +39 -0
  789. package/types/package-checks/function-metrics/analyzer/shared/js-style-regex.d.ts +16 -0
  790. package/types/package-checks/function-metrics/analyzer/shared/rubylike.d.ts +40 -0
  791. package/types/package-checks/function-metrics/analyzer/shared/script-language.d.ts +17 -0
  792. package/types/package-checks/function-metrics/analyzer-adapter.d.ts +26 -0
  793. package/types/package-checks/function-metrics/analyzer-worker-contract.d.ts +5 -0
  794. package/types/package-checks/function-metrics/analyzer-worker-port.d.ts +24 -0
  795. package/types/package-checks/function-metrics/analyzer-worker.d.ts +1 -0
  796. package/types/package-checks/function-metrics/constructor.d.ts +1 -1
  797. package/types/package-checks/function-metrics/execution.d.ts +5 -2
  798. package/types/package-checks/function-metrics/finding-messages.d.ts +9 -0
  799. package/types/package-checks/function-metrics/finding-waiver-identity.d.ts +2 -0
  800. package/types/package-checks/function-metrics/measurement-model.d.ts +13 -1
  801. package/types/package-checks/function-metrics/measurement.d.ts +22 -7
  802. package/types/package-checks/function-metrics/options.d.ts +23 -10
  803. package/types/package-checks/function-metrics/records.d.ts +24 -5
  804. package/types/package-checks/function-metrics/target-files.d.ts +4 -3
  805. package/types/package-checks/host-environment/csv.d.ts +2 -0
  806. package/types/package-checks/host-environment/git.d.ts +1 -1
  807. package/types/package-checks/host-environment/process.d.ts +5 -0
  808. package/types/package-checks/json-schema-validation/final-data.d.ts +8 -0
  809. package/types/package-checks/json-schema-validation/options.d.ts +31 -3
  810. package/types/package-checks/json-validation/final-data.d.ts +5 -0
  811. package/types/package-checks/maintenance-reminders/final-data.d.ts +18 -0
  812. package/types/package-checks/markdown-link-validation/default-check.d.ts +9 -3
  813. package/types/package-checks/markdown-link-validation/execution.d.ts +1 -3
  814. package/types/package-checks/markdown-link-validation/final-data.d.ts +5 -0
  815. package/types/package-checks/markdown-link-validation/finding-messages.d.ts +4 -0
  816. package/types/package-checks/markdown-link-validation/local-resolution.d.ts +12 -6
  817. package/types/package-checks/markdown-link-validation/local-resolver.d.ts +2 -1
  818. package/types/package-checks/markdown-link-validation/options.d.ts +15 -0
  819. package/types/package-checks/markdown-link-validation/parse-facts-cache-payload.d.ts +24 -0
  820. package/types/package-checks/markdown-link-validation/parse-facts-cache.d.ts +13 -0
  821. package/types/package-checks/markdown-link-validation/resolver-engine.d.ts +6 -4
  822. package/types/package-checks/markdown-link-validation/source-reader.d.ts +11 -0
  823. package/types/package-checks/markdown-link-validation/unavailable-reasons.d.ts +4 -0
  824. package/types/package-checks/project-files/public-collection.d.ts +16 -0
  825. package/types/package-checks/secret-detection/classification.d.ts +12 -0
  826. package/types/package-checks/secret-detection/default-check.d.ts +11 -0
  827. package/types/package-checks/secret-detection/execution.d.ts +14 -0
  828. package/types/package-checks/secret-detection/final-data.d.ts +15 -0
  829. package/types/package-checks/secret-detection/finding-waiver-identity.d.ts +5 -0
  830. package/types/package-checks/secret-detection/input-preparation.d.ts +24 -0
  831. package/types/package-checks/secret-detection/options-resolution.d.ts +6 -0
  832. package/types/package-checks/secret-detection/options-validation.d.ts +3 -0
  833. package/types/package-checks/secret-detection/options.d.ts +32 -0
  834. package/types/package-checks/secret-detection/records.d.ts +35 -0
  835. package/types/package-checks/secret-detection/secretlint/adapter.d.ts +28 -0
  836. package/types/project-definition/check-tree/authoring.d.ts +11 -14
  837. package/types/project-definition/check-tree/check-fields-authoring.d.ts +25 -0
  838. package/types/project-definition/check-tree/collection-authoring.d.ts +2 -0
  839. package/types/project-definition/check-tree/resolution.d.ts +8 -3
  840. package/types/project-definition/check-tree/scheduling-authoring.d.ts +19 -0
  841. package/types/project-definition/declarative-snapshot.d.ts +7 -0
  842. package/types/project-definition/output-defaults.d.ts +7 -0
  843. package/types/project-definition/output-validation.d.ts +2 -1
  844. package/types/project-definition/progress-rendering-output.d.ts +41 -0
  845. package/types/project-definition/project-definition.d.ts +61 -16
  846. package/types/project-definition/resource-unit-mapping.d.ts +4 -0
  847. package/types/project-definition/scheduler-policy.d.ts +497 -0
  848. package/types/project-run/admission-strategy-provider/custom-strategy-preparation.d.ts +9 -0
  849. package/types/project-run/admission-strategy-provider/prepared-admission-strategy.d.ts +23 -0
  850. package/types/project-run/admission-strategy-provider/provider.d.ts +13 -0
  851. package/types/project-run/aggregation.d.ts +1 -1
  852. package/types/project-run/check-execution/callback.d.ts +5 -1
  853. package/types/project-run/check-execution/console-capture.d.ts +18 -0
  854. package/types/project-run/check-execution/dependencies.d.ts +1 -1
  855. package/types/project-run/check-execution/execution-finalization.d.ts +17 -7
  856. package/types/project-run/check-execution/execution-settlement.d.ts +5 -2
  857. package/types/project-run/check-execution/flag-controls.d.ts +27 -0
  858. package/types/project-run/check-execution/lifecycle.d.ts +20 -0
  859. package/types/project-run/check-execution/messages.d.ts +2 -0
  860. package/types/project-run/check-execution/plan.d.ts +2 -3
  861. package/types/project-run/check-execution/preflight.d.ts +6 -5
  862. package/types/project-run/check-execution/resolved-checks.d.ts +32 -38
  863. package/types/project-run/check-execution/resolved-execution-result.d.ts +21 -0
  864. package/types/project-run/{completion.d.ts → completion/completion.d.ts} +4 -4
  865. package/types/project-run/{machine-publication.d.ts → completion/machine-publication.d.ts} +3 -3
  866. package/types/project-run/completion/result-resolver.d.ts +4 -0
  867. package/types/project-run/controls/contract.d.ts +25 -2
  868. package/types/project-run/controls/outputs-override-validation.d.ts +2 -1
  869. package/types/project-run/controls/validation-result.d.ts +12 -4
  870. package/types/project-run/diagnostic-logging/logger.d.ts +34 -4
  871. package/types/project-run/diagnostic-logging/observation-rendering.d.ts +7 -0
  872. package/types/project-run/invocation/candidate.d.ts +12 -0
  873. package/types/project-run/{invocation-creation.d.ts → invocation/creation.d.ts} +3 -3
  874. package/types/project-run/invocation/paths.d.ts +40 -0
  875. package/types/project-run/invocation/progress.d.ts +11 -0
  876. package/types/project-run/invocation/run.d.ts +43 -0
  877. package/types/project-run/invocation/scheduler.d.ts +16 -0
  878. package/types/project-run/outputs/configuration.d.ts +3 -0
  879. package/types/project-run/outputs/status.d.ts +48 -0
  880. package/types/project-run/progress-rendering/presentation.d.ts +9 -5
  881. package/types/project-run/progress-rendering/renderer-formatting.d.ts +8 -0
  882. package/types/project-run/progress-rendering/renderer-lifecycle.d.ts +6 -1
  883. package/types/project-run/progress-rendering/renderer.d.ts +7 -1
  884. package/types/project-run/project-context.d.ts +2 -1
  885. package/types/project-run/result.d.ts +37 -3
  886. package/types/project-run/run.d.ts +6 -5
  887. package/types/project-run/task-scheduler/admission-core/compiled-graph.d.ts +31 -0
  888. package/types/project-run/task-scheduler/admission-core/core.d.ts +57 -0
  889. package/types/project-run/task-scheduler/admission-core/input.d.ts +4 -0
  890. package/types/project-run/task-scheduler/admission-core/projection.d.ts +22 -0
  891. package/types/project-run/task-scheduler/admission-core/selection-index.d.ts +61 -0
  892. package/types/project-run/task-scheduler/admission-core/selection-query.d.ts +28 -0
  893. package/types/project-run/task-scheduler/admission-core/selection-seed.d.ts +9 -0
  894. package/types/project-run/task-scheduler/admission-core/selection-transition.d.ts +4 -0
  895. package/types/project-run/task-scheduler/admission-core/selection.d.ts +20 -0
  896. package/types/project-run/task-scheduler/admission-scope-layers.d.ts +8 -0
  897. package/types/project-run/task-scheduler/admission-selection-policy.d.ts +31 -0
  898. package/types/project-run/task-scheduler/critical-path-ranking.d.ts +19 -0
  899. package/types/project-run/task-scheduler/custom-admission-policy.d.ts +6 -0
  900. package/types/project-run/task-scheduler/execution-state.d.ts +43 -1
  901. package/types/project-run/task-scheduler/forced-block-effect-replay.d.ts +9 -0
  902. package/types/project-run/task-scheduler/graph-validation.d.ts +3 -2
  903. package/types/project-run/task-scheduler/graph.d.ts +15 -0
  904. package/types/project-run/task-scheduler/measurement/diagnostics.d.ts +47 -0
  905. package/types/project-run/task-scheduler/measurement/integrals.d.ts +27 -0
  906. package/types/project-run/task-scheduler/measurement/policy.d.ts +10 -0
  907. package/types/project-run/task-scheduler/measurement/summary.d.ts +3 -0
  908. package/types/project-run/task-scheduler/measurement/timing.d.ts +33 -0
  909. package/types/project-run/task-scheduler/scheduler-admission-decision.d.ts +13 -1
  910. package/types/project-run/task-scheduler/scheduler-decision-inspection.d.ts +20 -19
  911. package/types/project-run/task-scheduler/scheduler-decision-model.d.ts +38 -22
  912. package/types/project-run/task-scheduler/scheduler-decision.d.ts +4 -1
  913. package/types/project-run/task-scheduler/scheduler-observation.d.ts +14 -0
  914. package/types/project-run/task-scheduler/scheduler-task-lifecycle.d.ts +18 -0
  915. package/types/project-run/task-scheduler/scheduler-terminal-measurement.d.ts +9 -0
  916. package/dist/esm/package-checks/file-metrics/scc/csv.mjs.map +0 -1
  917. package/dist/esm/package-checks/function-metrics/lizard/availability.mjs +0 -64
  918. package/dist/esm/package-checks/function-metrics/lizard/availability.mjs.map +0 -1
  919. package/dist/esm/package-checks/function-metrics/lizard/csv.mjs +0 -17
  920. package/dist/esm/package-checks/function-metrics/lizard/csv.mjs.map +0 -1
  921. package/dist/esm/package-checks/function-metrics/lizard/parser.mjs +0 -138
  922. package/dist/esm/package-checks/function-metrics/lizard/parser.mjs.map +0 -1
  923. package/dist/esm/package-checks/function-metrics/lizard/scanner.mjs +0 -35
  924. package/dist/esm/package-checks/function-metrics/lizard/scanner.mjs.map +0 -1
  925. package/dist/esm/package-checks/host-environment/process/command.mjs +0 -13
  926. package/dist/esm/package-checks/host-environment/process/command.mjs.map +0 -1
  927. package/dist/esm/project-run/completion.mjs.map +0 -1
  928. package/dist/esm/project-run/invocation-creation.mjs +0 -111
  929. package/dist/esm/project-run/invocation-creation.mjs.map +0 -1
  930. package/dist/esm/project-run/invocation.mjs.map +0 -1
  931. package/dist/esm/project-run/machine-publication.mjs.map +0 -1
  932. package/dist/esm/project-run/output-configuration.mjs.map +0 -1
  933. package/dist/esm/project-run/output-status.mjs +0 -43
  934. package/dist/esm/project-run/output-status.mjs.map +0 -1
  935. package/src/package-checks/function-metrics/lizard/availability.ts +0 -90
  936. package/src/package-checks/function-metrics/lizard/csv.ts +0 -20
  937. package/src/package-checks/function-metrics/lizard/parser.ts +0 -179
  938. package/src/package-checks/function-metrics/lizard/scanner.ts +0 -62
  939. package/src/package-checks/host-environment/process/command.ts +0 -21
  940. package/src/project-run/invocation-creation.ts +0 -160
  941. package/src/project-run/output-status.ts +0 -69
  942. package/types/package-checks/file-metrics/scc/csv.d.ts +0 -1
  943. package/types/package-checks/function-metrics/lizard/availability.d.ts +0 -11
  944. package/types/package-checks/function-metrics/lizard/csv.d.ts +0 -1
  945. package/types/package-checks/function-metrics/lizard/parser.d.ts +0 -17
  946. package/types/package-checks/function-metrics/lizard/scanner.d.ts +0 -15
  947. package/types/package-checks/host-environment/process/command.d.ts +0 -7
  948. package/types/project-run/invocation.d.ts +0 -34
  949. package/types/project-run/output-configuration.d.ts +0 -3
  950. package/types/project-run/output-status.d.ts +0 -21
@@ -1 +1 @@
1
- {"version":3,"file":"configuration.mjs","sourceRoot":"","sources":["../../../../src/package-checks/project-files/configuration.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gCAAgC,EAChC,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,sCAAsC,CAAC;AAE9C,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,cAAc,CAAU,CAAC,CAAC;AAsB3F;;;;;GAKG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAyB,UAAU,CAAC;IAC1E,OAAO,EAAE;QACP,cAAc;QACd,SAAS;QACT,YAAY;QACZ,YAAY;QACZ,qBAAqB;QACrB,YAAY;QACZ,aAAa;QACb,mBAAmB;QACnB,mBAAmB;QACnB,iBAAiB;QACjB,aAAa;QACb,gBAAgB;QAChB,YAAY;QACZ,iBAAiB;QACjB,kBAAkB;QAClB,oBAAoB;QACpB,cAAc;QACd,WAAW;QACX,cAAc;QACd,YAAY;KACb;IACD,OAAO,EAAE,CAAC,MAAM,CAAC;IACjB,MAAM,EAAE,YAAY;CACrB,CAAC,CAAC;AAEH,mEAAmE;AACnE,MAAM,UAAU,2BAA2B,CACzC,KAAc,EACd,QAAQ,GAAyB,2BAA2B;IAE5D,MAAM,SAAS,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC9C,IACE,SAAS,KAAK,SAAS;QACvB,CAAC,gCAAgC,CAAC,SAAS,EAAE;YAC3C,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC;YAC1C,QAAQ,EAAE,EAAE;SACb,CAAC,EACF,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,OAAO,GAAG,kBAAkB,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IACxE,MAAM,OAAO,GAAG,kBAAkB,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IACxE,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC;IACnD,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC;QACnF,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,mCAAmC;IACjD,OAAO,4BAA4B,CAAC,2BAA2B,CAAC,CAAC;AACnE,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,4BAA4B,CAC1C,SAA+B;IAE/B,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QAC9C,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,EAAE,SAAS,CAAC,MAAM;KACzB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,KAAc;IACtD,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;IACvE,OAAO,CACL,SAAS,KAAK,SAAS;QACvB,gBAAgB,CAAC,SAAS,CAAC,OAAO,CAAC;QACnC,gBAAgB,CAAC,SAAS,CAAC,OAAO,CAAC;QACnC,mBAAmB,CAAC,SAAS,CAAC,MAAM,CAAC,CACtC,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc;IACzC,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,kBAAkB,CACzB,KAAc,EACd,QAA2B;IAE3B,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;IAC7D,MAAM,KAAK,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;QAAE,OAAO,SAAS,CAAC;IACpE,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,MAAM,KAAK,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACzC,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC;AACnC,CAAC;AAED,SAAS,WAAW,CAClB,KAAc,EACd,IAAuB;IAEvB,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC3C,OAAO,MAAM,KAAK,SAAS;QACzB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM;QAC1C,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC/C,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,SAAS,UAAU,CAAI,KAAQ;IAC7B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxF,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IAC9D,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC","sourcesContent":["import {\n hasRequiredAndOptionalRecordKeys,\n snapshotClosedArray,\n snapshotClosedRecord\n} from \"../../data-boundary/closed-values.ts\";\n\nexport const PROJECT_FILE_SOURCES = Object.freeze([\"filesystem\", \"git-worktree\"] as const);\n\n/** 文件选择可使用的显式候选来源。 */\nexport type ProjectFileSource = (typeof PROJECT_FILE_SOURCES)[number];\n\n/** 读取项目文件的 Check 所拥有的文件选择输入。 */\nexport interface ProjectFileSelectionOptions {\n /** 候选文件来源;省略时使用 owning Check 的来源默认值,当前随包 Check 均为 `filesystem`。 */\n readonly source?: ProjectFileSource;\n /** 相对项目根目录且使用 `/` 的 glob;省略时使用 owning Check 的 include 默认值,显式数组完整替换。 */\n readonly include?: readonly string[];\n /** 优先于 `include` 的 glob;省略时使用 owning Check 的 exclude 默认值,显式数组完整替换。 */\n readonly exclude?: readonly string[];\n}\n\n/** Check execution 消费的完整项目文件选择。 */\nexport interface ProjectFileSelection {\n readonly exclude: readonly string[];\n readonly include: readonly string[];\n readonly source: ProjectFileSource;\n}\n\n/**\n * Package-provided Checks 共用的通用文件选择基线。\n *\n * 对象与数组均不可变;需要保留默认排除并追加项目规则时,使用对象与数组 spread 建立新值。\n * 个别 Check 会从此 baseline 派生更精准的默认 include;显式组合此 value 仍表示通配全部路径。\n */\nexport const defaultProjectFileSelection: ProjectFileSelection = deepFreeze({\n exclude: [\n \"**/.cache/**\",\n \"**/.git\",\n \"**/.git/**\",\n \"**/.log/**\",\n \"**/.pytest_cache/**\",\n \"**/.tmp/**\",\n \"**/.venv/**\",\n \"**/.vibe-check/**\",\n \"**/__pycache__/**\",\n \"**/artifacts/**\",\n \"**/build/**\",\n \"**/coverage/**\",\n \"**/dist/**\",\n \"**/generated/**\",\n \"**/*.generated.*\",\n \"**/node_modules/**\",\n \"**/target/**\",\n \"**/tmp/**\",\n \"**/vendor/**\",\n \"**/venv/**\"\n ],\n include: [\"**/*\"],\n source: \"filesystem\"\n});\n\n/** 按 owning Check 提供的可信完整 defaults 解析并冻结一份 authoring selection。 */\nexport function resolveProjectFileSelection(\n value: unknown,\n defaults: ProjectFileSelection = defaultProjectFileSelection\n): ProjectFileSelection | undefined {\n const selection = snapshotClosedRecord(value);\n if (\n selection === undefined ||\n !hasRequiredAndOptionalRecordKeys(selection, {\n optional: [\"exclude\", \"include\", \"source\"],\n required: []\n })\n ) {\n return undefined;\n }\n\n const exclude = resolveStringArray(selection.exclude, defaults.exclude);\n const include = resolveStringArray(selection.include, defaults.include);\n const source = selection.source ?? defaults.source;\n if (exclude === undefined || include === undefined || !isProjectFileSource(source)) {\n return undefined;\n }\n\n return Object.freeze({ exclude, include, source });\n}\n\nexport function snapshotDefaultProjectFileSelection(): ProjectFileSelection {\n return snapshotProjectFileSelection(defaultProjectFileSelection);\n}\n\n/** 为 owning Check 对可信的完整 selection 建立 detached、冻结快照。 */\nexport function snapshotProjectFileSelection(\n selection: ProjectFileSelection\n): ProjectFileSelection {\n return Object.freeze({\n exclude: Object.freeze([...selection.exclude]),\n include: Object.freeze([...selection.include]),\n source: selection.source\n });\n}\n\nexport function validProjectFileSelection(value: unknown): value is ProjectFileSelection {\n const selection = exactRecord(value, [\"exclude\", \"include\", \"source\"]);\n return (\n selection !== undefined &&\n validStringArray(selection.exclude) &&\n validStringArray(selection.include) &&\n isProjectFileSource(selection.source)\n );\n}\n\nfunction isProjectFileSource(value: unknown): value is ProjectFileSource {\n return PROJECT_FILE_SOURCES.some((source) => source === value);\n}\n\nfunction resolveStringArray(\n value: unknown,\n fallback: readonly string[]\n): readonly string[] | undefined {\n if (value === undefined) return Object.freeze([...fallback]);\n const items = snapshotClosedArray(value);\n if (items === undefined || !items.every(isString)) return undefined;\n return Object.freeze([...items]);\n}\n\nfunction validStringArray(value: unknown): boolean {\n const items = snapshotClosedArray(value);\n return items !== undefined && items.every(isString);\n}\n\nfunction isString(value: unknown): value is string {\n return typeof value === \"string\";\n}\n\nfunction 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 deepFreeze<T>(value: T): T {\n if (typeof value !== \"object\" || value === null || Object.isFrozen(value)) return value;\n for (const nested of Object.values(value)) deepFreeze(nested);\n return Object.freeze(value);\n}\n"]}
1
+ {"version":3,"file":"configuration.mjs","sourceRoot":"","sources":["../../../../src/package-checks/project-files/configuration.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n hasRequiredAndOptionalRecordKeys,\n snapshotClosedArray,\n snapshotClosedRecord,\n snapshotExactClosedRecord\n} from \"../../data-boundary/closed-values.ts\";\n\nexport const PROJECT_FILE_SOURCES = Object.freeze([\"filesystem\", \"git-worktree\"] as const);\n\n/** 文件选择可使用的显式候选来源。 */\nexport type ProjectFileSource = (typeof PROJECT_FILE_SOURCES)[number];\n\n/** 读取项目文件的 Check 所拥有的文件选择输入。 */\nexport interface ProjectFileSelectionOptions {\n /** 候选文件来源;省略时使用 owning Check 的来源默认值,当前随包 Check 均为 `filesystem`。 */\n readonly source?: ProjectFileSource;\n /** 相对项目根目录且使用 `/` 的 glob;省略时使用 owning Check 的 include 默认值,显式数组完整替换。 */\n readonly include?: readonly string[];\n /** 优先于 `include` 的 glob;省略时使用 owning Check 的 exclude 默认值,显式数组完整替换。 */\n readonly exclude?: readonly string[];\n}\n\n/** Check execution 消费的完整项目文件选择。 */\nexport interface ProjectFileSelection {\n readonly exclude: readonly string[];\n readonly include: readonly string[];\n readonly source: ProjectFileSource;\n}\n\n/**\n * Package-provided Checks 共用的通用文件选择基线。\n *\n * 对象与数组均不可变;需要保留默认排除并追加项目规则时,使用对象与数组 spread 建立新值。\n * 个别 Check 会从此 baseline 派生更精准的默认 include;显式组合此 value 仍表示通配全部路径。\n */\nexport const defaultProjectFileSelection: ProjectFileSelection = deepFreeze({\n exclude: [\n \"**/.cache/**\",\n \"**/.git\",\n \"**/.git/**\",\n \"**/.log/**\",\n \"**/.pytest_cache/**\",\n \"**/.tmp/**\",\n \"**/.venv/**\",\n \"**/.vibe-check/**\",\n \"**/__pycache__/**\",\n \"**/artifacts/**\",\n \"**/build/**\",\n \"**/coverage/**\",\n \"**/dist/**\",\n \"**/generated/**\",\n \"**/*.generated.*\",\n \"**/node_modules/**\",\n \"**/target/**\",\n \"**/tmp/**\",\n \"**/vendor/**\",\n \"**/venv/**\"\n ],\n include: [\"**/*\"],\n source: \"filesystem\"\n});\n\n/** 按 owning Check 提供的可信完整 defaults 解析并冻结一份 authoring selection。 */\nexport function resolveProjectFileSelection(\n value: unknown,\n defaults: ProjectFileSelection = defaultProjectFileSelection\n): ProjectFileSelection | undefined {\n const selection = snapshotClosedRecord(value);\n if (\n selection === undefined ||\n !hasRequiredAndOptionalRecordKeys(selection, {\n optional: [\"exclude\", \"include\", \"source\"],\n required: []\n })\n ) {\n return undefined;\n }\n\n const exclude = resolveStringArray(selection.exclude, defaults.exclude);\n const include = resolveStringArray(selection.include, defaults.include);\n const source = selection.source ?? defaults.source;\n if (exclude === undefined || include === undefined || !isProjectFileSource(source)) {\n return undefined;\n }\n\n return Object.freeze({ exclude, include, source });\n}\n\nexport function snapshotDefaultProjectFileSelection(): ProjectFileSelection {\n return snapshotProjectFileSelection(defaultProjectFileSelection);\n}\n\n/** 为 owning Check 对可信的完整 selection 建立 detached、冻结快照。 */\nexport function snapshotProjectFileSelection(\n selection: ProjectFileSelection\n): ProjectFileSelection {\n return Object.freeze({\n exclude: Object.freeze([...selection.exclude]),\n include: Object.freeze([...selection.include]),\n source: selection.source\n });\n}\n\nexport function validProjectFileSelection(value: unknown): value is ProjectFileSelection {\n const selection = snapshotExactClosedRecord(value, [\"exclude\", \"include\", \"source\"]);\n return (\n selection !== undefined &&\n validStringArray(selection.exclude) &&\n validStringArray(selection.include) &&\n isProjectFileSource(selection.source)\n );\n}\n\nfunction isProjectFileSource(value: unknown): value is ProjectFileSource {\n return PROJECT_FILE_SOURCES.some((source) => source === value);\n}\n\nfunction resolveStringArray(\n value: unknown,\n fallback: readonly string[]\n): readonly string[] | undefined {\n if (value === undefined) return Object.freeze([...fallback]);\n const items = snapshotClosedArray(value);\n if (items === undefined || !items.every(isString)) return undefined;\n return Object.freeze([...items]);\n}\n\nfunction validStringArray(value: unknown): boolean {\n const items = snapshotClosedArray(value);\n return items !== undefined && items.every(isString);\n}\n\nfunction isString(value: unknown): value is string {\n return typeof value === \"string\";\n}\n\nfunction deepFreeze<T>(value: T): T {\n if (typeof value !== \"object\" || value === null || Object.isFrozen(value)) return value;\n for (const nested of Object.values(value)) deepFreeze(nested);\n return Object.freeze(value);\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  /** Reads canonical gitlink entries from a named Git tree revision. */
2
- import { processFailed } from "../host-environment/process/command.mjs";
2
+ import { processFailed } from "../host-environment/process.mjs";
3
3
  import { runGit } from "../host-environment/git.mjs";
4
4
  import { toSlashPath } from "../host-environment/path.mjs";
5
5
  export function gitlinksAtRevision({ repository, revision }) {
@@ -1 +1 @@
1
- {"version":3,"file":"gitlink-revision.mjs","sourceRoot":"","sources":["../../../../src/package-checks/project-files/gitlink-revision.ts"],"names":[],"mappings":"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","sourcesContent":["/** Reads canonical gitlink entries from a named Git tree revision. */\n\nimport { processFailed } from \"../host-environment/process/command.ts\";\nimport { runGit } from \"../host-environment/git.ts\";\nimport { toSlashPath } from \"../host-environment/path.ts\";\n\nexport type Gitlink = Readonly<{\n readonly path: string;\n readonly sha: string;\n}>;\n\nexport function gitlinksAtRevision({\n repository,\n revision\n}: Readonly<{\n readonly repository: string;\n readonly revision: string;\n}>): readonly Gitlink[] {\n const result = runGit({\n args: [\"ls-tree\", \"-r\", \"-z\", revision],\n cwd: repository\n });\n if (processFailed(result)) {\n const detail =\n result.stderr.trim() ||\n result.error?.message ||\n (result.signal === null ? `exit status ${result.status}` : `signal ${result.signal}`);\n throw new Error(`could not inspect gitlinks at ${revision} in ${repository}: ${detail}`);\n }\n\n const gitlinks: Gitlink[] = [];\n for (const entry of result.stdout.split(\"\\0\")) {\n if (!entry) continue;\n const gitlink = parseGitlinkEntry({ entry, repository, revision });\n if (gitlink !== null) gitlinks.push(gitlink);\n }\n return Object.freeze(gitlinks);\n}\n\nfunction parseGitlinkEntry({\n entry,\n repository,\n revision\n}: Readonly<{\n readonly entry: string;\n readonly repository: string;\n readonly revision: string;\n}>): Gitlink | null {\n const parsed = gitTreeEntryParts(entry);\n if (parsed === undefined) throw invalidTreeOutput(revision, repository);\n const [mode, type, sha] = parsed.metadata;\n if (!validGitTreeMetadata(mode, type, sha)) throw invalidTreeOutput(revision, repository);\n if (mode !== \"160000\") return null;\n if (type !== \"commit\") {\n throw new Error(`invalid gitlink output at ${revision} in ${repository}`);\n }\n return Object.freeze({ path: toSlashPath(parsed.path), sha });\n}\n\nfunction gitTreeEntryParts(entry: string): { metadata: string[]; path: string } | undefined {\n const separator = entry.indexOf(\"\\t\");\n if (separator < 0) return undefined;\n const metadata = entry.slice(0, separator).split(/\\s+/u);\n const path = entry.slice(separator + 1);\n return metadata.length === 3 && path.length > 0 ? { metadata, path } : undefined;\n}\n\nfunction validGitTreeMetadata(\n mode: string | undefined,\n type: string | undefined,\n sha: string | undefined\n): sha is string {\n return mode !== undefined && type !== undefined && sha !== undefined && isFullGitObjectId(sha);\n}\n\nfunction invalidTreeOutput(revision: string, repository: string): Error {\n return new Error(`invalid git tree output at ${revision} in ${repository}`);\n}\n\nfunction isFullGitObjectId(value: string): boolean {\n return /^(?:[0-9a-f]{40}|[0-9a-f]{64})$/u.test(value);\n}\n"]}
1
+ {"version":3,"file":"gitlink-revision.mjs","sourceRoot":"","sources":["../../../../src/package-checks/project-files/gitlink-revision.ts"],"names":[],"mappings":"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","sourcesContent":["/** Reads canonical gitlink entries from a named Git tree revision. */\n\nimport { processFailed } from \"../host-environment/process.ts\";\nimport { runGit } from \"../host-environment/git.ts\";\nimport { toSlashPath } from \"../host-environment/path.ts\";\n\nexport type Gitlink = Readonly<{\n readonly path: string;\n readonly sha: string;\n}>;\n\nexport function gitlinksAtRevision({\n repository,\n revision\n}: Readonly<{\n readonly repository: string;\n readonly revision: string;\n}>): readonly Gitlink[] {\n const result = runGit({\n args: [\"ls-tree\", \"-r\", \"-z\", revision],\n cwd: repository\n });\n if (processFailed(result)) {\n const detail =\n result.stderr.trim() ||\n result.error?.message ||\n (result.signal === null ? `exit status ${result.status}` : `signal ${result.signal}`);\n throw new Error(`could not inspect gitlinks at ${revision} in ${repository}: ${detail}`);\n }\n\n const gitlinks: Gitlink[] = [];\n for (const entry of result.stdout.split(\"\\0\")) {\n if (!entry) continue;\n const gitlink = parseGitlinkEntry({ entry, repository, revision });\n if (gitlink !== null) gitlinks.push(gitlink);\n }\n return Object.freeze(gitlinks);\n}\n\nfunction parseGitlinkEntry({\n entry,\n repository,\n revision\n}: Readonly<{\n readonly entry: string;\n readonly repository: string;\n readonly revision: string;\n}>): Gitlink | null {\n const parsed = gitTreeEntryParts(entry);\n if (parsed === undefined) throw invalidTreeOutput(revision, repository);\n const [mode, type, sha] = parsed.metadata;\n if (!validGitTreeMetadata(mode, type, sha)) throw invalidTreeOutput(revision, repository);\n if (mode !== \"160000\") return null;\n if (type !== \"commit\") {\n throw new Error(`invalid gitlink output at ${revision} in ${repository}`);\n }\n return Object.freeze({ path: toSlashPath(parsed.path), sha });\n}\n\nfunction gitTreeEntryParts(entry: string): { metadata: string[]; path: string } | undefined {\n const separator = entry.indexOf(\"\\t\");\n if (separator < 0) return undefined;\n const metadata = entry.slice(0, separator).split(/\\s+/u);\n const path = entry.slice(separator + 1);\n return metadata.length === 3 && path.length > 0 ? { metadata, path } : undefined;\n}\n\nfunction validGitTreeMetadata(\n mode: string | undefined,\n type: string | undefined,\n sha: string | undefined\n): sha is string {\n return mode !== undefined && type !== undefined && sha !== undefined && isFullGitObjectId(sha);\n}\n\nfunction invalidTreeOutput(revision: string, repository: string): Error {\n return new Error(`invalid git tree output at ${revision} in ${repository}`);\n}\n\nfunction isFullGitObjectId(value: string): boolean {\n return /^(?:[0-9a-f]{40}|[0-9a-f]{64})$/u.test(value);\n}\n"]}
@@ -2,7 +2,7 @@
2
2
  import { realpathSync, statSync } from "node:fs";
3
3
  import { resolve } from "node:path";
4
4
  import { errorMessage } from "../host-environment/error-message.mjs";
5
- import { processFailed } from "../host-environment/process/command.mjs";
5
+ import { processFailed } from "../host-environment/process.mjs";
6
6
  import { runGit } from "../host-environment/git.mjs";
7
7
  export function canonicalRepositoryPath(repository) {
8
8
  return realpathSync(resolve(repository));
@@ -1 +1 @@
1
- {"version":3,"file":"gitlink-worktree.mjs","sourceRoot":"","sources":["../../../../src/package-checks/project-files/gitlink-worktree.ts"],"names":[],"mappings":"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","sourcesContent":["/** Canonical Git worktree checks for gitlink traversal. */\n\nimport { realpathSync, statSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\n\nimport { errorMessage } from \"../host-environment/error-message.ts\";\nimport { processFailed } from \"../host-environment/process/command.ts\";\nimport { runGit } from \"../host-environment/git.ts\";\n\nexport type GitlinkWorktreeInspection =\n | { readonly kind: \"initialized\"; readonly repository: string }\n | { readonly kind: \"inspection-failed\"; readonly error: string }\n | { readonly kind: \"missing\" }\n | { readonly kind: \"not-independent\" };\n\nexport function canonicalRepositoryPath(repository: string): string {\n return realpathSync(resolve(repository));\n}\n\nexport function inspectGitlinkWorktree({\n gitlinkPath,\n repository\n}: Readonly<{\n readonly gitlinkPath: string;\n readonly repository: string;\n}>): GitlinkWorktreeInspection {\n const submoduleRepository = resolve(repository, gitlinkPath);\n let canonicalSubmoduleRepository: string;\n try {\n if (!statSync(submoduleRepository).isDirectory()) return { kind: \"missing\" };\n canonicalSubmoduleRepository = canonicalRepositoryPath(submoduleRepository);\n } catch (error: unknown) {\n return missingPath(error)\n ? { kind: \"missing\" }\n : inspectionFailure(`could not inspect submodule worktree ${gitlinkPath}`, error);\n }\n\n const topLevelResult = runGit({\n args: [\"rev-parse\", \"--show-toplevel\"],\n cwd: canonicalSubmoduleRepository\n });\n if (processFailed(topLevelResult)) {\n const topLevelFailureDetail =\n topLevelResult.error?.message ||\n topLevelResult.stderr.trim() ||\n `exit ${topLevelResult.status}`;\n return {\n kind: \"inspection-failed\",\n error: `git rev-parse --show-toplevel failed while inspecting submodule ${gitlinkPath}: ${topLevelFailureDetail}`\n };\n }\n\n const topLevel = topLevelResult.stdout.trim();\n if (!topLevel) {\n return {\n kind: \"inspection-failed\",\n error: `git rev-parse --show-toplevel returned no repository path for submodule ${gitlinkPath}`\n };\n }\n\n try {\n return canonicalRepositoryPath(resolve(canonicalSubmoduleRepository, topLevel)) ===\n canonicalSubmoduleRepository\n ? { kind: \"initialized\", repository: canonicalSubmoduleRepository }\n : { kind: \"not-independent\" };\n } catch (error: unknown) {\n return inspectionFailure(`could not resolve Git top-level for submodule ${gitlinkPath}`, error);\n }\n}\n\nexport function resolveDescendableGitlinkRepository({\n gitlinkPath,\n repository,\n visitedRepositories\n}: Readonly<{\n readonly gitlinkPath: string;\n readonly repository: string;\n readonly visitedRepositories: ReadonlySet<string>;\n}>): string | null {\n const inspection = inspectGitlinkWorktree({ gitlinkPath, repository });\n if (inspection.kind === \"inspection-failed\") {\n throw new Error(inspection.error);\n }\n return inspection.kind === \"initialized\" && !visitedRepositories.has(inspection.repository)\n ? inspection.repository\n : null;\n}\n\nexport function visitRepository({\n repository,\n visitedRepositories\n}: Readonly<{\n readonly repository: string;\n readonly visitedRepositories: ReadonlySet<string>;\n}>): ReadonlySet<string> {\n return new Set([...visitedRepositories, repository]);\n}\n\nfunction missingPath(error: unknown): boolean {\n const code = error instanceof Error && \"code\" in error ? error.code : undefined;\n return code === \"ENOENT\" || code === \"ENOTDIR\";\n}\n\nfunction inspectionFailure(message: string, error: unknown): GitlinkWorktreeInspection {\n return { kind: \"inspection-failed\", error: `${message}: ${errorMessage(error)}` };\n}\n"]}
1
+ {"version":3,"file":"gitlink-worktree.mjs","sourceRoot":"","sources":["../../../../src/package-checks/project-files/gitlink-worktree.ts"],"names":[],"mappings":"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","sourcesContent":["/** Canonical Git worktree checks for gitlink traversal. */\n\nimport { realpathSync, statSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\n\nimport { errorMessage } from \"../host-environment/error-message.ts\";\nimport { processFailed } from \"../host-environment/process.ts\";\nimport { runGit } from \"../host-environment/git.ts\";\n\nexport type GitlinkWorktreeInspection =\n | { readonly kind: \"initialized\"; readonly repository: string }\n | { readonly kind: \"inspection-failed\"; readonly error: string }\n | { readonly kind: \"missing\" }\n | { readonly kind: \"not-independent\" };\n\nexport function canonicalRepositoryPath(repository: string): string {\n return realpathSync(resolve(repository));\n}\n\nexport function inspectGitlinkWorktree({\n gitlinkPath,\n repository\n}: Readonly<{\n readonly gitlinkPath: string;\n readonly repository: string;\n}>): GitlinkWorktreeInspection {\n const submoduleRepository = resolve(repository, gitlinkPath);\n let canonicalSubmoduleRepository: string;\n try {\n if (!statSync(submoduleRepository).isDirectory()) return { kind: \"missing\" };\n canonicalSubmoduleRepository = canonicalRepositoryPath(submoduleRepository);\n } catch (error: unknown) {\n return missingPath(error)\n ? { kind: \"missing\" }\n : inspectionFailure(`could not inspect submodule worktree ${gitlinkPath}`, error);\n }\n\n const topLevelResult = runGit({\n args: [\"rev-parse\", \"--show-toplevel\"],\n cwd: canonicalSubmoduleRepository\n });\n if (processFailed(topLevelResult)) {\n const topLevelFailureDetail =\n topLevelResult.error?.message ||\n topLevelResult.stderr.trim() ||\n `exit ${topLevelResult.status}`;\n return {\n kind: \"inspection-failed\",\n error: `git rev-parse --show-toplevel failed while inspecting submodule ${gitlinkPath}: ${topLevelFailureDetail}`\n };\n }\n\n const topLevel = topLevelResult.stdout.trim();\n if (!topLevel) {\n return {\n kind: \"inspection-failed\",\n error: `git rev-parse --show-toplevel returned no repository path for submodule ${gitlinkPath}`\n };\n }\n\n try {\n return canonicalRepositoryPath(resolve(canonicalSubmoduleRepository, topLevel)) ===\n canonicalSubmoduleRepository\n ? { kind: \"initialized\", repository: canonicalSubmoduleRepository }\n : { kind: \"not-independent\" };\n } catch (error: unknown) {\n return inspectionFailure(`could not resolve Git top-level for submodule ${gitlinkPath}`, error);\n }\n}\n\nexport function resolveDescendableGitlinkRepository({\n gitlinkPath,\n repository,\n visitedRepositories\n}: Readonly<{\n readonly gitlinkPath: string;\n readonly repository: string;\n readonly visitedRepositories: ReadonlySet<string>;\n}>): string | null {\n const inspection = inspectGitlinkWorktree({ gitlinkPath, repository });\n if (inspection.kind === \"inspection-failed\") {\n throw new Error(inspection.error);\n }\n return inspection.kind === \"initialized\" && !visitedRepositories.has(inspection.repository)\n ? inspection.repository\n : null;\n}\n\nexport function visitRepository({\n repository,\n visitedRepositories\n}: Readonly<{\n readonly repository: string;\n readonly visitedRepositories: ReadonlySet<string>;\n}>): ReadonlySet<string> {\n return new Set([...visitedRepositories, repository]);\n}\n\nfunction missingPath(error: unknown): boolean {\n const code = error instanceof Error && \"code\" in error ? error.code : undefined;\n return code === \"ENOENT\" || code === \"ENOTDIR\";\n}\n\nfunction inspectionFailure(message: string, error: unknown): GitlinkWorktreeInspection {\n return { kind: \"inspection-failed\", error: `${message}: ${errorMessage(error)}` };\n}\n"]}
@@ -0,0 +1,56 @@
1
+ /** Public validation and immutable snapshot boundary for one project-file selection. */
2
+ import { resolve } from "node:path";
3
+ import { snapshotClosedArray, snapshotExactClosedRecord } from "../../data-boundary/closed-values.mjs";
4
+ import { collectProjectFiles as collectTrustedProjectFiles } from "./collection.mjs";
5
+ import { PROJECT_FILE_SOURCES } from "./configuration.mjs";
6
+ /**
7
+ * 按一份完整的显式 selection 同步收集 project-root-relative slash paths。
8
+ *
9
+ * 成功结果是冻结的稳定去重排序快照,空数组表示没有匹配路径。非法参数同步抛出
10
+ * `TypeError`;选定 filesystem 或 Git source 的收集失败继续抛出普通 `Error`,不会回退来源。
11
+ */
12
+ export function collectProjectFiles(authoredOptions) {
13
+ const options = parseOptions(authoredOptions);
14
+ return Object.freeze([...collectTrustedProjectFiles(options.projectRoot, options.selection)]);
15
+ }
16
+ function parseOptions(value) {
17
+ const options = snapshotExactClosedRecord(value, ["projectRoot", "selection"]);
18
+ if (options === undefined) {
19
+ throw new TypeError("collectProjectFiles requires an options record with exactly projectRoot and selection");
20
+ }
21
+ const projectRoot = parseProjectRoot(options.projectRoot);
22
+ if (projectRoot === undefined) {
23
+ throw new TypeError("collectProjectFiles projectRoot must be a non-empty string without U+0000");
24
+ }
25
+ const selection = parseSelection(options.selection);
26
+ if (selection === undefined) {
27
+ throw new TypeError("collectProjectFiles selection must be a complete record with source, include, and exclude");
28
+ }
29
+ return Object.freeze({ projectRoot, selection });
30
+ }
31
+ function parseProjectRoot(value) {
32
+ return typeof value === "string" && value.length > 0 && !value.includes("\0")
33
+ ? resolve(value)
34
+ : undefined;
35
+ }
36
+ function parseSelection(value) {
37
+ const selection = snapshotExactClosedRecord(value, ["source", "include", "exclude"]);
38
+ if (selection === undefined)
39
+ return undefined;
40
+ const include = snapshotStringArray(selection.include);
41
+ const exclude = snapshotStringArray(selection.exclude);
42
+ if (include === undefined || exclude === undefined || !isProjectFileSource(selection.source)) {
43
+ return undefined;
44
+ }
45
+ return Object.freeze({ exclude, include, source: selection.source });
46
+ }
47
+ function snapshotStringArray(value) {
48
+ const items = snapshotClosedArray(value);
49
+ return items !== undefined && items.every((item) => typeof item === "string")
50
+ ? Object.freeze([...items])
51
+ : undefined;
52
+ }
53
+ function isProjectFileSource(value) {
54
+ return PROJECT_FILE_SOURCES.some((source) => source === value);
55
+ }
56
+ //# sourceMappingURL=public-collection.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public-collection.mjs","sourceRoot":"","sources":["../../../../src/package-checks/project-files/public-collection.ts"],"names":[],"mappings":"AAAA,wFAAwF;AAExF,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EAC1B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,mBAAmB,IAAI,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AACpF,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAgB1D;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,eAA2C;IAE3C,MAAM,OAAO,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC;IAC9C,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,0BAA0B,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAChG,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,MAAM,OAAO,GAAG,yBAAyB,CAAC,KAAK,EAAE,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC;IAC/E,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,SAAS,CACjB,uFAAuF,CACxF,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,gBAAgB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1D,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,IAAI,SAAS,CACjB,2EAA2E,CAC5E,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACpD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,MAAM,IAAI,SAAS,CACjB,2FAA2F,CAC5F,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC3E,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;QAChB,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,MAAM,SAAS,GAAG,yBAAyB,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;IACrF,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAE9C,MAAM,OAAO,GAAG,mBAAmB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,mBAAmB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACvD,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7F,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc;IACzC,MAAM,KAAK,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACzC,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC;QAC3F,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;QAC3B,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc;IACzC,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC;AACjE,CAAC","sourcesContent":["/** Public validation and immutable snapshot boundary for one project-file selection. */\n\nimport { resolve } from \"node:path\";\n\nimport {\n snapshotClosedArray,\n snapshotExactClosedRecord\n} from \"../../data-boundary/closed-values.ts\";\nimport { collectProjectFiles as collectTrustedProjectFiles } from \"./collection.ts\";\nimport { PROJECT_FILE_SOURCES } from \"./configuration.ts\";\nimport type { ProjectFileSelection, ProjectFileSource } from \"./configuration.ts\";\n\n/** 调用方请求一次项目文件收集时必须完整提供的 root 与 selection。 */\nexport interface CollectProjectFilesOptions {\n /** 显式 project root;relative path 相对当前工作目录解析,不能为空或含 U+0000。 */\n readonly projectRoot: string;\n /** 完整的显式 selection;本工具不推断任何 Check 默认值。 */\n readonly selection: ProjectFileSelection;\n}\n\ntype ResolvedCollectProjectFilesOptions = Readonly<{\n readonly projectRoot: string;\n readonly selection: ProjectFileSelection;\n}>;\n\n/**\n * 按一份完整的显式 selection 同步收集 project-root-relative slash paths。\n *\n * 成功结果是冻结的稳定去重排序快照,空数组表示没有匹配路径。非法参数同步抛出\n * `TypeError`;选定 filesystem 或 Git source 的收集失败继续抛出普通 `Error`,不会回退来源。\n */\nexport function collectProjectFiles(\n authoredOptions: CollectProjectFilesOptions\n): readonly string[] {\n const options = parseOptions(authoredOptions);\n return Object.freeze([...collectTrustedProjectFiles(options.projectRoot, options.selection)]);\n}\n\nfunction parseOptions(value: unknown): ResolvedCollectProjectFilesOptions {\n const options = snapshotExactClosedRecord(value, [\"projectRoot\", \"selection\"]);\n if (options === undefined) {\n throw new TypeError(\n \"collectProjectFiles requires an options record with exactly projectRoot and selection\"\n );\n }\n\n const projectRoot = parseProjectRoot(options.projectRoot);\n if (projectRoot === undefined) {\n throw new TypeError(\n \"collectProjectFiles projectRoot must be a non-empty string without U+0000\"\n );\n }\n\n const selection = parseSelection(options.selection);\n if (selection === undefined) {\n throw new TypeError(\n \"collectProjectFiles selection must be a complete record with source, include, and exclude\"\n );\n }\n\n return Object.freeze({ projectRoot, selection });\n}\n\nfunction parseProjectRoot(value: unknown): string | undefined {\n return typeof value === \"string\" && value.length > 0 && !value.includes(\"\\0\")\n ? resolve(value)\n : undefined;\n}\n\nfunction parseSelection(value: unknown): ProjectFileSelection | undefined {\n const selection = snapshotExactClosedRecord(value, [\"source\", \"include\", \"exclude\"]);\n if (selection === undefined) return undefined;\n\n const include = snapshotStringArray(selection.include);\n const exclude = snapshotStringArray(selection.exclude);\n if (include === undefined || exclude === undefined || !isProjectFileSource(selection.source)) {\n return undefined;\n }\n\n return Object.freeze({ exclude, include, source: selection.source });\n}\n\nfunction snapshotStringArray(value: unknown): readonly string[] | undefined {\n const items = snapshotClosedArray(value);\n return items !== undefined && items.every((item): item is string => typeof item === \"string\")\n ? Object.freeze([...items])\n : undefined;\n}\n\nfunction isProjectFileSource(value: unknown): value is ProjectFileSource {\n return PROJECT_FILE_SOURCES.some((source) => source === value);\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  /** Enumerates files from initialized, non-cyclic submodule working trees. */
2
- import { processFailed } from "../host-environment/process/command.mjs";
2
+ import { processFailed } from "../host-environment/process.mjs";
3
3
  import { runGit, splitNulDelimitedGitFileList } from "../host-environment/git.mjs";
4
4
  import { canonicalRepositoryPath, resolveDescendableGitlinkRepository, visitRepository } from "./gitlink-worktree.mjs";
5
5
  import { gitlinksAtRevision } from "./gitlink-revision.mjs";
@@ -1 +1 @@
1
- {"version":3,"file":"revision-worktree-files.mjs","sourceRoot":"","sources":["../../../../src/package-checks/project-files/revision-worktree-files.ts"],"names":[],"mappings":"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","sourcesContent":["/** Enumerates files from initialized, non-cyclic submodule working trees. */\n\nimport { processFailed } from \"../host-environment/process/command.ts\";\nimport { runGit, splitNulDelimitedGitFileList } from \"../host-environment/git.ts\";\nimport {\n canonicalRepositoryPath,\n resolveDescendableGitlinkRepository,\n visitRepository\n} from \"./gitlink-worktree.ts\";\nimport { gitlinksAtRevision } from \"./gitlink-revision.ts\";\nimport {\n joinSlash,\n nonEmptyGitOutput,\n prefixAndFilter,\n uniqueSortedPaths\n} from \"./revision-paths.ts\";\n\nexport function collectSubmoduleWorktreeFiles({\n repository,\n scanInputPaths\n}: Readonly<{\n readonly repository: string;\n readonly scanInputPaths: readonly string[];\n}>): string[] {\n const files: string[] = [];\n const visitedRepositories = new Set([canonicalRepositoryPath(repository)]);\n const revision = worktreeRevision(repository);\n if (revision === null) return files;\n\n for (const gitlink of gitlinksAtRevision({ repository, revision })) {\n const submoduleRepository = resolveDescendableGitlinkRepository({\n gitlinkPath: gitlink.path,\n repository,\n visitedRepositories\n });\n if (!submoduleRepository) continue;\n files.push(\n ...collectWorktreeFiles({\n prefix: gitlink.path,\n repository: submoduleRepository,\n scanInputPaths,\n visitedRepositories: visitRepository({\n repository: submoduleRepository,\n visitedRepositories\n })\n })\n );\n }\n return uniqueSortedPaths(files);\n}\n\nfunction collectWorktreeFiles({\n prefix,\n repository,\n scanInputPaths,\n visitedRepositories\n}: Readonly<{\n readonly prefix: string;\n readonly repository: string;\n readonly scanInputPaths: readonly string[];\n readonly visitedRepositories: ReadonlySet<string>;\n}>): string[] {\n const result = runGit({\n args: [\"ls-files\", \"-z\", \"--cached\", \"--others\", \"--exclude-standard\", \"--\"],\n cwd: repository\n });\n if (processFailed(result)) {\n const detail =\n result.stderr.trim() ||\n result.error?.message ||\n (result.signal === null ? `exit status ${result.status}` : `signal ${result.signal}`);\n throw new Error(`could not enumerate git-worktree files in ${repository}: ${detail}`);\n }\n\n const files = prefixAndFilter({\n files: splitNulDelimitedGitFileList(result.stdout),\n prefix,\n scanInputPaths\n });\n const revision = worktreeRevision(repository);\n if (revision === null) return uniqueSortedPaths(files);\n files.push(\n ...collectNestedWorktreeFiles({\n prefix,\n repository,\n revision,\n scanInputPaths,\n visitedRepositories\n })\n );\n return uniqueSortedPaths(files);\n}\n\nfunction collectNestedWorktreeFiles({\n prefix,\n repository,\n revision,\n scanInputPaths,\n visitedRepositories\n}: Readonly<{\n readonly prefix: string;\n readonly repository: string;\n readonly revision: string;\n readonly scanInputPaths: readonly string[];\n readonly visitedRepositories: ReadonlySet<string>;\n}>): string[] {\n const files: string[] = [];\n for (const gitlink of gitlinksAtRevision({ repository, revision })) {\n const submoduleRepository = resolveDescendableGitlinkRepository({\n gitlinkPath: gitlink.path,\n repository,\n visitedRepositories\n });\n if (!submoduleRepository) continue;\n files.push(\n ...collectWorktreeFiles({\n prefix: joinSlash({ path: gitlink.path, prefix }),\n repository: submoduleRepository,\n scanInputPaths,\n visitedRepositories: visitRepository({\n repository: submoduleRepository,\n visitedRepositories\n })\n })\n );\n }\n return files;\n}\n\nfunction worktreeRevision(repository: string): string | null {\n const result = runGit({ args: [\"rev-parse\", \"--verify\", \"--quiet\", \"HEAD\"], cwd: repository });\n if (!processFailed(result)) {\n const revision = nonEmptyGitOutput(result.stdout);\n if (revision !== null) return revision;\n throw new Error(`git-worktree revision inspection returned no revision in ${repository}`);\n }\n const headDoesNotExist =\n result.error === undefined &&\n result.signal === null &&\n result.status === 1 &&\n result.stderr.trim() === \"\";\n if (headDoesNotExist) return null;\n const detail =\n result.stderr.trim() ||\n result.error?.message ||\n (result.signal === null ? `exit status ${result.status}` : `signal ${result.signal}`);\n throw new Error(`could not inspect git-worktree revision in ${repository}: ${detail}`);\n}\n"]}
1
+ {"version":3,"file":"revision-worktree-files.mjs","sourceRoot":"","sources":["../../../../src/package-checks/project-files/revision-worktree-files.ts"],"names":[],"mappings":"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","sourcesContent":["/** Enumerates files from initialized, non-cyclic submodule working trees. */\n\nimport { processFailed } from \"../host-environment/process.ts\";\nimport { runGit, splitNulDelimitedGitFileList } from \"../host-environment/git.ts\";\nimport {\n canonicalRepositoryPath,\n resolveDescendableGitlinkRepository,\n visitRepository\n} from \"./gitlink-worktree.ts\";\nimport { gitlinksAtRevision } from \"./gitlink-revision.ts\";\nimport {\n joinSlash,\n nonEmptyGitOutput,\n prefixAndFilter,\n uniqueSortedPaths\n} from \"./revision-paths.ts\";\n\nexport function collectSubmoduleWorktreeFiles({\n repository,\n scanInputPaths\n}: Readonly<{\n readonly repository: string;\n readonly scanInputPaths: readonly string[];\n}>): string[] {\n const files: string[] = [];\n const visitedRepositories = new Set([canonicalRepositoryPath(repository)]);\n const revision = worktreeRevision(repository);\n if (revision === null) return files;\n\n for (const gitlink of gitlinksAtRevision({ repository, revision })) {\n const submoduleRepository = resolveDescendableGitlinkRepository({\n gitlinkPath: gitlink.path,\n repository,\n visitedRepositories\n });\n if (!submoduleRepository) continue;\n files.push(\n ...collectWorktreeFiles({\n prefix: gitlink.path,\n repository: submoduleRepository,\n scanInputPaths,\n visitedRepositories: visitRepository({\n repository: submoduleRepository,\n visitedRepositories\n })\n })\n );\n }\n return uniqueSortedPaths(files);\n}\n\nfunction collectWorktreeFiles({\n prefix,\n repository,\n scanInputPaths,\n visitedRepositories\n}: Readonly<{\n readonly prefix: string;\n readonly repository: string;\n readonly scanInputPaths: readonly string[];\n readonly visitedRepositories: ReadonlySet<string>;\n}>): string[] {\n const result = runGit({\n args: [\"ls-files\", \"-z\", \"--cached\", \"--others\", \"--exclude-standard\", \"--\"],\n cwd: repository\n });\n if (processFailed(result)) {\n const detail =\n result.stderr.trim() ||\n result.error?.message ||\n (result.signal === null ? `exit status ${result.status}` : `signal ${result.signal}`);\n throw new Error(`could not enumerate git-worktree files in ${repository}: ${detail}`);\n }\n\n const files = prefixAndFilter({\n files: splitNulDelimitedGitFileList(result.stdout),\n prefix,\n scanInputPaths\n });\n const revision = worktreeRevision(repository);\n if (revision === null) return uniqueSortedPaths(files);\n files.push(\n ...collectNestedWorktreeFiles({\n prefix,\n repository,\n revision,\n scanInputPaths,\n visitedRepositories\n })\n );\n return uniqueSortedPaths(files);\n}\n\nfunction collectNestedWorktreeFiles({\n prefix,\n repository,\n revision,\n scanInputPaths,\n visitedRepositories\n}: Readonly<{\n readonly prefix: string;\n readonly repository: string;\n readonly revision: string;\n readonly scanInputPaths: readonly string[];\n readonly visitedRepositories: ReadonlySet<string>;\n}>): string[] {\n const files: string[] = [];\n for (const gitlink of gitlinksAtRevision({ repository, revision })) {\n const submoduleRepository = resolveDescendableGitlinkRepository({\n gitlinkPath: gitlink.path,\n repository,\n visitedRepositories\n });\n if (!submoduleRepository) continue;\n files.push(\n ...collectWorktreeFiles({\n prefix: joinSlash({ path: gitlink.path, prefix }),\n repository: submoduleRepository,\n scanInputPaths,\n visitedRepositories: visitRepository({\n repository: submoduleRepository,\n visitedRepositories\n })\n })\n );\n }\n return files;\n}\n\nfunction worktreeRevision(repository: string): string | null {\n const result = runGit({ args: [\"rev-parse\", \"--verify\", \"--quiet\", \"HEAD\"], cwd: repository });\n if (!processFailed(result)) {\n const revision = nonEmptyGitOutput(result.stdout);\n if (revision !== null) return revision;\n throw new Error(`git-worktree revision inspection returned no revision in ${repository}`);\n }\n const headDoesNotExist =\n result.error === undefined &&\n result.signal === null &&\n result.status === 1 &&\n result.stderr.trim() === \"\";\n if (headDoesNotExist) return null;\n const detail =\n result.stderr.trim() ||\n result.error?.message ||\n (result.signal === null ? `exit status ${result.status}` : `signal ${result.signal}`);\n throw new Error(`could not inspect git-worktree revision in ${repository}: ${detail}`);\n}\n"]}
@@ -0,0 +1,15 @@
1
+ const UTF8_DECODER = new TextDecoder("utf-8", { fatal: true });
2
+ /** Classifies already-read bytes without retaining or publishing their content on non-text branches. */
3
+ export function classifySecretDetectionBytes(bytes, maximumFileBytes) {
4
+ if (bytes.byteLength > maximumFileBytes)
5
+ return Object.freeze({ kind: "coverage-gap", reason: "file-byte-limit" });
6
+ if (bytes.includes(0))
7
+ return Object.freeze({ kind: "coverage-gap", reason: "contains-nul" });
8
+ try {
9
+ return Object.freeze({ content: UTF8_DECODER.decode(bytes), kind: "text" });
10
+ }
11
+ catch {
12
+ return Object.freeze({ kind: "coverage-gap", reason: "invalid-utf8" });
13
+ }
14
+ }
15
+ //# sourceMappingURL=classification.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classification.mjs","sourceRoot":"","sources":["../../../../src/package-checks/secret-detection/classification.ts"],"names":[],"mappings":"AAcA,MAAM,YAAY,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAE/D,wGAAwG;AACxG,MAAM,UAAU,4BAA4B,CAC1C,KAAiB,EACjB,gBAAwB;IAExB,IAAI,KAAK,CAAC,UAAU,GAAG,gBAAgB;QACrC,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAC5E,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;IAC9F,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;IACzE,CAAC;AACH,CAAC","sourcesContent":["/** A bounded, non-secret classification result for one explicitly selected file. */\nexport type SecretDetectionInputClassification = Readonly<\n | { readonly kind: \"coverage-gap\"; readonly reason: SecretDetectionCoverageGapReason }\n | { readonly content: string; readonly kind: \"text\" }\n>;\n\n/** Deterministic reasons why an explicitly selected file did not receive detector coverage. */\nexport type SecretDetectionCoverageGapReason =\n | \"contains-nul\"\n | \"file-count-limit\"\n | \"file-byte-limit\"\n | \"invalid-utf8\"\n | \"total-byte-limit\";\n\nconst UTF8_DECODER = new TextDecoder(\"utf-8\", { fatal: true });\n\n/** Classifies already-read bytes without retaining or publishing their content on non-text branches. */\nexport function classifySecretDetectionBytes(\n bytes: Uint8Array,\n maximumFileBytes: number\n): SecretDetectionInputClassification {\n if (bytes.byteLength > maximumFileBytes)\n return Object.freeze({ kind: \"coverage-gap\", reason: \"file-byte-limit\" });\n if (bytes.includes(0)) return Object.freeze({ kind: \"coverage-gap\", reason: \"contains-nul\" });\n try {\n return Object.freeze({ content: UTF8_DECODER.decode(bytes), kind: \"text\" });\n } catch {\n return Object.freeze({ kind: \"coverage-gap\", reason: \"invalid-utf8\" });\n }\n}\n"]}
@@ -0,0 +1,39 @@
1
+ import { defineCheck } from "../../check/check.mjs";
2
+ import { executeSecretDetection, SECRET_DETECTION_CHECK_DEFINITION } from "./execution.mjs";
3
+ import { parseSecretDetectionData } from "./final-data.mjs";
4
+ import { resolveSecretDetectionOptions } from "./options-resolution.mjs";
5
+ import { validSecretDetectionOptions } from "./options-validation.mjs";
6
+ /**
7
+ * 构造只检查其必填、显式 `files` policy 所选择输入的 high-confidence secret Check。
8
+ *
9
+ * @param options - 必须声明完整 `files`;limits 和 finding waivers 使用本 Check 的固定安全策略。
10
+ * @returns 固定 `secret-detection` identity、完整冻结 options、final-data parser 与 execution。
11
+ * @throws {TypeError} files 缺失、策略不完整或输入含未知字段时抛出。
12
+ */
13
+ export function secretDetection(options) {
14
+ const resolvedOptions = resolveSecretDetectionOptions(options);
15
+ if (resolvedOptions === undefined) {
16
+ throw new TypeError("secretDetection options must declare the documented closed explicit file policy");
17
+ }
18
+ return defineCheck({
19
+ ...SECRET_DETECTION_CHECK_DEFINITION,
20
+ execution: executeSecretDetection,
21
+ parseData: parseSecretDetectionData,
22
+ preflight: (preparedOptions) => validSecretDetectionOptions(preparedOptions)
23
+ ? { status: "success", preparedOptions }
24
+ : {
25
+ status: "failure",
26
+ action: "block",
27
+ reason: { code: "invalid-options" },
28
+ messages: [
29
+ {
30
+ code: "invalid-options",
31
+ level: "error",
32
+ message: "secretDetection options are invalid; recreate the Check with secretDetection({ files }) or restore its complete resolved options."
33
+ }
34
+ ]
35
+ },
36
+ options: resolvedOptions
37
+ });
38
+ }
39
+ //# sourceMappingURL=default-check.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-check.mjs","sourceRoot":"","sources":["../../../../src/package-checks/secret-detection/default-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA8B,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,sBAAsB,EAAE,iCAAiC,EAAE,MAAM,gBAAgB,CAAC;AAC3F,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,OAAO,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAEtE;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,OAA+B;IAM/B,MAAM,eAAe,GAAG,6BAA6B,CAAC,OAAO,CAAC,CAAC;IAC/D,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,IAAI,SAAS,CACjB,iFAAiF,CAClF,CAAC;IACJ,CAAC;IACD,OAAO,WAAW,CAAC;QACjB,GAAG,iCAAiC;QACpC,SAAS,EAAE,sBAAsB;QACjC,SAAS,EAAE,wBAAwB;QACnC,SAAS,EAAE,CAAC,eAAe,EAAE,EAAE,CAC7B,2BAA2B,CAAC,eAAe,CAAC;YAC1C,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,mIAAmI;qBACtI;iBACF;aACF;QACP,OAAO,EAAE,eAAe;KACzB,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { defineCheck, type TypedCheckWithOptions } from \"../../check/check.ts\";\nimport { executeSecretDetection, SECRET_DETECTION_CHECK_DEFINITION } from \"./execution.ts\";\nimport { parseSecretDetectionData } from \"./final-data.ts\";\nimport type { ResolvedSecretDetectionOptions, SecretDetectionOptions } from \"./options.ts\";\nimport { resolveSecretDetectionOptions } from \"./options-resolution.ts\";\nimport { validSecretDetectionOptions } from \"./options-validation.ts\";\n\n/**\n * 构造只检查其必填、显式 `files` policy 所选择输入的 high-confidence secret Check。\n *\n * @param options - 必须声明完整 `files`;limits 和 finding waivers 使用本 Check 的固定安全策略。\n * @returns 固定 `secret-detection` identity、完整冻结 options、final-data parser 与 execution。\n * @throws {TypeError} files 缺失、策略不完整或输入含未知字段时抛出。\n */\nexport function secretDetection(\n options: SecretDetectionOptions\n): TypedCheckWithOptions<\n \"secret-detection\",\n ResolvedSecretDetectionOptions,\n typeof parseSecretDetectionData\n> {\n const resolvedOptions = resolveSecretDetectionOptions(options);\n if (resolvedOptions === undefined) {\n throw new TypeError(\n \"secretDetection options must declare the documented closed explicit file policy\"\n );\n }\n return defineCheck({\n ...SECRET_DETECTION_CHECK_DEFINITION,\n execution: executeSecretDetection,\n parseData: parseSecretDetectionData,\n preflight: (preparedOptions) =>\n validSecretDetectionOptions(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 \"secretDetection options are invalid; recreate the Check with secretDetection({ files }) or restore its complete resolved options.\"\n }\n ]\n },\n options: resolvedOptions\n });\n}\n"]}
@@ -0,0 +1,172 @@
1
+ import { appendCheckMessages } from "../../check/finding-presentation.mjs";
2
+ import { reconcileFindingWaivers } from "../../finding-waivers/reconciliation.mjs";
3
+ import { reportFindingWaiverAudits } from "../code-quality-findings/finding-waiver-evidence.mjs";
4
+ import { collectProjectFiles } from "../project-files/collection.mjs";
5
+ import { prepareSecretDetectionInputs } from "./input-preparation.mjs";
6
+ import { secretCoverageGapRecordId, secretDetectionWaiverAuditRecord, secretFindingIdentity, secretFindingRecordId } from "./records.mjs";
7
+ import { detectSecretlintIssues } from "./secretlint/adapter.mjs";
8
+ import { validSecretDetectionOptions } from "./options-validation.mjs";
9
+ export const SECRET_DETECTION_CHECK_DEFINITION = {
10
+ checkId: "secret-detection",
11
+ displayName: "Secret detection"
12
+ };
13
+ /** Executes the fixed in-process detector only for this Check's exact explicit input selection. */
14
+ export async function executeSecretDetection(context) {
15
+ if (!validSecretDetectionOptions(context.options))
16
+ return unavailable("invalid-options");
17
+ if (context.signal.aborted)
18
+ return unavailable("execution-cancelled");
19
+ let selectedPaths;
20
+ try {
21
+ selectedPaths = collectProjectFiles(context.project.root, context.options.files);
22
+ }
23
+ catch {
24
+ return unavailable("scan-input-unavailable");
25
+ }
26
+ if (context.signal.aborted)
27
+ return unavailable("execution-cancelled");
28
+ if (selectedPaths.length === 0)
29
+ return settleSecretDetectionFindings(context, selectedPaths.length, [], []);
30
+ const prepared = prepareSecretDetectionInputs(context, selectedPaths);
31
+ if (prepared.kind === "unavailable")
32
+ return unavailable("source-unavailable");
33
+ if (prepared.kind === "cancelled")
34
+ return unavailable("execution-cancelled");
35
+ const detected = await detectApprovedInputs(context, prepared.inputs);
36
+ if (detected.kind === "unavailable")
37
+ return unavailable(detected.code);
38
+ return settleSecretDetectionFindings(context, selectedPaths.length, detected.issues, prepared.coverageGaps);
39
+ }
40
+ async function detectApprovedInputs(context, inputs) {
41
+ const issues = [];
42
+ for (const input of inputs) {
43
+ if (context.signal.aborted)
44
+ return Object.freeze({ code: "execution-cancelled", kind: "unavailable" });
45
+ const detected = await detectSecretlintIssues(input.content, input.path);
46
+ if (context.signal.aborted)
47
+ return Object.freeze({ code: "execution-cancelled", kind: "unavailable" });
48
+ if (detected.kind === "unavailable") {
49
+ return Object.freeze({ code: "detector-unavailable", kind: "unavailable" });
50
+ }
51
+ if (detected.kind === "protocol-failed") {
52
+ return Object.freeze({ code: "detector-protocol-failed", kind: "unavailable" });
53
+ }
54
+ issues.push(...detected.issues);
55
+ }
56
+ return Object.freeze({ issues: Object.freeze(issues), kind: "complete" });
57
+ }
58
+ export function settleSecretDetectionFindings(context, selectedFileCount, issues, coverageGaps) {
59
+ const reconciliation = reconcileFindingWaivers({
60
+ findings: issues,
61
+ identify: secretFindingIdentity,
62
+ waivers: context.options.findingWaivers
63
+ });
64
+ const waivedFindingCount = reconciliation.findings.filter((finding) => finding.disposition === "waived").length;
65
+ for (const finding of reconciliation.findings) {
66
+ const identity = secretFindingIdentity(finding.finding);
67
+ const data = Object.freeze({
68
+ blocking: finding.disposition !== "waived",
69
+ kind: "secret-finding",
70
+ location: finding.finding.location,
71
+ ordinal: identity.ordinal,
72
+ path: identity.path,
73
+ ruleId: identity.ruleId,
74
+ structuralClass: identity.structuralClass,
75
+ ...(finding.disposition === "waived"
76
+ ? { waiver: Object.freeze({ reason: finding.waiver.reason }) }
77
+ : {})
78
+ });
79
+ context.records.report({ id: secretFindingRecordId(identity) }, data);
80
+ }
81
+ for (const coverageGap of coverageGaps) {
82
+ const data = Object.freeze({
83
+ blocking: true,
84
+ kind: "coverage-gap",
85
+ path: coverageGap.path,
86
+ reason: coverageGap.reason
87
+ });
88
+ context.records.report({ id: secretCoverageGapRecordId(coverageGap.path) }, data);
89
+ }
90
+ reportFindingWaiverAudits(context, reconciliation, secretDetectionWaiverAuditRecord);
91
+ const data = Object.freeze({
92
+ coverageGapCount: coverageGaps.length,
93
+ findingCount: issues.length,
94
+ scannedFileCount: selectedFileCount - coverageGaps.length,
95
+ selectedFileCount,
96
+ waivedFindingCount
97
+ });
98
+ if (selectedFileCount === 0) {
99
+ return appendCheckMessages(Object.freeze({ status: "not-applicable", reason: { code: "no-eligible-input" } }), waiverMessages(reconciliation.waiverAudits));
100
+ }
101
+ const actionableFindingCount = issues.length - waivedFindingCount;
102
+ const result = Object.freeze({
103
+ data,
104
+ status: coverageGaps.length > 0 || actionableFindingCount > 0 ? "failed" : "passed"
105
+ });
106
+ return appendCheckMessages(appendCheckMessages(result, findingMessages(actionableFindingCount, coverageGaps.length)), waiverMessages(reconciliation.waiverAudits));
107
+ }
108
+ function findingMessages(actionableFindingCount, coverageGapCount) {
109
+ const messages = [];
110
+ if (actionableFindingCount > 0) {
111
+ messages.push(Object.freeze({
112
+ code: "secret-findings",
113
+ level: "error",
114
+ message: `${actionableFindingCount} high-confidence secret finding(s) require attention; inspect this Check's safe Records, remove the material, or author an exact finding waiver.`
115
+ }));
116
+ }
117
+ if (coverageGapCount > 0) {
118
+ messages.push(Object.freeze({
119
+ code: "incomplete-coverage",
120
+ level: "error",
121
+ message: `${coverageGapCount} selected input(s) could not receive bounded secret detection coverage; narrow files or increase this Check's explicit resource limits.`
122
+ }));
123
+ }
124
+ return Object.freeze(messages);
125
+ }
126
+ function waiverMessages(audits) {
127
+ const messages = [];
128
+ for (const audit of audits) {
129
+ if (audit.status === "applied") {
130
+ messages.push(Object.freeze({
131
+ code: "finding-waived",
132
+ level: "info",
133
+ message: `A secret finding was waived: ${audit.waiver.reason}`
134
+ }));
135
+ continue;
136
+ }
137
+ messages.push(Object.freeze({
138
+ code: audit.status === "unused" ? "unused-finding-waiver" : "overmatched-finding-waiver",
139
+ level: "warning",
140
+ message: audit.status === "unused"
141
+ ? `A configured secret finding waiver matched no finding; remove or update it. Reason: ${audit.waiver.reason}`
142
+ : `A configured secret finding waiver matched ${audit.matchCount} findings and was not applied; narrow it. Reason: ${audit.waiver.reason}`
143
+ }));
144
+ }
145
+ return Object.freeze(messages);
146
+ }
147
+ function unavailable(code) {
148
+ return Object.freeze({
149
+ messages: Object.freeze([
150
+ Object.freeze({ code, level: "error", message: unavailableMessage(code) })
151
+ ]),
152
+ reason: { code },
153
+ status: "unavailable"
154
+ });
155
+ }
156
+ function unavailableMessage(code) {
157
+ switch (code) {
158
+ case "invalid-options":
159
+ return "secretDetection options are invalid; recreate the Check with its documented explicit files policy.";
160
+ case "scan-input-unavailable":
161
+ return "Secret detection could not collect its configured project files; check the project root, permissions, and selected file source.";
162
+ case "source-unavailable":
163
+ return "A selected secret detection input could not be read safely; check that it still exists, is readable, and was not replaced during the Run.";
164
+ case "detector-unavailable":
165
+ return "The private secret detector did not complete; retry after restoring the package runtime without treating this Run as clean.";
166
+ case "detector-protocol-failed":
167
+ return "The private secret detector returned an unsupported result shape; update the package dependency only with a reviewed adapter change.";
168
+ case "execution-cancelled":
169
+ return "Secret detection was cancelled before it could form a complete result; inspect the caller's cancellation reason and retry if appropriate.";
170
+ }
171
+ }
172
+ //# sourceMappingURL=execution.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution.mjs","sourceRoot":"","sources":["../../../../src/package-checks/secret-detection/execution.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CheckExecutionContext, CheckMessage, CheckResult } from \"../../check/check.ts\";\nimport { appendCheckMessages } from \"../../check/finding-presentation.ts\";\nimport { reconcileFindingWaivers } from \"../../finding-waivers/reconciliation.ts\";\nimport { reportFindingWaiverAudits } from \"../code-quality-findings/finding-waiver-evidence.ts\";\nimport { collectProjectFiles } from \"../project-files/collection.ts\";\nimport type { SecretDetectionFinalData } from \"./final-data.ts\";\nimport {\n prepareSecretDetectionInputs,\n type ApprovedTextInput,\n type SecretCoverageGap\n} from \"./input-preparation.ts\";\nimport type { ResolvedSecretDetectionOptions } from \"./options.ts\";\nimport {\n secretCoverageGapRecordId,\n secretDetectionWaiverAuditRecord,\n secretFindingIdentity,\n secretFindingRecordId,\n type SecretDetectionCoverageGapRecordData,\n type SecretDetectionFindingRecordData\n} from \"./records.ts\";\nimport { detectSecretlintIssues, type SecretDetectionIssue } from \"./secretlint/adapter.ts\";\nimport { validSecretDetectionOptions } from \"./options-validation.ts\";\n\nexport const SECRET_DETECTION_CHECK_DEFINITION = {\n checkId: \"secret-detection\",\n displayName: \"Secret detection\"\n} as const;\n\n/** `secretDetection` 的 whole-Check unavailable reason;不携带 detector 或 file-system 原始详情。 */\nexport type SecretDetectionUnavailableReasonCode =\n | \"detector-protocol-failed\"\n | \"detector-unavailable\"\n | \"execution-cancelled\"\n | \"invalid-options\"\n | \"scan-input-unavailable\"\n | \"source-unavailable\";\n\n/** Executes the fixed in-process detector only for this Check's exact explicit input selection. */\nexport async function executeSecretDetection(\n context: CheckExecutionContext<ResolvedSecretDetectionOptions>\n): Promise<CheckResult<SecretDetectionFinalData>> {\n if (!validSecretDetectionOptions(context.options)) return unavailable(\"invalid-options\");\n if (context.signal.aborted) return unavailable(\"execution-cancelled\");\n\n let selectedPaths: readonly string[];\n try {\n selectedPaths = collectProjectFiles(context.project.root, context.options.files);\n } catch {\n return unavailable(\"scan-input-unavailable\");\n }\n if (context.signal.aborted) return unavailable(\"execution-cancelled\");\n if (selectedPaths.length === 0)\n return settleSecretDetectionFindings(context, selectedPaths.length, [], []);\n\n const prepared = prepareSecretDetectionInputs(context, selectedPaths);\n if (prepared.kind === \"unavailable\") return unavailable(\"source-unavailable\");\n if (prepared.kind === \"cancelled\") return unavailable(\"execution-cancelled\");\n\n const detected = await detectApprovedInputs(context, prepared.inputs);\n if (detected.kind === \"unavailable\") return unavailable(detected.code);\n return settleSecretDetectionFindings(\n context,\n selectedPaths.length,\n detected.issues,\n prepared.coverageGaps\n );\n}\n\ntype DetectedIssues = Readonly<\n | { readonly code: SecretDetectionUnavailableReasonCode; readonly kind: \"unavailable\" }\n | { readonly issues: readonly SecretDetectionIssue[]; readonly kind: \"complete\" }\n>;\n\nasync function detectApprovedInputs(\n context: CheckExecutionContext<ResolvedSecretDetectionOptions>,\n inputs: readonly ApprovedTextInput[]\n): Promise<DetectedIssues> {\n const issues: SecretDetectionIssue[] = [];\n for (const input of inputs) {\n if (context.signal.aborted)\n return Object.freeze({ code: \"execution-cancelled\", kind: \"unavailable\" });\n const detected = await detectSecretlintIssues(input.content, input.path);\n if (context.signal.aborted)\n return Object.freeze({ code: \"execution-cancelled\", kind: \"unavailable\" });\n if (detected.kind === \"unavailable\") {\n return Object.freeze({ code: \"detector-unavailable\", kind: \"unavailable\" });\n }\n if (detected.kind === \"protocol-failed\") {\n return Object.freeze({ code: \"detector-protocol-failed\", kind: \"unavailable\" });\n }\n issues.push(...detected.issues);\n }\n return Object.freeze({ issues: Object.freeze(issues), kind: \"complete\" });\n}\n\nexport function settleSecretDetectionFindings(\n context: CheckExecutionContext<ResolvedSecretDetectionOptions>,\n selectedFileCount: number,\n issues: readonly SecretDetectionIssue[],\n coverageGaps: readonly SecretCoverageGap[]\n): CheckResult<SecretDetectionFinalData> {\n const reconciliation = reconcileFindingWaivers({\n findings: issues,\n identify: secretFindingIdentity,\n waivers: context.options.findingWaivers\n });\n const waivedFindingCount = reconciliation.findings.filter(\n (finding) => finding.disposition === \"waived\"\n ).length;\n for (const finding of reconciliation.findings) {\n const identity = secretFindingIdentity(finding.finding);\n const data: SecretDetectionFindingRecordData = Object.freeze({\n blocking: finding.disposition !== \"waived\",\n kind: \"secret-finding\",\n location: finding.finding.location,\n ordinal: identity.ordinal,\n path: identity.path,\n ruleId: identity.ruleId,\n structuralClass: identity.structuralClass,\n ...(finding.disposition === \"waived\"\n ? { waiver: Object.freeze({ reason: finding.waiver.reason }) }\n : {})\n });\n context.records.report({ id: secretFindingRecordId(identity) }, data);\n }\n for (const coverageGap of coverageGaps) {\n const data: SecretDetectionCoverageGapRecordData = Object.freeze({\n blocking: true,\n kind: \"coverage-gap\",\n path: coverageGap.path,\n reason: coverageGap.reason\n });\n context.records.report({ id: secretCoverageGapRecordId(coverageGap.path) }, data);\n }\n reportFindingWaiverAudits(context, reconciliation, secretDetectionWaiverAuditRecord);\n\n const data = Object.freeze({\n coverageGapCount: coverageGaps.length,\n findingCount: issues.length,\n scannedFileCount: selectedFileCount - coverageGaps.length,\n selectedFileCount,\n waivedFindingCount\n });\n if (selectedFileCount === 0) {\n return appendCheckMessages(\n Object.freeze({ status: \"not-applicable\", reason: { code: \"no-eligible-input\" } }),\n waiverMessages(reconciliation.waiverAudits)\n );\n }\n const actionableFindingCount = issues.length - waivedFindingCount;\n const result: CheckResult<SecretDetectionFinalData> = Object.freeze({\n data,\n status: coverageGaps.length > 0 || actionableFindingCount > 0 ? \"failed\" : \"passed\"\n });\n return appendCheckMessages(\n appendCheckMessages(result, findingMessages(actionableFindingCount, coverageGaps.length)),\n waiverMessages(reconciliation.waiverAudits)\n );\n}\n\nfunction findingMessages(\n actionableFindingCount: number,\n coverageGapCount: number\n): readonly CheckMessage[] {\n const messages: CheckMessage[] = [];\n if (actionableFindingCount > 0) {\n messages.push(\n Object.freeze({\n code: \"secret-findings\",\n level: \"error\",\n message: `${actionableFindingCount} high-confidence secret finding(s) require attention; inspect this Check's safe Records, remove the material, or author an exact finding waiver.`\n })\n );\n }\n if (coverageGapCount > 0) {\n messages.push(\n Object.freeze({\n code: \"incomplete-coverage\",\n level: \"error\",\n message: `${coverageGapCount} selected input(s) could not receive bounded secret detection coverage; narrow files or increase this Check's explicit resource limits.`\n })\n );\n }\n return Object.freeze(messages);\n}\n\nfunction waiverMessages(\n audits: readonly Readonly<{\n readonly matchCount: number;\n readonly status: \"applied\" | \"overmatched\" | \"unused\";\n readonly waiver: Readonly<{ readonly reason: string }>;\n }>[]\n): readonly CheckMessage[] {\n const messages: CheckMessage[] = [];\n for (const audit of audits) {\n if (audit.status === \"applied\") {\n messages.push(\n Object.freeze({\n code: \"finding-waived\",\n level: \"info\",\n message: `A secret finding was waived: ${audit.waiver.reason}`\n })\n );\n continue;\n }\n messages.push(\n Object.freeze({\n code: audit.status === \"unused\" ? \"unused-finding-waiver\" : \"overmatched-finding-waiver\",\n level: \"warning\",\n message:\n audit.status === \"unused\"\n ? `A configured secret finding waiver matched no finding; remove or update it. Reason: ${audit.waiver.reason}`\n : `A configured secret finding waiver matched ${audit.matchCount} findings and was not applied; narrow it. Reason: ${audit.waiver.reason}`\n })\n );\n }\n return Object.freeze(messages);\n}\n\nfunction unavailable(\n code: SecretDetectionUnavailableReasonCode\n): CheckResult<SecretDetectionFinalData> {\n return Object.freeze({\n messages: Object.freeze([\n Object.freeze({ code, level: \"error\" as const, message: unavailableMessage(code) })\n ]),\n reason: { code },\n status: \"unavailable\"\n });\n}\n\nfunction unavailableMessage(code: SecretDetectionUnavailableReasonCode): string {\n switch (code) {\n case \"invalid-options\":\n return \"secretDetection options are invalid; recreate the Check with its documented explicit files policy.\";\n case \"scan-input-unavailable\":\n return \"Secret detection could not collect its configured project files; check the project root, permissions, and selected file source.\";\n case \"source-unavailable\":\n return \"A selected secret detection input could not be read safely; check that it still exists, is readable, and was not replaced during the Run.\";\n case \"detector-unavailable\":\n return \"The private secret detector did not complete; retry after restoring the package runtime without treating this Run as clean.\";\n case \"detector-protocol-failed\":\n return \"The private secret detector returned an unsupported result shape; update the package dependency only with a reviewed adapter change.\";\n case \"execution-cancelled\":\n return \"Secret detection was cancelled before it could form a complete result; inspect the caller's cancellation reason and retry if appropriate.\";\n }\n}\n"]}
@@ -0,0 +1,33 @@
1
+ import { exactFinalDataRecord, invalidFinalData, nonNegativeSafeInteger } from "../final-data-parsing.mjs";
2
+ /** 验证并脱离一份 `secretDetection` canonical final-data object。 */
3
+ export function parseSecretDetectionData(data) {
4
+ const value = exactFinalDataRecord(data, [
5
+ "coverageGapCount",
6
+ "findingCount",
7
+ "scannedFileCount",
8
+ "selectedFileCount",
9
+ "waivedFindingCount"
10
+ ], "secretDetection");
11
+ const coverageGapCount = nonNegativeSafeInteger(value.coverageGapCount);
12
+ const findingCount = nonNegativeSafeInteger(value.findingCount);
13
+ const scannedFileCount = nonNegativeSafeInteger(value.scannedFileCount);
14
+ const selectedFileCount = nonNegativeSafeInteger(value.selectedFileCount);
15
+ const waivedFindingCount = nonNegativeSafeInteger(value.waivedFindingCount);
16
+ if (coverageGapCount === undefined ||
17
+ findingCount === undefined ||
18
+ scannedFileCount === undefined ||
19
+ selectedFileCount === undefined ||
20
+ waivedFindingCount === undefined ||
21
+ scannedFileCount + coverageGapCount !== selectedFileCount ||
22
+ waivedFindingCount > findingCount) {
23
+ throw invalidFinalData("secretDetection");
24
+ }
25
+ return Object.freeze({
26
+ coverageGapCount,
27
+ findingCount,
28
+ scannedFileCount,
29
+ selectedFileCount,
30
+ waivedFindingCount
31
+ });
32
+ }
33
+ //# sourceMappingURL=final-data.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"final-data.mjs","sourceRoot":"","sources":["../../../../src/package-checks/secret-detection/final-data.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,0BAA0B,CAAC;AAgBlC,6DAA6D;AAC7D,MAAM,UAAU,wBAAwB,CAAC,IAAa;IACpD,MAAM,KAAK,GAAG,oBAAoB,CAChC,IAAI,EACJ;QACE,kBAAkB;QAClB,cAAc;QACd,kBAAkB;QAClB,mBAAmB;QACnB,oBAAoB;KACrB,EACD,iBAAiB,CAClB,CAAC;IACF,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACxE,MAAM,YAAY,GAAG,sBAAsB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAChE,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACxE,MAAM,iBAAiB,GAAG,sBAAsB,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAC1E,MAAM,kBAAkB,GAAG,sBAAsB,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAC5E,IACE,gBAAgB,KAAK,SAAS;QAC9B,YAAY,KAAK,SAAS;QAC1B,gBAAgB,KAAK,SAAS;QAC9B,iBAAiB,KAAK,SAAS;QAC/B,kBAAkB,KAAK,SAAS;QAChC,gBAAgB,GAAG,gBAAgB,KAAK,iBAAiB;QACzD,kBAAkB,GAAG,YAAY,EACjC,CAAC;QACD,MAAM,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,gBAAgB;QAChB,YAAY;QACZ,gBAAgB;QAChB,iBAAiB;QACjB,kBAAkB;KACnB,CAAC,CAAC;AACL,CAAC","sourcesContent":["import {\n exactFinalDataRecord,\n invalidFinalData,\n nonNegativeSafeInteger\n} from \"../final-data-parsing.ts\";\n\n/** `secretDetection` 正常完成时发布的安全计数。 */\nexport interface SecretDetectionFinalData {\n /** 已选择但未获得 bounded detector coverage 的文件数。 */\n readonly coverageGapCount: number;\n /** 所有安全投影后的 detector finding 数,包括已 waived 的 finding。 */\n readonly findingCount: number;\n /** 已获得 bounded text detector coverage 的文件数。 */\n readonly scannedFileCount: number;\n /** files policy 的 exact selection 数,恒等于 scannedFileCount 与 coverageGapCount 之和。 */\n readonly selectedFileCount: number;\n /** 安全 identity 被唯一 waiver 匹配的 finding 数。 */\n readonly waivedFindingCount: number;\n}\n\n/** 验证并脱离一份 `secretDetection` canonical final-data object。 */\nexport function parseSecretDetectionData(data: unknown): SecretDetectionFinalData {\n const value = exactFinalDataRecord(\n data,\n [\n \"coverageGapCount\",\n \"findingCount\",\n \"scannedFileCount\",\n \"selectedFileCount\",\n \"waivedFindingCount\"\n ],\n \"secretDetection\"\n );\n const coverageGapCount = nonNegativeSafeInteger(value.coverageGapCount);\n const findingCount = nonNegativeSafeInteger(value.findingCount);\n const scannedFileCount = nonNegativeSafeInteger(value.scannedFileCount);\n const selectedFileCount = nonNegativeSafeInteger(value.selectedFileCount);\n const waivedFindingCount = nonNegativeSafeInteger(value.waivedFindingCount);\n if (\n coverageGapCount === undefined ||\n findingCount === undefined ||\n scannedFileCount === undefined ||\n selectedFileCount === undefined ||\n waivedFindingCount === undefined ||\n scannedFileCount + coverageGapCount !== selectedFileCount ||\n waivedFindingCount > findingCount\n ) {\n throw invalidFinalData(\"secretDetection\");\n }\n return Object.freeze({\n coverageGapCount,\n findingCount,\n scannedFileCount,\n selectedFileCount,\n waivedFindingCount\n });\n}\n"]}
@@ -0,0 +1,30 @@
1
+ import { snapshotExactClosedRecord } from "../../data-boundary/closed-values.mjs";
2
+ import { isPositiveSafeInteger } from "../../data-boundary/value-shapes.mjs";
3
+ import { isNormalizedProjectRelativePath } from "../host-environment/path.mjs";
4
+ const PRIVATE_KEY_RULE_ID = "@secretlint/secretlint-rule-privatekey";
5
+ const TEXT_DOCUMENT_STRUCTURAL_CLASS = "text-document";
6
+ /** 解析只含安全路径、规则、结构标记和 occurrence ordinal 的 waiver identity。 */
7
+ export function resolveSecretDetectionFindingIdentity(value) {
8
+ const identity = snapshotExactClosedRecord(value, [
9
+ "ordinal",
10
+ "path",
11
+ "ruleId",
12
+ "structuralClass"
13
+ ]);
14
+ if (identity === undefined ||
15
+ !isPositiveSafeInteger(identity.ordinal) ||
16
+ !isNormalizedProjectRelativePath(identity.path) ||
17
+ identity.ruleId !== PRIVATE_KEY_RULE_ID ||
18
+ identity.structuralClass !== TEXT_DOCUMENT_STRUCTURAL_CLASS) {
19
+ return undefined;
20
+ }
21
+ return Object.freeze({
22
+ ordinal: identity.ordinal,
23
+ path: identity.path,
24
+ ruleId: PRIVATE_KEY_RULE_ID,
25
+ structuralClass: TEXT_DOCUMENT_STRUCTURAL_CLASS
26
+ });
27
+ }
28
+ export const secretDetectionPrivateKeyRuleId = PRIVATE_KEY_RULE_ID;
29
+ export const secretDetectionTextDocumentStructuralClass = TEXT_DOCUMENT_STRUCTURAL_CLASS;
30
+ //# sourceMappingURL=finding-waiver-identity.mjs.map