code-auditor-mcp 4.1.1 → 5.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +381 -0
- package/README.md +4 -4
- package/configs/hhra-compat.json +0 -8
- package/dist/__tests__/fixtures/spec-52/item-03-exec-in-loop.d.ts +1 -1
- package/dist/__tests__/fixtures/spec-52/item-03-exec-in-loop.d.ts.map +1 -1
- package/dist/__tests__/fixtures/spec-52/item-03-exec-in-loop.js +7 -1
- package/dist/__tests__/fixtures/spec-52/item-03-exec-in-loop.js.map +1 -1
- package/dist/__tests__/fixtures/spec-52/item-04-storage-sql-exec-in-loop.d.ts +2 -8
- package/dist/__tests__/fixtures/spec-52/item-04-storage-sql-exec-in-loop.d.ts.map +1 -1
- package/dist/__tests__/fixtures/spec-52/item-04-storage-sql-exec-in-loop.js +4 -4
- package/dist/__tests__/fixtures/spec-52/item-04-storage-sql-exec-in-loop.js.map +1 -1
- package/dist/__tests__/fixtures/spec-52/item-06-chained-prepare-run-in-loop.d.ts +1 -1
- package/dist/__tests__/fixtures/spec-52/item-06-chained-prepare-run-in-loop.d.ts.map +1 -1
- package/dist/__tests__/fixtures/spec-52/item-06-chained-prepare-run-in-loop.js.map +1 -1
- package/dist/__tests__/fixtures/spec-52/item-07-chained-prepare-bind-first-in-loop.d.ts +2 -2
- package/dist/__tests__/fixtures/spec-52/item-07-chained-prepare-bind-first-in-loop.d.ts.map +1 -1
- package/dist/__tests__/fixtures/spec-52/item-07-chained-prepare-bind-first-in-loop.js.map +1 -1
- package/dist/__tests__/fixtures/spec-52/item-10-promise-all-map-of-eager-all-in-loop.d.ts +1 -1
- package/dist/__tests__/fixtures/spec-52/item-10-promise-all-map-of-eager-all-in-loop.d.ts.map +1 -1
- package/dist/__tests__/fixtures/spec-52/item-10-promise-all-map-of-eager-all-in-loop.js.map +1 -1
- package/dist/analyzers/applicability.d.ts +42 -0
- package/dist/analyzers/applicability.d.ts.map +1 -1
- package/dist/analyzers/applicability.js +74 -0
- package/dist/analyzers/applicability.js.map +1 -1
- package/dist/analyzers/cross-language/APIContractAnalyzer.js +18 -24
- package/dist/analyzers/cross-language/APIContractAnalyzer.js.map +1 -1
- package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts +30 -23
- package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts.map +1 -1
- package/dist/analyzers/cross-language/DependencyGraphBuilder.js +113 -76
- package/dist/analyzers/cross-language/DependencyGraphBuilder.js.map +1 -1
- package/dist/analyzers/cross-language/SchemaValidator.d.ts +2 -0
- package/dist/analyzers/cross-language/SchemaValidator.d.ts.map +1 -1
- package/dist/analyzers/cross-language/SchemaValidator.js +8 -3
- package/dist/analyzers/cross-language/SchemaValidator.js.map +1 -1
- package/dist/analyzers/crossDomain/CrossDomainAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js +210 -148
- package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js.map +1 -1
- package/dist/analyzers/documentationAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/documentationAnalyzer.js +23 -28
- package/dist/analyzers/documentationAnalyzer.js.map +1 -1
- package/dist/analyzers/handleIdentification.d.ts +356 -0
- package/dist/analyzers/handleIdentification.d.ts.map +1 -0
- package/dist/analyzers/handleIdentification.js +427 -0
- package/dist/analyzers/handleIdentification.js.map +1 -0
- package/dist/analyzers/manifestStaleness.d.ts +64 -0
- package/dist/analyzers/manifestStaleness.d.ts.map +1 -0
- package/dist/analyzers/manifestStaleness.js +115 -0
- package/dist/analyzers/manifestStaleness.js.map +1 -0
- package/dist/analyzers/orgFilterTiers.d.ts +73 -1
- package/dist/analyzers/orgFilterTiers.d.ts.map +1 -1
- package/dist/analyzers/orgFilterTiers.js +166 -1
- package/dist/analyzers/orgFilterTiers.js.map +1 -1
- package/dist/analyzers/provenance.d.ts +251 -57
- package/dist/analyzers/provenance.d.ts.map +1 -1
- package/dist/analyzers/provenance.js +1109 -429
- package/dist/analyzers/provenance.js.map +1 -1
- package/dist/analyzers/reactAnalyzer.d.ts +2 -0
- package/dist/analyzers/reactAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/reactAnalyzer.js +2 -0
- package/dist/analyzers/reactAnalyzer.js.map +1 -1
- package/dist/analyzers/receiverResolution.d.ts +183 -0
- package/dist/analyzers/receiverResolution.d.ts.map +1 -0
- package/dist/analyzers/receiverResolution.js +540 -0
- package/dist/analyzers/receiverResolution.js.map +1 -0
- package/dist/analyzers/receiverRoot.d.ts +348 -0
- package/dist/analyzers/receiverRoot.d.ts.map +1 -0
- package/dist/analyzers/receiverRoot.js +1032 -0
- package/dist/analyzers/receiverRoot.js.map +1 -0
- package/dist/analyzers/ruleRegistry.d.ts +12 -68
- package/dist/analyzers/ruleRegistry.d.ts.map +1 -1
- package/dist/analyzers/ruleRegistry.js +32 -342
- package/dist/analyzers/ruleRegistry.js.map +1 -1
- package/dist/analyzers/ruleTiming.d.ts +10 -0
- package/dist/analyzers/ruleTiming.d.ts.map +1 -1
- package/dist/analyzers/ruleTiming.js +20 -0
- package/dist/analyzers/ruleTiming.js.map +1 -1
- package/dist/analyzers/sqlLiteral.d.ts +76 -0
- package/dist/analyzers/sqlLiteral.d.ts.map +1 -0
- package/dist/analyzers/sqlLiteral.js +419 -0
- package/dist/analyzers/sqlLiteral.js.map +1 -0
- package/dist/analyzers/tsEcosystem.d.ts +115 -0
- package/dist/analyzers/tsEcosystem.d.ts.map +1 -0
- package/dist/analyzers/tsEcosystem.js +241 -0
- package/dist/analyzers/tsEcosystem.js.map +1 -0
- package/dist/analyzers/tsExpressionDescriptor.d.ts +156 -0
- package/dist/analyzers/tsExpressionDescriptor.d.ts.map +1 -0
- package/dist/analyzers/tsExpressionDescriptor.js +374 -0
- package/dist/analyzers/tsExpressionDescriptor.js.map +1 -0
- package/dist/analyzers/universal/UniversalConventionsAnalyzer.d.ts +6 -0
- package/dist/analyzers/universal/UniversalConventionsAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalConventionsAnalyzer.js +107 -44
- 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 +23 -35
- package/dist/analyzers/universal/UniversalDRYAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts +287 -49
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js +2130 -512
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js +2 -18
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts +0 -33
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js +20 -143
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts +4 -3
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.js +36 -13
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalSecretsAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalSecretsAnalyzer.js +6 -0
- package/dist/analyzers/universal/UniversalSecretsAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalSecurityAnalyzer.d.ts +15 -0
- package/dist/analyzers/universal/UniversalSecurityAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalSecurityAnalyzer.js +25 -0
- package/dist/analyzers/universal/UniversalSecurityAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts +21 -32
- package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalStylesAnalyzer.js +166 -196
- package/dist/analyzers/universal/UniversalStylesAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/functionConcerns.d.ts +3 -0
- package/dist/analyzers/universal/functionConcerns.d.ts.map +1 -1
- package/dist/analyzers/universal/functionConcerns.js +4 -1
- package/dist/analyzers/universal/functionConcerns.js.map +1 -1
- package/dist/analyzers/universal/schema/codeAnalysis.d.ts +310 -69
- package/dist/analyzers/universal/schema/codeAnalysis.d.ts.map +1 -1
- package/dist/analyzers/universal/schema/codeAnalysis.js +709 -383
- package/dist/analyzers/universal/schema/codeAnalysis.js.map +1 -1
- package/dist/analyzers/universal/schema/config.d.ts +3 -14
- package/dist/analyzers/universal/schema/config.d.ts.map +1 -1
- package/dist/analyzers/universal/schema/config.js +3 -16
- package/dist/analyzers/universal/schema/config.js.map +1 -1
- package/dist/analyzers/universal/schema/discovery.d.ts +22 -1
- package/dist/analyzers/universal/schema/discovery.d.ts.map +1 -1
- package/dist/analyzers/universal/schema/discovery.js +36 -20
- package/dist/analyzers/universal/schema/discovery.js.map +1 -1
- package/dist/analyzers/universal/schema/jsonSchema.d.ts.map +1 -1
- package/dist/analyzers/universal/schema/jsonSchema.js +13 -3
- package/dist/analyzers/universal/schema/jsonSchema.js.map +1 -1
- package/dist/analyzers/universal/schema/migrations.d.ts +187 -27
- package/dist/analyzers/universal/schema/migrations.d.ts.map +1 -1
- package/dist/analyzers/universal/schema/migrations.js +443 -186
- package/dist/analyzers/universal/schema/migrations.js.map +1 -1
- package/dist/analyzers/universal/schema/types.d.ts +17 -3
- package/dist/analyzers/universal/schema/types.d.ts.map +1 -1
- package/dist/analyzers/universal/schema/violations.js +1 -1
- package/dist/analyzers/universal/schema/violations.js.map +1 -1
- package/dist/analyzers/universal/styleScale.d.ts +52 -0
- package/dist/analyzers/universal/styleScale.d.ts.map +1 -0
- package/dist/analyzers/universal/styleScale.js +95 -0
- package/dist/analyzers/universal/styleScale.js.map +1 -0
- package/dist/applyDataDirEnv.js +1 -1
- package/dist/applyDataDirEnv.js.map +1 -1
- package/dist/auditRouter.d.ts +26 -30
- package/dist/auditRouter.d.ts.map +1 -1
- package/dist/auditRouter.js +373 -143
- package/dist/auditRouter.js.map +1 -1
- package/dist/auditRunner.d.ts +66 -1
- package/dist/auditRunner.d.ts.map +1 -1
- package/dist/auditRunner.js +1544 -1034
- package/dist/auditRunner.js.map +1 -1
- package/dist/baseline.d.ts +30 -3
- package/dist/baseline.d.ts.map +1 -1
- package/dist/baseline.js +70 -9
- package/dist/baseline.js.map +1 -1
- package/dist/cli.js +983 -821
- package/dist/cli.js.map +1 -1
- package/dist/codeIndex/analyzerConfig.d.ts +60 -0
- package/dist/codeIndex/analyzerConfig.d.ts.map +1 -0
- package/dist/codeIndex/analyzerConfig.js +98 -0
- package/dist/codeIndex/analyzerConfig.js.map +1 -0
- package/dist/codeIndex/auditResults.d.ts +39 -0
- package/dist/codeIndex/auditResults.d.ts.map +1 -0
- package/dist/codeIndex/auditResults.js +99 -0
- package/dist/codeIndex/auditResults.js.map +1 -0
- package/dist/codeIndex/codeMap.d.ts +59 -0
- package/dist/codeIndex/codeMap.d.ts.map +1 -0
- package/dist/codeIndex/codeMap.js +72 -0
- package/dist/codeIndex/codeMap.js.map +1 -0
- package/dist/codeIndex/conventions.d.ts +33 -0
- package/dist/codeIndex/conventions.d.ts.map +1 -0
- package/dist/codeIndex/conventions.js +84 -0
- package/dist/codeIndex/conventions.js.map +1 -0
- package/dist/codeIndex/coverage.d.ts +78 -0
- package/dist/codeIndex/coverage.d.ts.map +1 -0
- package/dist/codeIndex/coverage.js +164 -0
- package/dist/codeIndex/coverage.js.map +1 -0
- package/dist/codeIndex/dependencyGraph.d.ts +97 -0
- package/dist/codeIndex/dependencyGraph.d.ts.map +1 -0
- package/dist/codeIndex/dependencyGraph.js +241 -0
- package/dist/codeIndex/dependencyGraph.js.map +1 -0
- package/dist/codeIndex/functionIndex.d.ts +111 -0
- package/dist/codeIndex/functionIndex.d.ts.map +1 -0
- package/dist/codeIndex/functionIndex.js +306 -0
- package/dist/codeIndex/functionIndex.js.map +1 -0
- package/dist/codeIndex/inferredReceivers.d.ts +32 -0
- package/dist/codeIndex/inferredReceivers.d.ts.map +1 -0
- package/dist/codeIndex/inferredReceivers.js +41 -0
- package/dist/codeIndex/inferredReceivers.js.map +1 -0
- package/dist/codeIndex/meta.d.ts +30 -0
- package/dist/codeIndex/meta.d.ts.map +1 -0
- package/dist/codeIndex/meta.js +37 -0
- package/dist/codeIndex/meta.js.map +1 -0
- package/dist/codeIndex/migrations.d.ts +96 -0
- package/dist/codeIndex/migrations.d.ts.map +1 -0
- package/dist/codeIndex/migrations.js +1302 -0
- package/dist/codeIndex/migrations.js.map +1 -0
- package/dist/codeIndex/projectTasks.d.ts +54 -0
- package/dist/codeIndex/projectTasks.d.ts.map +1 -0
- package/dist/codeIndex/projectTasks.js +81 -0
- package/dist/codeIndex/projectTasks.js.map +1 -0
- package/dist/codeIndex/provenance.d.ts +47 -0
- package/dist/codeIndex/provenance.d.ts.map +1 -0
- package/dist/codeIndex/provenance.js +48 -0
- package/dist/codeIndex/provenance.js.map +1 -0
- package/dist/codeIndex/rawSql.d.ts +54 -0
- package/dist/codeIndex/rawSql.d.ts.map +1 -0
- package/dist/codeIndex/rawSql.js +71 -0
- package/dist/codeIndex/rawSql.js.map +1 -0
- package/dist/codeIndex/schema.d.ts +99 -0
- package/dist/codeIndex/schema.d.ts.map +1 -0
- package/dist/codeIndex/schema.js +174 -0
- package/dist/codeIndex/schema.js.map +1 -0
- package/dist/codeIndex/search.d.ts +40 -0
- package/dist/codeIndex/search.d.ts.map +1 -0
- package/dist/codeIndex/search.js +316 -0
- package/dist/codeIndex/search.js.map +1 -0
- package/dist/codeIndex/shared.d.ts +27 -0
- package/dist/codeIndex/shared.d.ts.map +1 -0
- package/dist/codeIndex/shared.js +46 -0
- package/dist/codeIndex/shared.js.map +1 -0
- package/dist/codeIndex/sqliteCollection.d.ts +81 -0
- package/dist/codeIndex/sqliteCollection.d.ts.map +1 -0
- package/dist/codeIndex/sqliteCollection.js +250 -0
- package/dist/codeIndex/sqliteCollection.js.map +1 -0
- package/dist/codeIndex/whitelist.d.ts +59 -0
- package/dist/codeIndex/whitelist.d.ts.map +1 -0
- package/dist/codeIndex/whitelist.js +188 -0
- package/dist/codeIndex/whitelist.js.map +1 -0
- package/dist/codeIndexDB.d.ts +132 -271
- package/dist/codeIndexDB.d.ts.map +1 -1
- package/dist/codeIndexDB.js +365 -2729
- package/dist/codeIndexDB.js.map +1 -1
- package/dist/codeIndexService.d.ts +87 -12
- package/dist/codeIndexService.d.ts.map +1 -1
- package/dist/codeIndexService.js +110 -34
- package/dist/codeIndexService.js.map +1 -1
- package/dist/componentScanner.d.ts +35 -0
- package/dist/componentScanner.d.ts.map +1 -1
- package/dist/componentScanner.js +114 -80
- package/dist/componentScanner.js.map +1 -1
- package/dist/config/configGeneratePath.d.ts +4 -0
- package/dist/config/configGeneratePath.d.ts.map +1 -1
- package/dist/config/configGeneratePath.js +4 -0
- package/dist/config/configGeneratePath.js.map +1 -1
- package/dist/config/configLoader.d.ts +15 -0
- package/dist/config/configLoader.d.ts.map +1 -1
- package/dist/config/configLoader.js +15 -16
- package/dist/config/configLoader.js.map +1 -1
- package/dist/config/defaults.d.ts +11 -7
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +16 -14
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/effectiveConfig.d.ts +17 -2
- package/dist/config/effectiveConfig.d.ts.map +1 -1
- package/dist/config/effectiveConfig.js +32 -25
- package/dist/config/effectiveConfig.js.map +1 -1
- package/dist/config/lintConfigReader.d.ts +6 -0
- package/dist/config/lintConfigReader.d.ts.map +1 -1
- package/dist/config/lintConfigReader.js +6 -0
- package/dist/config/lintConfigReader.js.map +1 -1
- package/dist/config/staticObjectExtract.d.ts +4 -0
- package/dist/config/staticObjectExtract.d.ts.map +1 -1
- package/dist/config/staticObjectExtract.js +7 -3
- package/dist/config/staticObjectExtract.js.map +1 -1
- package/dist/config/thresholdRationales.d.ts +2 -0
- package/dist/config/thresholdRationales.d.ts.map +1 -1
- package/dist/config/thresholdRationales.js +5 -2
- package/dist/config/thresholdRationales.js.map +1 -1
- package/dist/constants.d.ts +1 -1
- package/dist/conventions/conventionMiner.d.ts +105 -2
- package/dist/conventions/conventionMiner.d.ts.map +1 -1
- package/dist/conventions/conventionMiner.js +334 -259
- package/dist/conventions/conventionMiner.js.map +1 -1
- package/dist/coverage/coverageService.js +4 -4
- package/dist/coverage/coverageService.js.map +1 -1
- package/dist/daemon/args.d.ts +3 -0
- package/dist/daemon/args.d.ts.map +1 -1
- package/dist/daemon/args.js +3 -0
- package/dist/daemon/args.js.map +1 -1
- package/dist/daemon/core.d.ts +33 -27
- package/dist/daemon/core.d.ts.map +1 -1
- package/dist/daemon/core.js +198 -162
- package/dist/daemon/core.js.map +1 -1
- package/dist/daemon/lspServer.d.ts +8 -0
- package/dist/daemon/lspServer.d.ts.map +1 -1
- package/dist/daemon/lspServer.js +8 -0
- package/dist/daemon/lspServer.js.map +1 -1
- package/dist/daemon/main.d.ts +2 -0
- package/dist/daemon/main.d.ts.map +1 -1
- package/dist/daemon/main.js +22 -4
- package/dist/daemon/main.js.map +1 -1
- package/dist/daemon/resolve.d.ts +18 -3
- package/dist/daemon/resolve.d.ts.map +1 -1
- package/dist/daemon/resolve.js +25 -4
- package/dist/daemon/resolve.js.map +1 -1
- package/dist/daemon/socketClient.d.ts +10 -1
- package/dist/daemon/socketClient.d.ts.map +1 -1
- package/dist/daemon/socketClient.js +10 -1
- package/dist/daemon/socketClient.js.map +1 -1
- package/dist/daemon/socketServer.d.ts +13 -0
- package/dist/daemon/socketServer.d.ts.map +1 -1
- package/dist/daemon/socketServer.js +13 -0
- package/dist/daemon/socketServer.js.map +1 -1
- package/dist/dataPaths.d.ts +17 -8
- package/dist/dataPaths.d.ts.map +1 -1
- package/dist/dataPaths.js +16 -44
- package/dist/dataPaths.js.map +1 -1
- package/dist/dismissals.d.ts +22 -1
- package/dist/dismissals.d.ts.map +1 -1
- package/dist/dismissals.js +22 -1
- package/dist/dismissals.js.map +1 -1
- package/dist/enforcement/gate.d.ts +1 -0
- package/dist/enforcement/gate.d.ts.map +1 -1
- package/dist/enforcement/gate.js +1 -0
- package/dist/enforcement/gate.js.map +1 -1
- package/dist/fingerprint.d.ts +6 -0
- package/dist/fingerprint.d.ts.map +1 -1
- package/dist/fingerprint.js +46 -1
- package/dist/fingerprint.js.map +1 -1
- package/dist/functionScanner.d.ts +30 -1
- package/dist/functionScanner.d.ts.map +1 -1
- package/dist/functionScanner.js +258 -256
- package/dist/functionScanner.js.map +1 -1
- package/dist/generators/AWSQConfigGenerator.d.ts +23 -0
- package/dist/generators/AWSQConfigGenerator.d.ts.map +1 -1
- package/dist/generators/AWSQConfigGenerator.js +23 -0
- package/dist/generators/AWSQConfigGenerator.js.map +1 -1
- package/dist/generators/BaseConfigGenerator.d.ts +7 -0
- package/dist/generators/BaseConfigGenerator.d.ts.map +1 -1
- package/dist/generators/BaseConfigGenerator.js +7 -0
- package/dist/generators/BaseConfigGenerator.js.map +1 -1
- package/dist/generators/ClaudeConfigGenerator.d.ts +23 -0
- package/dist/generators/ClaudeConfigGenerator.d.ts.map +1 -1
- package/dist/generators/ClaudeConfigGenerator.js +23 -0
- package/dist/generators/ClaudeConfigGenerator.js.map +1 -1
- package/dist/generators/ClineConfigGenerator.d.ts +23 -0
- package/dist/generators/ClineConfigGenerator.d.ts.map +1 -1
- package/dist/generators/ClineConfigGenerator.js +23 -0
- package/dist/generators/ClineConfigGenerator.js.map +1 -1
- package/dist/generators/CodeiumConfigGenerator.d.ts +23 -0
- package/dist/generators/CodeiumConfigGenerator.d.ts.map +1 -1
- package/dist/generators/CodeiumConfigGenerator.js +23 -0
- package/dist/generators/CodeiumConfigGenerator.js.map +1 -1
- package/dist/generators/CodexConfigGenerator.d.ts +23 -0
- package/dist/generators/CodexConfigGenerator.d.ts.map +1 -1
- package/dist/generators/CodexConfigGenerator.js +23 -0
- package/dist/generators/CodexConfigGenerator.js.map +1 -1
- package/dist/generators/ConfigGeneratorFactory.d.ts +9 -0
- package/dist/generators/ConfigGeneratorFactory.d.ts.map +1 -1
- package/dist/generators/ConfigGeneratorFactory.js +9 -0
- package/dist/generators/ConfigGeneratorFactory.js.map +1 -1
- package/dist/generators/ContinueConfigGenerator.d.ts +23 -0
- package/dist/generators/ContinueConfigGenerator.d.ts.map +1 -1
- package/dist/generators/ContinueConfigGenerator.js +23 -0
- package/dist/generators/ContinueConfigGenerator.js.map +1 -1
- package/dist/generators/CopilotConfigGenerator.d.ts +23 -0
- package/dist/generators/CopilotConfigGenerator.d.ts.map +1 -1
- package/dist/generators/CopilotConfigGenerator.js +23 -0
- package/dist/generators/CopilotConfigGenerator.js.map +1 -1
- package/dist/generators/CursorConfigGenerator.d.ts +23 -0
- package/dist/generators/CursorConfigGenerator.d.ts.map +1 -1
- package/dist/generators/CursorConfigGenerator.js +23 -0
- package/dist/generators/CursorConfigGenerator.js.map +1 -1
- package/dist/generators/GeminiConfigGenerator.d.ts +23 -0
- package/dist/generators/GeminiConfigGenerator.d.ts.map +1 -1
- package/dist/generators/GeminiConfigGenerator.js +23 -0
- package/dist/generators/GeminiConfigGenerator.js.map +1 -1
- package/dist/generators/VSCodeConfigGenerator.d.ts +23 -0
- package/dist/generators/VSCodeConfigGenerator.d.ts.map +1 -1
- package/dist/generators/VSCodeConfigGenerator.js +23 -0
- package/dist/generators/VSCodeConfigGenerator.js.map +1 -1
- package/dist/generators/ZCodeConfigGenerator.d.ts +23 -0
- package/dist/generators/ZCodeConfigGenerator.d.ts.map +1 -1
- package/dist/generators/ZCodeConfigGenerator.js +23 -0
- package/dist/generators/ZCodeConfigGenerator.js.map +1 -1
- package/dist/graph/blastRadius.d.ts.map +1 -1
- package/dist/graph/blastRadius.js +12 -7
- package/dist/graph/blastRadius.js.map +1 -1
- package/dist/graph/callGraph.d.ts +31 -0
- package/dist/graph/callGraph.d.ts.map +1 -1
- package/dist/graph/callGraph.js +62 -32
- package/dist/graph/callGraph.js.map +1 -1
- package/dist/graph/importClassification.d.ts +28 -0
- package/dist/graph/importClassification.d.ts.map +1 -1
- package/dist/graph/importClassification.js +57 -0
- package/dist/graph/importClassification.js.map +1 -1
- package/dist/graph/importGraph.d.ts +38 -0
- package/dist/graph/importGraph.d.ts.map +1 -1
- package/dist/graph/importGraph.js +38 -0
- package/dist/graph/importGraph.js.map +1 -1
- package/dist/graph/outputFormatter.d.ts +12 -4
- package/dist/graph/outputFormatter.d.ts.map +1 -1
- package/dist/graph/outputFormatter.js +12 -62
- package/dist/graph/outputFormatter.js.map +1 -1
- package/dist/graph/resolutionEnvironment.d.ts +61 -0
- package/dist/graph/resolutionEnvironment.d.ts.map +1 -0
- package/dist/graph/resolutionEnvironment.js +57 -0
- package/dist/graph/resolutionEnvironment.js.map +1 -0
- package/dist/hooks/codex.d.ts +8 -1
- package/dist/hooks/codex.d.ts.map +1 -1
- package/dist/hooks/codex.js +7 -0
- package/dist/hooks/codex.js.map +1 -1
- package/dist/hooks/core.d.ts +6 -0
- package/dist/hooks/core.d.ts.map +1 -1
- package/dist/hooks/core.js +6 -1
- package/dist/hooks/core.js.map +1 -1
- package/dist/hooks/cursor.d.ts +11 -1
- package/dist/hooks/cursor.d.ts.map +1 -1
- package/dist/hooks/cursor.js +10 -0
- package/dist/hooks/cursor.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/installConfig.d.ts +23 -5
- package/dist/installConfig.d.ts.map +1 -1
- package/dist/installConfig.js +23 -5
- package/dist/installConfig.js.map +1 -1
- package/dist/installer.d.ts +6 -0
- package/dist/installer.d.ts.map +1 -1
- package/dist/installer.js +6 -0
- package/dist/installer.js.map +1 -1
- package/dist/invariants/ruleEngine.d.ts +3 -0
- package/dist/invariants/ruleEngine.d.ts.map +1 -1
- package/dist/invariants/ruleEngine.js +156 -119
- package/dist/invariants/ruleEngine.js.map +1 -1
- package/dist/invariants/ruleValidator.d.ts +3 -0
- package/dist/invariants/ruleValidator.d.ts.map +1 -1
- package/dist/invariants/ruleValidator.js +185 -178
- package/dist/invariants/ruleValidator.js.map +1 -1
- package/dist/languages/LanguageOrchestrator.d.ts +4 -1
- package/dist/languages/LanguageOrchestrator.d.ts.map +1 -1
- package/dist/languages/LanguageOrchestrator.js +8 -19
- package/dist/languages/LanguageOrchestrator.js.map +1 -1
- package/dist/languages/RuntimeManager.d.ts +8 -0
- package/dist/languages/RuntimeManager.d.ts.map +1 -1
- package/dist/languages/RuntimeManager.js +55 -5
- package/dist/languages/RuntimeManager.js.map +1 -1
- package/dist/languages/UniversalAnalyzer.js +1 -1
- package/dist/languages/UniversalAnalyzer.js.map +1 -1
- package/dist/languages/adapterBridge.d.ts +4 -0
- package/dist/languages/adapterBridge.d.ts.map +1 -1
- package/dist/languages/adapterBridge.js +37 -3
- package/dist/languages/adapterBridge.js.map +1 -1
- package/dist/languages/go/GoAdapter.d.ts.map +1 -1
- package/dist/languages/go/GoAdapter.js +11 -14
- package/dist/languages/go/GoAdapter.js.map +1 -1
- package/dist/languages/go/analyzer-darwin-amd64 +0 -0
- package/dist/languages/go/analyzer-darwin-arm64 +0 -0
- package/dist/languages/go/analyzer-linux-amd64 +0 -0
- package/dist/languages/go/analyzer-linux-arm64 +0 -0
- package/dist/languages/go/analyzer-src/analyzer.go +2 -0
- package/dist/languages/go/analyzer-src/dataaccess.go +388 -0
- package/dist/languages/go/analyzer-src/types.go +8 -0
- package/dist/languages/go/analyzer-windows-amd64.exe +0 -0
- package/dist/languages/go/database-packages.json +8 -0
- package/dist/languages/go/goResolution.d.ts +229 -0
- package/dist/languages/go/goResolution.d.ts.map +1 -0
- package/dist/languages/go/goResolution.js +799 -0
- package/dist/languages/go/goResolution.js.map +1 -0
- package/dist/languages/go/stdlib-packages.json +353 -0
- package/dist/languages/go/tenantInputs.d.ts +37 -0
- package/dist/languages/go/tenantInputs.d.ts.map +1 -0
- package/dist/languages/go/tenantInputs.js +121 -0
- package/dist/languages/go/tenantInputs.js.map +1 -0
- package/dist/languages/index.d.ts +1 -0
- package/dist/languages/index.d.ts.map +1 -1
- package/dist/languages/index.js +5 -0
- package/dist/languages/index.js.map +1 -1
- package/dist/languages/json/JsonAdapter.d.ts +177 -0
- package/dist/languages/json/JsonAdapter.d.ts.map +1 -0
- package/dist/languages/json/JsonAdapter.js +531 -0
- package/dist/languages/json/JsonAdapter.js.map +1 -0
- package/dist/languages/locationIndex.d.ts +41 -0
- package/dist/languages/locationIndex.d.ts.map +1 -0
- package/dist/languages/locationIndex.js +42 -0
- package/dist/languages/locationIndex.js.map +1 -0
- package/dist/languages/sql/dialectDetection.d.ts +57 -0
- package/dist/languages/sql/dialectDetection.d.ts.map +1 -0
- package/dist/languages/sql/dialectDetection.js +135 -0
- package/dist/languages/sql/dialectDetection.js.map +1 -0
- package/dist/languages/sql/sqlAst.d.ts +494 -0
- package/dist/languages/sql/sqlAst.d.ts.map +1 -0
- package/dist/languages/sql/sqlAst.js +1817 -0
- package/dist/languages/sql/sqlAst.js.map +1 -0
- package/dist/languages/testConventions.d.ts +12 -1
- package/dist/languages/testConventions.d.ts.map +1 -1
- package/dist/languages/testConventions.js +13 -1
- package/dist/languages/testConventions.js.map +1 -1
- package/dist/languages/tree-sitter/TreeSitterCssAdapter.js +1 -1
- package/dist/languages/tree-sitter/TreeSitterCssAdapter.js.map +1 -1
- package/dist/languages/tree-sitter/converter.js +2 -2
- package/dist/languages/tree-sitter/converter.js.map +1 -1
- package/dist/languages/tree-sitter/parser.d.ts +3 -4
- package/dist/languages/tree-sitter/parser.d.ts.map +1 -1
- package/dist/languages/tree-sitter/parser.js +10 -4
- package/dist/languages/tree-sitter/parser.js.map +1 -1
- package/dist/languages/tree-sitter/rawNode.d.ts +3 -0
- package/dist/languages/tree-sitter/rawNode.d.ts.map +1 -1
- package/dist/languages/tree-sitter/rawNode.js +3 -0
- package/dist/languages/tree-sitter/rawNode.js.map +1 -1
- package/dist/languages/types.d.ts +7 -0
- package/dist/languages/types.d.ts.map +1 -1
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts +36 -0
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts.map +1 -1
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js +168 -45
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js.map +1 -1
- package/dist/languages/typescript/database-packages.json +19 -0
- package/dist/ledger.d.ts +118 -2
- package/dist/ledger.d.ts.map +1 -1
- package/dist/ledger.js +167 -45
- package/dist/ledger.js.map +1 -1
- package/dist/legacyIndexNotice.d.ts +32 -0
- package/dist/legacyIndexNotice.d.ts.map +1 -0
- package/dist/legacyIndexNotice.js +89 -0
- package/dist/legacyIndexNotice.js.map +1 -0
- package/dist/mcp-tools/discoveryQueries.d.ts +55 -0
- package/dist/mcp-tools/discoveryQueries.d.ts.map +1 -0
- package/dist/mcp-tools/discoveryQueries.js +157 -0
- package/dist/mcp-tools/discoveryQueries.js.map +1 -0
- package/dist/mcp-tools/projectTasks.d.ts +9 -123
- package/dist/mcp-tools/projectTasks.d.ts.map +1 -1
- package/dist/mcp-tools/projectTasks.js +180 -170
- package/dist/mcp-tools/projectTasks.js.map +1 -1
- package/dist/mcp-tools/whitelistTools.d.ts +20 -0
- package/dist/mcp-tools/whitelistTools.d.ts.map +1 -1
- package/dist/mcp-tools/whitelistTools.js +20 -0
- package/dist/mcp-tools/whitelistTools.js.map +1 -1
- package/dist/mcp-tools/workflowGuide.d.ts +9 -0
- package/dist/mcp-tools/workflowGuide.d.ts.map +1 -1
- package/dist/mcp-tools/workflowGuide.js +13 -5
- package/dist/mcp-tools/workflowGuide.js.map +1 -1
- package/dist/mcp-tools-shared.d.ts +78 -0
- package/dist/mcp-tools-shared.d.ts.map +1 -1
- package/dist/mcp-tools-shared.js +203 -340
- package/dist/mcp-tools-shared.js.map +1 -1
- package/dist/mcp-ui-simple.d.ts +2 -0
- package/dist/mcp-ui-simple.d.ts.map +1 -1
- package/dist/mcp-ui-simple.js +12 -5
- package/dist/mcp-ui-simple.js.map +1 -1
- package/dist/mcp.d.ts +6 -0
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +827 -850
- package/dist/mcp.js.map +1 -1
- package/dist/mcpAuditJobs.d.ts +29 -33
- package/dist/mcpAuditJobs.d.ts.map +1 -1
- package/dist/mcpAuditJobs.js +102 -791
- package/dist/mcpAuditJobs.js.map +1 -1
- package/dist/mcpAutoIndex.d.ts +5 -0
- package/dist/mcpAutoIndex.d.ts.map +1 -1
- package/dist/mcpAutoIndex.js +7 -2
- package/dist/mcpAutoIndex.js.map +1 -1
- package/dist/mcpDiagnostics.d.ts +7 -0
- package/dist/mcpDiagnostics.d.ts.map +1 -1
- package/dist/mcpDiagnostics.js +34 -9
- package/dist/mcpDiagnostics.js.map +1 -1
- package/dist/mcpToolErrors.d.ts +16 -0
- package/dist/mcpToolErrors.d.ts.map +1 -1
- package/dist/mcpToolErrors.js +16 -0
- package/dist/mcpToolErrors.js.map +1 -1
- package/dist/nextFile.d.ts +6 -0
- package/dist/nextFile.d.ts.map +1 -1
- package/dist/nextFile.js +6 -0
- package/dist/nextFile.js.map +1 -1
- package/dist/nextFileIncremental.d.ts +44 -4
- package/dist/nextFileIncremental.d.ts.map +1 -1
- package/dist/nextFileIncremental.js +47 -7
- package/dist/nextFileIncremental.js.map +1 -1
- package/dist/phase/batchFunctions.d.ts +38 -0
- package/dist/phase/batchFunctions.d.ts.map +1 -0
- package/dist/phase/batchFunctions.js +64 -0
- package/dist/phase/batchFunctions.js.map +1 -0
- package/dist/phase/checks.d.ts +39 -0
- package/dist/phase/checks.d.ts.map +1 -0
- package/dist/phase/checks.js +48 -0
- package/dist/phase/checks.js.map +1 -0
- package/dist/phase/codeBlocks.d.ts +25 -0
- package/dist/phase/codeBlocks.d.ts.map +1 -0
- package/dist/phase/codeBlocks.js +268 -0
- package/dist/phase/codeBlocks.js.map +1 -0
- package/dist/phase/colorMath.d.ts +41 -0
- package/dist/phase/colorMath.d.ts.map +1 -0
- package/dist/phase/colorMath.js +109 -0
- package/dist/phase/colorMath.js.map +1 -0
- package/dist/phase/config.d.ts +29 -0
- package/dist/phase/config.d.ts.map +1 -0
- package/dist/phase/config.js +54 -0
- package/dist/phase/config.js.map +1 -0
- package/dist/phase/consumed.d.ts +47 -0
- package/dist/phase/consumed.d.ts.map +1 -0
- package/dist/phase/consumed.js +22 -0
- package/dist/phase/consumed.js.map +1 -0
- package/dist/phase/conventionMining.d.ts +59 -0
- package/dist/phase/conventionMining.d.ts.map +1 -0
- package/dist/phase/conventionMining.js +152 -0
- package/dist/phase/conventionMining.js.map +1 -0
- package/dist/phase/coverage.d.ts +65 -0
- package/dist/phase/coverage.d.ts.map +1 -0
- package/dist/phase/coverage.js +121 -0
- package/dist/phase/coverage.js.map +1 -0
- package/dist/phase/dag.d.ts +49 -0
- package/dist/phase/dag.d.ts.map +1 -0
- package/dist/phase/dag.js +120 -0
- package/dist/phase/dag.js.map +1 -0
- package/dist/phase/dataAccessCalls.d.ts +33 -0
- package/dist/phase/dataAccessCalls.d.ts.map +1 -0
- package/dist/phase/dataAccessCalls.js +42 -0
- package/dist/phase/dataAccessCalls.js.map +1 -0
- package/dist/phase/dataAccessCallsCandidates.d.ts +25 -0
- package/dist/phase/dataAccessCallsCandidates.d.ts.map +1 -0
- package/dist/phase/dataAccessCallsCandidates.js +27 -0
- package/dist/phase/dataAccessCallsCandidates.js.map +1 -0
- package/dist/phase/dynamicSql.d.ts +18 -0
- package/dist/phase/dynamicSql.d.ts.map +1 -0
- package/dist/phase/dynamicSql.js +20 -0
- package/dist/phase/dynamicSql.js.map +1 -0
- package/dist/phase/exportForm.d.ts +23 -0
- package/dist/phase/exportForm.d.ts.map +1 -0
- package/dist/phase/exportForm.js +29 -0
- package/dist/phase/exportForm.js.map +1 -0
- package/dist/phase/exportSymbols.d.ts +21 -0
- package/dist/phase/exportSymbols.d.ts.map +1 -0
- package/dist/phase/exportSymbols.js +28 -0
- package/dist/phase/exportSymbols.js.map +1 -0
- package/dist/phase/fileHeader.d.ts +15 -0
- package/dist/phase/fileHeader.d.ts.map +1 -0
- package/dist/phase/fileHeader.js +33 -0
- package/dist/phase/fileHeader.js.map +1 -0
- package/dist/phase/fileImports.d.ts +39 -0
- package/dist/phase/fileImports.d.ts.map +1 -0
- package/dist/phase/fileImports.js +138 -0
- package/dist/phase/fileImports.js.map +1 -0
- package/dist/phase/fileSymbols.d.ts +25 -0
- package/dist/phase/fileSymbols.d.ts.map +1 -0
- package/dist/phase/fileSymbols.js +302 -0
- package/dist/phase/fileSymbols.js.map +1 -0
- package/dist/phase/functionBodies.d.ts +28 -0
- package/dist/phase/functionBodies.d.ts.map +1 -0
- package/dist/phase/functionBodies.js +67 -0
- package/dist/phase/functionBodies.js.map +1 -0
- package/dist/phase/functionIndex.d.ts +28 -0
- package/dist/phase/functionIndex.d.ts.map +1 -0
- package/dist/phase/functionIndex.js +152 -0
- package/dist/phase/functionIndex.js.map +1 -0
- package/dist/phase/goFunctionAnalysis.d.ts +47 -0
- package/dist/phase/goFunctionAnalysis.d.ts.map +1 -0
- package/dist/phase/goFunctionAnalysis.js +291 -0
- package/dist/phase/goFunctionAnalysis.js.map +1 -0
- package/dist/phase/goFunctions.d.ts +38 -0
- package/dist/phase/goFunctions.d.ts.map +1 -0
- package/dist/phase/goFunctions.js +154 -0
- package/dist/phase/goFunctions.js.map +1 -0
- package/dist/phase/goImports.d.ts +29 -0
- package/dist/phase/goImports.d.ts.map +1 -0
- package/dist/phase/goImports.js +68 -0
- package/dist/phase/goImports.js.map +1 -0
- package/dist/phase/goPackageBindings.d.ts +22 -0
- package/dist/phase/goPackageBindings.d.ts.map +1 -0
- package/dist/phase/goPackageBindings.js +30 -0
- package/dist/phase/goPackageBindings.js.map +1 -0
- package/dist/phase/goSwitches.d.ts +28 -0
- package/dist/phase/goSwitches.d.ts.map +1 -0
- package/dist/phase/goSwitches.js +52 -0
- package/dist/phase/goSwitches.js.map +1 -0
- package/dist/phase/importForm.d.ts +20 -0
- package/dist/phase/importForm.d.ts.map +1 -0
- package/dist/phase/importForm.js +27 -0
- package/dist/phase/importForm.js.map +1 -0
- package/dist/phase/importSpecifiers.d.ts +20 -0
- package/dist/phase/importSpecifiers.d.ts.map +1 -0
- package/dist/phase/importSpecifiers.js +30 -0
- package/dist/phase/importSpecifiers.js.map +1 -0
- package/dist/phase/imports.d.ts +18 -0
- package/dist/phase/imports.d.ts.map +1 -0
- package/dist/phase/imports.js +25 -0
- package/dist/phase/imports.js.map +1 -0
- package/dist/phase/jsonDocument.d.ts +26 -0
- package/dist/phase/jsonDocument.d.ts.map +1 -0
- package/dist/phase/jsonDocument.js +36 -0
- package/dist/phase/jsonDocument.js.map +1 -0
- package/dist/phase/localBinding.d.ts +33 -0
- package/dist/phase/localBinding.d.ts.map +1 -0
- package/dist/phase/localBinding.js +208 -0
- package/dist/phase/localBinding.js.map +1 -0
- package/dist/phase/loopQueries.d.ts +31 -0
- package/dist/phase/loopQueries.d.ts.map +1 -0
- package/dist/phase/loopQueries.js +44 -0
- package/dist/phase/loopQueries.js.map +1 -0
- package/dist/phase/loopQueryCandidates.d.ts +26 -0
- package/dist/phase/loopQueryCandidates.d.ts.map +1 -0
- package/dist/phase/loopQueryCandidates.js +28 -0
- package/dist/phase/loopQueryCandidates.js.map +1 -0
- package/dist/phase/oracles.d.ts +216 -0
- package/dist/phase/oracles.d.ts.map +1 -0
- package/dist/phase/oracles.js +484 -0
- package/dist/phase/oracles.js.map +1 -0
- package/dist/phase/phaseModel.d.ts +190 -0
- package/dist/phase/phaseModel.d.ts.map +1 -0
- package/dist/phase/phaseModel.js +491 -0
- package/dist/phase/phaseModel.js.map +1 -0
- package/dist/phase/producers.d.ts +450 -0
- package/dist/phase/producers.d.ts.map +1 -0
- package/dist/phase/producers.js +1030 -0
- package/dist/phase/producers.js.map +1 -0
- package/dist/phase/querySiteCandidates.d.ts +27 -0
- package/dist/phase/querySiteCandidates.d.ts.map +1 -0
- package/dist/phase/querySiteCandidates.js +66 -0
- package/dist/phase/querySiteCandidates.js.map +1 -0
- package/dist/phase/querySites.d.ts +30 -0
- package/dist/phase/querySites.d.ts.map +1 -0
- package/dist/phase/querySites.js +93 -0
- package/dist/phase/querySites.js.map +1 -0
- package/dist/phase/reachability.d.ts +61 -0
- package/dist/phase/reachability.d.ts.map +1 -0
- package/dist/phase/reachability.js +104 -0
- package/dist/phase/reachability.js.map +1 -0
- package/dist/phase/reactComponents.d.ts +33 -0
- package/dist/phase/reactComponents.d.ts.map +1 -0
- package/dist/phase/reactComponents.js +47 -0
- package/dist/phase/reactComponents.js.map +1 -0
- package/dist/phase/receiverActivity.d.ts +35 -0
- package/dist/phase/receiverActivity.d.ts.map +1 -0
- package/dist/phase/receiverActivity.js +66 -0
- package/dist/phase/receiverActivity.js.map +1 -0
- package/dist/phase/receiverConsumers.d.ts +207 -0
- package/dist/phase/receiverConsumers.d.ts.map +1 -0
- package/dist/phase/receiverConsumers.js +1063 -0
- package/dist/phase/receiverConsumers.js.map +1 -0
- package/dist/phase/receiverProvenance.d.ts +120 -0
- package/dist/phase/receiverProvenance.d.ts.map +1 -0
- package/dist/phase/receiverProvenance.js +377 -0
- package/dist/phase/receiverProvenance.js.map +1 -0
- package/dist/phase/routing.d.ts +47 -0
- package/dist/phase/routing.d.ts.map +1 -0
- package/dist/phase/routing.js +62 -0
- package/dist/phase/routing.js.map +1 -0
- package/dist/phase/rules/conventions.d.ts +61 -0
- package/dist/phase/rules/conventions.d.ts.map +1 -0
- package/dist/phase/rules/conventions.js +403 -0
- package/dist/phase/rules/conventions.js.map +1 -0
- package/dist/phase/rules/crossDomain.d.ts +102 -0
- package/dist/phase/rules/crossDomain.d.ts.map +1 -0
- package/dist/phase/rules/crossDomain.js +918 -0
- package/dist/phase/rules/crossDomain.js.map +1 -0
- package/dist/phase/rules/dataAccess.d.ts +62 -0
- package/dist/phase/rules/dataAccess.d.ts.map +1 -0
- package/dist/phase/rules/dataAccess.js +480 -0
- package/dist/phase/rules/dataAccess.js.map +1 -0
- package/dist/phase/rules/dependencyGraph.d.ts +44 -0
- package/dist/phase/rules/dependencyGraph.d.ts.map +1 -0
- package/dist/phase/rules/dependencyGraph.js +260 -0
- package/dist/phase/rules/dependencyGraph.js.map +1 -0
- package/dist/phase/rules/documentation.d.ts +45 -0
- package/dist/phase/rules/documentation.d.ts.map +1 -0
- package/dist/phase/rules/documentation.js +340 -0
- package/dist/phase/rules/documentation.js.map +1 -0
- package/dist/phase/rules/dry.d.ts +109 -0
- package/dist/phase/rules/dry.d.ts.map +1 -0
- package/dist/phase/rules/dry.js +803 -0
- package/dist/phase/rules/dry.js.map +1 -0
- package/dist/phase/rules/fileDocumentation.d.ts +36 -0
- package/dist/phase/rules/fileDocumentation.d.ts.map +1 -0
- package/dist/phase/rules/fileDocumentation.js +134 -0
- package/dist/phase/rules/fileDocumentation.js.map +1 -0
- package/dist/phase/rules/functionBodies.d.ts +33 -0
- package/dist/phase/rules/functionBodies.d.ts.map +1 -0
- package/dist/phase/rules/functionBodies.js +71 -0
- package/dist/phase/rules/functionBodies.js.map +1 -0
- package/dist/phase/rules/goRules.d.ts +49 -0
- package/dist/phase/rules/goRules.d.ts.map +1 -0
- package/dist/phase/rules/goRules.js +209 -0
- package/dist/phase/rules/goRules.js.map +1 -0
- package/dist/phase/rules/querySites.d.ts +29 -0
- package/dist/phase/rules/querySites.d.ts.map +1 -0
- package/dist/phase/rules/querySites.js +94 -0
- package/dist/phase/rules/querySites.js.map +1 -0
- package/dist/phase/rules/react.d.ts +38 -0
- package/dist/phase/rules/react.d.ts.map +1 -0
- package/dist/phase/rules/react.js +202 -0
- package/dist/phase/rules/react.js.map +1 -0
- package/dist/phase/rules/registry.d.ts +170 -0
- package/dist/phase/rules/registry.d.ts.map +1 -0
- package/dist/phase/rules/registry.js +103 -0
- package/dist/phase/rules/registry.js.map +1 -0
- package/dist/phase/rules/schema.d.ts +79 -0
- package/dist/phase/rules/schema.d.ts.map +1 -0
- package/dist/phase/rules/schema.js +273 -0
- package/dist/phase/rules/schema.js.map +1 -0
- package/dist/phase/rules/schemaJson.d.ts +32 -0
- package/dist/phase/rules/schemaJson.d.ts.map +1 -0
- package/dist/phase/rules/schemaJson.js +81 -0
- package/dist/phase/rules/schemaJson.js.map +1 -0
- package/dist/phase/rules/schemaValidator.d.ts +38 -0
- package/dist/phase/rules/schemaValidator.d.ts.map +1 -0
- package/dist/phase/rules/schemaValidator.js +107 -0
- package/dist/phase/rules/schemaValidator.js.map +1 -0
- package/dist/phase/rules/secrets.d.ts +34 -0
- package/dist/phase/rules/secrets.d.ts.map +1 -0
- package/dist/phase/rules/secrets.js +208 -0
- package/dist/phase/rules/secrets.js.map +1 -0
- package/dist/phase/rules/security.d.ts +30 -0
- package/dist/phase/rules/security.d.ts.map +1 -0
- package/dist/phase/rules/security.js +85 -0
- package/dist/phase/rules/security.js.map +1 -0
- package/dist/phase/rules/securityDefects.d.ts +37 -0
- package/dist/phase/rules/securityDefects.d.ts.map +1 -0
- package/dist/phase/rules/securityDefects.js +167 -0
- package/dist/phase/rules/securityDefects.js.map +1 -0
- package/dist/phase/rules/solid.d.ts +61 -0
- package/dist/phase/rules/solid.d.ts.map +1 -0
- package/dist/phase/rules/solid.js +562 -0
- package/dist/phase/rules/solid.js.map +1 -0
- package/dist/phase/rules/styles.d.ts +77 -0
- package/dist/phase/rules/styles.d.ts.map +1 -0
- package/dist/phase/rules/styles.js +868 -0
- package/dist/phase/rules/styles.js.map +1 -0
- package/dist/phase/rules/unreferencedModule.d.ts +26 -0
- package/dist/phase/rules/unreferencedModule.d.ts.map +1 -0
- package/dist/phase/rules/unreferencedModule.js +61 -0
- package/dist/phase/rules/unreferencedModule.js.map +1 -0
- package/dist/phase/runner.d.ts +549 -0
- package/dist/phase/runner.d.ts.map +1 -0
- package/dist/phase/runner.js +1098 -0
- package/dist/phase/runner.js.map +1 -0
- package/dist/phase/schemaCode.d.ts +34 -0
- package/dist/phase/schemaCode.d.ts.map +1 -0
- package/dist/phase/schemaCode.js +53 -0
- package/dist/phase/schemaCode.js.map +1 -0
- package/dist/phase/schemaObjects.d.ts +37 -0
- package/dist/phase/schemaObjects.d.ts.map +1 -0
- package/dist/phase/schemaObjects.js +139 -0
- package/dist/phase/schemaObjects.js.map +1 -0
- package/dist/phase/schemaUsage.d.ts +30 -0
- package/dist/phase/schemaUsage.d.ts.map +1 -0
- package/dist/phase/schemaUsage.js +99 -0
- package/dist/phase/schemaUsage.js.map +1 -0
- package/dist/phase/schemaUsageCandidates.d.ts +32 -0
- package/dist/phase/schemaUsageCandidates.d.ts.map +1 -0
- package/dist/phase/schemaUsageCandidates.js +165 -0
- package/dist/phase/schemaUsageCandidates.js.map +1 -0
- package/dist/phase/schemaValidations.d.ts +34 -0
- package/dist/phase/schemaValidations.d.ts.map +1 -0
- package/dist/phase/schemaValidations.js +53 -0
- package/dist/phase/schemaValidations.js.map +1 -0
- package/dist/phase/secretCandidates.d.ts +28 -0
- package/dist/phase/secretCandidates.d.ts.map +1 -0
- package/dist/phase/secretCandidates.js +132 -0
- package/dist/phase/secretCandidates.js.map +1 -0
- package/dist/phase/securityCandidates.d.ts +29 -0
- package/dist/phase/securityCandidates.d.ts.map +1 -0
- package/dist/phase/securityCandidates.js +469 -0
- package/dist/phase/securityCandidates.js.map +1 -0
- package/dist/phase/seeded-defects.d.ts +18 -0
- package/dist/phase/seeded-defects.d.ts.map +1 -0
- package/dist/phase/seeded-defects.js +61 -0
- package/dist/phase/seeded-defects.js.map +1 -0
- package/dist/phase/stringLiterals.d.ts +24 -0
- package/dist/phase/stringLiterals.d.ts.map +1 -0
- package/dist/phase/stringLiterals.js +35 -0
- package/dist/phase/stringLiterals.js.map +1 -0
- package/dist/phase/stylesCss.d.ts +25 -0
- package/dist/phase/stylesCss.d.ts.map +1 -0
- package/dist/phase/stylesCss.js +34 -0
- package/dist/phase/stylesCss.js.map +1 -0
- package/dist/phase/stylesMarkup.d.ts +31 -0
- package/dist/phase/stylesMarkup.d.ts.map +1 -0
- package/dist/phase/stylesMarkup.js +48 -0
- package/dist/phase/stylesMarkup.js.map +1 -0
- package/dist/phase/stylesSource.d.ts +36 -0
- package/dist/phase/stylesSource.d.ts.map +1 -0
- package/dist/phase/stylesSource.js +50 -0
- package/dist/phase/stylesSource.js.map +1 -0
- package/dist/phase/typeDeclarations.d.ts +33 -0
- package/dist/phase/typeDeclarations.d.ts.map +1 -0
- package/dist/phase/typeDeclarations.js +76 -0
- package/dist/phase/typeDeclarations.js.map +1 -0
- package/dist/phase/types.d.ts +2199 -0
- package/dist/phase/types.d.ts.map +1 -0
- package/dist/phase/types.js +27 -0
- package/dist/phase/types.js.map +1 -0
- package/dist/phase/withinFileProvenance.d.ts +50 -0
- package/dist/phase/withinFileProvenance.d.ts.map +1 -0
- package/dist/phase/withinFileProvenance.js +112 -0
- package/dist/phase/withinFileProvenance.js.map +1 -0
- package/dist/pipeline.d.ts +37 -30
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +131 -326
- package/dist/pipeline.js.map +1 -1
- package/dist/pipelineAdapters.d.ts +104 -21
- package/dist/pipelineAdapters.d.ts.map +1 -1
- package/dist/pipelineAdapters.js +1144 -984
- package/dist/pipelineAdapters.js.map +1 -1
- package/dist/pipelineTypes.d.ts +21 -0
- package/dist/pipelineTypes.d.ts.map +1 -1
- package/dist/pipelineTypes.js +21 -10
- package/dist/pipelineTypes.js.map +1 -1
- package/dist/presets/presets.d.ts +9 -2
- package/dist/presets/presets.d.ts.map +1 -1
- package/dist/presets/presets.js +15 -26
- package/dist/presets/presets.js.map +1 -1
- package/dist/reporting/csvReportGenerator.d.ts +14 -3
- package/dist/reporting/csvReportGenerator.d.ts.map +1 -1
- package/dist/reporting/csvReportGenerator.js +14 -3
- package/dist/reporting/csvReportGenerator.js.map +1 -1
- package/dist/reporting/htmlReportGenerator.d.ts +5 -1
- package/dist/reporting/htmlReportGenerator.d.ts.map +1 -1
- package/dist/reporting/htmlReportGenerator.js +5 -1
- package/dist/reporting/htmlReportGenerator.js.map +1 -1
- package/dist/reporting/jsonReportGenerator.d.ts +9 -2
- package/dist/reporting/jsonReportGenerator.d.ts.map +1 -1
- package/dist/reporting/jsonReportGenerator.js +19 -5
- package/dist/reporting/jsonReportGenerator.js.map +1 -1
- package/dist/reporting/reportGenerator.d.ts +9 -2
- package/dist/reporting/reportGenerator.d.ts.map +1 -1
- package/dist/reporting/reportGenerator.js +9 -2
- package/dist/reporting/reportGenerator.js.map +1 -1
- package/dist/reporting/sarifReportGenerator.d.ts +14 -0
- package/dist/reporting/sarifReportGenerator.d.ts.map +1 -1
- package/dist/reporting/sarifReportGenerator.js +14 -0
- package/dist/reporting/sarifReportGenerator.js.map +1 -1
- package/dist/reporting/sizeDistribution.d.ts +19 -2
- package/dist/reporting/sizeDistribution.d.ts.map +1 -1
- package/dist/reporting/sizeDistribution.js +23 -5
- package/dist/reporting/sizeDistribution.js.map +1 -1
- package/dist/ruleAliases.d.ts +6 -8
- package/dist/ruleAliases.d.ts.map +1 -1
- package/dist/ruleAliases.js +29 -4
- package/dist/ruleAliases.js.map +1 -1
- package/dist/search/QueryParser.d.ts +1 -0
- package/dist/search/QueryParser.d.ts.map +1 -1
- package/dist/search/QueryParser.js +32 -91
- package/dist/search/QueryParser.js.map +1 -1
- package/dist/services/CodeMapGenerator.d.ts +19 -20
- package/dist/services/CodeMapGenerator.d.ts.map +1 -1
- package/dist/services/CodeMapGenerator.js +214 -194
- package/dist/services/CodeMapGenerator.js.map +1 -1
- package/dist/services/ProjectTaskRepository.d.ts +65 -3
- package/dist/services/ProjectTaskRepository.d.ts.map +1 -1
- package/dist/services/ProjectTaskRepository.js +94 -25
- package/dist/services/ProjectTaskRepository.js.map +1 -1
- package/dist/services/auditJobService.d.ts +17 -1
- package/dist/services/auditJobService.d.ts.map +1 -1
- package/dist/services/auditJobService.js +16 -0
- package/dist/services/auditJobService.js.map +1 -1
- package/dist/services/fileAccounting.d.ts +43 -5
- package/dist/services/fileAccounting.d.ts.map +1 -1
- package/dist/services/fileAccounting.js +48 -9
- package/dist/services/fileAccounting.js.map +1 -1
- package/dist/services/projectTaskHelpers.d.ts +45 -0
- package/dist/services/projectTaskHelpers.d.ts.map +1 -1
- package/dist/services/projectTaskHelpers.js +45 -0
- package/dist/services/projectTaskHelpers.js.map +1 -1
- package/dist/services/whitelistService.d.ts +40 -5
- package/dist/services/whitelistService.d.ts.map +1 -1
- package/dist/services/whitelistService.js +87 -46
- package/dist/services/whitelistService.js.map +1 -1
- package/dist/sqlite/betterSqlite3.d.ts +35 -1
- package/dist/sqlite/betterSqlite3.d.ts.map +1 -1
- package/dist/sqlite/betterSqlite3.js +35 -1
- package/dist/sqlite/betterSqlite3.js.map +1 -1
- package/dist/sqlite/driver.d.ts +23 -0
- package/dist/sqlite/driver.d.ts.map +1 -1
- package/dist/sqlite/driver.js +23 -0
- package/dist/sqlite/driver.js.map +1 -1
- package/dist/sqlite/nodeSqlite.d.ts +35 -1
- package/dist/sqlite/nodeSqlite.d.ts.map +1 -1
- package/dist/sqlite/nodeSqlite.js +35 -1
- package/dist/sqlite/nodeSqlite.js.map +1 -1
- package/dist/structuralSignature.d.ts +9 -0
- package/dist/structuralSignature.d.ts.map +1 -1
- package/dist/structuralSignature.js +9 -0
- package/dist/structuralSignature.js.map +1 -1
- package/dist/styles/cssAstExtractor.d.ts +15 -0
- package/dist/styles/cssAstExtractor.d.ts.map +1 -1
- package/dist/styles/cssAstExtractor.js +15 -0
- package/dist/styles/cssAstExtractor.js.map +1 -1
- package/dist/styles/normalizer.d.ts +6 -0
- package/dist/styles/normalizer.d.ts.map +1 -1
- package/dist/styles/normalizer.js +6 -0
- package/dist/styles/normalizer.js.map +1 -1
- package/dist/styles/styleExtractor.d.ts +29 -2
- package/dist/styles/styleExtractor.d.ts.map +1 -1
- package/dist/styles/styleExtractor.js +67 -48
- package/dist/styles/styleExtractor.js.map +1 -1
- package/dist/styles/styleIndexer.d.ts +8 -0
- package/dist/styles/styleIndexer.d.ts.map +1 -1
- package/dist/styles/styleIndexer.js +135 -138
- package/dist/styles/styleIndexer.js.map +1 -1
- package/dist/styles/tailwindConfigLoader.d.ts +12 -0
- package/dist/styles/tailwindConfigLoader.d.ts.map +1 -1
- package/dist/styles/tailwindConfigLoader.js +12 -0
- package/dist/styles/tailwindConfigLoader.js.map +1 -1
- package/dist/styles/tailwindExpander.d.ts +3 -0
- package/dist/styles/tailwindExpander.d.ts.map +1 -1
- package/dist/styles/tailwindExpander.js +8 -4
- package/dist/styles/tailwindExpander.js.map +1 -1
- package/dist/styles/tailwindProbe.d.ts +9 -0
- package/dist/styles/tailwindProbe.d.ts.map +1 -1
- package/dist/styles/tailwindProbe.js +181 -166
- package/dist/styles/tailwindProbe.js.map +1 -1
- package/dist/styles/tailwindUtilityExpander.d.ts +13 -0
- package/dist/styles/tailwindUtilityExpander.d.ts.map +1 -1
- package/dist/styles/tailwindUtilityExpander.js +13 -0
- package/dist/styles/tailwindUtilityExpander.js.map +1 -1
- package/dist/symbols.d.ts +13 -11
- package/dist/symbols.d.ts.map +1 -1
- package/dist/symbols.js +14 -21
- package/dist/symbols.js.map +1 -1
- package/dist/telemetry.d.ts +31 -3
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +31 -3
- package/dist/telemetry.js.map +1 -1
- package/dist/tool-registry.d.ts +37 -1
- package/dist/tool-registry.d.ts.map +1 -1
- package/dist/tool-registry.js +37 -1
- package/dist/tool-registry.js.map +1 -1
- package/dist/types.d.ts +114 -71
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +7 -16
- package/dist/types.js.map +1 -1
- package/dist/ui/InteractivePrompts.d.ts +12 -0
- package/dist/ui/InteractivePrompts.d.ts.map +1 -1
- package/dist/ui/InteractivePrompts.js +12 -0
- package/dist/ui/InteractivePrompts.js.map +1 -1
- package/dist/utils/astParser.d.ts +15 -0
- package/dist/utils/astParser.d.ts.map +1 -1
- package/dist/utils/astParser.js +15 -0
- package/dist/utils/astParser.js.map +1 -1
- package/dist/utils/astUtils.d.ts +60 -0
- package/dist/utils/astUtils.d.ts.map +1 -1
- package/dist/utils/astUtils.js +350 -362
- package/dist/utils/astUtils.js.map +1 -1
- package/dist/utils/contentHash.d.ts +22 -0
- package/dist/utils/contentHash.d.ts.map +1 -0
- package/dist/utils/contentHash.js +26 -0
- package/dist/utils/contentHash.js.map +1 -0
- package/dist/utils/dependencyExtractor.d.ts +28 -0
- package/dist/utils/dependencyExtractor.d.ts.map +1 -1
- package/dist/utils/dependencyExtractor.js +28 -1
- package/dist/utils/dependencyExtractor.js.map +1 -1
- package/dist/utils/errorMessage.d.ts +10 -0
- package/dist/utils/errorMessage.d.ts.map +1 -0
- package/dist/utils/errorMessage.js +12 -0
- package/dist/utils/errorMessage.js.map +1 -0
- package/dist/utils/fileDiscovery.d.ts +61 -2
- package/dist/utils/fileDiscovery.d.ts.map +1 -1
- package/dist/utils/fileDiscovery.js +131 -23
- package/dist/utils/fileDiscovery.js.map +1 -1
- package/dist/utils/reactDetection.d.ts +34 -5
- package/dist/utils/reactDetection.d.ts.map +1 -1
- package/dist/utils/reactDetection.js +73 -52
- package/dist/utils/reactDetection.js.map +1 -1
- package/dist/version.generated.d.ts +1 -1
- package/dist/version.generated.js +1 -1
- package/dist/workers/auditWorker.js +7 -3
- package/dist/workers/auditWorker.js.map +1 -1
- package/examples/.auditrc.example.json +0 -8
- package/examples/.auditrc.json +0 -11
- package/examples/.code-auditor.json +0 -2
- package/examples/nextjs.auditrc.json +0 -8
- package/examples/node-api.auditrc.json +0 -7
- package/examples/react.auditrc.json +0 -6
- package/examples/tolerant-solid.auditrc.json +0 -5
- package/package.json +18 -9
- package/plugin/.claude-plugin/manifest.json +16 -0
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/hooks/hooks.json +7 -3
- package/plugin/scripts/hook-audit.sh +46 -16
- package/plugin/scripts/hook-common.sh +81 -12
- package/plugin/scripts/hook-drift-check.sh +76 -0
- package/plugin/scripts/hook-self-audit.sh +22 -14
- package/plugin/scripts/hook-warm.sh +5 -6
- package/plugin/skills/code-auditor/SKILL.md +1 -1
- package/server.json +10 -4
package/dist/mcpAuditJobs.js
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
|
-
import {
|
|
3
|
-
import { fork } from 'node:child_process';
|
|
4
|
-
import { randomUUID } from 'node:crypto';
|
|
5
|
-
import { cpus, hostname } from 'node:os';
|
|
2
|
+
import { hostname } from 'node:os';
|
|
6
3
|
import { fileURLToPath } from 'node:url';
|
|
7
4
|
import { CodeIndexDB } from './codeIndexDB.js';
|
|
8
5
|
import { CodeMapGenerator } from './services/CodeMapGenerator.js';
|
|
@@ -13,38 +10,8 @@ import { detectRunInput, evaluateStaleRunning, hashFileSet, markRunsFailed, patc
|
|
|
13
10
|
import { PACKAGE_VERSION } from './constants.js';
|
|
14
11
|
import { mcpDebugStderr } from './mcpDiagnostics.js';
|
|
15
12
|
import { findFiles } from './utils/fileDiscovery.js';
|
|
16
|
-
import {
|
|
17
|
-
import { RULE_REGISTRY } from './analyzers/ruleRegistry.js';
|
|
13
|
+
import { runAudit } from './auditRunner.js';
|
|
18
14
|
import chalk from 'chalk';
|
|
19
|
-
const SOURCE_FOLDERS = ['app', 'src'];
|
|
20
|
-
// Cross-file reducers run once over the FULL scope, never inside partition
|
|
21
|
-
// shards. A shard sees only its partition's files and (worse) reads shared
|
|
22
|
-
// index tables that other shards are still writing, so any reducer that reads
|
|
23
|
-
// accumulated state must be global. The set is every reducer/derived-reducer
|
|
24
|
-
// in the pipeline stage model:
|
|
25
|
-
// dry — cross-file duplicate detection over the function index
|
|
26
|
-
// data-access — per-file, but kept global so its coverage/status is a single
|
|
27
|
-
// full-scope row (harmless to shard, but global is uniform)
|
|
28
|
-
// schema — schema_usage reducers (unknown-table, JSON validation)
|
|
29
|
-
// styles — reads style_declarations/tokens/class_usage written by the
|
|
30
|
-
// styles-css visitor + syncStyleIndex (same analyzer gate)
|
|
31
|
-
// conventions — reads function_calls/conventions via updateDependencyGraph +
|
|
32
|
-
// mineAllConventions (same analyzer gate)
|
|
33
|
-
// invariants — call-constraint/module-boundary need the full file list
|
|
34
|
-
// cross-domain— reads schema_usage/indexed_functions/graph_cache (stage 4)
|
|
35
|
-
const GLOBAL_ONLY_ANALYZERS = new Set([
|
|
36
|
-
'dry',
|
|
37
|
-
'data-access',
|
|
38
|
-
'data-access-org-filter',
|
|
39
|
-
'schema',
|
|
40
|
-
'styles',
|
|
41
|
-
'conventions',
|
|
42
|
-
'invariants',
|
|
43
|
-
'cross-domain',
|
|
44
|
-
]);
|
|
45
|
-
const RETRYABLE_ERROR_PATTERNS = [/timed out/i, /timeout/i, /econnreset/i, /eagain/i, /emfile/i];
|
|
46
|
-
/** Hard cap so pathological configs cannot fork unbounded processes. */
|
|
47
|
-
const MAX_AUDIT_WORKERS = 8;
|
|
48
15
|
const DEFAULT_JOB_TIMEOUT_MS = 30 * 60 * 1000;
|
|
49
16
|
const ABSOLUTE_MAX_JOB_TIMEOUT_MS = 4 * 60 * 60 * 1000;
|
|
50
17
|
const MIN_JOB_TIMEOUT_MS = 60 * 1000;
|
|
@@ -151,14 +118,10 @@ async function acquireLease(db, projectRoot, jobId) {
|
|
|
151
118
|
await new Promise((resolve) => setTimeout(resolve, Math.max(250, Math.floor(ttl / 4))));
|
|
152
119
|
}
|
|
153
120
|
}
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
const filename = ext === '.ts' ? 'auditWorker.ts' : 'auditWorker.js';
|
|
159
|
-
return path.join(dir, 'workers', filename);
|
|
160
|
-
}
|
|
161
|
-
/** Entrypoint for the detached CLI runner (Spec 41 `--detach`). */
|
|
121
|
+
/**
|
|
122
|
+
* Entrypoint for the detached CLI runner (Spec 41 `--detach`).
|
|
123
|
+
* @returns The path to the detached runner entrypoint.
|
|
124
|
+
*/
|
|
162
125
|
export function resolveJobRunnerEntrypoint() {
|
|
163
126
|
const current = fileURLToPath(import.meta.url);
|
|
164
127
|
const ext = path.extname(current);
|
|
@@ -166,349 +129,6 @@ export function resolveJobRunnerEntrypoint() {
|
|
|
166
129
|
const filename = ext === '.ts' ? 'auditJobRunner.ts' : 'auditJobRunner.js';
|
|
167
130
|
return path.join(dir, 'workers', filename);
|
|
168
131
|
}
|
|
169
|
-
function asSerializableConfig(options) {
|
|
170
|
-
return {
|
|
171
|
-
projectRoot: options.projectRoot || process.cwd(),
|
|
172
|
-
includePaths: options.includePaths,
|
|
173
|
-
excludePaths: options.excludePaths,
|
|
174
|
-
fileExtensions: options.fileExtensions,
|
|
175
|
-
minSeverity: options.minSeverity,
|
|
176
|
-
enabledAnalyzers: options.enabledAnalyzers,
|
|
177
|
-
indexFunctions: options.indexFunctions,
|
|
178
|
-
analyzerConfigs: options.analyzerConfigs,
|
|
179
|
-
analyzerConcurrency: options.analyzerConcurrency,
|
|
180
|
-
explicitFiles: options.explicitFiles,
|
|
181
|
-
maxFilesPerRun: options.maxFilesPerRun,
|
|
182
|
-
shardSoftBudgetMs: options.shardSoftBudgetMs,
|
|
183
|
-
};
|
|
184
|
-
}
|
|
185
|
-
function isRetryableShardError(error) {
|
|
186
|
-
return RETRYABLE_ERROR_PATTERNS.some((p) => p.test(error));
|
|
187
|
-
}
|
|
188
|
-
async function runShardTasksWithWorkerPool(getDb, jobId, tasks, options) {
|
|
189
|
-
if (tasks.length === 0)
|
|
190
|
-
return [];
|
|
191
|
-
const queue = [...tasks];
|
|
192
|
-
const completedResults = [];
|
|
193
|
-
const pending = new Map();
|
|
194
|
-
const workers = new Set();
|
|
195
|
-
let runningShards = 0;
|
|
196
|
-
let retryCount = 0;
|
|
197
|
-
let aborted = false;
|
|
198
|
-
let settled = false;
|
|
199
|
-
const spawnCount = Math.max(1, Math.min(options.maxWorkers, tasks.length));
|
|
200
|
-
const workerEntry = resolveWorkerEntrypoint();
|
|
201
|
-
const cleanupWorker = (worker) => {
|
|
202
|
-
workers.delete(worker);
|
|
203
|
-
try {
|
|
204
|
-
worker.removeAllListeners();
|
|
205
|
-
}
|
|
206
|
-
catch {
|
|
207
|
-
// ignore
|
|
208
|
-
}
|
|
209
|
-
try {
|
|
210
|
-
if (worker.connected)
|
|
211
|
-
worker.disconnect();
|
|
212
|
-
}
|
|
213
|
-
catch {
|
|
214
|
-
// ignore
|
|
215
|
-
}
|
|
216
|
-
const safeKill = (signal) => {
|
|
217
|
-
try {
|
|
218
|
-
if (signal)
|
|
219
|
-
worker.kill(signal);
|
|
220
|
-
else
|
|
221
|
-
worker.kill();
|
|
222
|
-
}
|
|
223
|
-
catch {
|
|
224
|
-
// ignore
|
|
225
|
-
}
|
|
226
|
-
};
|
|
227
|
-
if (!worker.killed) {
|
|
228
|
-
safeKill('SIGTERM');
|
|
229
|
-
setTimeout(() => {
|
|
230
|
-
if (!worker.killed) {
|
|
231
|
-
safeKill('SIGKILL');
|
|
232
|
-
safeKill();
|
|
233
|
-
}
|
|
234
|
-
}, 750);
|
|
235
|
-
}
|
|
236
|
-
};
|
|
237
|
-
const post = (worker, message) => {
|
|
238
|
-
try {
|
|
239
|
-
if (worker.connected && !worker.killed) {
|
|
240
|
-
worker.send(message);
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
catch (e) {
|
|
244
|
-
mcpDebugStderr(chalk.yellow('[WARN]'), 'Failed to send to audit worker (IPC):', e);
|
|
245
|
-
}
|
|
246
|
-
};
|
|
247
|
-
const disposeAllWorkers = () => {
|
|
248
|
-
for (const [rid, { worker, timer }] of [...pending.entries()]) {
|
|
249
|
-
clearTimeout(timer);
|
|
250
|
-
post(worker, { kind: 'cancel-request', requestId: rid });
|
|
251
|
-
}
|
|
252
|
-
pending.clear();
|
|
253
|
-
for (const w of [...workers]) {
|
|
254
|
-
cleanupWorker(w);
|
|
255
|
-
}
|
|
256
|
-
workers.clear();
|
|
257
|
-
};
|
|
258
|
-
return await new Promise((resolve, reject) => {
|
|
259
|
-
const finish = (ok, value) => {
|
|
260
|
-
if (settled)
|
|
261
|
-
return;
|
|
262
|
-
settled = true;
|
|
263
|
-
if (options.signal) {
|
|
264
|
-
options.signal.removeEventListener('abort', onAbort);
|
|
265
|
-
}
|
|
266
|
-
disposeAllWorkers();
|
|
267
|
-
if (ok)
|
|
268
|
-
resolve(value);
|
|
269
|
-
else
|
|
270
|
-
reject(value);
|
|
271
|
-
};
|
|
272
|
-
const onAbort = () => {
|
|
273
|
-
if (aborted)
|
|
274
|
-
return;
|
|
275
|
-
aborted = true;
|
|
276
|
-
const reason = options.signal?.reason;
|
|
277
|
-
const msg = reason instanceof Error
|
|
278
|
-
? reason.message
|
|
279
|
-
: typeof reason === 'string'
|
|
280
|
-
? reason
|
|
281
|
-
: 'Audit job was cancelled or exceeded the maximum duration';
|
|
282
|
-
finish(false, new Error(msg));
|
|
283
|
-
};
|
|
284
|
-
if (options.signal?.aborted) {
|
|
285
|
-
onAbort();
|
|
286
|
-
return;
|
|
287
|
-
}
|
|
288
|
-
options.signal?.addEventListener('abort', onAbort, { once: true });
|
|
289
|
-
const progressTotal = () => Math.max(tasks.length, completedResults.length + queue.length + runningShards);
|
|
290
|
-
const maybeDispatch = () => {
|
|
291
|
-
if (aborted || settled)
|
|
292
|
-
return;
|
|
293
|
-
if (queue.length === 0 && runningShards === 0 && pending.size === 0) {
|
|
294
|
-
finish(true, completedResults);
|
|
295
|
-
return;
|
|
296
|
-
}
|
|
297
|
-
for (const worker of [...workers]) {
|
|
298
|
-
const hasAssigned = [...pending.values()].some((p) => p.worker === worker);
|
|
299
|
-
if (hasAssigned)
|
|
300
|
-
continue;
|
|
301
|
-
const next = queue.shift();
|
|
302
|
-
if (!next)
|
|
303
|
-
continue;
|
|
304
|
-
runningShards++;
|
|
305
|
-
const requestId = randomUUID();
|
|
306
|
-
const timer = setTimeout(() => {
|
|
307
|
-
if (settled || aborted)
|
|
308
|
-
return;
|
|
309
|
-
const entry = pending.get(requestId);
|
|
310
|
-
if (!entry)
|
|
311
|
-
return;
|
|
312
|
-
clearTimeout(entry.timer);
|
|
313
|
-
pending.delete(requestId);
|
|
314
|
-
runningShards--;
|
|
315
|
-
const timedOutWorker = entry.worker;
|
|
316
|
-
post(timedOutWorker, { kind: 'cancel-request', requestId });
|
|
317
|
-
cleanupWorker(timedOutWorker);
|
|
318
|
-
if (!spawnOneWorker()) {
|
|
319
|
-
aborted = true;
|
|
320
|
-
finish(false, new Error(`Shard '${next.shardId}' timed out after ${options.shardTimeoutMs}ms and a replacement worker could not be started.`));
|
|
321
|
-
return;
|
|
322
|
-
}
|
|
323
|
-
const msg = `Shard '${next.shardId}' timed out after ${options.shardTimeoutMs}ms`;
|
|
324
|
-
if (next.attempts < options.maxRetries) {
|
|
325
|
-
next.attempts += 1;
|
|
326
|
-
retryCount++;
|
|
327
|
-
setTimeout(() => {
|
|
328
|
-
queue.push(next);
|
|
329
|
-
setAuditJobProgress(getDb(), jobId, {
|
|
330
|
-
phase: 'analysis',
|
|
331
|
-
message: `Retrying shard ${next.shardId} (${next.attempts}/${options.maxRetries}) after worker recycle`,
|
|
332
|
-
current: completedResults.length,
|
|
333
|
-
total: progressTotal(),
|
|
334
|
-
});
|
|
335
|
-
maybeDispatch();
|
|
336
|
-
}, options.retryBackoffMs * next.attempts);
|
|
337
|
-
maybeDispatch();
|
|
338
|
-
return;
|
|
339
|
-
}
|
|
340
|
-
aborted = true;
|
|
341
|
-
finish(false, new Error(`${msg}. Retries exhausted (${options.maxRetries}).`));
|
|
342
|
-
}, options.shardTimeoutMs);
|
|
343
|
-
pending.set(requestId, { worker, task: next, timer });
|
|
344
|
-
post(worker, {
|
|
345
|
-
kind: 'run-audit-shard',
|
|
346
|
-
requestId,
|
|
347
|
-
shardId: next.shardId,
|
|
348
|
-
config: next.config,
|
|
349
|
-
});
|
|
350
|
-
}
|
|
351
|
-
};
|
|
352
|
-
const workerEndHandled = new WeakSet();
|
|
353
|
-
const handleWorkerProcessEnd = (proc, code, signal, procErr) => {
|
|
354
|
-
if (settled || aborted)
|
|
355
|
-
return;
|
|
356
|
-
if (workerEndHandled.has(proc))
|
|
357
|
-
return;
|
|
358
|
-
workerEndHandled.add(proc);
|
|
359
|
-
const wasTracked = workers.has(proc);
|
|
360
|
-
if (wasTracked) {
|
|
361
|
-
workers.delete(proc);
|
|
362
|
-
}
|
|
363
|
-
try {
|
|
364
|
-
proc.removeAllListeners();
|
|
365
|
-
}
|
|
366
|
-
catch {
|
|
367
|
-
// ignore
|
|
368
|
-
}
|
|
369
|
-
const detail = procErr
|
|
370
|
-
? `Worker process error: ${procErr.message}`
|
|
371
|
-
: `Worker exited (code=${code}, signal=${signal ?? 'none'})`;
|
|
372
|
-
const orphaned = [...pending.entries()].find(([, v]) => v.worker === proc);
|
|
373
|
-
if (orphaned) {
|
|
374
|
-
clearTimeout(orphaned[1].timer);
|
|
375
|
-
pending.delete(orphaned[0]);
|
|
376
|
-
runningShards--;
|
|
377
|
-
if (!spawnOneWorker()) {
|
|
378
|
-
aborted = true;
|
|
379
|
-
finish(false, new Error(`${detail}; could not spawn replacement worker`));
|
|
380
|
-
return;
|
|
381
|
-
}
|
|
382
|
-
const task = orphaned[1].task;
|
|
383
|
-
if (task.attempts < options.maxRetries) {
|
|
384
|
-
task.attempts += 1;
|
|
385
|
-
retryCount++;
|
|
386
|
-
setTimeout(() => {
|
|
387
|
-
queue.push(task);
|
|
388
|
-
maybeDispatch();
|
|
389
|
-
}, options.retryBackoffMs * task.attempts);
|
|
390
|
-
maybeDispatch();
|
|
391
|
-
return;
|
|
392
|
-
}
|
|
393
|
-
aborted = true;
|
|
394
|
-
finish(false, new Error(`${detail} while running shard '${task.shardId}'`));
|
|
395
|
-
return;
|
|
396
|
-
}
|
|
397
|
-
if (wasTracked && (code !== 0 || signal || procErr)) {
|
|
398
|
-
if (!spawnOneWorker()) {
|
|
399
|
-
mcpDebugStderr(chalk.yellow('[WARN]'), 'Could not replenish audit worker after unexpected exit');
|
|
400
|
-
}
|
|
401
|
-
else {
|
|
402
|
-
maybeDispatch();
|
|
403
|
-
}
|
|
404
|
-
}
|
|
405
|
-
};
|
|
406
|
-
const handleWorkerMessage = (worker, raw) => {
|
|
407
|
-
if (aborted || settled)
|
|
408
|
-
return;
|
|
409
|
-
const message = raw;
|
|
410
|
-
if (!message || typeof message !== 'object' || !('kind' in message))
|
|
411
|
-
return;
|
|
412
|
-
if (message.kind === 'worker-progress') {
|
|
413
|
-
const entry = pending.get(message.requestId);
|
|
414
|
-
if (!entry)
|
|
415
|
-
return;
|
|
416
|
-
const overallCurrent = completedResults.length +
|
|
417
|
-
Math.min(1, (message.progress.current ?? 0) / Math.max(1, message.progress.total ?? 1));
|
|
418
|
-
setAuditJobProgress(getDb(), jobId, {
|
|
419
|
-
phase: message.progress.phase ?? 'analysis',
|
|
420
|
-
message: `${message.shardId}: ${message.progress.message ?? 'running'} (retries=${retryCount})`,
|
|
421
|
-
current: Math.floor(overallCurrent),
|
|
422
|
-
total: progressTotal(),
|
|
423
|
-
});
|
|
424
|
-
return;
|
|
425
|
-
}
|
|
426
|
-
if (message.kind === 'worker-handoff') {
|
|
427
|
-
const entry = pending.get(message.requestId);
|
|
428
|
-
if (!entry)
|
|
429
|
-
return;
|
|
430
|
-
clearTimeout(entry.timer);
|
|
431
|
-
pending.delete(message.requestId);
|
|
432
|
-
runningShards--;
|
|
433
|
-
completedResults.push(message.partialResult);
|
|
434
|
-
queue.push({
|
|
435
|
-
shardId: `${entry.task.shardId}>cont`,
|
|
436
|
-
attempts: 0,
|
|
437
|
-
config: message.continuation,
|
|
438
|
-
});
|
|
439
|
-
setAuditJobProgress(getDb(), jobId, {
|
|
440
|
-
phase: 'analysis',
|
|
441
|
-
message: `Chunk done for ${entry.task.shardId}; queued ${message.remainingFiles.length} remaining file(s) (retries=${retryCount})`,
|
|
442
|
-
current: completedResults.length,
|
|
443
|
-
total: progressTotal(),
|
|
444
|
-
});
|
|
445
|
-
maybeDispatch();
|
|
446
|
-
return;
|
|
447
|
-
}
|
|
448
|
-
if (message.kind === 'worker-result' || message.kind === 'worker-error') {
|
|
449
|
-
const entry = pending.get(message.requestId);
|
|
450
|
-
if (!entry)
|
|
451
|
-
return;
|
|
452
|
-
clearTimeout(entry.timer);
|
|
453
|
-
pending.delete(message.requestId);
|
|
454
|
-
runningShards--;
|
|
455
|
-
if (message.kind === 'worker-result') {
|
|
456
|
-
completedResults.push(message.result);
|
|
457
|
-
setAuditJobProgress(getDb(), jobId, {
|
|
458
|
-
phase: 'analysis',
|
|
459
|
-
message: `Completed shard ${entry.task.shardId} (${completedResults.length} chunk(s), retries=${retryCount})`,
|
|
460
|
-
current: completedResults.length,
|
|
461
|
-
total: progressTotal(),
|
|
462
|
-
});
|
|
463
|
-
maybeDispatch();
|
|
464
|
-
return;
|
|
465
|
-
}
|
|
466
|
-
const errText = message.error || `Shard '${entry.task.shardId}' failed`;
|
|
467
|
-
if (entry.task.attempts < options.maxRetries && isRetryableShardError(errText)) {
|
|
468
|
-
entry.task.attempts += 1;
|
|
469
|
-
retryCount++;
|
|
470
|
-
setTimeout(() => {
|
|
471
|
-
queue.push(entry.task);
|
|
472
|
-
maybeDispatch();
|
|
473
|
-
}, options.retryBackoffMs * entry.task.attempts);
|
|
474
|
-
maybeDispatch();
|
|
475
|
-
return;
|
|
476
|
-
}
|
|
477
|
-
aborted = true;
|
|
478
|
-
finish(false, new Error(`${errText}${message.stack ? `\n${message.stack}` : ''}`));
|
|
479
|
-
}
|
|
480
|
-
};
|
|
481
|
-
const spawnOneWorker = () => {
|
|
482
|
-
try {
|
|
483
|
-
const proc = fork(workerEntry, [], {
|
|
484
|
-
stdio: ['ignore', 'ignore', 'ignore', 'ipc'],
|
|
485
|
-
});
|
|
486
|
-
workers.add(proc);
|
|
487
|
-
proc.on('message', (msg) => handleWorkerMessage(proc, msg));
|
|
488
|
-
proc.on('error', (err) => {
|
|
489
|
-
mcpDebugStderr(chalk.yellow('[WARN]'), 'Audit worker process error:', err);
|
|
490
|
-
handleWorkerProcessEnd(proc, null, null, err instanceof Error ? err : new Error(String(err)));
|
|
491
|
-
});
|
|
492
|
-
proc.on('exit', (code, signal) => {
|
|
493
|
-
handleWorkerProcessEnd(proc, code, signal);
|
|
494
|
-
});
|
|
495
|
-
return true;
|
|
496
|
-
}
|
|
497
|
-
catch (e) {
|
|
498
|
-
mcpDebugStderr(chalk.red('[ERROR]'), 'fork() failed for audit worker:', e);
|
|
499
|
-
return false;
|
|
500
|
-
}
|
|
501
|
-
};
|
|
502
|
-
for (let i = 0; i < spawnCount; i++) {
|
|
503
|
-
if (!spawnOneWorker()) {
|
|
504
|
-
aborted = true;
|
|
505
|
-
finish(false, new Error('Failed to start audit worker processes'));
|
|
506
|
-
return;
|
|
507
|
-
}
|
|
508
|
-
}
|
|
509
|
-
maybeDispatch();
|
|
510
|
-
});
|
|
511
|
-
}
|
|
512
132
|
function getAllViolations(result) {
|
|
513
133
|
const violations = [];
|
|
514
134
|
for (const [analyzerName, analyzerResult] of Object.entries(result.analyzerResults ?? {})) {
|
|
@@ -530,277 +150,12 @@ function calculateHealthScore(result) {
|
|
|
530
150
|
let score = 100 - (weightedViolations / filesAnalyzed) * 2;
|
|
531
151
|
return Math.max(0, Math.round(Math.min(100, score)));
|
|
532
152
|
}
|
|
533
|
-
function summarizeAnalyzerResults(analyzerResults, filesAnalyzed) {
|
|
534
|
-
let totalViolations = 0;
|
|
535
|
-
let criticalIssues = 0;
|
|
536
|
-
let severe = 0;
|
|
537
|
-
let high = 0;
|
|
538
|
-
const violationsByCategory = {};
|
|
539
|
-
for (const [analyzer, result] of Object.entries(analyzerResults)) {
|
|
540
|
-
for (const violation of result.violations) {
|
|
541
|
-
totalViolations++;
|
|
542
|
-
if (violation.severity === 'critical')
|
|
543
|
-
criticalIssues++;
|
|
544
|
-
else if (violation.severity === 'severe')
|
|
545
|
-
severe++;
|
|
546
|
-
else
|
|
547
|
-
high++;
|
|
548
|
-
const category = violation.rule;
|
|
549
|
-
violationsByCategory[category] = (violationsByCategory[category] || 0) + 1;
|
|
550
|
-
}
|
|
551
|
-
}
|
|
552
|
-
// Compute top issues from violationsByCategory
|
|
553
|
-
const topIssues = Object.entries(violationsByCategory)
|
|
554
|
-
.sort(([, a], [, b]) => b - a)
|
|
555
|
-
.slice(0, 5)
|
|
556
|
-
.map(([type, count]) => ({ type, count }));
|
|
557
|
-
return {
|
|
558
|
-
totalFiles: filesAnalyzed,
|
|
559
|
-
totalViolations,
|
|
560
|
-
criticalIssues,
|
|
561
|
-
severe,
|
|
562
|
-
high,
|
|
563
|
-
violationsByCategory,
|
|
564
|
-
topIssues,
|
|
565
|
-
};
|
|
566
|
-
}
|
|
567
|
-
function mergeAnalyzerResult(base, next) {
|
|
568
|
-
if (!base)
|
|
569
|
-
return { ...next, violations: [...next.violations], errors: [...(next.errors || [])] };
|
|
570
|
-
const dedupeKey = (v) => `${v.file ?? ''}:${v.line ?? ''}:${v.column ?? ''}:${v.rule ?? ''}:${v.message ?? ''}:${v.severity ?? ''}`;
|
|
571
|
-
const seen = new Set(base.violations.map(dedupeKey));
|
|
572
|
-
const mergedViolations = [...base.violations];
|
|
573
|
-
for (const v of next.violations) {
|
|
574
|
-
const key = dedupeKey(v);
|
|
575
|
-
if (!seen.has(key)) {
|
|
576
|
-
seen.add(key);
|
|
577
|
-
mergedViolations.push(v);
|
|
578
|
-
}
|
|
579
|
-
}
|
|
580
|
-
const baseFP = getFilesProcessed(base.status);
|
|
581
|
-
const nextFP = getFilesProcessed(next.status);
|
|
582
|
-
return {
|
|
583
|
-
...base,
|
|
584
|
-
violations: mergedViolations,
|
|
585
|
-
status: makeVisitorStatus(baseFP + nextFP),
|
|
586
|
-
executionTime: (base.executionTime || 0) + (next.executionTime || 0),
|
|
587
|
-
errors: [...(base.errors || []), ...(next.errors || [])],
|
|
588
|
-
};
|
|
589
|
-
}
|
|
590
153
|
/**
|
|
591
|
-
*
|
|
592
|
-
*
|
|
593
|
-
*
|
|
594
|
-
*
|
|
595
|
-
* `analyzer "<name>" not in results`. Those placeholders are filtered out so a
|
|
596
|
-
* rule's real state comes only from the shards that actually ran its analyzer.
|
|
597
|
-
*
|
|
598
|
-
* Precedence across the remaining rows: `fired` wins (its count re-derived from
|
|
599
|
-
* the merged deduped violations — never the summed per-shard counts, which
|
|
600
|
-
* over-count DB-based analyzers that emit full-project findings in every
|
|
601
|
-
* shard), then `clean` (ran somewhere with input present and found nothing)
|
|
602
|
-
* over `unassessed`, over `notApplicable` (only when every shard that ran the
|
|
603
|
-
* rule reported no input). Global-only analyzers (GLOBAL_ONLY_ANALYZERS) run
|
|
604
|
-
* in a single shard over the full scope, so their rows — including Spec 39
|
|
605
|
-
* applicability predicates like `missing-org-filter` — pass through untouched.
|
|
154
|
+
* Queue an audit job and return its id immediately; the audit runs in the background.
|
|
155
|
+
* @param args - The tool arguments (path, scope, severities, etc.).
|
|
156
|
+
* @param defaults - Default severity and code-map flags.
|
|
157
|
+
* @returns The queued job id, status, and path.
|
|
606
158
|
*/
|
|
607
|
-
function mergeCoverage(results, ordered) {
|
|
608
|
-
const rows = results.flatMap((r) => r.metadata?.coverage ?? []);
|
|
609
|
-
if (rows.length === 0)
|
|
610
|
-
return undefined;
|
|
611
|
-
const byRule = new Map();
|
|
612
|
-
for (const row of rows) {
|
|
613
|
-
const key = JSON.stringify([row.analyzer, row.ruleId]);
|
|
614
|
-
const group = byRule.get(key);
|
|
615
|
-
if (group)
|
|
616
|
-
group.push(row);
|
|
617
|
-
else
|
|
618
|
-
byRule.set(key, [row]);
|
|
619
|
-
}
|
|
620
|
-
const merged = [];
|
|
621
|
-
for (const [key, group] of byRule) {
|
|
622
|
-
const [analyzer, ruleId] = JSON.parse(key);
|
|
623
|
-
// Rows from shards that did not run this analyzer are placeholders, not a
|
|
624
|
-
// real state. Prefer the shards that ran it; fall back to placeholders only
|
|
625
|
-
// if the analyzer ran nowhere (then the placeholder's reason is truthful).
|
|
626
|
-
const real = group.filter((r) => r.reason !== `analyzer "${analyzer}" not in results`);
|
|
627
|
-
const src = real.length > 0 ? real : group;
|
|
628
|
-
const fired = src.filter((r) => r.state === 'fired');
|
|
629
|
-
if (fired.length > 0) {
|
|
630
|
-
// Derive the fired count from the merged (deduped) violations, exactly as
|
|
631
|
-
// the synchronous path's buildCoverageReport does. Summing per-shard
|
|
632
|
-
// counts would over-count if a DB-based analyzer ever ran in multiple
|
|
633
|
-
// shards (it no longer does — reducers are global-only), but deduping
|
|
634
|
-
// from the merged set stays correct regardless and keeps coverage.count
|
|
635
|
-
// in agreement with the ledger findings count.
|
|
636
|
-
const field = RULE_REGISTRY[ruleId]?.field;
|
|
637
|
-
const dedupedCount = (ordered[analyzer]?.violations ?? []).filter((v) => violationMatchesRule(v, ruleId, field)).length;
|
|
638
|
-
merged.push({
|
|
639
|
-
ruleId,
|
|
640
|
-
analyzer,
|
|
641
|
-
state: 'fired',
|
|
642
|
-
count: dedupedCount,
|
|
643
|
-
});
|
|
644
|
-
continue;
|
|
645
|
-
}
|
|
646
|
-
const clean = src.find((r) => r.state === 'clean');
|
|
647
|
-
if (clean) {
|
|
648
|
-
merged.push({ ruleId, analyzer, state: 'clean', count: 0 });
|
|
649
|
-
continue;
|
|
650
|
-
}
|
|
651
|
-
// Spec 44 bucket 2 — a `cannot-fire` rule is broken in the tool (same verdict
|
|
652
|
-
// every shard), so it outranks a per-shard `unassessed`/`notApplicable`.
|
|
653
|
-
const cannotFire = src.find((r) => r.state === 'cannot-fire');
|
|
654
|
-
if (cannotFire) {
|
|
655
|
-
merged.push({
|
|
656
|
-
ruleId,
|
|
657
|
-
analyzer,
|
|
658
|
-
state: 'cannot-fire',
|
|
659
|
-
count: 0,
|
|
660
|
-
reason: cannotFire.reason,
|
|
661
|
-
});
|
|
662
|
-
continue;
|
|
663
|
-
}
|
|
664
|
-
const unassessed = src.find((r) => r.state === 'unassessed');
|
|
665
|
-
if (unassessed) {
|
|
666
|
-
merged.push({ ruleId, analyzer, state: 'unassessed', count: 0 });
|
|
667
|
-
continue;
|
|
668
|
-
}
|
|
669
|
-
const notApplicable = src.find((r) => r.state === 'notApplicable');
|
|
670
|
-
if (notApplicable) {
|
|
671
|
-
merged.push({
|
|
672
|
-
ruleId,
|
|
673
|
-
analyzer,
|
|
674
|
-
state: 'notApplicable',
|
|
675
|
-
count: 0,
|
|
676
|
-
reason: notApplicable.reason,
|
|
677
|
-
});
|
|
678
|
-
continue;
|
|
679
|
-
}
|
|
680
|
-
merged.push({ ruleId, analyzer, state: src[0].state, count: src[0].count, reason: src[0].reason });
|
|
681
|
-
}
|
|
682
|
-
return merged;
|
|
683
|
-
}
|
|
684
|
-
function mergeAuditResults(results, orderedAnalyzers) {
|
|
685
|
-
const analyzerResults = {};
|
|
686
|
-
const fileToFunctionsMap = {};
|
|
687
|
-
const collectedFunctions = [];
|
|
688
|
-
const recommendations = [];
|
|
689
|
-
const skippedFiles = [];
|
|
690
|
-
const unparsedFiles = [];
|
|
691
|
-
const diagnostics = [];
|
|
692
|
-
let filesAnalyzed = 0;
|
|
693
|
-
let auditDuration = 0;
|
|
694
|
-
let provenanceResolutionMs = 0;
|
|
695
|
-
let tableCatalog;
|
|
696
|
-
for (const result of results) {
|
|
697
|
-
for (const [analyzerName, analyzerResult] of Object.entries(result.analyzerResults || {})) {
|
|
698
|
-
analyzerResults[analyzerName] = mergeAnalyzerResult(analyzerResults[analyzerName], analyzerResult);
|
|
699
|
-
}
|
|
700
|
-
for (const [fp, funcs] of Object.entries(result.metadata?.fileToFunctionsMap || {})) {
|
|
701
|
-
fileToFunctionsMap[fp] = funcs;
|
|
702
|
-
}
|
|
703
|
-
if (result.metadata?.collectedFunctions) {
|
|
704
|
-
collectedFunctions.push(...result.metadata.collectedFunctions);
|
|
705
|
-
}
|
|
706
|
-
if (result.metadata?.skippedFiles)
|
|
707
|
-
skippedFiles.push(...result.metadata.skippedFiles);
|
|
708
|
-
if (result.metadata?.unparsedFiles)
|
|
709
|
-
unparsedFiles.push(...result.metadata.unparsedFiles);
|
|
710
|
-
if (result.metadata?.diagnostics)
|
|
711
|
-
diagnostics.push(...result.metadata.diagnostics);
|
|
712
|
-
// tableCatalog is produced by the schema analyzer, which is global-only and
|
|
713
|
-
// therefore runs in a single shard over the full scope — first non-undefined
|
|
714
|
-
// is the whole catalog, never a fragment.
|
|
715
|
-
if (result.metadata?.tableCatalog && tableCatalog === undefined) {
|
|
716
|
-
tableCatalog = result.metadata.tableCatalog;
|
|
717
|
-
}
|
|
718
|
-
filesAnalyzed += result.metadata?.filesAnalyzed || 0;
|
|
719
|
-
auditDuration += result.metadata?.auditDuration || 0;
|
|
720
|
-
provenanceResolutionMs += result.metadata?.provenanceResolutionMs || 0;
|
|
721
|
-
if (result.recommendations?.length)
|
|
722
|
-
recommendations.push(...result.recommendations);
|
|
723
|
-
}
|
|
724
|
-
const ordered = {};
|
|
725
|
-
for (const name of orderedAnalyzers) {
|
|
726
|
-
if (analyzerResults[name])
|
|
727
|
-
ordered[name] = analyzerResults[name];
|
|
728
|
-
}
|
|
729
|
-
const coverage = mergeCoverage(results, ordered);
|
|
730
|
-
return {
|
|
731
|
-
timestamp: new Date(),
|
|
732
|
-
summary: summarizeAnalyzerResults(ordered, filesAnalyzed),
|
|
733
|
-
analyzerResults: ordered,
|
|
734
|
-
recommendations,
|
|
735
|
-
metadata: {
|
|
736
|
-
auditDuration,
|
|
737
|
-
filesAnalyzed,
|
|
738
|
-
analyzersRun: orderedAnalyzers,
|
|
739
|
-
provenanceResolutionMs,
|
|
740
|
-
...(collectedFunctions.length > 0 && { collectedFunctions }),
|
|
741
|
-
...(Object.keys(fileToFunctionsMap).length > 0 && { fileToFunctionsMap }),
|
|
742
|
-
...(coverage !== undefined && { coverage }),
|
|
743
|
-
...(tableCatalog !== undefined && { tableCatalog }),
|
|
744
|
-
...(skippedFiles.length > 0 && { skippedFiles }),
|
|
745
|
-
...(unparsedFiles.length > 0 && { unparsedFiles }),
|
|
746
|
-
...(diagnostics.length > 0 && { diagnostics }),
|
|
747
|
-
},
|
|
748
|
-
};
|
|
749
|
-
}
|
|
750
|
-
export async function derivePartitionPlan(args, projectRoot, isFile, enabledAnalyzers) {
|
|
751
|
-
const strategy = (args.partitionStrategy || 'auto');
|
|
752
|
-
if (isFile || strategy === 'none') {
|
|
753
|
-
return { mode: 'none', partitionPaths: [], globalAnalyzers: enabledAnalyzers, shardedAnalyzers: [] };
|
|
754
|
-
}
|
|
755
|
-
const allFiles = await findFiles(projectRoot);
|
|
756
|
-
const threshold = Math.max(1, Number(args.partitionThresholdFiles) || 250);
|
|
757
|
-
if (strategy === 'auto' && allFiles.length < threshold) {
|
|
758
|
-
return { mode: 'none', partitionPaths: [], globalAnalyzers: enabledAnalyzers, shardedAnalyzers: [] };
|
|
759
|
-
}
|
|
760
|
-
const byTop = new Map();
|
|
761
|
-
for (const file of allFiles) {
|
|
762
|
-
const rel = path.relative(projectRoot, file);
|
|
763
|
-
if (!rel || rel.startsWith('..'))
|
|
764
|
-
continue;
|
|
765
|
-
const seg = rel.split(path.sep)[0];
|
|
766
|
-
byTop.set(seg, (byTop.get(seg) || 0) + 1);
|
|
767
|
-
}
|
|
768
|
-
const preferred = SOURCE_FOLDERS.filter((name) => byTop.has(name));
|
|
769
|
-
const others = [...byTop.entries()]
|
|
770
|
-
.filter(([name]) => !preferred.includes(name))
|
|
771
|
-
.sort((a, b) => b[1] - a[1])
|
|
772
|
-
.map(([name]) => name);
|
|
773
|
-
const maxPartitions = Math.max(1, Number(args.maxPartitions) || 4);
|
|
774
|
-
let selected = [...preferred, ...others].slice(0, maxPartitions);
|
|
775
|
-
if (selected.length < 2 && preferred.length > 0) {
|
|
776
|
-
const focus = preferred[0];
|
|
777
|
-
const focusDir = path.join(projectRoot, focus);
|
|
778
|
-
try {
|
|
779
|
-
const entries = await fs.readdir(focusDir, { withFileTypes: true });
|
|
780
|
-
const subdirs = entries
|
|
781
|
-
.filter((e) => e.isDirectory())
|
|
782
|
-
.map((e) => path.join(focus, e.name))
|
|
783
|
-
.slice(0, maxPartitions);
|
|
784
|
-
if (subdirs.length >= 2) {
|
|
785
|
-
selected = subdirs;
|
|
786
|
-
}
|
|
787
|
-
}
|
|
788
|
-
catch {
|
|
789
|
-
// Ignore fallback partitioning errors
|
|
790
|
-
}
|
|
791
|
-
}
|
|
792
|
-
const shardedAnalyzers = enabledAnalyzers.filter((a) => !GLOBAL_ONLY_ANALYZERS.has(a));
|
|
793
|
-
const globalAnalyzers = enabledAnalyzers.filter((a) => GLOBAL_ONLY_ANALYZERS.has(a));
|
|
794
|
-
if (selected.length < 2 || shardedAnalyzers.length === 0) {
|
|
795
|
-
return { mode: 'none', partitionPaths: [], globalAnalyzers: enabledAnalyzers, shardedAnalyzers: [] };
|
|
796
|
-
}
|
|
797
|
-
return {
|
|
798
|
-
mode: 'top-level',
|
|
799
|
-
partitionPaths: selected.map((seg) => path.join(projectRoot, seg)),
|
|
800
|
-
globalAnalyzers,
|
|
801
|
-
shardedAnalyzers,
|
|
802
|
-
};
|
|
803
|
-
}
|
|
804
159
|
export async function startAuditJob(args, defaults) {
|
|
805
160
|
const auditPath = path.resolve(args.path || process.cwd());
|
|
806
161
|
const { isFile } = await assertAuditPathExists(auditPath);
|
|
@@ -829,6 +184,13 @@ export async function startAuditJob(args, defaults) {
|
|
|
829
184
|
path: auditPath,
|
|
830
185
|
};
|
|
831
186
|
}
|
|
187
|
+
/**
|
|
188
|
+
* Run a queued audit job end-to-end: lease, audit, index, code map, and persist.
|
|
189
|
+
* @param jobId - The job id to run under.
|
|
190
|
+
* @param args - The tool arguments for the audit.
|
|
191
|
+
* @param defaults - Default severity and code-map flags.
|
|
192
|
+
* @returns A promise that resolves once the job completes or fails.
|
|
193
|
+
*/
|
|
832
194
|
export async function runAuditJob(jobId, args, defaults) {
|
|
833
195
|
let jobTimer;
|
|
834
196
|
let heartbeat;
|
|
@@ -881,33 +243,17 @@ export async function runAuditJob(jobId, args, defaults) {
|
|
|
881
243
|
ac.abort();
|
|
882
244
|
}
|
|
883
245
|
}, jobTimeoutMs);
|
|
884
|
-
const storedConfigs = await db.getAllAnalyzerConfigs(auditPath);
|
|
246
|
+
const storedConfigs = await db.analyzerConfig.getAllAnalyzerConfigs(auditPath);
|
|
885
247
|
const analyzerConfigs = {
|
|
886
248
|
...storedConfigs,
|
|
887
249
|
...(args.analyzerConfigs || {}),
|
|
888
250
|
};
|
|
889
|
-
const enabledAnalyzers = args.analyzers || defaults.defaultAnalyzers;
|
|
890
|
-
const maxWorkers = Math.max(1, Math.min(MAX_AUDIT_WORKERS, Number(args.workerCount) || Math.max(1, Math.min(4, cpus().length - 1 || 1)), Number(args.maxPartitions) || 4));
|
|
891
|
-
const maxRetries = Math.max(0, Number(args.maxRetries) || 1);
|
|
892
|
-
const shardTimeoutMs = Math.max(5_000, Number(args.shardTimeoutMs) || 180_000);
|
|
893
|
-
const retryBackoffMs = Math.max(100, Number(args.retryBackoffMs) || 500);
|
|
894
|
-
const maxFilesPerRun = typeof args.maxFilesPerRun === 'number' && args.maxFilesPerRun > 0
|
|
895
|
-
? Math.floor(args.maxFilesPerRun)
|
|
896
|
-
: undefined;
|
|
897
|
-
const shardSoftBudgetMs = typeof args.shardSoftBudgetMs === 'number' && args.shardSoftBudgetMs > 0
|
|
898
|
-
? Math.max(1_000, Math.floor(args.shardSoftBudgetMs))
|
|
899
|
-
: undefined;
|
|
900
251
|
const baseOptions = {
|
|
901
252
|
projectRoot,
|
|
902
|
-
enabledAnalyzers,
|
|
903
253
|
minSeverity: (args.minSeverity || defaults.defaultMinSeverity),
|
|
904
254
|
verbose: false,
|
|
905
255
|
indexFunctions,
|
|
906
|
-
|
|
907
|
-
? Math.max(1, Math.floor(args.analyzerConcurrency))
|
|
908
|
-
: undefined,
|
|
909
|
-
...(maxFilesPerRun !== undefined && { maxFilesPerRun }),
|
|
910
|
-
...(shardSoftBudgetMs !== undefined && { shardSoftBudgetMs }),
|
|
256
|
+
abortSignal: ac.signal,
|
|
911
257
|
...(isFile && { includePaths: [auditPath] }),
|
|
912
258
|
...(Object.keys(analyzerConfigs).length > 0 && { analyzerConfigs }),
|
|
913
259
|
...(args.scope && args.scope !== 'all' && { scope: args.scope }),
|
|
@@ -920,7 +266,6 @@ export async function runAuditJob(jobId, args, defaults) {
|
|
|
920
266
|
});
|
|
921
267
|
},
|
|
922
268
|
};
|
|
923
|
-
const plan = await derivePartitionPlan(args, projectRoot, isFile, enabledAnalyzers);
|
|
924
269
|
// Spec 41 R3 — provenance: capture an aggregate content hash + per-file
|
|
925
270
|
// manifest so `result`/`status` can report staleness cheaply.
|
|
926
271
|
const fileHash = hashFileSet(await findFiles(projectRoot), projectRoot);
|
|
@@ -929,129 +274,25 @@ export async function runAuditJob(jobId, args, defaults) {
|
|
|
929
274
|
filesCount: fileHash.filesCount,
|
|
930
275
|
fileManifestJson: JSON.stringify(fileHash.manifest),
|
|
931
276
|
});
|
|
932
|
-
const partitionTasks = [];
|
|
933
|
-
const globalTasks = [];
|
|
934
|
-
if (plan.mode === 'none') {
|
|
935
|
-
partitionTasks.push({
|
|
936
|
-
shardId: 'full-scope',
|
|
937
|
-
attempts: 0,
|
|
938
|
-
config: asSerializableConfig(baseOptions),
|
|
939
|
-
});
|
|
940
|
-
}
|
|
941
|
-
else {
|
|
942
|
-
setAuditJobProgress(getJobDb(), jobId, {
|
|
943
|
-
phase: 'partitioning',
|
|
944
|
-
message: `Planning ${plan.partitionPaths.length} shard(s) + ${plan.globalAnalyzers.length > 0 ? 'global' : 'no-global'} analyzers`,
|
|
945
|
-
});
|
|
946
|
-
if (plan.globalAnalyzers.length > 0) {
|
|
947
|
-
globalTasks.push({
|
|
948
|
-
shardId: 'global-analyzers',
|
|
949
|
-
attempts: 0,
|
|
950
|
-
config: asSerializableConfig({
|
|
951
|
-
...baseOptions,
|
|
952
|
-
enabledAnalyzers: plan.globalAnalyzers,
|
|
953
|
-
includePaths: undefined,
|
|
954
|
-
}),
|
|
955
|
-
});
|
|
956
|
-
}
|
|
957
|
-
for (const partitionPath of plan.partitionPaths) {
|
|
958
|
-
partitionTasks.push({
|
|
959
|
-
shardId: `shard:${path.basename(partitionPath)}`,
|
|
960
|
-
attempts: 0,
|
|
961
|
-
config: asSerializableConfig({
|
|
962
|
-
...baseOptions,
|
|
963
|
-
enabledAnalyzers: plan.shardedAnalyzers,
|
|
964
|
-
includePaths: [`${partitionPath}/**/*`],
|
|
965
|
-
}),
|
|
966
|
-
});
|
|
967
|
-
}
|
|
968
|
-
}
|
|
969
|
-
const totalTasks = partitionTasks.length + globalTasks.length;
|
|
970
277
|
setAuditJobProgress(getJobDb(), jobId, {
|
|
971
278
|
phase: 'analysis',
|
|
972
|
-
message:
|
|
279
|
+
message: 'Running audit',
|
|
973
280
|
current: 0,
|
|
974
|
-
total:
|
|
281
|
+
total: 1,
|
|
975
282
|
});
|
|
976
|
-
const
|
|
977
|
-
maxWorkers,
|
|
978
|
-
maxRetries,
|
|
979
|
-
shardTimeoutMs,
|
|
980
|
-
retryBackoffMs,
|
|
981
|
-
signal: ac.signal,
|
|
982
|
-
};
|
|
983
|
-
// Partition shards run first; the global-analyzers shard is scheduled only
|
|
984
|
-
// after every partition shard has completed. The global shard's full-scope
|
|
985
|
-
// reducers (conventions, cross-domain, styles) read cross-file index tables
|
|
986
|
-
// (`functions`, `function_calls`, `style_*`) that the always-on function-index
|
|
987
|
-
// visitor writes from *every* shard. Running it concurrently — even pushed
|
|
988
|
-
// "first" — left a `functions`-table write/read race in principle. Serializing
|
|
989
|
-
// it after the partitions closes that last multi-writer window structurally.
|
|
990
|
-
const resultParts = [];
|
|
991
|
-
resultParts.push(...(await runShardTasksWithWorkerPool(getJobDb, jobId, partitionTasks, poolOptions)));
|
|
992
|
-
if (globalTasks.length > 0) {
|
|
993
|
-
resultParts.push(...(await runShardTasksWithWorkerPool(getJobDb, jobId, globalTasks, poolOptions)));
|
|
994
|
-
}
|
|
283
|
+
const auditResult = await runAudit(baseOptions);
|
|
995
284
|
if (ac.signal.aborted) {
|
|
996
285
|
throw ac.signal.reason instanceof Error
|
|
997
286
|
? ac.signal.reason
|
|
998
287
|
: new Error(String(ac.signal.reason || 'Audit job was cancelled or timed out'));
|
|
999
288
|
}
|
|
1000
|
-
const auditResult = resultParts.length === 1 ? resultParts[0] : mergeAuditResults(resultParts, enabledAnalyzers);
|
|
1001
289
|
let indexingResult = null;
|
|
1002
290
|
if (indexFunctions && auditResult.metadata.fileToFunctionsMap) {
|
|
1003
|
-
|
|
1004
|
-
throw ac.signal.reason instanceof Error
|
|
1005
|
-
? ac.signal.reason
|
|
1006
|
-
: new Error(String(ac.signal.reason || 'Audit job was cancelled during indexing'));
|
|
1007
|
-
}
|
|
1008
|
-
// Batch all per-file upserts into a single transaction (Amendment B2).
|
|
1009
|
-
const entries = Object.entries(auditResult.metadata.fileToFunctionsMap).map(([filePath, functions]) => ({ filePath, currentFunctions: functions }));
|
|
1010
|
-
const syncStats = await db.syncFileIndexBatch(entries);
|
|
1011
|
-
indexingResult = {
|
|
1012
|
-
success: true,
|
|
1013
|
-
registered: syncStats.added + syncStats.updated,
|
|
1014
|
-
failed: 0,
|
|
1015
|
-
syncStats,
|
|
1016
|
-
};
|
|
291
|
+
indexingResult = await indexJobFunctions(auditResult, db, ac.signal);
|
|
1017
292
|
}
|
|
1018
293
|
let codeMapResult = null;
|
|
1019
294
|
if (generateCodeMap && indexingResult && indexingResult.success) {
|
|
1020
|
-
|
|
1021
|
-
throw ac.signal.reason instanceof Error
|
|
1022
|
-
? ac.signal.reason
|
|
1023
|
-
: new Error(String(ac.signal.reason || 'Audit job was cancelled before code map generation'));
|
|
1024
|
-
}
|
|
1025
|
-
try {
|
|
1026
|
-
const mapGenerator = new CodeMapGenerator();
|
|
1027
|
-
const files = Object.keys(auditResult.metadata.fileToFunctionsMap || {});
|
|
1028
|
-
let documentation = undefined;
|
|
1029
|
-
if (files.length > 0) {
|
|
1030
|
-
const docResult = await analyzeDocumentation(files);
|
|
1031
|
-
documentation = docResult.metrics;
|
|
1032
|
-
}
|
|
1033
|
-
const paginatedResult = await mapGenerator.generatePaginatedCodeMap(isFile ? path.dirname(auditPath) : auditPath, {
|
|
1034
|
-
includeComplexity: true,
|
|
1035
|
-
includeDocumentation: !!documentation,
|
|
1036
|
-
includeDependencies: true,
|
|
1037
|
-
includeUsage: false,
|
|
1038
|
-
groupByDirectory: true,
|
|
1039
|
-
maxDepth: 10,
|
|
1040
|
-
showUnusedImports: true,
|
|
1041
|
-
minComplexity: 7,
|
|
1042
|
-
});
|
|
1043
|
-
codeMapResult = {
|
|
1044
|
-
success: true,
|
|
1045
|
-
mapId: paginatedResult.mapId,
|
|
1046
|
-
summary: paginatedResult.summary,
|
|
1047
|
-
quickPreview: paginatedResult.quickPreview,
|
|
1048
|
-
sections: paginatedResult.summary.sectionsAvailable,
|
|
1049
|
-
documentationCoverage: documentation?.coverageScore,
|
|
1050
|
-
};
|
|
1051
|
-
}
|
|
1052
|
-
catch (e) {
|
|
1053
|
-
mcpDebugStderr(chalk.yellow('[WARN]'), 'Code map generation failed in background audit:', e);
|
|
1054
|
-
}
|
|
295
|
+
codeMapResult = await generateJobCodeMap(auditResult, isFile, auditPath, ac.signal);
|
|
1055
296
|
}
|
|
1056
297
|
const projectRootForStore = projectRoot;
|
|
1057
298
|
const persisted = {
|
|
@@ -1059,7 +300,7 @@ export async function runAuditJob(jobId, args, defaults) {
|
|
|
1059
300
|
...(indexingResult && { functionIndexing: indexingResult }),
|
|
1060
301
|
...(codeMapResult && { codeMap: codeMapResult }),
|
|
1061
302
|
};
|
|
1062
|
-
const resultId = await db.storeAuditResults(persisted, projectRootForStore);
|
|
303
|
+
const resultId = await db.auditResults.storeAuditResults(persisted, projectRootForStore);
|
|
1063
304
|
// Spec 41 R2 — converge on the one ledger write path: attach findings +
|
|
1064
305
|
// coverage to the pre-existing run, then close the lifecycle.
|
|
1065
306
|
const runInput = detectRunInput('audit.start', 'mcp', args.scope || 'all', projectRoot, PACKAGE_VERSION);
|
|
@@ -1106,6 +347,73 @@ export async function runAuditJob(jobId, args, defaults) {
|
|
|
1106
347
|
}
|
|
1107
348
|
}
|
|
1108
349
|
}
|
|
350
|
+
/**
|
|
351
|
+
* Batch the per-file function index upserts into a single transaction.
|
|
352
|
+
*/
|
|
353
|
+
async function indexJobFunctions(auditResult, db, signal) {
|
|
354
|
+
if (signal.aborted) {
|
|
355
|
+
throw signal.reason instanceof Error
|
|
356
|
+
? signal.reason
|
|
357
|
+
: new Error(String(signal.reason || 'Audit job was cancelled during indexing'));
|
|
358
|
+
}
|
|
359
|
+
// Batch all per-file upserts into a single transaction (Amendment B2).
|
|
360
|
+
const entries = Object.entries(auditResult.metadata.fileToFunctionsMap || {}).map(([filePath, functions]) => ({ filePath, currentFunctions: functions }));
|
|
361
|
+
const syncStats = await db.syncFileIndexBatch(entries);
|
|
362
|
+
return {
|
|
363
|
+
success: true,
|
|
364
|
+
registered: syncStats.added + syncStats.updated,
|
|
365
|
+
failed: 0,
|
|
366
|
+
syncStats,
|
|
367
|
+
};
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* Generate a paginated code map for a completed audit job. Returns `null` when
|
|
371
|
+
* code map generation fails (best-effort — the audit still completes) and
|
|
372
|
+
* throws if the job was cancelled before generation ran.
|
|
373
|
+
*/
|
|
374
|
+
async function generateJobCodeMap(auditResult, isFile, auditPath, signal) {
|
|
375
|
+
if (signal.aborted) {
|
|
376
|
+
throw signal.reason instanceof Error
|
|
377
|
+
? signal.reason
|
|
378
|
+
: new Error(String(signal.reason || 'Audit job was cancelled before code map generation'));
|
|
379
|
+
}
|
|
380
|
+
try {
|
|
381
|
+
const mapGenerator = new CodeMapGenerator();
|
|
382
|
+
const files = Object.keys(auditResult.metadata.fileToFunctionsMap || {});
|
|
383
|
+
let documentation = undefined;
|
|
384
|
+
if (files.length > 0) {
|
|
385
|
+
const docResult = await analyzeDocumentation(files);
|
|
386
|
+
documentation = docResult.metrics;
|
|
387
|
+
}
|
|
388
|
+
const paginatedResult = await mapGenerator.generatePaginatedCodeMap(isFile ? path.dirname(auditPath) : auditPath, {
|
|
389
|
+
includeComplexity: true,
|
|
390
|
+
includeDocumentation: !!documentation,
|
|
391
|
+
includeDependencies: true,
|
|
392
|
+
includeUsage: false,
|
|
393
|
+
groupByDirectory: true,
|
|
394
|
+
maxDepth: 10,
|
|
395
|
+
showUnusedImports: true,
|
|
396
|
+
minComplexity: 7,
|
|
397
|
+
});
|
|
398
|
+
return {
|
|
399
|
+
success: true,
|
|
400
|
+
mapId: paginatedResult.mapId,
|
|
401
|
+
summary: paginatedResult.summary,
|
|
402
|
+
quickPreview: paginatedResult.quickPreview,
|
|
403
|
+
sections: paginatedResult.summary.sectionsAvailable,
|
|
404
|
+
documentationCoverage: documentation?.coverageScore,
|
|
405
|
+
};
|
|
406
|
+
}
|
|
407
|
+
catch (e) {
|
|
408
|
+
mcpDebugStderr(chalk.yellow('[WARN]'), 'Code map generation failed in background audit:', e);
|
|
409
|
+
return null;
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
/**
|
|
413
|
+
* Read the current status of an audit job.
|
|
414
|
+
* @param jobId - The job id to look up.
|
|
415
|
+
* @returns The job status record.
|
|
416
|
+
*/
|
|
1109
417
|
export async function getAuditJobStatus(jobId) {
|
|
1110
418
|
// Resolve the same DB the writer opened: startAuditJob/runAuditJob set the
|
|
1111
419
|
// singleton to the project-scoped DB, so read from the current singleton's
|
|
@@ -1133,6 +441,8 @@ export async function getAuditJobStatus(jobId) {
|
|
|
1133
441
|
}
|
|
1134
442
|
/**
|
|
1135
443
|
* Returns audit results as a SARIF 2.1.0 JSON string (Spec 06 R1.1 — MCP surface).
|
|
444
|
+
* @param args - The tool arguments carrying the resultId/auditId to fetch.
|
|
445
|
+
* @returns The SARIF report as a JSON string.
|
|
1136
446
|
*/
|
|
1137
447
|
export async function getAuditResultsAsSarif(args) {
|
|
1138
448
|
const resultId = args.resultId || args.auditId;
|
|
@@ -1143,7 +453,7 @@ export async function getAuditResultsAsSarif(args) {
|
|
|
1143
453
|
}
|
|
1144
454
|
const db = CodeIndexDB.getInstance(undefined, CodeIndexDB.currentProject);
|
|
1145
455
|
await db.initialize();
|
|
1146
|
-
const stored = await db.getAuditResults(resultId);
|
|
456
|
+
const stored = await db.auditResults.getAuditResults(resultId);
|
|
1147
457
|
if (!stored) {
|
|
1148
458
|
throw new ContextualError(`Audit result not found or expired: ${resultId}`, {
|
|
1149
459
|
resultId,
|
|
@@ -1181,6 +491,11 @@ export async function getAuditResultsAsSarif(args) {
|
|
|
1181
491
|
...readVersionControlProvenance(projectRoot),
|
|
1182
492
|
});
|
|
1183
493
|
}
|
|
494
|
+
/**
|
|
495
|
+
* Return one page of audit results with a pagination summary.
|
|
496
|
+
* @param args - The tool arguments (resultId, limit, offset).
|
|
497
|
+
* @returns The paginated violations and summary.
|
|
498
|
+
*/
|
|
1184
499
|
export async function getAuditResultsPage(args) {
|
|
1185
500
|
const resultId = args.resultId || args.auditId;
|
|
1186
501
|
if (!resultId) {
|
|
@@ -1192,7 +507,7 @@ export async function getAuditResultsPage(args) {
|
|
|
1192
507
|
const offset = Math.max(0, Number(args.offset) || 0);
|
|
1193
508
|
const db = CodeIndexDB.getInstance(undefined, CodeIndexDB.currentProject);
|
|
1194
509
|
await db.initialize();
|
|
1195
|
-
const auditResult = await db.getAuditResults(resultId);
|
|
510
|
+
const auditResult = await db.auditResults.getAuditResults(resultId);
|
|
1196
511
|
if (!auditResult) {
|
|
1197
512
|
throw new ContextualError(`Audit result not found or expired: ${resultId}`, {
|
|
1198
513
|
resultId,
|
|
@@ -1227,9 +542,5 @@ export async function getAuditResultsPage(args) {
|
|
|
1227
542
|
...(auditResult.codeMap && { codeMap: auditResult.codeMap }),
|
|
1228
543
|
};
|
|
1229
544
|
}
|
|
1230
|
-
export const __testables = {
|
|
1231
|
-
isRetryableShardError,
|
|
1232
|
-
mergeAnalyzerResult,
|
|
1233
|
-
mergeCoverage,
|
|
1234
|
-
};
|
|
545
|
+
export const __testables = {};
|
|
1235
546
|
//# sourceMappingURL=mcpAuditJobs.js.map
|