audit-tools 0.42.1 → 0.44.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (237) hide show
  1. package/dispatch/merge-results.mjs +229 -140
  2. package/dispatch/validate-result.mjs +98 -40
  3. package/dist/audit/cli/conceptualDispatch.d.ts.map +1 -1
  4. package/dist/audit/cli/conceptualDispatch.js +35 -3
  5. package/dist/audit/cli/conceptualDispatch.js.map +1 -1
  6. package/dist/audit/cli/dispatch/hostHandoff.d.ts +9 -1
  7. package/dist/audit/cli/dispatch/hostHandoff.d.ts.map +1 -1
  8. package/dist/audit/cli/dispatch/hostHandoff.js +94 -38
  9. package/dist/audit/cli/dispatch/hostHandoff.js.map +1 -1
  10. package/dist/audit/cli/laneSubmissions.d.ts +2 -2
  11. package/dist/audit/cli/laneSubmissions.js +2 -2
  12. package/dist/audit/cli/nextStepCommand.d.ts +64 -0
  13. package/dist/audit/cli/nextStepCommand.d.ts.map +1 -1
  14. package/dist/audit/cli/nextStepCommand.js +877 -783
  15. package/dist/audit/cli/nextStepCommand.js.map +1 -1
  16. package/dist/audit/cli/nextStepHelpers.d.ts +12 -36
  17. package/dist/audit/cli/nextStepHelpers.d.ts.map +1 -1
  18. package/dist/audit/cli/nextStepHelpers.js +34 -77
  19. package/dist/audit/cli/nextStepHelpers.js.map +1 -1
  20. package/dist/audit/cli/steps.d.ts +2 -2
  21. package/dist/audit/extractors/graph.d.ts +28 -2
  22. package/dist/audit/extractors/graph.d.ts.map +1 -1
  23. package/dist/audit/extractors/graph.js +122 -11
  24. package/dist/audit/extractors/graph.js.map +1 -1
  25. package/dist/audit/extractors/graphRoutes.d.ts +8 -0
  26. package/dist/audit/extractors/graphRoutes.d.ts.map +1 -1
  27. package/dist/audit/extractors/graphRoutes.js +71 -4
  28. package/dist/audit/extractors/graphRoutes.js.map +1 -1
  29. package/dist/audit/io/artifacts.d.ts +55 -0
  30. package/dist/audit/io/artifacts.d.ts.map +1 -1
  31. package/dist/audit/io/artifacts.js +189 -12
  32. package/dist/audit/io/artifacts.js.map +1 -1
  33. package/dist/audit/io/toolingManifest.d.ts +11 -0
  34. package/dist/audit/io/toolingManifest.d.ts.map +1 -1
  35. package/dist/audit/io/toolingManifest.js +13 -3
  36. package/dist/audit/io/toolingManifest.js.map +1 -1
  37. package/dist/audit/orchestrator/advance.d.ts +64 -0
  38. package/dist/audit/orchestrator/advance.d.ts.map +1 -1
  39. package/dist/audit/orchestrator/advance.js +191 -57
  40. package/dist/audit/orchestrator/advance.js.map +1 -1
  41. package/dist/audit/orchestrator/charterClarificationExecutor.d.ts.map +1 -1
  42. package/dist/audit/orchestrator/charterClarificationExecutor.js +55 -21
  43. package/dist/audit/orchestrator/charterClarificationExecutor.js.map +1 -1
  44. package/dist/audit/orchestrator/flowCoverage.d.ts.map +1 -1
  45. package/dist/audit/orchestrator/flowCoverage.js +7 -10
  46. package/dist/audit/orchestrator/flowCoverage.js.map +1 -1
  47. package/dist/audit/orchestrator/flowPlanning.d.ts +54 -1
  48. package/dist/audit/orchestrator/flowPlanning.d.ts.map +1 -1
  49. package/dist/audit/orchestrator/flowPlanning.js +77 -18
  50. package/dist/audit/orchestrator/flowPlanning.js.map +1 -1
  51. package/dist/audit/orchestrator/flowRequeue.d.ts.map +1 -1
  52. package/dist/audit/orchestrator/flowRequeue.js +6 -10
  53. package/dist/audit/orchestrator/flowRequeue.js.map +1 -1
  54. package/dist/audit/orchestrator/requeueFold.d.ts.map +1 -1
  55. package/dist/audit/orchestrator/requeueFold.js +18 -5
  56. package/dist/audit/orchestrator/requeueFold.js.map +1 -1
  57. package/dist/audit/orchestrator/staleness.d.ts +24 -1
  58. package/dist/audit/orchestrator/staleness.d.ts.map +1 -1
  59. package/dist/audit/orchestrator/staleness.js +147 -16
  60. package/dist/audit/orchestrator/staleness.js.map +1 -1
  61. package/dist/audit/orchestrator/syntaxResolutionExecutor.d.ts +26 -0
  62. package/dist/audit/orchestrator/syntaxResolutionExecutor.d.ts.map +1 -1
  63. package/dist/audit/orchestrator/syntaxResolutionExecutor.js +97 -12
  64. package/dist/audit/orchestrator/syntaxResolutionExecutor.js.map +1 -1
  65. package/dist/audit/orchestrator/taskBuilder.d.ts.map +1 -1
  66. package/dist/audit/orchestrator/taskBuilder.js +111 -21
  67. package/dist/audit/orchestrator/taskBuilder.js.map +1 -1
  68. package/dist/audit/orchestrator/trivialAudit.d.ts +17 -1
  69. package/dist/audit/orchestrator/trivialAudit.d.ts.map +1 -1
  70. package/dist/audit/orchestrator/trivialAudit.js +31 -4
  71. package/dist/audit/orchestrator/trivialAudit.js.map +1 -1
  72. package/dist/audit/types/analyzerCapability.d.ts +6 -6
  73. package/dist/audit/types/charterRegister.d.ts +30 -12
  74. package/dist/audit/types/charterRegister.d.ts.map +1 -1
  75. package/dist/audit/types/charterRegister.js +22 -9
  76. package/dist/audit/types/charterRegister.js.map +1 -1
  77. package/dist/audit/validation/anchorGrounding.d.ts.map +1 -1
  78. package/dist/audit/validation/anchorGrounding.js +17 -0
  79. package/dist/audit/validation/anchorGrounding.js.map +1 -1
  80. package/dist/audit/validation/auditResults.d.ts +17 -0
  81. package/dist/audit/validation/auditResults.d.ts.map +1 -1
  82. package/dist/audit/validation/auditResults.js +50 -17
  83. package/dist/audit/validation/auditResults.js.map +1 -1
  84. package/dist/remediate/contractPipeline/cyclicSeamResolution.d.ts +48 -0
  85. package/dist/remediate/contractPipeline/cyclicSeamResolution.d.ts.map +1 -1
  86. package/dist/remediate/contractPipeline/cyclicSeamResolution.js +128 -0
  87. package/dist/remediate/contractPipeline/cyclicSeamResolution.js.map +1 -1
  88. package/dist/remediate/contractPipeline/derive.d.ts +8 -5
  89. package/dist/remediate/contractPipeline/derive.d.ts.map +1 -1
  90. package/dist/remediate/contractPipeline/derive.js +8 -16
  91. package/dist/remediate/contractPipeline/derive.js.map +1 -1
  92. package/dist/remediate/index.d.ts.map +1 -1
  93. package/dist/remediate/index.js +43 -2
  94. package/dist/remediate/index.js.map +1 -1
  95. package/dist/remediate/intent/intentOrdering.d.ts +13 -5
  96. package/dist/remediate/intent/intentOrdering.d.ts.map +1 -1
  97. package/dist/remediate/intent/intentOrdering.js +56 -25
  98. package/dist/remediate/intent/intentOrdering.js.map +1 -1
  99. package/dist/remediate/phases/close.d.ts +57 -2
  100. package/dist/remediate/phases/close.d.ts.map +1 -1
  101. package/dist/remediate/phases/close.js +260 -36
  102. package/dist/remediate/phases/close.js.map +1 -1
  103. package/dist/remediate/phases/triage.d.ts.map +1 -1
  104. package/dist/remediate/phases/triage.js +14 -2
  105. package/dist/remediate/phases/triage.js.map +1 -1
  106. package/dist/remediate/state/disposition.d.ts +26 -4
  107. package/dist/remediate/state/disposition.d.ts.map +1 -1
  108. package/dist/remediate/state/itemStatus.d.ts +33 -6
  109. package/dist/remediate/state/itemStatus.d.ts.map +1 -1
  110. package/dist/remediate/state/itemStatus.js +154 -39
  111. package/dist/remediate/state/itemStatus.js.map +1 -1
  112. package/dist/remediate/state/types.d.ts +41 -2
  113. package/dist/remediate/state/types.d.ts.map +1 -1
  114. package/dist/remediate/state/types.js.map +1 -1
  115. package/dist/remediate/steps/contractPipeline.d.ts +296 -15
  116. package/dist/remediate/steps/contractPipeline.d.ts.map +1 -1
  117. package/dist/remediate/steps/contractPipeline.js +1783 -1001
  118. package/dist/remediate/steps/contractPipeline.js.map +1 -1
  119. package/dist/remediate/steps/dispatch/hostHandoff.d.ts +137 -2
  120. package/dist/remediate/steps/dispatch/hostHandoff.d.ts.map +1 -1
  121. package/dist/remediate/steps/dispatch/hostHandoff.js +657 -59
  122. package/dist/remediate/steps/dispatch/hostHandoff.js.map +1 -1
  123. package/dist/remediate/steps/finalGate.d.ts +136 -37
  124. package/dist/remediate/steps/finalGate.d.ts.map +1 -1
  125. package/dist/remediate/steps/finalGate.js +120 -86
  126. package/dist/remediate/steps/finalGate.js.map +1 -1
  127. package/dist/remediate/steps/gateCommands.d.ts +8 -0
  128. package/dist/remediate/steps/gateCommands.d.ts.map +1 -1
  129. package/dist/remediate/steps/gateCommands.js +40 -11
  130. package/dist/remediate/steps/gateCommands.js.map +1 -1
  131. package/dist/remediate/steps/nextStep.d.ts +96 -5
  132. package/dist/remediate/steps/nextStep.d.ts.map +1 -1
  133. package/dist/remediate/steps/nextStep.js +668 -147
  134. package/dist/remediate/steps/nextStep.js.map +1 -1
  135. package/dist/remediate/steps/types.d.ts +4 -3
  136. package/dist/remediate/steps/types.d.ts.map +1 -1
  137. package/dist/remediate/steps/types.js +10 -2
  138. package/dist/remediate/steps/types.js.map +1 -1
  139. package/dist/remediate/validation/artifacts.d.ts +20 -2
  140. package/dist/remediate/validation/artifacts.d.ts.map +1 -1
  141. package/dist/remediate/validation/artifacts.js +224 -130
  142. package/dist/remediate/validation/artifacts.js.map +1 -1
  143. package/dist/remediate/validation/contractPipelineGates.d.ts +58 -0
  144. package/dist/remediate/validation/contractPipelineGates.d.ts.map +1 -1
  145. package/dist/remediate/validation/contractPipelineGates.js +143 -27
  146. package/dist/remediate/validation/contractPipelineGates.js.map +1 -1
  147. package/dist/shared/analyzers/acquisitionEngine.d.ts +72 -25
  148. package/dist/shared/analyzers/acquisitionEngine.d.ts.map +1 -1
  149. package/dist/shared/analyzers/acquisitionEngine.js +149 -15
  150. package/dist/shared/analyzers/acquisitionEngine.js.map +1 -1
  151. package/dist/shared/analyzers/binaryAcquisition.d.ts +27 -2
  152. package/dist/shared/analyzers/binaryAcquisition.d.ts.map +1 -1
  153. package/dist/shared/analyzers/binaryAcquisition.js +149 -43
  154. package/dist/shared/analyzers/binaryAcquisition.js.map +1 -1
  155. package/dist/shared/analyzers/candidates.d.ts +9 -8
  156. package/dist/shared/analyzers/candidates.d.ts.map +1 -1
  157. package/dist/shared/analyzers/candidates.js +96 -64
  158. package/dist/shared/analyzers/candidates.js.map +1 -1
  159. package/dist/shared/analyzers/normalizeExternal.d.ts +40 -12
  160. package/dist/shared/analyzers/normalizeExternal.d.ts.map +1 -1
  161. package/dist/shared/analyzers/normalizeExternal.js +74 -18
  162. package/dist/shared/analyzers/normalizeExternal.js.map +1 -1
  163. package/dist/shared/analyzers/rubocop.d.ts +14 -13
  164. package/dist/shared/analyzers/rubocop.d.ts.map +1 -1
  165. package/dist/shared/analyzers/rubocop.js +29 -6
  166. package/dist/shared/analyzers/rubocop.js.map +1 -1
  167. package/dist/shared/analyzers/types.d.ts +196 -13
  168. package/dist/shared/analyzers/types.d.ts.map +1 -1
  169. package/dist/shared/analyzers/types.js +122 -9
  170. package/dist/shared/analyzers/types.js.map +1 -1
  171. package/dist/shared/decompose/charterClarification.d.ts +12 -1
  172. package/dist/shared/decompose/charterClarification.d.ts.map +1 -1
  173. package/dist/shared/decompose/charterClarification.js +11 -4
  174. package/dist/shared/decompose/charterClarification.js.map +1 -1
  175. package/dist/shared/decompose/charterExtraction.d.ts +20 -10
  176. package/dist/shared/decompose/charterExtraction.d.ts.map +1 -1
  177. package/dist/shared/decompose/charterExtraction.js +52 -23
  178. package/dist/shared/decompose/charterExtraction.js.map +1 -1
  179. package/dist/shared/index.d.ts +1 -0
  180. package/dist/shared/index.d.ts.map +1 -1
  181. package/dist/shared/index.js +5 -0
  182. package/dist/shared/index.js.map +1 -1
  183. package/dist/shared/intent/freeFormIntentInterpreter.d.ts +12 -2
  184. package/dist/shared/intent/freeFormIntentInterpreter.d.ts.map +1 -1
  185. package/dist/shared/intent/freeFormIntentInterpreter.js +27 -22
  186. package/dist/shared/intent/freeFormIntentInterpreter.js.map +1 -1
  187. package/dist/shared/intent/pathScope.d.ts +12 -1
  188. package/dist/shared/intent/pathScope.d.ts.map +1 -1
  189. package/dist/shared/intent/pathScope.js +56 -19
  190. package/dist/shared/intent/pathScope.js.map +1 -1
  191. package/dist/shared/intent/sharedIntentData.d.ts +19 -1
  192. package/dist/shared/intent/sharedIntentData.d.ts.map +1 -1
  193. package/dist/shared/intent/sharedIntentData.js +33 -8
  194. package/dist/shared/intent/sharedIntentData.js.map +1 -1
  195. package/dist/shared/io/fileLock.d.ts +12 -0
  196. package/dist/shared/io/fileLock.d.ts.map +1 -1
  197. package/dist/shared/io/fileLock.js +48 -5
  198. package/dist/shared/io/fileLock.js.map +1 -1
  199. package/dist/shared/io/json.d.ts +13 -0
  200. package/dist/shared/io/json.d.ts.map +1 -1
  201. package/dist/shared/io/json.js +19 -1
  202. package/dist/shared/io/json.js.map +1 -1
  203. package/dist/shared/steps/stepEmissionScaffold.d.ts +69 -0
  204. package/dist/shared/steps/stepEmissionScaffold.d.ts.map +1 -0
  205. package/dist/shared/steps/stepEmissionScaffold.js +83 -0
  206. package/dist/shared/steps/stepEmissionScaffold.js.map +1 -0
  207. package/dist/shared/submission/handRecovery.d.ts.map +1 -1
  208. package/dist/shared/submission/handRecovery.js +69 -4
  209. package/dist/shared/submission/handRecovery.js.map +1 -1
  210. package/dist/shared/submission/submissionIdentity.d.ts +10 -1
  211. package/dist/shared/submission/submissionIdentity.d.ts.map +1 -1
  212. package/dist/shared/submission/submissionIdentity.js +12 -3
  213. package/dist/shared/submission/submissionIdentity.js.map +1 -1
  214. package/dist/shared/submission/submissionLedger.d.ts +43 -2
  215. package/dist/shared/submission/submissionLedger.d.ts.map +1 -1
  216. package/dist/shared/submission/submissionLedger.js +50 -7
  217. package/dist/shared/submission/submissionLedger.js.map +1 -1
  218. package/dist/shared/tooling/allowlistedExec.d.ts +9 -0
  219. package/dist/shared/tooling/allowlistedExec.d.ts.map +1 -1
  220. package/dist/shared/tooling/allowlistedExec.js +19 -2
  221. package/dist/shared/tooling/allowlistedExec.js.map +1 -1
  222. package/dist/shared/tooling/commandShape.d.ts +21 -0
  223. package/dist/shared/tooling/commandShape.d.ts.map +1 -0
  224. package/dist/shared/tooling/commandShape.js +120 -0
  225. package/dist/shared/tooling/commandShape.js.map +1 -0
  226. package/dist/shared/types/charter.d.ts +24 -0
  227. package/dist/shared/types/charter.d.ts.map +1 -1
  228. package/dist/shared/types/charter.js +9 -0
  229. package/dist/shared/types/charter.js.map +1 -1
  230. package/dist/shared/types/remediationOutcome.d.ts +282 -9
  231. package/dist/shared/types/remediationOutcome.d.ts.map +1 -1
  232. package/dist/shared/types/remediationOutcome.js +174 -1
  233. package/dist/shared/types/remediationOutcome.js.map +1 -1
  234. package/package.json +2 -1
  235. package/remediate-code.mjs +15 -0
  236. package/wrapper/remediate-code-wrapper-install-hosts.mjs +45 -4
  237. package/wrapper/remediate-code-wrapper-install-renderers.mjs +12 -2
