code-auditor-mcp 3.4.18 → 3.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +99 -0
  3. package/README.md +5 -5
  4. package/dist/analyzers/applicability.d.ts +19 -5
  5. package/dist/analyzers/applicability.d.ts.map +1 -1
  6. package/dist/analyzers/applicability.js +36 -24
  7. package/dist/analyzers/applicability.js.map +1 -1
  8. package/dist/analyzers/cross-language/APIContractAnalyzer.d.ts.map +1 -1
  9. package/dist/analyzers/cross-language/APIContractAnalyzer.js +23 -2
  10. package/dist/analyzers/cross-language/APIContractAnalyzer.js.map +1 -1
  11. package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts +52 -9
  12. package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts.map +1 -1
  13. package/dist/analyzers/cross-language/DependencyGraphBuilder.js +228 -55
  14. package/dist/analyzers/cross-language/DependencyGraphBuilder.js.map +1 -1
  15. package/dist/analyzers/cross-language/SchemaValidator.d.ts +19 -12
  16. package/dist/analyzers/cross-language/SchemaValidator.d.ts.map +1 -1
  17. package/dist/analyzers/cross-language/SchemaValidator.js +78 -111
  18. package/dist/analyzers/cross-language/SchemaValidator.js.map +1 -1
  19. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.d.ts +0 -6
  20. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.d.ts.map +1 -1
  21. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js +85 -73
  22. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js.map +1 -1
  23. package/dist/analyzers/documentationAnalyzer.js +5 -5
  24. package/dist/analyzers/documentationAnalyzer.js.map +1 -1
  25. package/dist/analyzers/invariantsAnalyzer.d.ts.map +1 -1
  26. package/dist/analyzers/invariantsAnalyzer.js +1 -0
  27. package/dist/analyzers/invariantsAnalyzer.js.map +1 -1
  28. package/dist/analyzers/provenance.d.ts +7 -9
  29. package/dist/analyzers/provenance.d.ts.map +1 -1
  30. package/dist/analyzers/provenance.js +88 -124
  31. package/dist/analyzers/provenance.js.map +1 -1
  32. package/dist/analyzers/reactAnalyzer.d.ts.map +1 -1
  33. package/dist/analyzers/reactAnalyzer.js +120 -21
  34. package/dist/analyzers/reactAnalyzer.js.map +1 -1
  35. package/dist/analyzers/ruleRegistry.d.ts +35 -12
  36. package/dist/analyzers/ruleRegistry.d.ts.map +1 -1
  37. package/dist/analyzers/ruleRegistry.js +66 -108
  38. package/dist/analyzers/ruleRegistry.js.map +1 -1
  39. package/dist/analyzers/ruleTiming.d.ts +2 -2
  40. package/dist/analyzers/ruleTiming.js +2 -2
  41. package/dist/analyzers/universal/UniversalConventionsAnalyzer.d.ts.map +1 -1
  42. package/dist/analyzers/universal/UniversalConventionsAnalyzer.js +60 -24
  43. package/dist/analyzers/universal/UniversalConventionsAnalyzer.js.map +1 -1
  44. package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts.map +1 -1
  45. package/dist/analyzers/universal/UniversalDRYAnalyzer.js +5 -2
  46. package/dist/analyzers/universal/UniversalDRYAnalyzer.js.map +1 -1
  47. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts.map +1 -1
  48. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js +82 -71
  49. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js.map +1 -1
  50. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts +2 -1
  51. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts.map +1 -1
  52. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js +23 -12
  53. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js.map +1 -1
  54. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts +11 -1
  55. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts.map +1 -1
  56. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js +60 -22
  57. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js.map +1 -1
  58. package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts.map +1 -1
  59. package/dist/analyzers/universal/UniversalSchemaAnalyzer.js +5 -2
  60. package/dist/analyzers/universal/UniversalSchemaAnalyzer.js.map +1 -1
  61. package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts +2 -3
  62. package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts.map +1 -1
  63. package/dist/analyzers/universal/UniversalStylesAnalyzer.js +258 -87
  64. package/dist/analyzers/universal/UniversalStylesAnalyzer.js.map +1 -1
  65. package/dist/analyzers/universal/schema/codeAnalysis.d.ts.map +1 -1
  66. package/dist/analyzers/universal/schema/codeAnalysis.js +7 -1
  67. package/dist/analyzers/universal/schema/codeAnalysis.js.map +1 -1
  68. package/dist/analyzers/universal/schema/discovery.d.ts +29 -1
  69. package/dist/analyzers/universal/schema/discovery.d.ts.map +1 -1
  70. package/dist/analyzers/universal/schema/discovery.js +76 -21
  71. package/dist/analyzers/universal/schema/discovery.js.map +1 -1
  72. package/dist/analyzers/universal/schema/jsonSchema.js +7 -11
  73. package/dist/analyzers/universal/schema/jsonSchema.js.map +1 -1
  74. package/dist/auditRouter.d.ts +41 -0
  75. package/dist/auditRouter.d.ts.map +1 -0
  76. package/dist/auditRouter.js +185 -0
  77. package/dist/auditRouter.js.map +1 -0
  78. package/dist/auditRunner.d.ts.map +1 -1
  79. package/dist/auditRunner.js +93 -84
  80. package/dist/auditRunner.js.map +1 -1
  81. package/dist/cli.js +306 -95
  82. package/dist/cli.js.map +1 -1
  83. package/dist/codeIndexDB.d.ts.map +1 -1
  84. package/dist/codeIndexDB.js +41 -7
  85. package/dist/codeIndexDB.js.map +1 -1
  86. package/dist/componentScanner.d.ts.map +1 -1
  87. package/dist/componentScanner.js +2 -1
  88. package/dist/componentScanner.js.map +1 -1
  89. package/dist/config/configLoader.d.ts +9 -0
  90. package/dist/config/configLoader.d.ts.map +1 -1
  91. package/dist/config/configLoader.js +45 -2
  92. package/dist/config/configLoader.js.map +1 -1
  93. package/dist/config/defaults.d.ts +8 -1
  94. package/dist/config/defaults.d.ts.map +1 -1
  95. package/dist/config/defaults.js +19 -3
  96. package/dist/config/defaults.js.map +1 -1
  97. package/dist/dataPaths.js +18 -1
  98. package/dist/dataPaths.js.map +1 -1
  99. package/dist/enforcement/gate.d.ts +14 -19
  100. package/dist/enforcement/gate.d.ts.map +1 -1
  101. package/dist/enforcement/gate.js +27 -45
  102. package/dist/enforcement/gate.js.map +1 -1
  103. package/dist/functionScanner.d.ts.map +1 -1
  104. package/dist/functionScanner.js +1 -17
  105. package/dist/functionScanner.js.map +1 -1
  106. package/dist/invariants/ruleEngine.d.ts +8 -0
  107. package/dist/invariants/ruleEngine.d.ts.map +1 -1
  108. package/dist/invariants/ruleEngine.js +35 -16
  109. package/dist/invariants/ruleEngine.js.map +1 -1
  110. package/dist/languages/LanguageOrchestrator.d.ts +9 -10
  111. package/dist/languages/LanguageOrchestrator.d.ts.map +1 -1
  112. package/dist/languages/LanguageOrchestrator.js +135 -101
  113. package/dist/languages/LanguageOrchestrator.js.map +1 -1
  114. package/dist/languages/RuntimeManager.d.ts +28 -1
  115. package/dist/languages/RuntimeManager.d.ts.map +1 -1
  116. package/dist/languages/RuntimeManager.js +158 -47
  117. package/dist/languages/RuntimeManager.js.map +1 -1
  118. package/dist/languages/go/GoAdapter.d.ts +2 -0
  119. package/dist/languages/go/GoAdapter.d.ts.map +1 -1
  120. package/dist/languages/go/GoAdapter.js +15 -22
  121. package/dist/languages/go/GoAdapter.js.map +1 -1
  122. package/dist/languages/go/analyzer +0 -0
  123. package/dist/languages/go/analyzer-src/analyzer.go +510 -0
  124. package/dist/languages/go/analyzer-src/go.mod +3 -0
  125. package/dist/languages/go/analyzer-src/indexer.go +268 -0
  126. package/dist/languages/go/analyzer-src/parser.go +461 -0
  127. package/dist/languages/go/analyzer-src/solid.go +395 -0
  128. package/dist/languages/go/analyzer-src/testconventions.go +25 -0
  129. package/dist/languages/go/analyzer-src/types.go +148 -0
  130. package/dist/languages/go/go.mod +7 -0
  131. package/dist/languages/go/main.go +203 -0
  132. package/dist/languages/testConventions.d.ts +35 -0
  133. package/dist/languages/testConventions.d.ts.map +1 -0
  134. package/dist/languages/testConventions.js +51 -0
  135. package/dist/languages/testConventions.js.map +1 -0
  136. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts +3 -0
  137. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts.map +1 -1
  138. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js +25 -18
  139. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js.map +1 -1
  140. package/dist/mcp-tools/whitelistTools.d.ts +1 -1
  141. package/dist/mcp-tools-shared.d.ts +0 -3
  142. package/dist/mcp-tools-shared.d.ts.map +1 -1
  143. package/dist/mcp-tools-shared.js +8 -117
  144. package/dist/mcp-tools-shared.js.map +1 -1
  145. package/dist/mcp.js +3 -1
  146. package/dist/mcp.js.map +1 -1
  147. package/dist/mcpAuditJobs.d.ts.map +1 -1
  148. package/dist/mcpAuditJobs.js +13 -0
  149. package/dist/mcpAuditJobs.js.map +1 -1
  150. package/dist/nextFile.d.ts +21 -0
  151. package/dist/nextFile.d.ts.map +1 -0
  152. package/dist/nextFile.js +51 -0
  153. package/dist/nextFile.js.map +1 -0
  154. package/dist/nextFileIncremental.d.ts +141 -0
  155. package/dist/nextFileIncremental.d.ts.map +1 -0
  156. package/dist/nextFileIncremental.js +314 -0
  157. package/dist/nextFileIncremental.js.map +1 -0
  158. package/dist/pipeline.d.ts.map +1 -1
  159. package/dist/pipeline.js +43 -3
  160. package/dist/pipeline.js.map +1 -1
  161. package/dist/pipelineAdapters.d.ts +17 -0
  162. package/dist/pipelineAdapters.d.ts.map +1 -1
  163. package/dist/pipelineAdapters.js +791 -40
  164. package/dist/pipelineAdapters.js.map +1 -1
  165. package/dist/reporting/jsonReportGenerator.d.ts.map +1 -1
  166. package/dist/reporting/jsonReportGenerator.js +11 -30
  167. package/dist/reporting/jsonReportGenerator.js.map +1 -1
  168. package/dist/styles/styleExtractor.js +2 -2
  169. package/dist/styles/styleExtractor.js.map +1 -1
  170. package/dist/styles/styleIndexer.d.ts +7 -0
  171. package/dist/styles/styleIndexer.d.ts.map +1 -1
  172. package/dist/styles/styleIndexer.js +51 -67
  173. package/dist/styles/styleIndexer.js.map +1 -1
  174. package/dist/styles/types.d.ts +3 -2
  175. package/dist/styles/types.d.ts.map +1 -1
  176. package/dist/types/crossLanguage.d.ts +1 -0
  177. package/dist/types/crossLanguage.d.ts.map +1 -1
  178. package/dist/types.d.ts +43 -34
  179. package/dist/types.d.ts.map +1 -1
  180. package/dist/types.js.map +1 -1
  181. package/dist/utils/fileDiscovery.d.ts +9 -0
  182. package/dist/utils/fileDiscovery.d.ts.map +1 -1
  183. package/dist/utils/fileDiscovery.js +18 -0
  184. package/dist/utils/fileDiscovery.js.map +1 -1
  185. package/package.json +16 -6
  186. package/plugin/.claude-plugin/plugin.json +1 -1
  187. package/plugin/README.md +11 -9
  188. package/plugin/hooks/hooks.json +4 -0
  189. package/plugin/scripts/hook-audit.sh +20 -30
  190. package/plugin/scripts/hook-common.sh +63 -0
  191. package/plugin/scripts/hook-self-audit.sh +99 -0
  192. package/plugin/skills/code-auditor/SKILL-RULE-KINDS.md +55 -9
  193. package/plugin/skills/code-auditor/SKILL.md +22 -23
