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.
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +99 -0
- package/README.md +5 -5
- package/dist/analyzers/applicability.d.ts +19 -5
- package/dist/analyzers/applicability.d.ts.map +1 -1
- package/dist/analyzers/applicability.js +36 -24
- package/dist/analyzers/applicability.js.map +1 -1
- package/dist/analyzers/cross-language/APIContractAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/cross-language/APIContractAnalyzer.js +23 -2
- package/dist/analyzers/cross-language/APIContractAnalyzer.js.map +1 -1
- package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts +52 -9
- package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts.map +1 -1
- package/dist/analyzers/cross-language/DependencyGraphBuilder.js +228 -55
- package/dist/analyzers/cross-language/DependencyGraphBuilder.js.map +1 -1
- package/dist/analyzers/cross-language/SchemaValidator.d.ts +19 -12
- package/dist/analyzers/cross-language/SchemaValidator.d.ts.map +1 -1
- package/dist/analyzers/cross-language/SchemaValidator.js +78 -111
- package/dist/analyzers/cross-language/SchemaValidator.js.map +1 -1
- package/dist/analyzers/crossDomain/CrossDomainAnalyzer.d.ts +0 -6
- package/dist/analyzers/crossDomain/CrossDomainAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js +85 -73
- package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js.map +1 -1
- package/dist/analyzers/documentationAnalyzer.js +5 -5
- package/dist/analyzers/documentationAnalyzer.js.map +1 -1
- package/dist/analyzers/invariantsAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/invariantsAnalyzer.js +1 -0
- package/dist/analyzers/invariantsAnalyzer.js.map +1 -1
- package/dist/analyzers/provenance.d.ts +7 -9
- package/dist/analyzers/provenance.d.ts.map +1 -1
- package/dist/analyzers/provenance.js +88 -124
- package/dist/analyzers/provenance.js.map +1 -1
- package/dist/analyzers/reactAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/reactAnalyzer.js +120 -21
- package/dist/analyzers/reactAnalyzer.js.map +1 -1
- package/dist/analyzers/ruleRegistry.d.ts +35 -12
- package/dist/analyzers/ruleRegistry.d.ts.map +1 -1
- package/dist/analyzers/ruleRegistry.js +66 -108
- package/dist/analyzers/ruleRegistry.js.map +1 -1
- package/dist/analyzers/ruleTiming.d.ts +2 -2
- package/dist/analyzers/ruleTiming.js +2 -2
- package/dist/analyzers/universal/UniversalConventionsAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalConventionsAnalyzer.js +60 -24
- package/dist/analyzers/universal/UniversalConventionsAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalDRYAnalyzer.js +5 -2
- package/dist/analyzers/universal/UniversalDRYAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js +82 -71
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts +2 -1
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js +23 -12
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts +11 -1
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js +60 -22
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.js +5 -2
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts +2 -3
- package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalStylesAnalyzer.js +258 -87
- package/dist/analyzers/universal/UniversalStylesAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/schema/codeAnalysis.d.ts.map +1 -1
- package/dist/analyzers/universal/schema/codeAnalysis.js +7 -1
- package/dist/analyzers/universal/schema/codeAnalysis.js.map +1 -1
- package/dist/analyzers/universal/schema/discovery.d.ts +29 -1
- package/dist/analyzers/universal/schema/discovery.d.ts.map +1 -1
- package/dist/analyzers/universal/schema/discovery.js +76 -21
- package/dist/analyzers/universal/schema/discovery.js.map +1 -1
- package/dist/analyzers/universal/schema/jsonSchema.js +7 -11
- package/dist/analyzers/universal/schema/jsonSchema.js.map +1 -1
- package/dist/auditRouter.d.ts +41 -0
- package/dist/auditRouter.d.ts.map +1 -0
- package/dist/auditRouter.js +185 -0
- package/dist/auditRouter.js.map +1 -0
- package/dist/auditRunner.d.ts.map +1 -1
- package/dist/auditRunner.js +93 -84
- package/dist/auditRunner.js.map +1 -1
- package/dist/cli.js +306 -95
- package/dist/cli.js.map +1 -1
- package/dist/codeIndexDB.d.ts.map +1 -1
- package/dist/codeIndexDB.js +41 -7
- package/dist/codeIndexDB.js.map +1 -1
- package/dist/componentScanner.d.ts.map +1 -1
- package/dist/componentScanner.js +2 -1
- package/dist/componentScanner.js.map +1 -1
- package/dist/config/configLoader.d.ts +9 -0
- package/dist/config/configLoader.d.ts.map +1 -1
- package/dist/config/configLoader.js +45 -2
- package/dist/config/configLoader.js.map +1 -1
- package/dist/config/defaults.d.ts +8 -1
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +19 -3
- package/dist/config/defaults.js.map +1 -1
- package/dist/dataPaths.js +18 -1
- package/dist/dataPaths.js.map +1 -1
- package/dist/enforcement/gate.d.ts +14 -19
- package/dist/enforcement/gate.d.ts.map +1 -1
- package/dist/enforcement/gate.js +27 -45
- package/dist/enforcement/gate.js.map +1 -1
- package/dist/functionScanner.d.ts.map +1 -1
- package/dist/functionScanner.js +1 -17
- package/dist/functionScanner.js.map +1 -1
- package/dist/invariants/ruleEngine.d.ts +8 -0
- package/dist/invariants/ruleEngine.d.ts.map +1 -1
- package/dist/invariants/ruleEngine.js +35 -16
- package/dist/invariants/ruleEngine.js.map +1 -1
- package/dist/languages/LanguageOrchestrator.d.ts +9 -10
- package/dist/languages/LanguageOrchestrator.d.ts.map +1 -1
- package/dist/languages/LanguageOrchestrator.js +135 -101
- package/dist/languages/LanguageOrchestrator.js.map +1 -1
- package/dist/languages/RuntimeManager.d.ts +28 -1
- package/dist/languages/RuntimeManager.d.ts.map +1 -1
- package/dist/languages/RuntimeManager.js +158 -47
- package/dist/languages/RuntimeManager.js.map +1 -1
- package/dist/languages/go/GoAdapter.d.ts +2 -0
- package/dist/languages/go/GoAdapter.d.ts.map +1 -1
- package/dist/languages/go/GoAdapter.js +15 -22
- package/dist/languages/go/GoAdapter.js.map +1 -1
- package/dist/languages/go/analyzer +0 -0
- package/dist/languages/go/analyzer-src/analyzer.go +510 -0
- package/dist/languages/go/analyzer-src/go.mod +3 -0
- package/dist/languages/go/analyzer-src/indexer.go +268 -0
- package/dist/languages/go/analyzer-src/parser.go +461 -0
- package/dist/languages/go/analyzer-src/solid.go +395 -0
- package/dist/languages/go/analyzer-src/testconventions.go +25 -0
- package/dist/languages/go/analyzer-src/types.go +148 -0
- package/dist/languages/go/go.mod +7 -0
- package/dist/languages/go/main.go +203 -0
- package/dist/languages/testConventions.d.ts +35 -0
- package/dist/languages/testConventions.d.ts.map +1 -0
- package/dist/languages/testConventions.js +51 -0
- package/dist/languages/testConventions.js.map +1 -0
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts +3 -0
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts.map +1 -1
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js +25 -18
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js.map +1 -1
- package/dist/mcp-tools/whitelistTools.d.ts +1 -1
- package/dist/mcp-tools-shared.d.ts +0 -3
- package/dist/mcp-tools-shared.d.ts.map +1 -1
- package/dist/mcp-tools-shared.js +8 -117
- package/dist/mcp-tools-shared.js.map +1 -1
- package/dist/mcp.js +3 -1
- package/dist/mcp.js.map +1 -1
- package/dist/mcpAuditJobs.d.ts.map +1 -1
- package/dist/mcpAuditJobs.js +13 -0
- package/dist/mcpAuditJobs.js.map +1 -1
- package/dist/nextFile.d.ts +21 -0
- package/dist/nextFile.d.ts.map +1 -0
- package/dist/nextFile.js +51 -0
- package/dist/nextFile.js.map +1 -0
- package/dist/nextFileIncremental.d.ts +141 -0
- package/dist/nextFileIncremental.d.ts.map +1 -0
- package/dist/nextFileIncremental.js +314 -0
- package/dist/nextFileIncremental.js.map +1 -0
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +43 -3
- package/dist/pipeline.js.map +1 -1
- package/dist/pipelineAdapters.d.ts +17 -0
- package/dist/pipelineAdapters.d.ts.map +1 -1
- package/dist/pipelineAdapters.js +791 -40
- package/dist/pipelineAdapters.js.map +1 -1
- package/dist/reporting/jsonReportGenerator.d.ts.map +1 -1
- package/dist/reporting/jsonReportGenerator.js +11 -30
- package/dist/reporting/jsonReportGenerator.js.map +1 -1
- package/dist/styles/styleExtractor.js +2 -2
- package/dist/styles/styleExtractor.js.map +1 -1
- package/dist/styles/styleIndexer.d.ts +7 -0
- package/dist/styles/styleIndexer.d.ts.map +1 -1
- package/dist/styles/styleIndexer.js +51 -67
- package/dist/styles/styleIndexer.js.map +1 -1
- package/dist/styles/types.d.ts +3 -2
- package/dist/styles/types.d.ts.map +1 -1
- package/dist/types/crossLanguage.d.ts +1 -0
- package/dist/types/crossLanguage.d.ts.map +1 -1
- package/dist/types.d.ts +43 -34
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/fileDiscovery.d.ts +9 -0
- package/dist/utils/fileDiscovery.d.ts.map +1 -1
- package/dist/utils/fileDiscovery.js +18 -0
- package/dist/utils/fileDiscovery.js.map +1 -1
- package/package.json +16 -6
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/README.md +11 -9
- package/plugin/hooks/hooks.json +4 -0
- package/plugin/scripts/hook-audit.sh +20 -30
- package/plugin/scripts/hook-common.sh +63 -0
- package/plugin/scripts/hook-self-audit.sh +99 -0
- package/plugin/skills/code-auditor/SKILL-RULE-KINDS.md +55 -9
- 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
|
-
|
|
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
|
-
|
|
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
|
|
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":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAgBzD;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAe,EACf,QAA6C,EAC7C,MAA4B,EAC5B,YAAY,GAAG,QAAQ;IAEvB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,WAAW,GAAG,EAAE,GAAG,qBAAqB,EAAE,GAAG,MAAM,EAAE,CAAC;IAE5D,IAAI,CAAC,WAAW,CAAC,mBAAmB,EAAE,CAAC;QACrC,OAAO,UAAU,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,cAAc,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;IACxF,CAAC;IAED,MAAM,WAAW,GAAG,mBAAmB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAC5D,MAAM,SAAS,GAAG,iBAAiB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IACxD,MAAM,gBAAgB,GAAG,KAAK,CAAC,MAAM,CACnC,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CACxD,CAAC;IAEF,MAAM,KAAK,GAAiB,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;IAC9E,MAAM,IAAI,GAAgB,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IAC1E,MAAM,OAAO,GAAG,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAE/C,IAAI,WAAW,CAAC,eAAe,EAAE,CAAC;QAChC,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACpC,CAAC;SAAM,CAAC;QACN,sBAAsB,CAAC,CAAC,GAAG,SAAS,EAAE,GAAG,gBAAgB,CAAC,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAC/F,CAAC;IAED,OAAO,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,YAAY,CAAC,CAAC;AACjE,CAAC;AAeD,SAAS,UAAU,CACjB,KAAmB,EACnB,aAAqB,EACrB,YAAoB;IAEpB,OAAO;QACL,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,MAAM,EAAE,iBAAiB,CAAC,KAAK,CAAC,cAAc,CAAC;QAC/C,aAAa;QACb,YAAY;KACb,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,WAAqB,EAAE,IAAiB;IAC3D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAe,CAAC;IACvC,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACnC,IAAI,MAAM,KAAK,IAAI;gBAAE,MAAM,IAAI,WAAW,CAAC,mBAAmB,CAAC,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YAC7E,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;gBACjC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CACxB,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,iBAAiB,KAAK,CAAC,OAAO,EAAE,EAAE,cAAc,CAAC,CACjF,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;oBACrB,IAAI;oBACJ,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;iBAC9D,CAAC,CAAC;YACL,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;QAC9B,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAyB,EAAE,IAAiB;IACtE,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,eAAgB,EAAE,CAAC;QAChD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtE,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrE,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACjC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAClC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBACvC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;wBACpB,MAAM,cAAc,GAAoB,EAAE,CAAC;wBAC3C,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE;4BACpC,QAAQ,EAAE,QAAQ;4BAClB,MAAM,EAAE,IAAI,CAAC,MAAM;4BACnB,UAAU,EAAE,cAAc;yBAC3B,CAAC,CAAC;wBACH,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC;oBAChD,CAAC;yBAAM,CAAC;wBACN,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CACxB,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,2BAA2B,EAAE,cAAc,CAAC,CAChF,CAAC;oBACJ,CAAC;oBACD,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;gBAC9B,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAC7B,SAAmB,EACnB,gBAA0B,EAC1B,OAAyB,EACzB,IAAiB;IAEjB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,aAAa,GAAG,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC5D,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACvC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACpB,MAAM,cAAc,GAAoB,EAAE,CAAC;gBAC3C,qBAAqB,CAAC,MAAM,EAAE,aAAa,EAAE;oBAC3C,QAAQ,EAAE,QAAQ;oBAClB,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,UAAU,EAAE,cAAc;iBAC3B,CAAC,CAAC;gBACH,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;aAAM,IAAI,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACvC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACpB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CACxB,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,2BAA2B,EAAE,cAAc,CAAC,CAChF,CAAC;YACJ,CAAC;QACH,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CACzB,MAAW,EACX,QAAgB,EAChB,MAA4B;IAE5B,MAAM,GAAG,GAAkB,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IAEhE,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;QAChD,IAAI,CAAC,GAAG,EAAE,YAAY,EAAE,4BAA4B,EAAE,yCAAyC,CAAC,CAAC;IACnG,CAAC;IAED,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEjC,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QAClD,IAAI,MAAM,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACpC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC9B,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,0BAA0B,EAAE,mBAAmB,KAAK,6BAA6B,CAAC,CAAC;gBAC1G,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC,UAAU,CAAC;AACxB,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAW,EAAE,GAAkB,EAAE,IAAI,GAAG,EAAE;IACrE,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO;IAElD,oBAAoB,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IACxC,sBAAsB,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAE1C,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7D,mBAAmB,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,mBAAmB,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,SAAS,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,MAAM,CAAC,oBAAoB,IAAI,OAAO,MAAM,CAAC,oBAAoB,KAAK,QAAQ,EAAE,CAAC;QACnF,mBAAmB,CAAC,MAAM,CAAC,oBAAoB,EAAE,GAAG,EAAE,GAAG,IAAI,wBAAwB,CAAC,CAAC;IACzF,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAW,EAAE,GAAkB,EAAE,IAAY;IACzE,IAAI,MAAM,CAAC,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACvE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChD,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,cAAc,EACjC,iBAAiB,IAAI,QAAQ,IAAI,IAAI,MAAM,oBAAoB,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7G,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,MAAW,EAAE,GAAkB,EAAE,IAAY;IAC3E,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC1D,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YACjE,IAAI,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,eAAe,EAClC,oBAAoB,IAAI,cAAc,MAAM,CAAC,OAAO,gBAAgB,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC;YAC3F,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAe,EAAE,MAA4B;IACxE,OAAO,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAe,EAAE,MAA4B;IACtE,OAAO,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAC9D,CAAC;AAED,6EAA6E;AAC7E,SAAS,oBAAoB,CAAC,KAAe,EAAE,QAA8B;IAC3E,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAC;IACzB,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;QAC7C,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YAC7B,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;YACrD,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAgB,EAAE,OAAyB;IACrE,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;IACrD,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,8BAA8B,EAAE,EAAE,CAAC,CAAC;IAE9E,KAAK,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QAC3C,MAAM,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;QACzD,MAAM,cAAc,GAAG,cAAc,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;QAExE,IAAI,YAAY,KAAK,cAAc,EAAE,CAAC;YACpC,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;IACvC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAS,EAAE,MAAW,EAAE,GAAkB,EAAE,IAAI,GAAG,EAAE;IAClF,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAE9E,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,UAAU,EAAE,YAAY,CAAC,EAAE,CAAC;YACvD,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,eAAe,EAClC,oBAAoB,IAAI,IAAI,MAAM,cAAc,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,UAAU,EAAE,CAAC,CAAC;YACjG,OAAO;QACT,CAAC;IACH,CAAC;IAED,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAChD,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAChD,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAC/C,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAChD,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,YAAY,CAAC,IAAS;IAC7B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC;IACxC,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IACjC,OAAO,OAAO,IAAI,CAAC;AACrB,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAS,EAAE,UAAkB,EAAE,YAAsB;IAC9E,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,IAAY,EAAE,EAAE;QACxC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,IAAI,KAAK,UAAU,CAAC;IAC7B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAS,EAAE,MAAW,EAAE,GAAkB,EAAE,IAAY;IACtF,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO;IAEjE,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QACrE,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,kBAAkB,EAAE,aAAa,IAAI,eAAe,IAAI,CAAC,MAAM,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IAChH,CAAC;IACD,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QACrE,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,iBAAiB,EAAE,aAAa,IAAI,cAAc,IAAI,CAAC,MAAM,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IAC9G,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,kBAAkB,EAAE,aAAa,IAAI,2BAA2B,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QACzG,CAAC;IACH,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IACxD,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY,EAAE,MAAc,EAAE,GAAkB,EAAE,IAAY;IAC3F,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,OAAO;YACV,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7C,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,gBAAgB,EAAE,2BAA2B,IAAI,EAAE,CAAC,CAAC;YAC5E,CAAC;YACD,MAAM;QACR,KAAK,MAAM;YACT,IAAI,CAAC,iEAAiE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClF,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,gBAAgB,EAAE,0BAA0B,IAAI,EAAE,CAAC,CAAC;YAC3E,CAAC;YACD,MAAM;IACV,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAS,EAAE,MAAW,EAAE,GAAkB,EAAE,IAAY;IACtF,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO;IAEhG,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;QAC1D,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,IAAI,mBAAmB,IAAI,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IACvG,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;QAC1D,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,IAAI,mBAAmB,IAAI,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IACvG,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAS,EAAE,MAAW,EAAE,GAAkB,EAAE,IAAY;IACrF,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO;IAE5D,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QACnE,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,IAAI,uBAAuB,IAAI,CAAC,MAAM,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IACnH,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QACnE,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,gBAAgB,EAAE,YAAY,IAAI,wBAAwB,IAAI,CAAC,MAAM,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IACrH,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,IAAI,CAAC,OAAO,CAAC,CAAC,IAAS,EAAE,KAAa,EAAE,EAAE;YACxC,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAS,EAAE,MAAW,EAAE,GAAkB,EAAE,IAAY;IACtF,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO;IAElF,IAAI,MAAM,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtD,KAAK,MAAM,aAAa,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC5C,IAAI,CAAC,CAAC,aAAa,IAAI,IAAI,CAAC,EAAE,CAAC;gBAC7B,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,wBAAwB,EAAE,2BAA2B,aAAa,QAAQ,IAAI,EAAE,CAAC,CAAC;YACzG,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,KAAK,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;YAClE,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;gBAChB,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACnF,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,oBAAoB,KAAK,KAAK,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,EAAE,CAAC;QACrG,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IACrD,CAAC;SAAM,IAAI,OAAO,MAAM,CAAC,oBAAoB,KAAK,QAAQ,EAAE,CAAC;QAC3D,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IACrD,CAAC;AACH,CAAC;AAED,SAAS,yBAAyB,CAAC,IAAS,EAAE,MAAW,EAAE,GAAkB,EAAE,IAAY;IACzF,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC;IAClE,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,qBAAqB,EAAE,wBAAwB,GAAG,QAAQ,IAAI,EAAE,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,yBAAyB,CAAC,IAAS,EAAE,MAAW,EAAE,GAAkB,EAAE,IAAY;IACzF,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC;IAClE,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAChD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC,oBAAoB,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAChG,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAS,EAAE,MAAW,EAAE,GAAkB,EAAE,IAAY;IACnF,IAAI,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,eAAe,EAClC,YAAY,IAAI,iBAAiB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjG,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,IAAI,CAAC,GAAkB,EAAE,QAAmC,EAAE,IAAY,EAAE,OAAe;IAClG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;QAClB,IAAI,EAAE,GAAG,CAAC,QAAQ;QAClB,IAAI,EAAE,CAAC;QACP,MAAM,EAAE,CAAC;QACT,QAAQ;QACR,OAAO;QACP,IAAI;QACJ,QAAQ,EAAE,QAAQ;KACnB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -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":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AAEpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAA2B,MAAM,qCAAqC,CAAC;AACpG,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,+BAA+B,EAAE,MAAM,0BAA0B,CAAC;AAE3E;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,MAAc,EAAE,GAAW;IACrE,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC;QACpD,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;gBACnB,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,GAAG;oBAAE,OAAO,IAAI,CAAC;YAClE,CAAC;iBAAM,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBAC/B,IAAI,+BAA+B,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;oBAAE,SAAS;gBAC9D,IAAI,MAAM,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC;oBAAE,OAAO,IAAI,CAAC;YACnF,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,4BAA4B,CAAC,cAAmB,EAAE,SAAiB;IACjF,MAAM,UAAU,GAAG,cAAc,CAAC,UAAU,IAAI,EAAE,CAAC;IACnD,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,MAAM,CAAC;IACvF,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;IAChF,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC,MAAM,CAAC;IACtF,MAAM,UAAU,GAAG,cAAc,CAAC,OAAO,EAAE,UAAU,IAAI,CAAC,CAAC;IAC3D,MAAM,aAAa,GAAG,cAAc,CAAC,OAAO,EAAE,aAAa,IAAI,CAAC,CAAC;IAEjE,yEAAyE;IACzE,sEAAsE;IACtE,yEAAyE;IACzE,wEAAwE;IACxE,8DAA8D;IAC9D,MAAM,oBAAoB,GAA2B,EAAE,CAAC;IACxD,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,IAAI,SAAS,CAAC;QACjE,oBAAoB,CAAC,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAC7E,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC;SACnD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;SAC7B,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAE7C,2EAA2E;IAC3E,uEAAuE;IACvE,2EAA2E;IAC3E,8DAA8D;IAC9D,gEAAgE;IAChE,MAAM,eAAe,GAAwB,EAAE,CAAC;IAChD,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,IAAI,SAAS,CAAC;QACpC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,eAAe,CAAC,GAAG,CAAC,GAAG;gBACrB,UAAU,EAAE,EAAE;gBACd,MAAM,EAAE,iBAAiB,CAAC,UAAU,CAAC;gBACrC,aAAa;gBACb,YAAY,EAAE,GAAG;aAClB,CAAC;QACJ,CAAC;QACD,eAAe,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,0EAA0E;IAC1E,yEAAyE;IACzE,0EAA0E;IAC1E,MAAM,WAAW,GAAmE,EAAE,CAAC;IACvF,KAAK,MAAM,EAAE,IAAI,cAAc,CAAC,aAAa,IAAI,EAAE,EAAE,CAAC;QACpD,WAAW,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7F,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,cAAc,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;QAC9C,WAAW,CAAC,IAAI,CAAC;YACf,YAAY,EAAE,GAAG,CAAC,QAAQ,IAAI,UAAU;YACxC,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,OAAO;YACzB,OAAO,EAAE,GAAG,CAAC,OAAO;SACrB,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,SAAS,EAAE,IAAI,IAAI,EAAE;QACrB,OAAO,EAAE;YACP,eAAe,EAAE,UAAU,CAAC,MAAM;YAClC,cAAc;YACd,QAAQ;YACR,WAAW;YACX,UAAU;YACV,oBAAoB;YACpB,SAAS;SACV;QACD,eAAe;QACf,eAAe,EAAE,EAAE;QACnB,QAAQ,EAAE;YACR,aAAa,EAAE,aAAa;YAC5B,aAAa,EAAE,UAAU;YACzB,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC;YAC1C,kBAAkB,EAAE,cAAc,CAAC,YAAY;gBAC7C,CAAC,CAAC,wBAAwB,CAAC,cAAc,CAAC,YAAY,CAAC;gBACvD,CAAC,CAAC,EAAE;YACN,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC;SAC/C;KACF,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAAC,YAAmB;IACnD,MAAM,OAAO,GAA0B,EAAE,CAAC;IAC1C,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;QACjC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACnD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAA2B;IAChE,4EAA4E;IAC5E,yEAAyE;IACzE,6EAA6E;IAC7E,wEAAwE;IACxE,4EAA4E;IAC5E,+DAA+D;IAC/D,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAEvE,MAAM,KAAK,GAAG,MAAM,qBAAqB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAE9D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC1C,OAAO,MAAM,CAAC,GAAG,EAAE,CAAC;IACtB,CAAC;IAED,2EAA2E;IAC3E,4EAA4E;IAC5E,MAAM,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;IAC5C,MAAM,cAAc,CAAC,UAAU,EAAE,CAAC;IAClC,MAAM,SAAS,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;IAC5C,MAAM,SAAS,CAAC,UAAU,EAAE,CAAC;IAC7B,MAAM,YAAY,GAAG,IAAI,oBAAoB,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;IAEzE,MAAM,cAAc,GAAG,MAAM,YAAY,CAAC,sBAAsB,CAAC,WAAW,EAAE;QAC5E,SAAS,EAAE,OAAO,CAAC,gBAAgB;QACnC,WAAW,EAAE,OAAO,CAAC,WAAqD;QAC1E,WAAW,EAAE,OAAO,CAAC,cAAc;QACnC,2BAA2B,EAAE,IAAI;QACjC,oBAAoB,EAAE,IAAI;KAC3B,CAAC,CAAC;IAEH,OAAO,4BAA4B,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;AACnE,CAAC"}
|
|
@@ -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;
|
|
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"}
|
package/dist/auditRunner.js
CHANGED
|
@@ -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
|
|
71
|
-
//
|
|
72
|
-
//
|
|
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
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
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)
|