@@ -1 +1 @@
1
- {"version":3,"file":"binaryAcquisition.js","sourceRoot":"","sources":["../../../src/shared/analyzers/binaryAcquisition.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"binaryAcquisition.js","sourceRoot":"","sources":["../../../src/shared/analyzers/binaryAcquisition.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import type { ExternalAnalyzerCandidate } from "./acquisitionEngine.js";
2
+ import type { ExternalAnalyzerParseReport } from "./types.js";
2
3
  /**
3
4
  * The value-curated EXTERNAL analyzer candidate registry. This is the only place
4
5
  * concrete tools are named; the engine is tool-agnostic. Membership in the
@@ -13,11 +14,11 @@ declare const GITLEAKS_VERSION = "8.21.2";
13
14
  * the engine's generic item shape. The raw secret value is NEVER carried through
14
15
  * (Secret/Match are dropped) so the persisted artifact cannot leak a credential.
15
16
  */
16
- declare function parseGitleaks(report: string): ReturnType<ExternalAnalyzerCandidate["parse"]>;
17
+ declare function parseGitleaks(report: string): ExternalAnalyzerParseReport;
17
18
  declare const gitleaksCandidate: ExternalAnalyzerCandidate;
18
19
  declare const semgrepCandidate: ExternalAnalyzerCandidate;
19
20
  declare const eslintCandidate: ExternalAnalyzerCandidate;
20
- declare function parseKnip(stdout: string): ReturnType<ExternalAnalyzerCandidate["parse"]>;
21
+ declare function parseKnip(stdout: string): ExternalAnalyzerParseReport;
21
22
  declare const knipCandidate: ExternalAnalyzerCandidate;
22
23
  /**
23
24
  * Parse jscpd's JSON reporter output (`{ duplicates: [{ firstFile, secondFile,
@@ -27,7 +28,7 @@ declare const knipCandidate: ExternalAnalyzerCandidate;
27
28
  * normalization path, not to a candidate's own parse function (same as
28
29
  * parseKnip/parseEslint/parseSemgrep above).
29
30
  */
30
- declare function parseJscpd(report: string): ReturnType<ExternalAnalyzerCandidate["parse"]>;
31
+ declare function parseJscpd(report: string): ExternalAnalyzerParseReport;
31
32
  declare const jscpdCandidate: ExternalAnalyzerCandidate;
32
33
  declare const OSV_SCANNER_VERSION = "2.4.0";
33
34
  /**
@@ -39,7 +40,7 @@ declare const OSV_SCANNER_VERSION = "2.4.0";
39
40
  * raw vulnerability id, so CVE/GHSA aliases for the same underlying issue
40
41
  * don't fan out into duplicate items.
41
42
  */
42
- declare function parseOsvScanner(stdout: string): ReturnType<ExternalAnalyzerCandidate["parse"]>;
43
+ declare function parseOsvScanner(stdout: string): ExternalAnalyzerParseReport;
43
44
  declare const osvScannerCandidate: ExternalAnalyzerCandidate;
44
45
  declare const clippyCandidate: ExternalAnalyzerCandidate;
45
46
  declare const rubocopCandidate: ExternalAnalyzerCandidate;
@@ -50,7 +51,7 @@ declare const HADOLINT_VERSION = "2.14.0";
50
51
  * message }]`. `level` ∈ error|warning|info|style. Degrades to `[]` on
51
52
  * empty/malformed/non-array input.
52
53
  */
53
- declare function parseHadolint(stdout: string): ReturnType<ExternalAnalyzerCandidate["parse"]>;
54
+ declare function parseHadolint(stdout: string): ExternalAnalyzerParseReport;
54
55
  declare const hadolintCandidate: ExternalAnalyzerCandidate;
55
56
  declare const ACTIONLINT_VERSION = "1.7.12";
56
57
  /**
@@ -58,7 +59,7 @@ declare const ACTIONLINT_VERSION = "1.7.12";
58
59
  * against actionlint's template output: `[{ message, filepath, line, column,
59
60
  * kind }]`. Degrades to `[]` on empty/malformed/non-array input.
60
61
  */
61
- declare function parseActionlint(stdout: string): ReturnType<ExternalAnalyzerCandidate["parse"]>;
62
+ declare function parseActionlint(stdout: string): ExternalAnalyzerParseReport;
62
63
  declare const actionlintCandidate: ExternalAnalyzerCandidate;
63
64
  /**
64
65
  * Parse type-coverage's `--json --detail` stdout — grounded against
@@ -66,14 +67,14 @@ declare const actionlintCandidate: ExternalAnalyzerCandidate;
66
67
  * line, character, text }] }`. Each `anys` entry is one implicit/explicit `any`
