code-auditor-mcp 3.1.0 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +665 -1
- package/README.md +85 -11
- package/dist/__test_tmp__/spec18_test.d.ts +2 -0
- package/dist/__test_tmp__/spec18_test.d.ts.map +1 -0
- package/dist/__test_tmp__/spec18_test.js +5 -0
- package/dist/__test_tmp__/spec18_test.js.map +1 -0
- package/dist/__tests__/fixtures/spec-20/scripts/tool.d.ts +6 -0
- package/dist/__tests__/fixtures/spec-20/scripts/tool.d.ts.map +1 -0
- package/dist/__tests__/fixtures/spec-20/scripts/tool.js +12 -0
- package/dist/__tests__/fixtures/spec-20/scripts/tool.js.map +1 -0
- package/dist/__tests__/fixtures/spec-20/src/demo-module.d.ts +7 -0
- package/dist/__tests__/fixtures/spec-20/src/demo-module.d.ts.map +1 -0
- package/dist/__tests__/fixtures/spec-20/src/demo-module.js +13 -0
- package/dist/__tests__/fixtures/spec-20/src/demo-module.js.map +1 -0
- package/dist/analyzers/analyzerUtils.js +2 -2
- package/dist/analyzers/analyzerUtils.js.map +1 -1
- package/dist/analyzers/cross-language/APIContractAnalyzer.d.ts +1 -1
- package/dist/analyzers/cross-language/APIContractAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/cross-language/APIContractAnalyzer.js +2 -4
- package/dist/analyzers/cross-language/APIContractAnalyzer.js.map +1 -1
- package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.d.ts +3 -0
- package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.js +3 -5
- package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.js.map +1 -1
- package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts.map +1 -1
- package/dist/analyzers/cross-language/DependencyGraphBuilder.js +0 -3
- package/dist/analyzers/cross-language/DependencyGraphBuilder.js.map +1 -1
- package/dist/analyzers/cross-language/SchemaValidator.d.ts +1 -1
- package/dist/analyzers/cross-language/SchemaValidator.d.ts.map +1 -1
- package/dist/analyzers/cross-language/SchemaValidator.js +2 -5
- package/dist/analyzers/cross-language/SchemaValidator.js.map +1 -1
- package/dist/analyzers/crossDomain/CrossDomainAnalyzer.d.ts +83 -0
- package/dist/analyzers/crossDomain/CrossDomainAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js +611 -0
- package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js.map +1 -0
- package/dist/analyzers/documentationAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/documentationAnalyzer.js +8 -4
- package/dist/analyzers/documentationAnalyzer.js.map +1 -1
- package/dist/analyzers/orm/adapterRegistry.d.ts +41 -0
- package/dist/analyzers/orm/adapterRegistry.d.ts.map +1 -0
- package/dist/analyzers/orm/adapterRegistry.js +73 -0
- package/dist/analyzers/orm/adapterRegistry.js.map +1 -0
- package/dist/analyzers/orm/drizzleAdapter.d.ts +42 -0
- package/dist/analyzers/orm/drizzleAdapter.d.ts.map +1 -0
- package/dist/analyzers/orm/drizzleAdapter.js +166 -0
- package/dist/analyzers/orm/drizzleAdapter.js.map +1 -0
- package/dist/analyzers/orm/index.d.ts +14 -0
- package/dist/analyzers/orm/index.d.ts.map +1 -0
- package/dist/analyzers/orm/index.js +24 -0
- package/dist/analyzers/orm/index.js.map +1 -0
- package/dist/analyzers/orm/prismaAdapter.d.ts +45 -0
- package/dist/analyzers/orm/prismaAdapter.d.ts.map +1 -0
- package/dist/analyzers/orm/prismaAdapter.js +170 -0
- package/dist/analyzers/orm/prismaAdapter.js.map +1 -0
- package/dist/analyzers/orm/types.d.ts +63 -0
- package/dist/analyzers/orm/types.d.ts.map +1 -0
- package/dist/analyzers/orm/types.js +10 -0
- package/dist/analyzers/orm/types.js.map +1 -0
- package/dist/analyzers/provenance.d.ts +133 -0
- package/dist/analyzers/provenance.d.ts.map +1 -0
- package/dist/analyzers/provenance.js +1041 -0
- package/dist/analyzers/provenance.js.map +1 -0
- package/dist/analyzers/reactAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/reactAnalyzer.js +117 -1
- package/dist/analyzers/reactAnalyzer.js.map +1 -1
- package/dist/analyzers/ruleRegistry.d.ts +38 -0
- package/dist/analyzers/ruleRegistry.d.ts.map +1 -0
- package/dist/analyzers/ruleRegistry.js +123 -0
- package/dist/analyzers/ruleRegistry.js.map +1 -0
- package/dist/analyzers/universal/UniversalConventionsAnalyzer.d.ts +58 -0
- package/dist/analyzers/universal/UniversalConventionsAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/universal/UniversalConventionsAnalyzer.js +445 -0
- package/dist/analyzers/universal/UniversalConventionsAnalyzer.js.map +1 -0
- package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts +52 -0
- package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalDRYAnalyzer.js +108 -26
- package/dist/analyzers/universal/UniversalDRYAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts +64 -0
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js +259 -103
- 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 +5 -15
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js +10 -10
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts +25 -0
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.js +250 -59
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts +103 -0
- package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/universal/UniversalStylesAnalyzer.js +750 -0
- package/dist/analyzers/universal/UniversalStylesAnalyzer.js.map +1 -0
- package/dist/auditRunner.d.ts.map +1 -1
- package/dist/auditRunner.js +483 -3
- package/dist/auditRunner.js.map +1 -1
- package/dist/baseline.d.ts +98 -0
- package/dist/baseline.d.ts.map +1 -0
- package/dist/baseline.js +184 -0
- package/dist/baseline.js.map +1 -0
- package/dist/churn/churnExtractor.d.ts +32 -0
- package/dist/churn/churnExtractor.d.ts.map +1 -0
- package/dist/churn/churnExtractor.js +261 -0
- package/dist/churn/churnExtractor.js.map +1 -0
- package/dist/cli.js +1215 -11
- package/dist/cli.js.map +1 -1
- package/dist/codeIndexDB-enhanced.js +1 -1
- package/dist/codeIndexDB-enhanced.js.map +1 -1
- package/dist/codeIndexDB.d.ts +101 -0
- package/dist/codeIndexDB.d.ts.map +1 -1
- package/dist/codeIndexDB.js +661 -5
- package/dist/codeIndexDB.js.map +1 -1
- package/dist/config/configLoader.d.ts.map +1 -1
- package/dist/config/configLoader.js +95 -1
- package/dist/config/configLoader.js.map +1 -1
- package/dist/config/defaults.d.ts +72 -1
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +146 -15
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/pathProfiles.d.ts +38 -0
- package/dist/config/pathProfiles.d.ts.map +1 -0
- package/dist/config/pathProfiles.js +47 -0
- package/dist/config/pathProfiles.js.map +1 -0
- package/dist/conventions/conventionMiner.d.ts +63 -0
- package/dist/conventions/conventionMiner.d.ts.map +1 -0
- package/dist/conventions/conventionMiner.js +696 -0
- package/dist/conventions/conventionMiner.js.map +1 -0
- package/dist/coverage/coverageService.d.ts +49 -0
- package/dist/coverage/coverageService.d.ts.map +1 -0
- package/dist/coverage/coverageService.js +117 -0
- package/dist/coverage/coverageService.js.map +1 -0
- package/dist/coverage/istanbulParser.d.ts +84 -0
- package/dist/coverage/istanbulParser.d.ts.map +1 -0
- package/dist/coverage/istanbulParser.js +120 -0
- package/dist/coverage/istanbulParser.js.map +1 -0
- package/dist/coverage/lcovParser.d.ts +40 -0
- package/dist/coverage/lcovParser.d.ts.map +1 -0
- package/dist/coverage/lcovParser.js +168 -0
- package/dist/coverage/lcovParser.js.map +1 -0
- package/dist/fingerprint.d.ts +17 -0
- package/dist/fingerprint.d.ts.map +1 -1
- package/dist/fingerprint.js +42 -0
- package/dist/fingerprint.js.map +1 -1
- package/dist/grammars/tree-sitter-css.wasm +0 -0
- package/dist/graph/blastRadius.d.ts +27 -0
- package/dist/graph/blastRadius.d.ts.map +1 -0
- package/dist/graph/blastRadius.js +150 -0
- package/dist/graph/blastRadius.js.map +1 -0
- package/dist/graph/callGraph.d.ts +78 -0
- package/dist/graph/callGraph.d.ts.map +1 -0
- package/dist/graph/callGraph.js +484 -0
- package/dist/graph/callGraph.js.map +1 -0
- package/dist/graph/importGraph.d.ts +91 -0
- package/dist/graph/importGraph.d.ts.map +1 -0
- package/dist/graph/importGraph.js +602 -0
- package/dist/graph/importGraph.js.map +1 -0
- package/dist/graph/outputFormatter.d.ts +55 -0
- package/dist/graph/outputFormatter.d.ts.map +1 -0
- package/dist/graph/outputFormatter.js +283 -0
- package/dist/graph/outputFormatter.js.map +1 -0
- package/dist/hooks/codex.d.ts +36 -1
- package/dist/hooks/codex.d.ts.map +1 -1
- package/dist/hooks/codex.js +88 -54
- package/dist/hooks/codex.js.map +1 -1
- package/dist/hotspots/hotspotScorer.d.ts +20 -0
- package/dist/hotspots/hotspotScorer.d.ts.map +1 -0
- package/dist/hotspots/hotspotScorer.js +202 -0
- package/dist/hotspots/hotspotScorer.js.map +1 -0
- package/dist/invariants/invariant-rules.schema.json +42 -1
- package/dist/invariants/ruleEngine.d.ts +4 -1
- package/dist/invariants/ruleEngine.d.ts.map +1 -1
- package/dist/invariants/ruleEngine.js +141 -5
- package/dist/invariants/ruleEngine.js.map +1 -1
- package/dist/invariants/ruleValidator.d.ts.map +1 -1
- package/dist/invariants/ruleValidator.js +62 -1
- package/dist/invariants/ruleValidator.js.map +1 -1
- package/dist/invariants/types.d.ts +23 -2
- package/dist/invariants/types.d.ts.map +1 -1
- package/dist/languages/UniversalAnalyzer.d.ts +1 -1
- package/dist/languages/UniversalAnalyzer.d.ts.map +1 -1
- package/dist/languages/UniversalAnalyzer.js +59 -24
- package/dist/languages/UniversalAnalyzer.js.map +1 -1
- package/dist/languages/index.d.ts +1 -0
- package/dist/languages/index.d.ts.map +1 -1
- package/dist/languages/index.js +3 -0
- package/dist/languages/index.js.map +1 -1
- package/dist/languages/tree-sitter/TreeSitterCssAdapter.d.ts +59 -0
- package/dist/languages/tree-sitter/TreeSitterCssAdapter.d.ts.map +1 -0
- package/dist/languages/tree-sitter/TreeSitterCssAdapter.js +236 -0
- package/dist/languages/tree-sitter/TreeSitterCssAdapter.js.map +1 -0
- package/dist/languages/tree-sitter/parser.d.ts.map +1 -1
- package/dist/languages/tree-sitter/parser.js +2 -0
- package/dist/languages/tree-sitter/parser.js.map +1 -1
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts.map +1 -1
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js +61 -10
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js.map +1 -1
- package/dist/ledger.d.ts +128 -0
- package/dist/ledger.d.ts.map +1 -0
- package/dist/ledger.js +345 -0
- package/dist/ledger.js.map +1 -0
- package/dist/mcp-tools/projectTasks.d.ts.map +1 -1
- package/dist/mcp-tools/projectTasks.js +9 -14
- package/dist/mcp-tools/projectTasks.js.map +1 -1
- package/dist/mcp.js +0 -0
- package/dist/mcpAuditJobs.d.ts.map +1 -1
- package/dist/mcpAuditJobs.js +3 -0
- package/dist/mcpAuditJobs.js.map +1 -1
- package/dist/reporting/csvReportGenerator.d.ts.map +1 -1
- package/dist/reporting/csvReportGenerator.js +7 -1
- package/dist/reporting/csvReportGenerator.js.map +1 -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.map +1 -1
- package/dist/reporting/jsonReportGenerator.js +10 -2
- package/dist/reporting/jsonReportGenerator.js.map +1 -1
- package/dist/reporting/sarifReportGenerator.d.ts.map +1 -1
- package/dist/reporting/sarifReportGenerator.js +17 -17
- package/dist/reporting/sarifReportGenerator.js.map +1 -1
- package/dist/scripts/runBench.d.ts +94 -0
- package/dist/scripts/runBench.d.ts.map +1 -0
- package/dist/scripts/runBench.js +1559 -0
- package/dist/scripts/runBench.js.map +1 -0
- package/dist/search/QueryParser.d.ts.map +1 -1
- package/dist/search/QueryParser.js +51 -4
- package/dist/search/QueryParser.js.map +1 -1
- package/dist/services/CodeMapGenerator.d.ts +33 -0
- package/dist/services/CodeMapGenerator.d.ts.map +1 -1
- package/dist/services/CodeMapGenerator.js +404 -0
- package/dist/services/CodeMapGenerator.js.map +1 -1
- package/dist/styles/normalizer.d.ts +37 -0
- package/dist/styles/normalizer.d.ts.map +1 -0
- package/dist/styles/normalizer.js +301 -0
- package/dist/styles/normalizer.js.map +1 -0
- package/dist/styles/styleExtractor.d.ts +38 -0
- package/dist/styles/styleExtractor.d.ts.map +1 -0
- package/dist/styles/styleExtractor.js +630 -0
- package/dist/styles/styleExtractor.js.map +1 -0
- package/dist/styles/styleIndexer.d.ts +35 -0
- package/dist/styles/styleIndexer.d.ts.map +1 -0
- package/dist/styles/styleIndexer.js +266 -0
- package/dist/styles/styleIndexer.js.map +1 -0
- package/dist/styles/tailwindConfigLoader.d.ts +38 -0
- package/dist/styles/tailwindConfigLoader.d.ts.map +1 -0
- package/dist/styles/tailwindConfigLoader.js +374 -0
- package/dist/styles/tailwindConfigLoader.js.map +1 -0
- package/dist/styles/tailwindExpander.d.ts +38 -0
- package/dist/styles/tailwindExpander.d.ts.map +1 -0
- package/dist/styles/tailwindExpander.js +637 -0
- package/dist/styles/tailwindExpander.js.map +1 -0
- package/dist/styles/types.d.ts +92 -0
- package/dist/styles/types.d.ts.map +1 -0
- package/dist/styles/types.js +10 -0
- package/dist/styles/types.js.map +1 -0
- package/dist/symbols.d.ts +21 -0
- package/dist/symbols.d.ts.map +1 -0
- package/dist/symbols.js +31 -0
- package/dist/symbols.js.map +1 -0
- package/dist/types.d.ts +326 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +9 -5
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/scripts/hook-audit.sh +5 -1
- package/plugin/skills/code-auditor/SKILL.md +51 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/anonymous-callback-map.d.ts +0 -21
- package/dist/analyzers/__tests__/fixtures/spec-17/anonymous-callback-map.d.ts.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/anonymous-callback-map.js +0 -21
- package/dist/analyzers/__tests__/fixtures/spec-17/anonymous-callback-map.js.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/barrel-test-migration.d.ts +0 -13
- package/dist/analyzers/__tests__/fixtures/spec-17/barrel-test-migration.d.ts.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/barrel-test-migration.js +0 -12
- package/dist/analyzers/__tests__/fixtures/spec-17/barrel-test-migration.js.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/direct-access-allow-config.d.ts +0 -11
- package/dist/analyzers/__tests__/fixtures/spec-17/direct-access-allow-config.d.ts.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/direct-access-allow-config.js +0 -22
- package/dist/analyzers/__tests__/fixtures/spec-17/direct-access-allow-config.js.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/exported-undocumented.d.ts +0 -9
- package/dist/analyzers/__tests__/fixtures/spec-17/exported-undocumented.d.ts.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/exported-undocumented.js +0 -13
- package/dist/analyzers/__tests__/fixtures/spec-17/exported-undocumented.js.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/for-loop-query.d.ts +0 -13
- package/dist/analyzers/__tests__/fixtures/spec-17/for-loop-query.d.ts.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/for-loop-query.js +0 -18
- package/dist/analyzers/__tests__/fixtures/spec-17/for-loop-query.js.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/import-node-builtin.d.ts +0 -10
- package/dist/analyzers/__tests__/fixtures/spec-17/import-node-builtin.d.ts.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/import-node-builtin.js +0 -16
- package/dist/analyzers/__tests__/fixtures/spec-17/import-node-builtin.js.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/jsx-event-handler.d.ts +0 -14
- package/dist/analyzers/__tests__/fixtures/spec-17/jsx-event-handler.d.ts.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/jsx-event-handler.js +0 -18
- package/dist/analyzers/__tests__/fixtures/spec-17/jsx-event-handler.js.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/nested-loops-query.d.ts +0 -13
- package/dist/analyzers/__tests__/fixtures/spec-17/nested-loops-query.d.ts.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/nested-loops-query.js +0 -22
- package/dist/analyzers/__tests__/fixtures/spec-17/nested-loops-query.js.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/nine-line-repeated.d.ts +0 -10
- package/dist/analyzers/__tests__/fixtures/spec-17/nine-line-repeated.d.ts.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/nine-line-repeated.js +0 -20
- package/dist/analyzers/__tests__/fixtures/spec-17/nine-line-repeated.js.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/private-methods.d.ts +0 -18
- package/dist/analyzers/__tests__/fixtures/spec-17/private-methods.d.ts.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/private-methods.js +0 -28
- package/dist/analyzers/__tests__/fixtures/spec-17/private-methods.js.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/scope-all-config.d.ts +0 -11
- package/dist/analyzers/__tests__/fixtures/spec-17/scope-all-config.d.ts.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/scope-all-config.js +0 -31
- package/dist/analyzers/__tests__/fixtures/spec-17/scope-all-config.js.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/sql-tagged-template.d.ts +0 -11
- package/dist/analyzers/__tests__/fixtures/spec-17/sql-tagged-template.d.ts.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/sql-tagged-template.js +0 -18
- package/dist/analyzers/__tests__/fixtures/spec-17/sql-tagged-template.js.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/structural-similar-methods.d.ts +0 -13
- package/dist/analyzers/__tests__/fixtures/spec-17/structural-similar-methods.d.ts.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/structural-similar-methods.js +0 -61
- package/dist/analyzers/__tests__/fixtures/spec-17/structural-similar-methods.js.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/template-prefix-table.d.ts +0 -10
- package/dist/analyzers/__tests__/fixtures/spec-17/template-prefix-table.d.ts.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/template-prefix-table.js +0 -15
- package/dist/analyzers/__tests__/fixtures/spec-17/template-prefix-table.js.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/token-identical-20-lines.d.ts +0 -11
- package/dist/analyzers/__tests__/fixtures/spec-17/token-identical-20-lines.d.ts.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/token-identical-20-lines.js +0 -49
- package/dist/analyzers/__tests__/fixtures/spec-17/token-identical-20-lines.js.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/tsx-no-db-usage.d.ts +0 -10
- package/dist/analyzers/__tests__/fixtures/spec-17/tsx-no-db-usage.d.ts.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/tsx-no-db-usage.js +0 -19
- package/dist/analyzers/__tests__/fixtures/spec-17/tsx-no-db-usage.js.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/twenty-methods-vs-complex.d.ts +0 -37
- package/dist/analyzers/__tests__/fixtures/spec-17/twenty-methods-vs-complex.d.ts.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/twenty-methods-vs-complex.js +0 -73
- package/dist/analyzers/__tests__/fixtures/spec-17/twenty-methods-vs-complex.js.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/unique-method-74-lines.d.ts +0 -12
- package/dist/analyzers/__tests__/fixtures/spec-17/unique-method-74-lines.d.ts.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/unique-method-74-lines.js +0 -82
- package/dist/analyzers/__tests__/fixtures/spec-17/unique-method-74-lines.js.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/word-the-in-comment.d.ts +0 -10
- package/dist/analyzers/__tests__/fixtures/spec-17/word-the-in-comment.d.ts.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/word-the-in-comment.js +0 -15
- package/dist/analyzers/__tests__/fixtures/spec-17/word-the-in-comment.js.map +0 -1
- package/dist/analyzers/dataAccessAnalyzer.d.ts +0 -46
- package/dist/analyzers/dataAccessAnalyzer.d.ts.map +0 -1
- package/dist/analyzers/dataAccessAnalyzer.js +0 -474
- package/dist/analyzers/dataAccessAnalyzer.js.map +0 -1
- package/dist/analyzers/dryAnalyzer.d.ts +0 -31
- package/dist/analyzers/dryAnalyzer.d.ts.map +0 -1
- package/dist/analyzers/dryAnalyzer.js +0 -734
- package/dist/analyzers/dryAnalyzer.js.map +0 -1
- package/dist/analyzers/schemaAnalyzer.d.ts +0 -23
- package/dist/analyzers/schemaAnalyzer.d.ts.map +0 -1
- package/dist/analyzers/schemaAnalyzer.js +0 -564
- package/dist/analyzers/schemaAnalyzer.js.map +0 -1
- package/dist/analyzers/solidAnalyzer.d.ts +0 -33
- package/dist/analyzers/solidAnalyzer.d.ts.map +0 -1
- package/dist/analyzers/solidAnalyzer.js +0 -847
- package/dist/analyzers/solidAnalyzer.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lcovParser.js","sourceRoot":"","sources":["../../src/coverage/lcovParser.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAiBH;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,OAAe;IACvC,MAAM,OAAO,GAAgB,EAAE,CAAC;IAChC,IAAI,OAAO,GAAqB,IAAI,CAAC;IACrC,6EAA6E;IAC7E,IAAI,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC,CAAC,cAAc;IAC1D,IAAI,eAAmC,CAAC;IAExC,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,eAAe,EAAE,CAAC;YAClD,IAAI,OAAO,KAAK,eAAe,IAAI,OAAO,EAAE,CAAC;gBAC3C,OAAO,GAAG,IAAI,CAAC;gBACf,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;gBACvB,eAAe,GAAG,SAAS,CAAC;YAC9B,CAAC;YACD,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,QAAQ,GAAG,CAAC;YAAE,SAAS;QAC3B,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QAE9C,QAAQ,GAAG,EAAE,CAAC;YACZ,KAAK,IAAI;gBACP,sEAAsE;gBACtE,eAAe,GAAG,KAAK,CAAC;gBACxB,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,OAAO,GAAG,gBAAgB,EAAE,CAAC;gBAC/B,CAAC;gBACD,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC;gBACzB,MAAM;YAER,KAAK,IAAI;gBACP,yCAAyC;gBACzC,OAAO,GAAG,gBAAgB,EAAE,CAAC;gBAC7B,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC;gBAC3B,IAAI,eAAe,EAAE,CAAC;oBACpB,OAAO,CAAC,QAAQ,GAAG,eAAe,CAAC;oBACnC,eAAe,GAAG,SAAS,CAAC;gBAC9B,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACtB,MAAM;YAER,KAAK,IAAI,EAAE,CAAC;gBACV,IAAI,CAAC,OAAO;oBAAE,MAAM;gBACpB,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBACtD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;oBACrC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;gBACvC,CAAC;gBACD,MAAM;YACR,CAAC;YAED,KAAK,IAAI;gBACP,IAAI,OAAO;oBAAE,OAAO,CAAC,UAAU,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;gBAC3D,MAAM;YAER,KAAK,IAAI;gBACP,IAAI,OAAO;oBAAE,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;gBACzD,MAAM;YAER,KAAK,IAAI,EAAE,CAAC;gBACV,IAAI,CAAC,OAAO;oBAAE,MAAM;gBACpB,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;gBAC5C,IAAI,OAAO,KAAK,IAAI,IAAI,MAAM,EAAE,CAAC;oBAC/B,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAClC,CAAC;gBACD,MAAM;YACR,CAAC;YAED,KAAK,MAAM,EAAE,CAAC;gBACZ,IAAI,CAAC,OAAO;oBAAE,MAAM;gBACpB,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;gBAC7C,MAAM,KAAK,GAAG,QAAQ,IAAI,GAAG,CAAC;gBAC9B,IAAI,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC5B,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBACpC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE;wBAC5B,IAAI,EAAE,IAAI,IAAI,CAAC;wBACf,QAAQ,EAAE,KAAK;qBAChB,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM;YACR,CAAC;YAED,KAAK,MAAM,CAAC;YACZ,KAAK,KAAK,CAAC;YACX,KAAK,KAAK;gBACR,4DAA4D;gBAC5D,MAAM;QACV,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAoB;IACrD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC3C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YACxC,IAAI,KAAK,GAAG,CAAC;gBAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;QACD,iEAAiE;QACjE,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,QAAQ,EAAE,CAAC;YACb,KAAK,MAAM,CAAC,IAAI,OAAO;gBAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAoB;IACzD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC3C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,KAAK,MAAM,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACrD,IAAI,QAAQ,GAAG,CAAC;gBAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC;QACD,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,QAAQ,EAAE,CAAC;YACb,KAAK,MAAM,CAAC,IAAI,OAAO;gBAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,4EAA4E;AAE5E,SAAS,gBAAgB;IACvB,OAAO;QACL,UAAU,EAAE,EAAE;QACd,KAAK,EAAE,EAAE;QACT,SAAS,EAAE,IAAI,GAAG,EAAE;QACpB,UAAU,EAAE,CAAC;QACb,QAAQ,EAAE,CAAC;KACZ,CAAC;AACJ,CAAC;AAED,wEAAwE;AACxE,SAAS,UAAU,CAAC,KAAa;IAC/B,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,GAAG,GAAG,CAAC;QAAE,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACjC,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC;AACjD,CAAC"}
|
package/dist/fingerprint.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Violation } from './types.js';
|
|
1
2
|
export interface FingerprintInput {
|
|
2
3
|
analyzer: string;
|
|
3
4
|
rule: string;
|
|
@@ -12,4 +13,20 @@ export interface FingerprintInput {
|
|
|
12
13
|
* boundary.
|
|
13
14
|
*/
|
|
14
15
|
export declare function fingerprint(input: FingerprintInput): string;
|
|
16
|
+
/**
|
|
17
|
+
* Build the canonical {analyzer, rule, file, symbol} tuple for a violation.
|
|
18
|
+
*
|
|
19
|
+
* This is the ONE place rule-id resolution happens. If a violation stores its
|
|
20
|
+
* rule identifier in a field not listed here, that violation fingerprints
|
|
21
|
+
* with an empty rule — add the missing field to the chain below.
|
|
22
|
+
*
|
|
23
|
+
* Precedence (first populated wins):
|
|
24
|
+
* 1. `violation.rule` — universal analyzers, invariants, react (hooks)
|
|
25
|
+
* 2. `violation.principle` — CrossLanguageSOLID
|
|
26
|
+
* 3. `violation.violationType` — SchemaValidator, reactAnalyzer
|
|
27
|
+
* 4. `violation.contractType` — APIContractAnalyzer
|
|
28
|
+
* 5. `violation.type` — structural type (rarely a rule id; last-resort)
|
|
29
|
+
* 6. `violation.details?.rule` — nested rule (react)
|
|
30
|
+
*/
|
|
31
|
+
export declare function buildFingerprintInput(violation: Violation): FingerprintInput;
|
|
15
32
|
//# sourceMappingURL=fingerprint.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fingerprint.d.ts","sourceRoot":"","sources":["../src/fingerprint.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fingerprint.d.ts","sourceRoot":"","sources":["../src/fingerprint.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAQ3D;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,SAAS,GAAG,gBAAgB,CAqB5E"}
|
package/dist/fingerprint.js
CHANGED
|
@@ -11,8 +11,15 @@
|
|
|
11
11
|
* Spec 04 — diff-scoped auditing
|
|
12
12
|
* Spec 06 — SARIF partial fingerprints (same tuple underlies a SARIF
|
|
13
13
|
* partialFingerprints entry)
|
|
14
|
+
*
|
|
15
|
+
* buildFingerprintInput() is the SINGLE canonical source for the
|
|
16
|
+
* {analyzer, rule, file, symbol} tuple. Every surface that fingerprints a
|
|
17
|
+
* violation (baseline, from_audit, SARIF) calls this function — no surface
|
|
18
|
+
* resolves the rule-id chain or symbol inline. If a new analyzer stores its
|
|
19
|
+
* rule id in a novel field, add that field HERE.
|
|
14
20
|
*/
|
|
15
21
|
import { createHash } from 'node:crypto';
|
|
22
|
+
import { extractSymbol } from './symbols.js';
|
|
16
23
|
/**
|
|
17
24
|
* Produce a stable hex SHA-256 digest from the canonical four-tuple.
|
|
18
25
|
*
|
|
@@ -29,4 +36,39 @@ export function fingerprint(input) {
|
|
|
29
36
|
]);
|
|
30
37
|
return createHash('sha256').update(canonical).digest('hex');
|
|
31
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* Build the canonical {analyzer, rule, file, symbol} tuple for a violation.
|
|
41
|
+
*
|
|
42
|
+
* This is the ONE place rule-id resolution happens. If a violation stores its
|
|
43
|
+
* rule identifier in a field not listed here, that violation fingerprints
|
|
44
|
+
* with an empty rule — add the missing field to the chain below.
|
|
45
|
+
*
|
|
46
|
+
* Precedence (first populated wins):
|
|
47
|
+
* 1. `violation.rule` — universal analyzers, invariants, react (hooks)
|
|
48
|
+
* 2. `violation.principle` — CrossLanguageSOLID
|
|
49
|
+
* 3. `violation.violationType` — SchemaValidator, reactAnalyzer
|
|
50
|
+
* 4. `violation.contractType` — APIContractAnalyzer
|
|
51
|
+
* 5. `violation.type` — structural type (rarely a rule id; last-resort)
|
|
52
|
+
* 6. `violation.details?.rule` — nested rule (react)
|
|
53
|
+
*/
|
|
54
|
+
export function buildFingerprintInput(violation) {
|
|
55
|
+
const rule = (typeof violation.rule === 'string' ? violation.rule : undefined) ??
|
|
56
|
+
(typeof violation.principle === 'string' ? violation.principle : undefined) ??
|
|
57
|
+
(typeof violation.violationType === 'string' ? violation.violationType : undefined) ??
|
|
58
|
+
(typeof violation.contractType === 'string' ? violation.contractType : undefined) ??
|
|
59
|
+
(typeof violation.type === 'string' ? violation.type : undefined) ??
|
|
60
|
+
(violation.details &&
|
|
61
|
+
typeof violation.details === 'object' &&
|
|
62
|
+
!Array.isArray(violation.details) &&
|
|
63
|
+
typeof violation.details.rule === 'string'
|
|
64
|
+
? violation.details.rule
|
|
65
|
+
: undefined) ??
|
|
66
|
+
'';
|
|
67
|
+
return {
|
|
68
|
+
analyzer: violation.analyzer ?? '',
|
|
69
|
+
rule,
|
|
70
|
+
file: violation.file ?? '',
|
|
71
|
+
symbol: extractSymbol(violation),
|
|
72
|
+
};
|
|
73
|
+
}
|
|
32
74
|
//# sourceMappingURL=fingerprint.js.map
|
package/dist/fingerprint.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fingerprint.js","sourceRoot":"","sources":["../src/fingerprint.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"fingerprint.js","sourceRoot":"","sources":["../src/fingerprint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAS7C;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,KAAuB;IACjD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAC/B,KAAK,CAAC,QAAQ;QACd,KAAK,CAAC,IAAI;QACV,KAAK,CAAC,IAAI;QACV,KAAK,CAAC,MAAM;KACb,CAAC,CAAC;IACH,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC9D,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,qBAAqB,CAAC,SAAoB;IACxD,MAAM,IAAI,GACR,CAAC,OAAO,SAAS,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QACjE,CAAC,OAAO,SAAS,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3E,CAAC,OAAO,SAAS,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC;QACnF,CAAC,OAAO,SAAS,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;QACjF,CAAC,OAAO,SAAS,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QACjE,CAAC,SAAS,CAAC,OAAO;YACjB,OAAO,SAAS,CAAC,OAAO,KAAK,QAAQ;YACrC,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;YACjC,OAAO,SAAS,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ;YACzC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI;YACxB,CAAC,CAAC,SAAS,CAAC;QACd,EAAE,CAAC;IAEL,OAAO;QACL,QAAQ,EAAE,SAAS,CAAC,QAAQ,IAAI,EAAE;QAClC,IAAI;QACJ,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,EAAE;QAC1B,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC;KACjC,CAAC;AACJ,CAAC"}
|
|
Binary file
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spec 14 R6 — Blast Radius Impact Computation
|
|
3
|
+
*
|
|
4
|
+
* Estimates the impact of editing a set of functions using recursive CTE
|
|
5
|
+
* traversal of the caller graph. Designed for the hook path: ≤100ms budget.
|
|
6
|
+
*
|
|
7
|
+
* Uses targeted traversal via SQLite recursive CTE — no full adjacency load.
|
|
8
|
+
* Cost scales with the BFS neighborhood size, not the codebase size.
|
|
9
|
+
*
|
|
10
|
+
* If latency > 100ms, the feature ships disabled-by-default.
|
|
11
|
+
*/
|
|
12
|
+
import type Database from 'better-sqlite3';
|
|
13
|
+
import type { BlastRadiusImpact } from '../types.js';
|
|
14
|
+
declare const LATENCY_BUDGET_MS = 100;
|
|
15
|
+
/**
|
|
16
|
+
* Compute blast-radius impact for a set of edited function IDs.
|
|
17
|
+
*
|
|
18
|
+
* Uses a recursive CTE against `graph_cache` (falling back to
|
|
19
|
+
* `function_calls` if cache is empty) to walk the caller graph upward.
|
|
20
|
+
*
|
|
21
|
+
* @param db - SQLite database handle
|
|
22
|
+
* @param functionIds - IDs of edited/changed functions
|
|
23
|
+
* @returns Impact estimate with latency measurement
|
|
24
|
+
*/
|
|
25
|
+
export declare function computeImpact(db: Database.Database, functionIds: number[]): BlastRadiusImpact;
|
|
26
|
+
export { LATENCY_BUDGET_MS };
|
|
27
|
+
//# sourceMappingURL=blastRadius.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blastRadius.d.ts","sourceRoot":"","sources":["../../src/graph/blastRadius.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGrD,QAAA,MAAM,iBAAiB,MAAM,CAAC;AAE9B;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,WAAW,EAAE,MAAM,EAAE,GACpB,iBAAiB,CA0CnB;AAwGD,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spec 14 R6 — Blast Radius Impact Computation
|
|
3
|
+
*
|
|
4
|
+
* Estimates the impact of editing a set of functions using recursive CTE
|
|
5
|
+
* traversal of the caller graph. Designed for the hook path: ≤100ms budget.
|
|
6
|
+
*
|
|
7
|
+
* Uses targeted traversal via SQLite recursive CTE — no full adjacency load.
|
|
8
|
+
* Cost scales with the BFS neighborhood size, not the codebase size.
|
|
9
|
+
*
|
|
10
|
+
* If latency > 100ms, the feature ships disabled-by-default.
|
|
11
|
+
*/
|
|
12
|
+
const MAX_DEPTH = 10;
|
|
13
|
+
const LATENCY_BUDGET_MS = 100;
|
|
14
|
+
/**
|
|
15
|
+
* Compute blast-radius impact for a set of edited function IDs.
|
|
16
|
+
*
|
|
17
|
+
* Uses a recursive CTE against `graph_cache` (falling back to
|
|
18
|
+
* `function_calls` if cache is empty) to walk the caller graph upward.
|
|
19
|
+
*
|
|
20
|
+
* @param db - SQLite database handle
|
|
21
|
+
* @param functionIds - IDs of edited/changed functions
|
|
22
|
+
* @returns Impact estimate with latency measurement
|
|
23
|
+
*/
|
|
24
|
+
export function computeImpact(db, functionIds) {
|
|
25
|
+
const startMs = performance.now();
|
|
26
|
+
if (functionIds.length === 0) {
|
|
27
|
+
return {
|
|
28
|
+
editedFunctionCount: 0,
|
|
29
|
+
transitiveCallers: 0,
|
|
30
|
+
reachableExports: 0,
|
|
31
|
+
depthReached: 0,
|
|
32
|
+
latencyMs: performance.now() - startMs,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
// Check if graph_cache has call edges — use it if available (fast path)
|
|
36
|
+
const cacheCount = db.prepare("SELECT COUNT(*) as cnt FROM graph_cache WHERE graph_type = 'call'").get().cnt;
|
|
37
|
+
let reachableIds;
|
|
38
|
+
if (cacheCount > 0) {
|
|
39
|
+
// Fast path: use graph_cache
|
|
40
|
+
reachableIds = computeImpactFromCache(db, functionIds);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
// Fallback: use function_calls directly
|
|
44
|
+
reachableIds = computeImpactFromCalls(db, functionIds);
|
|
45
|
+
}
|
|
46
|
+
// Count exported functions among reachable callers
|
|
47
|
+
const exportedCount = reachableIds.length > 0
|
|
48
|
+
? countExported(db, reachableIds)
|
|
49
|
+
: 0;
|
|
50
|
+
const elapsedMs = performance.now() - startMs;
|
|
51
|
+
return {
|
|
52
|
+
editedFunctionCount: functionIds.length,
|
|
53
|
+
transitiveCallers: reachableIds.length,
|
|
54
|
+
reachableExports: exportedCount,
|
|
55
|
+
depthReached: MAX_DEPTH, // The CTE caps at MAX_DEPTH
|
|
56
|
+
latencyMs: Math.round(elapsedMs * 100) / 100,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Walk the caller graph using `graph_cache` (fast path).
|
|
61
|
+
* Finds all transitive callers up to MAX_DEPTH.
|
|
62
|
+
*/
|
|
63
|
+
function computeImpactFromCache(db, functionIds) {
|
|
64
|
+
// Build initial set as comma-separated IDs
|
|
65
|
+
const idList = functionIds.join(',');
|
|
66
|
+
// Recursive CTE: follow (neighbor → node) edges in the call graph.
|
|
67
|
+
// In graph_cache, node_key = caller, neighbor_key = callee.
|
|
68
|
+
// So to find callers, we search WHERE neighbor_key = our_function
|
|
69
|
+
// and node_key is the caller.
|
|
70
|
+
try {
|
|
71
|
+
const rows = db.prepare(`
|
|
72
|
+
WITH RECURSIVE callers(id, depth) AS (
|
|
73
|
+
-- Base: start from the edited functions themselves
|
|
74
|
+
SELECT DISTINCT node_key, 0
|
|
75
|
+
FROM graph_cache
|
|
76
|
+
WHERE graph_type = 'call' AND neighbor_key IN (${idList})
|
|
77
|
+
|
|
78
|
+
UNION
|
|
79
|
+
|
|
80
|
+
-- Recursive: find callers of callers
|
|
81
|
+
SELECT DISTINCT gc.node_key, callers.depth + 1
|
|
82
|
+
FROM graph_cache gc
|
|
83
|
+
JOIN callers ON gc.neighbor_key = callers.id
|
|
84
|
+
WHERE gc.graph_type = 'call'
|
|
85
|
+
AND callers.depth < ${MAX_DEPTH}
|
|
86
|
+
)
|
|
87
|
+
SELECT DISTINCT id FROM callers
|
|
88
|
+
`).all();
|
|
89
|
+
return rows.map(r => parseInt(r.id, 10)).filter(id => !isNaN(id));
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
// If recursive CTE fails (e.g., malformed cache), return empty
|
|
93
|
+
return [];
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Fallback: walk the caller graph using `function_calls`.
|
|
98
|
+
* Find all functions that transitively call the given function IDs.
|
|
99
|
+
*/
|
|
100
|
+
function computeImpactFromCalls(db, functionIds) {
|
|
101
|
+
// First, get the names of the edited functions
|
|
102
|
+
const idPlaceholders = functionIds.map(() => '?').join(',');
|
|
103
|
+
const fnNames = db.prepare(`SELECT DISTINCT name FROM functions WHERE id IN (${idPlaceholders})`).all(...functionIds);
|
|
104
|
+
const names = fnNames.map(r => r.name);
|
|
105
|
+
if (names.length === 0)
|
|
106
|
+
return [];
|
|
107
|
+
// Use recursive CTE on function_calls
|
|
108
|
+
// function_calls: caller_id calls callee_name
|
|
109
|
+
// To find callers: find rows where callee_name matches our function,
|
|
110
|
+
// then recursively follow from those callers
|
|
111
|
+
try {
|
|
112
|
+
const nameList = names.map(n => `'${n.replace(/'/g, "''")}'`).join(',');
|
|
113
|
+
const rows = db.prepare(`
|
|
114
|
+
WITH RECURSIVE callers(id, depth) AS (
|
|
115
|
+
-- Base: functions that directly call our edited functions
|
|
116
|
+
SELECT fc.caller_id, 1
|
|
117
|
+
FROM function_calls fc
|
|
118
|
+
WHERE fc.callee_name IN (${nameList})
|
|
119
|
+
|
|
120
|
+
UNION
|
|
121
|
+
|
|
122
|
+
-- Recursive: functions that call the current set of callers
|
|
123
|
+
SELECT fc2.caller_id, callers.depth + 1
|
|
124
|
+
FROM function_calls fc2
|
|
125
|
+
JOIN functions f ON f.id = fc2.caller_id
|
|
126
|
+
JOIN callers ON fc2.callee_name IN (
|
|
127
|
+
SELECT f2.name FROM functions f2 WHERE f2.id = callers.id
|
|
128
|
+
)
|
|
129
|
+
WHERE callers.depth < ${MAX_DEPTH}
|
|
130
|
+
)
|
|
131
|
+
SELECT DISTINCT id FROM callers
|
|
132
|
+
`).all();
|
|
133
|
+
return rows.map(r => r.id).filter(id => !functionIds.includes(id));
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
return [];
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Count how many of the given function IDs are exported.
|
|
141
|
+
*/
|
|
142
|
+
function countExported(db, functionIds) {
|
|
143
|
+
if (functionIds.length === 0)
|
|
144
|
+
return 0;
|
|
145
|
+
const idPlaceholders = functionIds.map(() => '?').join(',');
|
|
146
|
+
const row = db.prepare(`SELECT COUNT(*) as cnt FROM functions WHERE id IN (${idPlaceholders}) AND is_exported = 1`).get(...functionIds);
|
|
147
|
+
return row.cnt;
|
|
148
|
+
}
|
|
149
|
+
export { LATENCY_BUDGET_MS };
|
|
150
|
+
//# sourceMappingURL=blastRadius.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blastRadius.js","sourceRoot":"","sources":["../../src/graph/blastRadius.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spec 14 R1, R2 — Call Graph Construction, Centrality, and Risk Ranking
|
|
3
|
+
*
|
|
4
|
+
* Builds a weighted call graph from the `function_calls` table, computes
|
|
5
|
+
* PageRank and betweenness centrality, and produces a risk ranking.
|
|
6
|
+
*
|
|
7
|
+
* All advisory — zero violations. Reports and annotations only.
|
|
8
|
+
*/
|
|
9
|
+
import type Database from 'better-sqlite3';
|
|
10
|
+
import type { RiskEntry, GraphStats } from '../types.js';
|
|
11
|
+
export interface CallGraph {
|
|
12
|
+
/** Adjacency: nodeId → (neighborId → edgeWeight) */
|
|
13
|
+
adjacency: Map<number, Map<number, number>>;
|
|
14
|
+
/** Set of all node IDs in the graph */
|
|
15
|
+
nodeIds: Set<number>;
|
|
16
|
+
/** nodeId → function name */
|
|
17
|
+
nodeNames: Map<number, string>;
|
|
18
|
+
/** nodeId → file path */
|
|
19
|
+
nodePaths: Map<number, string>;
|
|
20
|
+
}
|
|
21
|
+
export interface CentralityScores {
|
|
22
|
+
pageRank: Map<number, number>;
|
|
23
|
+
betweenness: Map<number, number>;
|
|
24
|
+
/** Number of pivots sampled (Brandes-Pich when > 0) */
|
|
25
|
+
betweennessPivotCount: number;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Build a weighted call graph from the `function_calls` table.
|
|
29
|
+
*
|
|
30
|
+
* Resolves `callee_name` TEXT → `functions.id` via name join. Edge weight
|
|
31
|
+
* is the count of call sites between the same (caller, callee) pair.
|
|
32
|
+
*/
|
|
33
|
+
export declare function buildCallGraph(db: Database.Database): {
|
|
34
|
+
graph: CallGraph;
|
|
35
|
+
unresolvedCount: number;
|
|
36
|
+
unresolvedShare: number;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Build a call graph from the persistent `graph_cache` table (fast path).
|
|
40
|
+
*/
|
|
41
|
+
export declare function buildCallGraphFromCache(db: Database.Database): {
|
|
42
|
+
graph: CallGraph;
|
|
43
|
+
unresolvedCount: number;
|
|
44
|
+
unresolvedShare: number;
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Populate `graph_cache` with call and import graph edges.
|
|
48
|
+
* Called after a full sync or scoped sync.
|
|
49
|
+
*/
|
|
50
|
+
export declare function populateCallGraphCache(db: Database.Database): void;
|
|
51
|
+
/**
|
|
52
|
+
* Compute PageRank on a weighted directed graph.
|
|
53
|
+
*
|
|
54
|
+
* Standard iterative algorithm: damping factor 0.85, convergence 1e-6,
|
|
55
|
+
* max 100 iterations.
|
|
56
|
+
*/
|
|
57
|
+
export declare function computePageRank(adjacency: Map<number, Map<number, number>>, nodeIds: Set<number>, damping?: number, convergence?: number): Map<number, number>;
|
|
58
|
+
/**
|
|
59
|
+
* Compute Brandes betweenness centrality.
|
|
60
|
+
*
|
|
61
|
+
* When `nodeCount <= 2000`, uses exact Brandes.
|
|
62
|
+
* Above that, uses Brandes-Pich pivot sampling with `BETWEENNESS_PIVOT_COUNT` pivots.
|
|
63
|
+
* Returns scores and the number of pivots sampled (0 = exact).
|
|
64
|
+
*/
|
|
65
|
+
export declare function computeBetweenness(adjacency: Map<number, Map<number, number>>, nodeIds: Set<number>): {
|
|
66
|
+
scores: Map<number, number>;
|
|
67
|
+
pivotCount: number;
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Compute a risk score for every function.
|
|
71
|
+
*
|
|
72
|
+
* risk = max(pageRank percentile, betweenness percentile)
|
|
73
|
+
* × complexity percentile
|
|
74
|
+
* × (1 + untested) — where untested = 1 if true, 0 otherwise
|
|
75
|
+
*/
|
|
76
|
+
export declare function computeRisk(db: Database.Database, adjacency: Map<number, Map<number, number>>, nodeIds: Set<number>, nodeNames: Map<number, string>, nodePaths: Map<number, string>): RiskEntry[];
|
|
77
|
+
export declare function getGraphStats(db: Database.Database): GraphStats;
|
|
78
|
+
//# sourceMappingURL=callGraph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"callGraph.d.ts","sourceRoot":"","sources":["../../src/graph/callGraph.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAqB,MAAM,aAAa,CAAC;AAI5E,MAAM,WAAW,SAAS;IACxB,oDAAoD;IACpD,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5C,uCAAuC;IACvC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACrB,6BAA6B;IAC7B,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,yBAAyB;IACzB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,uDAAuD;IACvD,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAID;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG;IACrD,KAAK,EAAE,SAAS,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;CACzB,CAwEA;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG;IAC9D,KAAK,EAAE,SAAS,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;CACzB,CA2CA;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CA0BlE;AAID;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAC3C,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,EACpB,OAAO,SAAO,EACd,WAAW,SAAO,GACjB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CA0ErB;AAOD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAC3C,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,GACnB;IAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAsBrD;AA4MD;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAC3C,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,EACpB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,SAAS,EAAE,CAuEb;AAID,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,UAAU,CAgC/D"}
|