@@ -183,22 +183,18 @@ function checkNumericRangeField(schema, ctx, path) {
183
183
  }
184
184
  }
185
185
  function identifySchemaFiles(files, config) {
186
- if (!config.schemaFilePatterns)
187
- return [];
188
- return files.filter(file => {
189
- const fileName = file.split('/').pop() || '';
190
- return config.schemaFilePatterns.some(pattern => {
191
- const regex = new RegExp(pattern.replace('*', '.*'));
192
- return regex.test(fileName);
193
- });
194
- });
186
+ return filterByFilePatterns(files, config.schemaFilePatterns);
195
187
  }
196
188
  function identifyDataFiles(files, config) {
197
- if (!config.dataFilePatterns)
189
+ return filterByFilePatterns(files, config.dataFilePatterns);
190
+ }
191
+ /** Keep files whose basename matches any of the given `*`-style patterns. */
192
+ function filterByFilePatterns(files, patterns) {
193
+ if (!patterns)
198
194
  return [];
199
195
  return files.filter(file => {
200
196
  const fileName = file.split('/').pop() || '';
201
- return config.dataFilePatterns.some(pattern => {
197
+ return patterns.some(pattern => {
202
198
  const regex = new RegExp(pattern.replace('*', '.*'));
203
199
  return regex.test(fileName);
204
200
  });
@@ -1 +1 @@
1
- {"version":3,"file":"jsonSchema.js","sourceRoot":"","sources":["../../../../src/analyzers/universal/schema/jsonSchema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jsonSchema.js","sourceRoot":"","sources":["../../../../src/analyzers/universal/schema/jsonSchema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Audit router — the single entry point for choosing between the two analysis
3
+ * paths: the tree-sitter TypeScript pipeline (`createAuditRunner`) and the Go
4
+ * subprocess orchestrator (`LanguageOrchestrator`).
5
+ *
6
+ * The CLI and the MCP `audit.run` tool both need the same decision — "are there
7
+ * Go files? route to the Go subprocess; otherwise use the TS pipeline" — and
8
+ * for months they did not share it: `handleAudit` checked for `.go` and routed
9
+ * to the orchestrator, while the CLI called `createAuditRunner` directly and
10
+ * fed Go ASTs to TypeScript-tuned analyzers (the 762-finding gin result). Two
11
+ * copies, one silently wrong — the same shape as the duplicate
12
+ * `getLanguageFromPath`, one layer up.
13
+ *
14
+ * This module is that decision, in exactly one place. Both surfaces call
15
+ * `runAuditDispatch`; a future refactor that unwires one of them can no longer
16
+ * silently break the other.
17
+ */
18
+ import { AuditResult, AuditRunnerOptions } from './types.js';
19
+ /**
20
+ * True when `target` (a file or directory) is, or contains, a file with the
21
+ * given extension. Walked recursively for directories.
22
+ *
23
+ * The walk skips the same any-depth excluded dirs discovery skips
24
+ * (`node_modules`, `.git`, `dist`, …). Without that, a single `.go` file
25
+ * buried in a dependency's `node_modules` (e.g. `flatted`'s golang port) would
26
+ * route an otherwise pure-TS project through the Go subprocess — which drops
27
+ * every non-Go analyzer and collapses the audit to a fraction of its findings.
28
+ */
29
+ export declare function hasFilesWithExtension(target: string, ext: string): Promise<boolean>;
30
+ /**
31
+ * Convert a polyglot analysis result to the legacy `AuditResult` shape the
32
+ * reporting and CLI surfaces consume.
33
+ */
34
+ export declare function convertPolyglotToAuditResult(polyglotResult: any, auditPath: string): AuditResult;
35
+ /**
36
+ * Run an audit, routing to the Go subprocess when the target contains Go files
37
+ * and to the TypeScript tree-sitter pipeline otherwise. The single place both
38
+ * the CLI and MCP surfaces make that decision.
39
+ */
40
+ export declare function runAuditDispatch(options: AuditRunnerOptions): Promise<AuditResult>;
41
+ //# sourceMappingURL=auditRouter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auditRouter.d.ts","sourceRoot":"","sources":["../src/auditRouter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAQ7D;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAmBzF;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,cAAc,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,GAAG,WAAW,CAgFhG;AAWD;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CAiCxF"}
@@ -0,0 +1,185 @@
1
+ /**
2
+ * Audit router — the single entry point for choosing between the two analysis
3
+ * paths: the tree-sitter TypeScript pipeline (`createAuditRunner`) and the Go
4
+ * subprocess orchestrator (`LanguageOrchestrator`).
5
+ *
6
+ * The CLI and the MCP `audit.run` tool both need the same decision — "are there
7
+ * Go files? route to the Go subprocess; otherwise use the TS pipeline" — and
8
+ * for months they did not share it: `handleAudit` checked for `.go` and routed
9
+ * to the orchestrator, while the CLI called `createAuditRunner` directly and
10
+ * fed Go ASTs to TypeScript-tuned analyzers (the 762-finding gin result). Two
11
+ * copies, one silently wrong — the same shape as the duplicate
12
+ * `getLanguageFromPath`, one layer up.
13
+ *
14
+ * This module is that decision, in exactly one place. Both surfaces call
15
+ * `runAuditDispatch`; a future refactor that unwires one of them can no longer
16
+ * silently break the other.
17
+ */
18
+ import * as path from 'path';
19
+ import { promises as fs } from 'fs';
20
+ import { createAuditRunner } from './auditRunner.js';
21
+ import { RuntimeManager } from './languages/RuntimeManager.js';
22
+ import { LanguageOrchestrator } from './languages/LanguageOrchestrator.js';
23
+ import { CodeIndexDB } from './codeIndexDB.js';
24
+ import { makeVisitorStatus } from './pipeline.js';
25
+ import { DEFAULT_EXCLUDED_ANY_DEPTH_DIRS } from './utils/fileDiscovery.js';
26
+ /**
27
+ * True when `target` (a file or directory) is, or contains, a file with the
28
+ * given extension. Walked recursively for directories.
29
+ *
30
+ * The walk skips the same any-depth excluded dirs discovery skips
31
+ * (`node_modules`, `.git`, `dist`, …). Without that, a single `.go` file
32
+ * buried in a dependency's `node_modules` (e.g. `flatted`'s golang port) would
33
+ * route an otherwise pure-TS project through the Go subprocess — which drops
34
+ * every non-Go analyzer and collapses the audit to a fraction of its findings.
35
+ */
36
+ export async function hasFilesWithExtension(target, ext) {
37
+ try {
38
+ const stats = await fs.stat(target);
39
+ if (stats.isFile()) {
40
+ return path.extname(target).toLowerCase() === ext;
41
+ }
42
+ const entries = await fs.readdir(target, { withFileTypes: true });
43
+ for (const entry of entries) {
44
+ if (entry.isFile()) {
45
+ if (path.extname(entry.name).toLowerCase() === ext)
46
+ return true;
47
+ }
48
+ else if (entry.isDirectory()) {
49
+ if (DEFAULT_EXCLUDED_ANY_DEPTH_DIRS.has(entry.name))
50
+ continue;
51
+ if (await hasFilesWithExtension(path.join(target, entry.name), ext))
52
+ return true;
53
+ }
54
+ }
55
+ return false;
56
+ }
57
+ catch {
58
+ return false;
59
+ }
60
+ }
61
+ /**
62
+ * Convert a polyglot analysis result to the legacy `AuditResult` shape the
63
+ * reporting and CLI surfaces consume.
64
+ */
65
+ export function convertPolyglotToAuditResult(polyglotResult, auditPath) {
66
+ const violations = polyglotResult.violations || [];
67
+ const criticalIssues = violations.filter((v) => v.severity === 'critical').length;
68
+ const warnings = violations.filter((v) => v.severity === 'warning').length;
69
+ const suggestions = violations.filter((v) => v.severity === 'suggestion').length;
70
+ const totalFiles = polyglotResult.metrics?.totalFiles || 0;
71
+ const executionTime = polyglotResult.metrics?.executionTime || 0;
72
+ // Bucket violations by their category for the summary. The Go subprocess
73
+ // labels findings with `category` (open-closed, import-style, …); the
74
+ // TypeScript pipeline uses `type` for the same purpose. Fall back to the
75
+ // analyzer label so a categoryless finding still lands in a real bucket
76
+ // rather than vanishing into an empty `violationsByCategory`.
77
+ const violationsByCategory = {};
78
+ for (const v of violations) {
79
+ const category = v.category || v.type || v.analyzer || 'unknown';
80
+ violationsByCategory[category] = (violationsByCategory[category] || 0) + 1;
81
+ }
82
+ const topIssues = Object.entries(violationsByCategory)
83
+ .sort(([, a], [, b]) => b - a)
84
+ .slice(0, 5)
85
+ .map(([type, count]) => ({ type, count }));
86
+ // Build analyzerResults dynamically from the actual analyzer labels on the
87
+ // violations. The Go subprocess labels findings with the analyzer that
88
+ // produced them (`solid`, and potentially `imports`/`errors`/`goroutines`/
89
+ // `channels`) — never `go`. A hardcoded `go` bucket filtering
90
+ // `v.analyzer === 'go'` was therefore structurally always zero.
91
+ const analyzerResults = {};
92
+ for (const v of violations) {
93
+ const key = v.analyzer || 'unknown';
94
+ if (!analyzerResults[key]) {
95
+ analyzerResults[key] = {
96
+ violations: [],
97
+ status: makeVisitorStatus(totalFiles),
98
+ executionTime,
99
+ analyzerName: key,
100
+ };
101
+ }
102
+ analyzerResults[key].violations.push(v);
103
+ }
104
+ // Surface languages discovered on disk but skipped (no runtime), plus any
105
+ // subprocess errors, as diagnostics — so "Go files present, Go toolchain
106
+ // not found" reaches the report instead of collapsing into a silent zero.
107
+ const diagnostics = [];
108
+ for (const na of polyglotResult.notApplicable || []) {
109
+ diagnostics.push({ analyzerName: na.language, kind: 'notApplicable', message: na.reason });
110
+ }
111
+ for (const err of polyglotResult.errors || []) {
112
+ diagnostics.push({
113
+ analyzerName: err.language || 'polyglot',
114
+ kind: err.type || 'error',
115
+ message: err.message,
116
+ });
117
+ }
118
+ return {
119
+ timestamp: new Date(),
120
+ summary: {
121
+ totalViolations: violations.length,
122
+ criticalIssues,
123
+ warnings,
124
+ suggestions,
125
+ totalFiles,
126
+ violationsByCategory,
127
+ topIssues,
128
+ },
129
+ analyzerResults,
130
+ recommendations: [],
131
+ metadata: {
132
+ auditDuration: executionTime,
133
+ filesAnalyzed: totalFiles,
134
+ analyzersRun: Object.keys(analyzerResults),
135
+ fileToFunctionsMap: polyglotResult.indexEntries
136
+ ? createFileToFunctionsMap(polyglotResult.indexEntries)
137
+ : {},
138
+ ...(diagnostics.length > 0 && { diagnostics }),
139
+ },
140
+ };
141
+ }
142
+ function createFileToFunctionsMap(indexEntries) {
143
+ const fileMap = {};
144
+ for (const entry of indexEntries) {
145
+ if (!fileMap[entry.file])
146
+ fileMap[entry.file] = [];
147
+ fileMap[entry.file].push(entry);
148
+ }
149
+ return fileMap;
150
+ }
151
+ /**
152
+ * Run an audit, routing to the Go subprocess when the target contains Go files
153
+ * and to the TypeScript tree-sitter pipeline otherwise. The single place both
154
+ * the CLI and MCP surfaces make that decision.
155
+ */
156
+ export async function runAuditDispatch(options) {
157
+ // Resolve to an absolute path up front. The Go subprocess is spawned with a
158
+ // cwd of its own (dist/languages/go), so relative file paths produced by
159
+ // discovery (e.g. `bench/real/gin/auth.go`) would not resolve from its cwd —
160
+ // the subprocess errors "no such file or directory" and the whole audit
161
+ // collapses to zero findings. Absolute paths make discovery absolute, which
162
+ // works for both the in-process TS half and the Go subprocess.
163
+ const projectRoot = path.resolve(options.projectRoot || process.cwd());
164
+ const hasGo = await hasFilesWithExtension(projectRoot, '.go');
165
+ if (!hasGo) {
166
+ const runner = createAuditRunner(options);
167
+ return runner.run();
168
+ }
169
+ // Go present → the polyglot orchestrator, which runs the Go subprocess for
170
+ // `.go` files and the node runtime for any TypeScript/JavaScript alongside.
171
+ const runtimeManager = new RuntimeManager();
172
+ await runtimeManager.initialize();
173
+ const codeIndex = CodeIndexDB.getInstance();
174
+ await codeIndex.initialize();
175
+ const orchestrator = new LanguageOrchestrator(runtimeManager, codeIndex);
176
+ const polyglotResult = await orchestrator.analyzePolyglotProject(projectRoot, {
177
+ analyzers: options.enabledAnalyzers,
178
+ minSeverity: options.minSeverity,
179
+ updateIndex: options.indexFunctions,
180
+ enableCrossLanguageAnalysis: true,
181
+ buildCrossReferences: true,
182
+ });
183
+ return convertPolyglotToAuditResult(polyglotResult, projectRoot);
184
+ }
185
+ //# sourceMappingURL=auditRouter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auditRouter.js","sourceRoot":"","sources":["../src/auditRouter.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"auditRunner.d.ts","sourceRoot":"","sources":["../src/auditRunner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,cAAc,EAWf,MAAM,YAAY,CAAC;AA6DpB;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,kBAAuB;oCAiBnB,MAAM,KAAG,OAAO,CAAC,kBAAkB,CAAC;uBAQjD,kBAAkB,KAAG,OAAO,CAAC,WAAW,CAAC;6BAogC1B,WAAW,UAAU,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC;EAS7F;AAkRD,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,WAAW,GAAG,YAAY,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,gBAAgB,EAAE,MAAM,EAAE,EAC1B,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,EAC/C,UAAU,CAAC,EAAE,MAAM,GAClB,iBAAiB,EAAE,CA0CrB;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CAGjF;AAED,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"auditRunner.d.ts","sourceRoot":"","sources":["../src/auditRunner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,cAAc,EAWf,MAAM,YAAY,CAAC;AAkEpB;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,kBAAuB;oCAQnB,MAAM,KAAG,OAAO,CAAC,kBAAkB,CAAC;uBAQjD,kBAAkB,KAAG,OAAO,CAAC,WAAW,CAAC;6BAkhC1B,WAAW,UAAU,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC;EAS7F;AAkRD,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,WAAW,GAAG,YAAY,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,gBAAgB,EAAE,MAAM,EAAE,EAC1B,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,EAC/C,UAAU,CAAC,EAAE,MAAM,GAClB,iBAAiB,EAAE,CA0CrB;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CAGjF;AAED,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC"}
@@ -11,15 +11,15 @@ import { randomUUID } from 'node:crypto';
11
11
  import { AuditAbortedError, AuditHandoffError, } from './types.js';
12
12
  import { discoverFiles, discoverFilesDetailed } from './utils/fileDiscovery.js';
13
13
  import { FileAccounting } from './services/fileAccounting.js';
14
- import { loadConfig } from './config/configLoader.js';
14
+ import { loadConfig, findConfigFileUp } from './config/configLoader.js';
15
15
  import { mergePathProfiles } from './config/defaults.js';
16
16
  import { checkThresholdRationales } from './config/thresholdRationales.js';
17
+ import { ALL_ANALYZERS } from './analyzers/ruleRegistry.js';
17
18
  import { applyPresets } from './presets/presets.js';
18
19
  import { generateReport } from './reporting/reportGenerator.js';
19
20
  import { extractFunctionsFromFile } from './functionScanner.js';
20
21
  import { isMcpDebugEnabled, logMcpDebug, logMcpInfo } from './mcpDiagnostics.js';
21
22
  import { loadBaseline, matchFindings, hashBaseline } from './baseline.js';
22
- import { collectSuppressionDirectives, applySuppressions } from './enforcement/suppressions.js';
23
23
  import { computeImpact, LATENCY_BUDGET_MS } from './graph/blastRadius.js';
24
24
  // Import universal analyzers
25
25
  import { initializeLanguages } from './languages/index.js';
@@ -29,7 +29,7 @@ import { CodeIndexDB } from './codeIndexDB.js';
29
29
  import { writeAuditToLedger, detectRunInput } from './ledger.js';
30
30
  // Pipeline imports (Spec 25 — pipeline replaces hand-rolled analyzer loop)
31
31
  import { runPipeline, writeIndexFactsToDb, makeVisitorStatus, getFilesProcessed, isVisitorStatus, buildCoverageReport } from './pipeline.js';
32
- import { createSolidVisitor, createDryVisitor, createDataAccessVisitor, createDocumentationVisitor, createFunctionIndexVisitor, createStylesCssVisitor, createReactVisitor, createStylesReducer, createConventionsReducer, createCrossDomainReducer, createInvariantsReducer, createSchemaSqlVisitor, createSchemaCodeVisitor, createSchemaPrismaVisitor, createSchemaJsonVisitor, createSchemaReducer, } from './pipelineAdapters.js';
32
+ import { createSolidVisitor, createDryVisitor, createDataAccessVisitor, createDocumentationVisitor, createFunctionIndexVisitor, createStylesCssVisitor, createStylesSourceVisitor, createReactVisitor, createStylesReducer, createConventionsReducer, createCrossDomainReducer, createInvariantsReducer, createSchemaSqlVisitor, createSchemaCodeVisitor, createSchemaPrismaVisitor, createSchemaJsonVisitor, createSchemaReducer, createCrossLanguageEntityVisitor, createSchemaValidatorReducer, createAPIContractReducer, createDependencyGraphReducer, } from './pipelineAdapters.js';
33
33
  // Package version — read once at module load
34
34
  const __auditRunnerDirname = path.dirname(fileURLToPath(import.meta.url));
35
35
  const _pkg = JSON.parse(readFileSync(path.join(__auditRunnerDirname, '..', 'package.json'), 'utf-8'));
@@ -44,18 +44,7 @@ const SCHEMA_SUB_VISITORS = ['schema-sql', 'schema-code', 'schema-prisma', 'sche
44
44
  * Create an audit runner with the given options
45
45
  */
46
46
  export function createAuditRunner(options = {}) {
47
- const analyzerRegistry = {
48
- solid: { name: 'solid' },
49
- dry: { name: 'dry' },
50
- 'data-access': { name: 'data-access' },
51
- react: { name: 'react' },
52
- documentation: { name: 'documentation' },
53
- invariants: { name: 'invariants' },
54
- schema: { name: 'schema' },
55
- styles: { name: 'styles' },
56
- conventions: { name: 'conventions' },
57
- 'cross-domain': { name: 'cross-domain' },
58
- };
47
+ const analyzerRegistry = Object.fromEntries(ALL_ANALYZERS.map((name) => [name, { name }]));
59
48
  /**
60
49
  * Load configuration from file
61
50
  */
@@ -67,19 +56,16 @@ export function createAuditRunner(options = {}) {
67
56
  * Run the audit
68
57
  */
69
58
  async function run(runOptions) {
70
- // Auto-load .codeauditor.json from project root so the programmatic API
71
- // respects the same config the CLI surface reads. RunOptions (caller)
72
- // override file config, and createAuditRunner options override both.
59
+ // Auto-load .codeauditor.json so the programmatic API respects the same
60
+ // config the CLI surface reads. Walk UP from the audit path so a scoped
61
+ // audit (`--path src`) still finds the project-root config rather than
62
+ // silently using defaults. RunOptions (caller) override file config, and
63
+ // createAuditRunner options override both.
73
64
  const rootForConfig = runOptions?.projectRoot || options.projectRoot || process.cwd();
74
- let fileConfig = {};
75
- try {
76
- const configPath = path.join(rootForConfig, '.codeauditor.json');
77
- await fs.access(configPath);
78
- fileConfig = await loadConfig({ configPath });
79
- }
80
- catch {
81
- // No config file — proceed with defaults
82
- }
65
+ const configPath = await findConfigFileUp(rootForConfig);
66
+ const fileConfig = configPath
67
+ ? await loadConfig({ configPath })
68
+ : {};
83
69
  const mergedOptions = { ...fileConfig, ...options, ...runOptions };
84
70
  // Spec 36 R5 — a threshold change needs a written rationale. Check the
85
71
  // user-facing analyzerConfigs layer (project config + inline options)
@@ -316,12 +302,17 @@ export function createAuditRunner(options = {}) {
316
302
  // `.css`/`.scss`), so `consumedFiles` is the "any layer read it" evidence
317
303
  // for files dropped at stage 2 — threaded into the pipeline below.
318
304
  let styleConsumedFiles = [];
305
+ // In-scope files that contributed style data during the sync. Undefined when
306
+ // the sync did not run or failed — the styles reducer must not short-circuit
307
+ // on that (it falls back to full analysis), so we only assign on success.
308
+ let styleContributingFiles;
319
309
  if (enabledAnalyzers.includes('styles')) {
320
310
  try {
321
311
  const styleDb = CodeIndexDB.getInstance(undefined, root);
322
312
  await styleDb.initialize();
323
313
  const styleSyncResult = await syncStyleIndex(styleDb.rawDb, files, root, { scoped: isScoped });
324
314
  styleConsumedFiles = styleSyncResult.consumedFiles;
315
+ styleContributingFiles = styleSyncResult.contributingFiles;
325
316
  logMcpInfo('style-index', 'style index sync complete', {
326
317
  changed: styleSyncResult.changed,
327
318
  skipped: styleSyncResult.skipped,
@@ -394,6 +385,7 @@ export function createAuditRunner(options = {}) {
394
385
  exec: (sql) => auditIndex.rawDb.exec(sql),
395
386
  getMeta: (key) => auditIndex.getMeta(key),
396
387
  getUntestedTopDecile: (td) => auditIndex.getUntestedTopDecile(td),
388
+ rawDb: auditIndex.rawDb,
397
389
  };
398
390
  }
399
391
  // ── 1. Build pipeline adapters ───────────────────────────────────────
@@ -409,6 +401,10 @@ export function createAuditRunner(options = {}) {
409
401
  // styles-css visitor — AST-extracts .css files into style_* tables (Spec 26 Phase 2)
410
402
  if (enabledAnalyzers.includes('styles'))
411
403
  pipelineVisitors.push(createStylesCssVisitor());
404
+ // styles-source visitor — AST-extracts TS/JS CSS-in-JS into style_* tables,
405
+ // reusing the stage-1 parse (eliminates the style-index re-parse).
406
+ if (enabledAnalyzers.includes('styles'))
407
+ pipelineVisitors.push(createStylesSourceVisitor());
412
408
  if (enabledAnalyzers.includes('solid'))
413
409
  pipelineVisitors.push(createSolidVisitor());
414
410
  if (enabledAnalyzers.includes('dry')) {
@@ -438,6 +434,22 @@ export function createAuditRunner(options = {}) {
438
434
  pipelineVisitors.push(createSchemaJsonVisitor());
439
435
  pipelineReducers.push(createSchemaReducer());
440
436
  }
437
+ // Cross-language analyzers (SchemaValidator, APIContractAnalyzer,
438
+ // DependencyGraphBuilder) — three Stage-4 reducers fed by one shared
439
+ // entity-extraction visitor. The visitor is cheap (per-file) and runs
440
+ // whenever ANY cross-language analyzer is enabled; the corpus-wide reducers
441
+ // short-circuit on scoped/diff runs.
442
+ const crossLanguageEnabled = ['schema-validator', 'api-contract', 'dependency-graph']
443
+ .some((a) => enabledAnalyzers.includes(a));
444
+ if (crossLanguageEnabled) {
445
+ pipelineVisitors.push(createCrossLanguageEntityVisitor());
446
+ }
447
+ if (enabledAnalyzers.includes('schema-validator'))
448
+ pipelineDerivedReducers.push(createSchemaValidatorReducer());
449
+ if (enabledAnalyzers.includes('api-contract'))
450
+ pipelineDerivedReducers.push(createAPIContractReducer());
451
+ if (enabledAnalyzers.includes('dependency-graph'))
452
+ pipelineDerivedReducers.push(createDependencyGraphReducer());
441
453
  // ── 2. Safeguard warnings ────────────────────────────────────────────
442
454
  if (auditIndex) {
443
455
  if (enabledAnalyzers.includes('cross-domain')) {
@@ -530,6 +542,7 @@ export function createAuditRunner(options = {}) {
530
542
  isScoped,
531
543
  fileAccounting,
532
544
  consumedFilePaths: styleConsumedFiles,
545
+ styleContributingFiles,
533
546
  onStage2Complete: async (ctx) => {
534
547
  // Post-stage-2 setup: rebuild function_calls from the functions table
535
548
  // (populated by the function-index visitor), then mine conventions.
@@ -600,7 +613,7 @@ export function createAuditRunner(options = {}) {
600
613
  // zero-violation rules promote from `unassessed` to `clean`/`notApplicable`.
601
614
  pipelineCoverage = buildCoverageReport(analyzerResults, pipelineConfig, pipelineResult.metadata?.inputPresence, new Map((pipelineResult.metadata?.ruleApplicability ?? []).map((a) => [
602
615
  a.ruleId,
603
- { applicable: a.applicable, reason: a.reason },
616
+ { applicable: a.applicable, reason: a.reason, kind: a.kind },
604
617
  ])));
605
618
  // Spec 29: extract table catalog from pipeline metadata for audit report
606
619
  pipelineTableCatalog = pipelineResult.metadata?.tableCatalog;
@@ -662,6 +675,22 @@ export function createAuditRunner(options = {}) {
662
675
  }
663
676
  }
664
677
  }
678
+ // ── Normalize the analyzer field on every violation to its result key ──
679
+ // Violations are emitted by analyzers that don't always stamp `analyzer`
680
+ // correctly: the react analyzer omits it entirely, and the schema sub-visitor
681
+ // helpers (createSchemaViolation) hardcode `analyzer: 'schema'` for every
682
+ // sub-visitor, collapsing schema-code/schema-sql/schema-prisma/schema-json
683
+ // into the parent 'schema'. Both surface in the baseline metadata as
684
+ // `unknown: 338` / an over-broad `schema` bucket. The result key IS the
685
+ // analyzer that emitted the finding, so stamp it here as the single source
686
+ // of truth — a no-op for every analyzer that already labels itself, and it
687
+ // also fixes any future analyzer that forgets. Runs before baseline
688
+ // classification (Spec 18) so fingerprints and analyzerCounts are correct.
689
+ for (const [resultName, result] of Object.entries(orderedAnalyzerResults)) {
690
+ for (const v of result.violations) {
691
+ v.analyzer = resultName;
692
+ }
693
+ }
665
694
  // ── Spec 13 R5 Phase 1: Persist seeded DRY pairs ──────────────────
666
695
  // Store pairs from DRY analysis in dry_pair_history for divergence tracking.
667
696
  // Pair identity is fingerprint-based (file + nodeType + line),
@@ -690,61 +719,6 @@ export function createAuditRunner(options = {}) {
690
719
  catch {
691
720
  // dry_pair_history persistence is advisory — non-fatal
692
721
  }
693
- // ── Baseline classification (Spec 18 R1) ────────────────────────────
694
- const projectRoot = path.resolve(mergedOptions.projectRoot || process.cwd());
695
- const baseline = loadBaseline(projectRoot);
696
- let baselineMetadata;
697
- if (baseline) {
698
- const allViolations = Object.values(orderedAnalyzerResults).flatMap((r) => r.violations);
699
- // For scoped runs, limit "fixed" to in-scope files
700
- const scopedFiles = isScoped ? files : undefined;
701
- const classified = matchFindings(allViolations, baseline, scopedFiles);
702
- // Tag violations with their baseline status
703
- for (const v of classified.new) {
704
- v.new = true;
705
- }
706
- for (const v of classified.known) {
707
- v.new = false;
708
- }
709
- baselineMetadata = {
710
- present: true,
711
- hash: hashBaseline(baseline),
712
- newCount: classified.new.length,
713
- fixedCount: classified.fixed.length,
714
- knownCount: classified.known.length,
715
- previousKnownCount: baseline.metadata.totalFindings,
716
- };
717
- logMcpInfo('baseline', 'baseline classification complete', {
718
- new: classified.new.length,
719
- fixed: classified.fixed.length,
720
- known: classified.known.length,
721
- });
722
- }
723
- // ── Spec 36 R7 — suppression decay ──────────────────────────────────
724
- // Inline `code-audit-disable-*` directives suppress a finding only while
725
- // it fires, carry a required reason, and are themselves an error when
726
- // unnecessary or reasonless. Computed here (not in the gate) so the
727
- // suppressed/unnecessary/reasonless triage is reported, never silent.
728
- let suppressionMetadata;
729
- {
730
- const directives = collectSuppressionDirectives(files);
731
- if (directives.length > 0) {
732
- const allViolations = Object.values(orderedAnalyzerResults).flatMap((r) => r.violations);
733
- const applied = applySuppressions(allViolations, directives);
734
- suppressionMetadata = {
735
- total: directives.length,
736
- suppressed: applied.suppressed.length,
737
- unnecessary: applied.unnecessary,
738
- reasonless: applied.reasonless,
739
- };
740
- logMcpInfo('suppressions', 'suppression triage complete', {
741
- total: directives.length,
742
- suppressed: applied.suppressed.length,
743
- unnecessary: applied.unnecessary.length,
744
- reasonless: applied.reasonless.length,
745
- });
746
- }
747
- }
748
722
  // ── Spec 13 R2 — Hotspot scoring & finding reordering ──────────────
749
723
  // Attach hotspot scores to violations and reorder within severity tiers.
750
724
  // Falls back gracefully when no churn/hotspot data exists.
@@ -900,6 +874,42 @@ export function createAuditRunner(options = {}) {
900
874
  for (const ar of Object.values(orderedAnalyzerResults)) {
901
875
  validateHookContract(ar.violations);
902
876
  }
877
+ // ── Baseline classification (Spec 18 R1) ────────────────────────────
878
+ // Runs AFTER validateHookContract (and after divergence tracking) so it
879
+ // classifies exactly the violation set that reaches the report. Previously
880
+ // this ran before the hook-contract guard spliced out malformed violations
881
+ // (empty file / line 0 / missing line), so newCount+knownCount over-counted
882
+ // by the number of spliced findings and no longer reconciled with
883
+ // summary.totalViolations.
884
+ const projectRoot = path.resolve(mergedOptions.projectRoot || process.cwd());
885
+ const baseline = loadBaseline(projectRoot);
886
+ let baselineMetadata;
887
+ if (baseline) {
888
+ const allViolations = Object.values(orderedAnalyzerResults).flatMap((r) => r.violations);
889
+ // For scoped runs, limit "fixed" to in-scope files
890
+ const scopedFiles = isScoped ? files : undefined;
891
+ const classified = matchFindings(allViolations, baseline, scopedFiles);
892
+ // Tag violations with their baseline status
893
+ for (const v of classified.new) {
894
+ v.new = true;
895
+ }
896
+ for (const v of classified.known) {
897
+ v.new = false;
898
+ }
899
+ baselineMetadata = {
900
+ present: true,
901
+ hash: hashBaseline(baseline),
902
+ newCount: classified.new.length,
903
+ fixedCount: classified.fixed.length,
904
+ knownCount: classified.known.length,
905
+ previousKnownCount: baseline.metadata.totalFindings,
906
+ };
907
+ logMcpInfo('baseline', 'baseline classification complete', {
908
+ new: classified.new.length,
909
+ fixed: classified.fixed.length,
910
+ known: classified.known.length,
911
+ });
912
+ }
903
913
  // Generate summary
904
914
  const summary = generateSummary(orderedAnalyzerResults, files.length);
905
915
  // Create result
@@ -929,7 +939,6 @@ export function createAuditRunner(options = {}) {
929
939
  ...(pipelineInputPresence && { inputPresence: pipelineInputPresence }),
930
940
  ...(pipelineRuleTiming && { ruleTiming: pipelineRuleTiming }),
931
941
  ...(pipelineFileAccounting && { fileAccounting: pipelineFileAccounting }),
932
- ...(suppressionMetadata && { suppressions: suppressionMetadata }),
933
942
  ...(collectedFunctions.length > 0 && {
934
943
  collectedFunctions,
935
944
  fileToFunctionsMap: Object.fromEntries(fileToFunctionsMap)