67
68
  * site; degrades to `[]` on empty/malformed input or a missing `anys` array.
68
69
  */
69
- declare function parseTypeCoverage(stdout: string): ReturnType<ExternalAnalyzerCandidate["parse"]>;
70
+ declare function parseTypeCoverage(stdout: string): ExternalAnalyzerParseReport;
70
71
  declare const typeCoverageCandidate: ExternalAnalyzerCandidate;
71
72
  /**
72
73
  * Parse lizard's CSV output (default: `lizard -l <languages> --csv <path>`).
73
74
  * CSV format: "NLOC,CCN,Token,PARAM,Length,Location,File,Function"
74
75
  * Degrades to `[]` on parse failure; reports lead findings for complexity overages.
75
76
  */
76
- declare function parseLizard(stdout: string): ReturnType<ExternalAnalyzerCandidate["parse"]>;
77
+ declare function parseLizard(stdout: string): ExternalAnalyzerParseReport;
77
78
  declare const lizardCandidate: ExternalAnalyzerCandidate;
78
79
  /** The curated external analyzer candidate set. `defaultRun` marks the consent-free default members. */
79
80
  export declare const EXTERNAL_ANALYZER_CANDIDATES: ExternalAnalyzerCandidate[];
@@ -1 +1 @@
1
- {"version":3,"file":"candidates.d.ts","sourceRoot":"","sources":["../../../src/shared/analyzers/candidates.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAaxE;;;;;;;GAOG;AAKH,QAAA,MAAM,gBAAgB,WAAW,CAAC;AAkDlC;;;;GAIG;AACH,iBAAS,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,CAqCrF;AAED,QAAA,MAAM,iBAAiB,EAAE,yBA4BxB,CAAC;AAiCF,QAAA,MAAM,gBAAgB,EAAE,yBAevB,CAAC;AAqCF,QAAA,MAAM,eAAe,EAAE,yBAetB,CAAC;AAkBF,iBAAS,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,CAyEjF;AAED,QAAA,MAAM,aAAa,EAAE,yBA2BpB,CAAC;AA+FF;;;;;;;GAOG;AACH,iBAAS,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,CAkClF;AAED,QAAA,MAAM,cAAc,EAAE,yBA4BrB,CAAC;AAOF,QAAA,MAAM,mBAAmB,UAAU,CAAC;AA2BpC;;;;;;;;GAQG;AACH,iBAAS,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,CA+DvF;AAED,QAAA,MAAM,mBAAmB,EAAE,yBAoB1B,CAAC;AAKF,QAAA,MAAM,eAAe,EAAE,yBAmBtB,CAAC;AAKF,QAAA,MAAM,gBAAgB,EAAE,yBAkBvB,CAAC;AAOF,QAAA,MAAM,gBAAgB,WAAW,CAAC;AA2BlC;;;;;GAKG;AACH,iBAAS,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,CA6BrF;AAED,QAAA,MAAM,iBAAiB,EAAE,yBAiBxB,CAAC;AAOF,QAAA,MAAM,kBAAkB,WAAW,CAAC;AAkCpC;;;;GAIG;AACH,iBAAS,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,CA2BvF;AAED,QAAA,MAAM,mBAAmB,EAAE,yBAkB1B,CAAC;AAKF;;;;;GAKG;AACH,iBAAS,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,CA4BzF;AAED,QAAA,MAAM,qBAAqB,EAAE,yBAkB5B,CAAC;AA0CF;;;;GAIG;AACH,iBAAS,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,CAuCnF;AAED,QAAA,MAAM,eAAe,EAAE,yBA0BtB,CAAC;AAEF,wGAAwG;AACxG,eAAO,MAAM,4BAA4B,EAAE,yBAAyB,EAanE,CAAC;AAEF,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,SAAS,EACT,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,UAAU,EACV,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,EACf,WAAW,GACZ,CAAC"}
1
+ {"version":3,"file":"candidates.d.ts","sourceRoot":"","sources":["../../../src/shared/analyzers/candidates.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAUxE,OAAO,KAAK,EAEV,2BAA2B,EAC5B,MAAM,YAAY,CAAC;AAIpB;;;;;;;GAOG;AAKH,QAAA,MAAM,gBAAgB,WAAW,CAAC;AAqElC;;;;GAIG;AACH,iBAAS,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,2BAA2B,CAuClE;AAED,QAAA,MAAM,iBAAiB,EAAE,yBA4BxB,CAAC;AAiCF,QAAA,MAAM,gBAAgB,EAAE,yBAevB,CAAC;AAuCF,QAAA,MAAM,eAAe,EAAE,yBAetB,CAAC;AAkBF,iBAAS,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,2BAA2B,CAyE9D;AAED,QAAA,MAAM,aAAa,EAAE,yBA2BpB,CAAC;AA+FF;;;;;;;GAOG;AACH,iBAAS,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,2BAA2B,CAkC/D;AAED,QAAA,MAAM,cAAc,EAAE,yBA4BrB,CAAC;AAOF,QAAA,MAAM,mBAAmB,UAAU,CAAC;AA2BpC;;;;;;;;GAQG;AACH,iBAAS,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,2BAA2B,CA+DpE;AAED,QAAA,MAAM,mBAAmB,EAAE,yBAoB1B,CAAC;AAKF,QAAA,MAAM,eAAe,EAAE,yBAmBtB,CAAC;AAKF,QAAA,MAAM,gBAAgB,EAAE,yBAkBvB,CAAC;AAOF,QAAA,MAAM,gBAAgB,WAAW,CAAC;AA2BlC;;;;;GAKG;AACH,iBAAS,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,2BAA2B,CA+BlE;AAED,QAAA,MAAM,iBAAiB,EAAE,yBAiBxB,CAAC;AAOF,QAAA,MAAM,kBAAkB,WAAW,CAAC;AAkCpC;;;;GAIG;AACH,iBAAS,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,2BAA2B,CA6BpE;AAED,QAAA,MAAM,mBAAmB,EAAE,yBAkB1B,CAAC;AAKF;;;;;GAKG;AACH,iBAAS,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,2BAA2B,CA4BtE;AAED,QAAA,MAAM,qBAAqB,EAAE,yBAkB5B,CAAC;AA0CF;;;;GAIG;AACH,iBAAS,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,2BAA2B,CAgDhE;AAED,QAAA,MAAM,eAAe,EAAE,yBA0BtB,CAAC;AAEF,wGAAwG;AACxG,eAAO,MAAM,4BAA4B,EAAE,yBAAyB,EAanE,CAAC;AAEF,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,SAAS,EACT,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,UAAU,EACV,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,EACf,WAAW,GACZ,CAAC"}
@@ -4,7 +4,7 @@ import { readdirSync } from "node:fs";
4
4
  import { AUDIT_TOOLS_DIRNAME } from "../io/auditToolsPaths.js";
5
5
  import { detectNodeEcosystem, detectPythonEcosystem, detectRustEcosystem, detectRubyEcosystem, detectDockerEcosystem, detectGithubActionsEcosystem, } from "./acquisitionEngine.js";
6
6
  import { parseClippy } from "./clippy.js";
7
- import { parseRubocop } from "./rubocop.js";
7
+ import { parseRubocopOutcome } from "./rubocop.js";
8
8
  /**
9
9
  * The value-curated EXTERNAL analyzer candidate registry. This is the only place
10
10
  * concrete tools are named; the engine is tool-agnostic. Membership in the
@@ -18,6 +18,22 @@ import { parseRubocop } from "./rubocop.js";
18
18
  // before execution — see binaryAcquisition.ts).
19
19
  const GITLEAKS_VERSION = "8.21.2";
20
20
  const GITLEAKS_RELEASE_BASE = `https://github.com/gitleaks/gitleaks/releases/download/v${GITLEAKS_VERSION}`;
21
+ /** A clean parse that produced exactly these items and dropped nothing. */
22
+ function items(parsed) {
23
+ return { items: parsed };
24
+ }
25
+ /**
26
+ * A parse that could not read the payload at all. This is the affirmation that
27
+ * replaces the bare `[]` every parser used to return: an empty item list plus
28
+ * `parse_failed` is what lets the engine classify the run `parse_error` instead of
29
+ * labelling upstream schema drift a clean scan.
30
+ */
31
+ function parseFailure(tool, cause) {
32
+ return { items: [], parse_failed: true, note: `${tool}: ${cause}` };
33
+ }
34
+ function isRecord(value) {
35
+ return Boolean(value) && typeof value === "object" && !Array.isArray(value);
36
+ }
21
37
  /**
22
38
  * Look up a release-asset name part (os or cpu) in a per-tool naming table.
23
39
  * Every external tool names its assets differently (windows vs macos, x64 vs
@@ -70,11 +86,12 @@ function parseGitleaks(report) {
70
86
  findings = JSON.parse(report || "[]");
71
87
  }
72
88
  catch {
73
- return [];
89
+ return parseFailure("gitleaks", "report is not valid JSON");
74
90
  }
75
- if (!Array.isArray(findings))
76
- return [];
77
- return findings
91
+ if (!Array.isArray(findings)) {
92
+ return parseFailure("gitleaks", "report is not a JSON array of findings");
93
+ }
94
+ return items(findings
78
95
  .filter((f) => Boolean(f) && typeof f === "object")
79
96
  .map((f) => {
80
97
  const ruleId = typeof f.RuleID === "string" ? f.RuleID : "secret";
@@ -100,7 +117,7 @@ function parseGitleaks(report) {
100
117
  // the raw credential.
101
118
  raw: { rule: ruleId, fingerprint, entropy: f.Entropy },
102
119
  };
103
- });
120
+ }));
104
121
  }
105
122
  const gitleaksCandidate = {
106
123
  id: "gitleaks",
@@ -138,12 +155,13 @@ function parseSemgrep(stdout) {
138
155
  payload = JSON.parse(stdout || "{}");
139
156
  }
140
157
  catch {
141
- return [];
158
+ return parseFailure("semgrep", "output is not valid JSON");
159
+ }
160
+ if (!isRecord(payload) || !Array.isArray(payload.results)) {
161
+ return parseFailure("semgrep", "output has no `results` array");
142
162
  }
143
- const results = payload && typeof payload === "object" && Array.isArray(payload.results)
144
- ? (payload.results)
145
- : [];
146
- return results.map((r) => {
163
+ const results = payload.results;
164
+ return items(results.map((r) => {
147
165
  const extra = (r.extra ?? {});
148
166
  const start = (r.start ?? {});
149
167
  const end = (r.end ?? {});
@@ -159,7 +177,7 @@ function parseSemgrep(stdout) {
159
177
  summary: typeof extra.message === "string" ? extra.message : checkId,
160
178
  rule: checkId,
161
179
  };
162
- });
180
+ }));
163
181
  }
164
182
  const semgrepCandidate = {
165
183
  id: "semgrep",
@@ -184,11 +202,12 @@ function parseEslint(stdout) {
184
202
  files = JSON.parse(stdout || "[]");
185
203
  }
186
204
  catch {
187
- return [];
205
+ return parseFailure("eslint", "output is not valid JSON");
206
+ }
207
+ if (!Array.isArray(files)) {
208
+ return parseFailure("eslint", "output is not a JSON array of file results");
188
209
  }
189
- if (!Array.isArray(files))
190
- return [];
191
- const items = [];
210
+ const parsed = [];
192
211
  for (const file of files) {
193
212
  if (!file || typeof file !== "object")
194
213
  continue;
@@ -201,7 +220,7 @@ function parseEslint(stdout) {
201
220
  for (const m of messages) {
202
221
  const ruleId = typeof m.ruleId === "string" ? m.ruleId : "eslint";
203
222
  const line = typeof m.line === "number" ? m.line : undefined;
204
- items.push({
223
+ parsed.push({
205
224
  id: `${ruleId}:${filePath}:${line ?? 0}`,
206
225
  category: "maintainability",
207
226
  severity: m.severity === 2 ? "medium" : "low",
@@ -212,7 +231,7 @@ function parseEslint(stdout) {
212
231
  });
213
232
  }
214
233
  }
215
- return items;
234
+ return items(parsed);
216
235
  }
217
236
  const eslintCandidate = {
218
237
  id: "eslint",
@@ -251,12 +270,13 @@ function parseKnip(stdout) {
251
270
  payload = JSON.parse(stdout || "{}");
252
271
  }
253
272
  catch {
254
- return [];
273
+ return parseFailure("knip", "output is not valid JSON");
255
274
  }
256
- const issues = payload && typeof payload === "object" && Array.isArray(payload.issues)
257
- ? (payload.issues)
258
- : [];
259
- const items = [];
275
+ if (!isRecord(payload) || !Array.isArray(payload.issues)) {
276
+ return parseFailure("knip", "output has no `issues` array");
277
+ }
278
+ const issues = payload.issues;
279
+ const parsed = [];
260
280
  for (const row of issues) {
261
281
  const file = typeof row.file === "string" ? row.file : "";
262
282
  if (!file)
@@ -274,7 +294,7 @@ function parseKnip(stdout) {
274
294
  const line = typeof symbol.line === "number"
275
295
  ? symbol.line
276
296
  : undefined;
277
- items.push({
297
+ parsed.push({
278
298
  id: `knip-${issueType}:${file}:${name}:${line ?? 0}`,
279
299
  category: "maintainability",
280
300
  severity: "low",
@@ -288,7 +308,7 @@ function parseKnip(stdout) {
288
308
  // Whole-file dead code: a non-empty `files` array on this row means the module
289
309
  // itself is imported by nothing. One lead per file (path === the file).
290
310
  if (Array.isArray(row.files) && row.files.length > 0) {
291
- items.push({
311
+ parsed.push({
292
312
  id: `knip-files:${file}`,
293
313
  category: "maintainability",
294
314
  severity: "low",
@@ -309,7 +329,7 @@ function parseKnip(stdout) {
309
329
  const line = typeof symbol.line === "number"
310
330
  ? symbol.line
311
331
  : undefined;
312
- items.push({
332
+ parsed.push({
313
333
  id: `knip-dependencies:${file}:${name}`,
314
334
  category: "maintainability",
315
335
  severity: "low",
@@ -321,7 +341,7 @@ function parseKnip(stdout) {
321
341
  }
322
342
  }
323
343
  }
324
- return items;
344
+ return items(parsed);
325
345
  }
326
346
  const knipCandidate = {
327
347
  id: "knip",
@@ -459,12 +479,13 @@ function parseJscpd(report) {
459
479
  payload = JSON.parse(report || "{}");
460
480
  }
461
481
  catch {
462
- return [];
482
+ return parseFailure("jscpd", "report is not valid JSON");
483
+ }
484
+ if (!isRecord(payload) || !Array.isArray(payload.duplicates)) {
485
+ return parseFailure("jscpd", "report has no `duplicates` array");
463
486
  }
464
- const duplicates = payload && typeof payload === "object" && Array.isArray(payload.duplicates)
465
- ? (payload.duplicates)
466
- : [];
467
- return duplicates
487
+ const duplicates = payload.duplicates;
488
+ return items(duplicates
468
489
  .filter((d) => Boolean(d) && typeof d === "object")
469
490
  .map((d) => {
470
491
  const firstFile = (d.firstFile ?? {});
@@ -486,7 +507,7 @@ function parseJscpd(report) {
486
507
  summary: `jscpd: duplicate code block (${lines ?? "?"} lines) shared with ${otherPath || "another file"}`,
487
508
  rule: "jscpd-duplicate",
488
509
  };
489
- });
510
+ }));
490
511
  }
491
512
  const jscpdCandidate = {
492
513
  id: "jscpd",
@@ -562,12 +583,13 @@ function parseOsvScanner(stdout) {
562
583
  payload = JSON.parse(stdout || "{}");
563
584
  }
564
585
  catch {
565
- return [];
586
+ return parseFailure("osv-scanner", "output is not valid JSON");
566
587
  }
567
- const results = payload && typeof payload === "object" && Array.isArray(payload.results)
568
- ? (payload.results)
569
- : [];
570
- const items = [];
588
+ if (!isRecord(payload) || !Array.isArray(payload.results)) {
589
+ return parseFailure("osv-scanner", "output has no `results` array");
590
+ }
591
+ const results = payload.results;
592
+ const parsed = [];
571
593
  for (const result of results) {
572
594
  if (!result || typeof result !== "object")
573
595
  continue;
@@ -607,7 +629,7 @@ function parseOsvScanner(stdout) {
607
629
  : primary && typeof primary.details === "string"
608
630
  ? primary.details.slice(0, 200)
609
631
  : `known vulnerability in ${pkgName}`;
610
- items.push({
632
+ parsed.push({
611
633
  id: `osv:${ids.join(",")}:${pkgName}@${pkgVersion}`,
612
634
  category: "security",
613
635
  severity,
@@ -618,7 +640,7 @@ function parseOsvScanner(stdout) {
618
640
  }
619
641
  }
620
642
  }
621
- return items;
643
+ return items(parsed);
622
644
  }
623
645
  const osvScannerCandidate = {
624
646
  id: "osv-scanner",
@@ -684,7 +706,7 @@ const rubocopCandidate = {
684
706
  detect: (root) => detectRubyEcosystem(root),
685
707
  // Read-only: NO `--autocorrect`/`-a`/`-A`. `--format json` → single JSON doc.
686
708
  buildArgv: (prefix, root) => [...prefix, "--format", "json", root],
687
- parse: parseRubocop,
709
+ parse: parseRubocopOutcome,
688
710
  };
689
711
  // ---------------------------------------------------------------------------
690
712
  // hadolint — Dockerfile linter, shipped as a RAW (non-archived) release binary
@@ -728,11 +750,12 @@ function parseHadolint(stdout) {
728
750
  findings = JSON.parse(stdout || "[]");
729
751
  }
730
752
  catch {
731
- return [];
753
+ return parseFailure("hadolint", "output is not valid JSON");
754
+ }
755
+ if (!Array.isArray(findings)) {
756
+ return parseFailure("hadolint", "output is not a JSON array of diagnostics");
732
757
  }
733
- if (!Array.isArray(findings))
734
- return [];
735
- return findings
758
+ return items(findings
736
759
  .filter((f) => Boolean(f) && typeof f === "object")
737
760
  .map((f) => {
738
761
  const file = typeof f.file === "string" ? f.file : "";
@@ -751,7 +774,7 @@ function parseHadolint(stdout) {
751
774
  rule: code,
752
775
  };
753
776
  })
754
- .filter((item) => item.path.length > 0);
777
+ .filter((item) => item.path.length > 0));
755
778
  }
756
779
  const hadolintCandidate = {
757
780
  id: "hadolint",
@@ -820,11 +843,12 @@ function parseActionlint(stdout) {
820
843
  findings = JSON.parse(stdout || "[]");
821
844
  }
822
845
  catch {
823
- return [];
846
+ return parseFailure("actionlint", "output is not valid JSON");
824
847
  }
825
- if (!Array.isArray(findings))
826
- return [];
827
- return findings
848
+ if (!Array.isArray(findings)) {
849
+ return parseFailure("actionlint", "output is not a JSON array of diagnostics");
850
+ }
851
+ return items(findings
828
852
  .filter((f) => Boolean(f) && typeof f === "object")
829
853
  .map((f) => {
830
854
  const path = typeof f.filepath === "string" ? f.filepath : "";
@@ -841,7 +865,7 @@ function parseActionlint(stdout) {
841
865
  rule: kind,
842
866
  };
843
867
  })
844
- .filter((item) => item.path.length > 0);
868
+ .filter((item) => item.path.length > 0));
845
869
  }
846
870
  const actionlintCandidate = {
847
871
  id: "actionlint",
@@ -877,12 +901,13 @@ function parseTypeCoverage(stdout) {
877
901
  payload = JSON.parse(stdout || "{}");
878
902
  }
879
903
  catch {
880
- return [];
904
+ return parseFailure("type-coverage", "output is not valid JSON");
905
+ }
906
+ if (!isRecord(payload) || !Array.isArray(payload.anys)) {
907
+ return parseFailure("type-coverage", "output has no `anys` array");
881
908
  }
882
- const anys = payload && typeof payload === "object" && Array.isArray(payload.anys)
883
- ? (payload.anys)
884
- : [];
885
- return anys
909
+ const anys = payload.anys;
910
+ return items(anys
886
911
  .filter((a) => Boolean(a) && typeof a === "object")
887
912
  .map((a) => {
888
913
  const file = typeof a.file === "string" ? a.file : "";
@@ -898,7 +923,7 @@ function parseTypeCoverage(stdout) {
898
923
  rule: "type-coverage-any",
899
924
  };
900
925
  })
901
- .filter((item) => item.path.length > 0);
926
+ .filter((item) => item.path.length > 0));
902
927
  }
903
928
  const typeCoverageCandidate = {
904
929
  id: "type-coverage",
@@ -965,12 +990,15 @@ function parseCsvLine(line) {
965
990
  */
966
991
  function parseLizard(stdout) {
967
992
  if (!stdout || stdout.trim().length === 0) {
968
- return [];
993
+ return items([]);
969
994
  }
970
995
  const lines = stdout.trim().split("\n");
971
996
  if (lines.length < 2)
972
- return []; // CSV header only, no data rows
973
- const items = [];
997
+ return items([]); // CSV header only, no data rows
998
+ const parsed = [];
999
+ // A row the CSV shape does not fit is COUNTED, not silently discarded: a schema
1000
+ // drift that drops every row must not be reportable as a clean scan.
1001
+ let droppedRows = 0;
974
1002
  // Skip the CSV header (line 0) and process data rows
975
1003
  for (let i = 1; i < lines.length; i++) {
976
1004
  const line = lines[i];
@@ -978,15 +1006,19 @@ function parseLizard(stdout) {
978
1006
  continue;
979
1007
  // Parse CSV line, handling quoted fields with embedded commas
980
1008
  const parts = parseCsvLine(line);
981
- if (parts.length < 8)
1009
+ if (parts.length < 8) {
1010
+ droppedRows += 1;
982
1011
  continue;
1012
+ }
983
1013
  const nloc = parseInt(parts[0], 10);
984
1014
  const ccn = parseInt(parts[1], 10);
985
1015
  const param = parseInt(parts[3], 10);
986
1016
  const file = parts[6] || "";
987
1017
  const func = parts[7] || "unknown";
988
- if (!file || isNaN(nloc) || isNaN(ccn) || isNaN(param))
1018
+ if (!file || isNaN(nloc) || isNaN(ccn) || isNaN(param)) {
1019
+ droppedRows += 1;
989
1020
  continue;
1021
+ }
990
1022
  // Emit leads for complexity overages: CCN > 10, NLOC > 200, PARAM > 5
991
1023
  const issues = [];
992
1024
  if (ccn > 10)
@@ -996,7 +1028,7 @@ function parseLizard(stdout) {
996
1028
  if (param > 5)
997
1029
  issues.push({ rule: "lizard-params", threshold: 5, actual: param });
998
1030
  for (const issue of issues) {
999
- items.push({
1031
+ parsed.push({
1000
1032
  id: `${issue.rule}:${file}:${func}`,
1001
1033
  category: "maintainability",
1002
1034
  // Threshold bands (leads only, never verdicts): ≥2× the threshold is a
@@ -1008,7 +1040,7 @@ function parseLizard(stdout) {
1008
1040
  });
1009
1041
  }
1010
1042
  }
1011
- return items;
1043
+ return { items: parsed, ...(droppedRows > 0 ? { dropped_rows: droppedRows } : {}) };
1012
1044
  }
1013
1045
  const lizardCandidate = {
1014
1046
  id: "lizard",