codeguardian-mcp 1.0.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/LICENSE +21 -0
- package/README.md +348 -0
- package/dist/agent/agentTools.d.ts +26 -0
- package/dist/agent/agentTools.d.ts.map +1 -0
- package/dist/agent/agentTools.js +699 -0
- package/dist/agent/agentTools.js.map +1 -0
- package/dist/agent/autoValidator.d.ts +110 -0
- package/dist/agent/autoValidator.d.ts.map +1 -0
- package/dist/agent/autoValidator.js +964 -0
- package/dist/agent/autoValidator.js.map +1 -0
- package/dist/agent/fileWatcher.d.ts +28 -0
- package/dist/agent/fileWatcher.d.ts.map +1 -0
- package/dist/agent/fileWatcher.js +88 -0
- package/dist/agent/fileWatcher.js.map +1 -0
- package/dist/agent/guardianPersistence.d.ts +98 -0
- package/dist/agent/guardianPersistence.d.ts.map +1 -0
- package/dist/agent/guardianPersistence.js +296 -0
- package/dist/agent/guardianPersistence.js.map +1 -0
- package/dist/agent/mcpNotifications.d.ts +38 -0
- package/dist/agent/mcpNotifications.d.ts.map +1 -0
- package/dist/agent/mcpNotifications.js +81 -0
- package/dist/agent/mcpNotifications.js.map +1 -0
- package/dist/analyzers/aiPatterns.d.ts +16 -0
- package/dist/analyzers/aiPatterns.d.ts.map +1 -0
- package/dist/analyzers/aiPatterns.js +103 -0
- package/dist/analyzers/aiPatterns.js.map +1 -0
- package/dist/analyzers/antiPatterns.d.ts +60 -0
- package/dist/analyzers/antiPatterns.d.ts.map +1 -0
- package/dist/analyzers/antiPatterns.js +198 -0
- package/dist/analyzers/antiPatterns.js.map +1 -0
- package/dist/analyzers/builtinTypes.d.ts +18 -0
- package/dist/analyzers/builtinTypes.d.ts.map +1 -0
- package/dist/analyzers/builtinTypes.js +1275 -0
- package/dist/analyzers/builtinTypes.js.map +1 -0
- package/dist/analyzers/complexity.d.ts +14 -0
- package/dist/analyzers/complexity.d.ts.map +1 -0
- package/dist/analyzers/complexity.js +610 -0
- package/dist/analyzers/complexity.js.map +1 -0
- package/dist/analyzers/findingVerifier.d.ts +59 -0
- package/dist/analyzers/findingVerifier.d.ts.map +1 -0
- package/dist/analyzers/findingVerifier.js +1169 -0
- package/dist/analyzers/findingVerifier.js.map +1 -0
- package/dist/analyzers/impactAnalyzer.d.ts +53 -0
- package/dist/analyzers/impactAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/impactAnalyzer.js +152 -0
- package/dist/analyzers/impactAnalyzer.js.map +1 -0
- package/dist/analyzers/languageDetector.d.ts +48 -0
- package/dist/analyzers/languageDetector.d.ts.map +1 -0
- package/dist/analyzers/languageDetector.js +404 -0
- package/dist/analyzers/languageDetector.js.map +1 -0
- package/dist/analyzers/parsers/incrementalParser.d.ts +53 -0
- package/dist/analyzers/parsers/incrementalParser.d.ts.map +1 -0
- package/dist/analyzers/parsers/incrementalParser.js +193 -0
- package/dist/analyzers/parsers/incrementalParser.js.map +1 -0
- package/dist/analyzers/parsers/scopeResolver.d.ts +92 -0
- package/dist/analyzers/parsers/scopeResolver.d.ts.map +1 -0
- package/dist/analyzers/parsers/scopeResolver.js +324 -0
- package/dist/analyzers/parsers/scopeResolver.js.map +1 -0
- package/dist/analyzers/parsers/semanticIndex.d.ts +127 -0
- package/dist/analyzers/parsers/semanticIndex.d.ts.map +1 -0
- package/dist/analyzers/parsers/semanticIndex.js +429 -0
- package/dist/analyzers/parsers/semanticIndex.js.map +1 -0
- package/dist/analyzers/parsers/sessionDiffAnalyzer.d.ts +42 -0
- package/dist/analyzers/parsers/sessionDiffAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/parsers/sessionDiffAnalyzer.js +233 -0
- package/dist/analyzers/parsers/sessionDiffAnalyzer.js.map +1 -0
- package/dist/analyzers/parsers/treeSitterParser.d.ts +76 -0
- package/dist/analyzers/parsers/treeSitterParser.d.ts.map +1 -0
- package/dist/analyzers/parsers/treeSitterParser.js +709 -0
- package/dist/analyzers/parsers/treeSitterParser.js.map +1 -0
- package/dist/analyzers/relevanceScorer.d.ts +43 -0
- package/dist/analyzers/relevanceScorer.d.ts.map +1 -0
- package/dist/analyzers/relevanceScorer.js +200 -0
- package/dist/analyzers/relevanceScorer.js.map +1 -0
- package/dist/analyzers/standardLibrary.d.ts +22 -0
- package/dist/analyzers/standardLibrary.d.ts.map +1 -0
- package/dist/analyzers/standardLibrary.js +211 -0
- package/dist/analyzers/standardLibrary.js.map +1 -0
- package/dist/analyzers/symbolGraph.d.ts +30 -0
- package/dist/analyzers/symbolGraph.d.ts.map +1 -0
- package/dist/analyzers/symbolGraph.js +380 -0
- package/dist/analyzers/symbolGraph.js.map +1 -0
- package/dist/analyzers/symbolTable.d.ts +18 -0
- package/dist/analyzers/symbolTable.d.ts.map +1 -0
- package/dist/analyzers/symbolTable.js +176 -0
- package/dist/analyzers/symbolTable.js.map +1 -0
- package/dist/analyzers/typeChecker.d.ts +13 -0
- package/dist/analyzers/typeChecker.d.ts.map +1 -0
- package/dist/analyzers/typeChecker.js +580 -0
- package/dist/analyzers/typeChecker.js.map +1 -0
- package/dist/analyzers/usagePatterns.d.ts +42 -0
- package/dist/analyzers/usagePatterns.d.ts.map +1 -0
- package/dist/analyzers/usagePatterns.js +75 -0
- package/dist/analyzers/usagePatterns.js.map +1 -0
- package/dist/api-contract/context/backend.d.ts +19 -0
- package/dist/api-contract/context/backend.d.ts.map +1 -0
- package/dist/api-contract/context/backend.js +64 -0
- package/dist/api-contract/context/backend.js.map +1 -0
- package/dist/api-contract/context/contract.d.ts +34 -0
- package/dist/api-contract/context/contract.d.ts.map +1 -0
- package/dist/api-contract/context/contract.js +306 -0
- package/dist/api-contract/context/contract.js.map +1 -0
- package/dist/api-contract/context/frontend.d.ts +19 -0
- package/dist/api-contract/context/frontend.d.ts.map +1 -0
- package/dist/api-contract/context/frontend.js +64 -0
- package/dist/api-contract/context/frontend.js.map +1 -0
- package/dist/api-contract/detector.d.ts +28 -0
- package/dist/api-contract/detector.d.ts.map +1 -0
- package/dist/api-contract/detector.js +393 -0
- package/dist/api-contract/detector.js.map +1 -0
- package/dist/api-contract/extractors/python.d.ts +32 -0
- package/dist/api-contract/extractors/python.d.ts.map +1 -0
- package/dist/api-contract/extractors/python.js +521 -0
- package/dist/api-contract/extractors/python.js.map +1 -0
- package/dist/api-contract/extractors/pythonAstUtils.d.ts +44 -0
- package/dist/api-contract/extractors/pythonAstUtils.d.ts.map +1 -0
- package/dist/api-contract/extractors/pythonAstUtils.js +489 -0
- package/dist/api-contract/extractors/pythonAstUtils.js.map +1 -0
- package/dist/api-contract/extractors/tsAstUtils.d.ts +47 -0
- package/dist/api-contract/extractors/tsAstUtils.d.ts.map +1 -0
- package/dist/api-contract/extractors/tsAstUtils.js +173 -0
- package/dist/api-contract/extractors/tsAstUtils.js.map +1 -0
- package/dist/api-contract/extractors/typescript.d.ts +32 -0
- package/dist/api-contract/extractors/typescript.d.ts.map +1 -0
- package/dist/api-contract/extractors/typescript.js +666 -0
- package/dist/api-contract/extractors/typescript.js.map +1 -0
- package/dist/api-contract/index.d.ts +104 -0
- package/dist/api-contract/index.d.ts.map +1 -0
- package/dist/api-contract/index.js +232 -0
- package/dist/api-contract/index.js.map +1 -0
- package/dist/api-contract/types.d.ts +151 -0
- package/dist/api-contract/types.d.ts.map +1 -0
- package/dist/api-contract/types.js +19 -0
- package/dist/api-contract/types.js.map +1 -0
- package/dist/api-contract/validators/endpoint.d.ts +21 -0
- package/dist/api-contract/validators/endpoint.d.ts.map +1 -0
- package/dist/api-contract/validators/endpoint.js +224 -0
- package/dist/api-contract/validators/endpoint.js.map +1 -0
- package/dist/api-contract/validators/index.d.ts +40 -0
- package/dist/api-contract/validators/index.d.ts.map +1 -0
- package/dist/api-contract/validators/index.js +875 -0
- package/dist/api-contract/validators/index.js.map +1 -0
- package/dist/api-contract/validators/parameter.d.ts +17 -0
- package/dist/api-contract/validators/parameter.d.ts.map +1 -0
- package/dist/api-contract/validators/parameter.js +250 -0
- package/dist/api-contract/validators/parameter.js.map +1 -0
- package/dist/api-contract/validators/type.d.ts +38 -0
- package/dist/api-contract/validators/type.d.ts.map +1 -0
- package/dist/api-contract/validators/type.js +244 -0
- package/dist/api-contract/validators/type.js.map +1 -0
- package/dist/context/apiContract/complexTypeSupport.d.ts +83 -0
- package/dist/context/apiContract/complexTypeSupport.d.ts.map +1 -0
- package/dist/context/apiContract/complexTypeSupport.js +665 -0
- package/dist/context/apiContract/complexTypeSupport.js.map +1 -0
- package/dist/context/apiContract/graphqlSupport.d.ts +105 -0
- package/dist/context/apiContract/graphqlSupport.d.ts.map +1 -0
- package/dist/context/apiContract/graphqlSupport.js +671 -0
- package/dist/context/apiContract/graphqlSupport.js.map +1 -0
- package/dist/context/apiContract/index.d.ts +14 -0
- package/dist/context/apiContract/index.d.ts.map +1 -0
- package/dist/context/apiContract/index.js +17 -0
- package/dist/context/apiContract/index.js.map +1 -0
- package/dist/context/apiContract/webSocketSupport.d.ts +104 -0
- package/dist/context/apiContract/webSocketSupport.d.ts.map +1 -0
- package/dist/context/apiContract/webSocketSupport.js +465 -0
- package/dist/context/apiContract/webSocketSupport.js.map +1 -0
- package/dist/context/apiContractContext.d.ts +15 -0
- package/dist/context/apiContractContext.d.ts.map +1 -0
- package/dist/context/apiContractContext.js +979 -0
- package/dist/context/apiContractContext.js.map +1 -0
- package/dist/context/apiContractExtraction.d.ts +52 -0
- package/dist/context/apiContractExtraction.d.ts.map +1 -0
- package/dist/context/apiContractExtraction.js +438 -0
- package/dist/context/apiContractExtraction.js.map +1 -0
- package/dist/context/contextLineage.d.ts +79 -0
- package/dist/context/contextLineage.d.ts.map +1 -0
- package/dist/context/contextLineage.js +259 -0
- package/dist/context/contextLineage.js.map +1 -0
- package/dist/context/contextOrchestrator.d.ts +57 -0
- package/dist/context/contextOrchestrator.d.ts.map +1 -0
- package/dist/context/contextOrchestrator.js +162 -0
- package/dist/context/contextOrchestrator.js.map +1 -0
- package/dist/context/intentTracker.d.ts +73 -0
- package/dist/context/intentTracker.d.ts.map +1 -0
- package/dist/context/intentTracker.js +168 -0
- package/dist/context/intentTracker.js.map +1 -0
- package/dist/context/projectContext.d.ts +219 -0
- package/dist/context/projectContext.d.ts.map +1 -0
- package/dist/context/projectContext.js +1984 -0
- package/dist/context/projectContext.js.map +1 -0
- package/dist/prompts/index.d.ts +17 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +260 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/library.d.ts +51 -0
- package/dist/prompts/library.d.ts.map +1 -0
- package/dist/prompts/library.js +65 -0
- package/dist/prompts/library.js.map +1 -0
- package/dist/prompts/templates.d.ts +44 -0
- package/dist/prompts/templates.d.ts.map +1 -0
- package/dist/prompts/templates.js +97 -0
- package/dist/prompts/templates.js.map +1 -0
- package/dist/queue/jobPersistence.d.ts +46 -0
- package/dist/queue/jobPersistence.d.ts.map +1 -0
- package/dist/queue/jobPersistence.js +158 -0
- package/dist/queue/jobPersistence.js.map +1 -0
- package/dist/queue/jobQueue.d.ts +116 -0
- package/dist/queue/jobQueue.d.ts.map +1 -0
- package/dist/queue/jobQueue.js +275 -0
- package/dist/queue/jobQueue.js.map +1 -0
- package/dist/queue/validationJob.d.ts +69 -0
- package/dist/queue/validationJob.d.ts.map +1 -0
- package/dist/queue/validationJob.js +435 -0
- package/dist/queue/validationJob.js.map +1 -0
- package/dist/resources/index.d.ts +15 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +328 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/resources/validationReportStore.d.ts +170 -0
- package/dist/resources/validationReportStore.d.ts.map +1 -0
- package/dist/resources/validationReportStore.js +515 -0
- package/dist/resources/validationReportStore.js.map +1 -0
- package/dist/server.d.ts +12 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +102 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/asyncValidation.d.ts +19 -0
- package/dist/tools/asyncValidation.d.ts.map +1 -0
- package/dist/tools/asyncValidation.js +346 -0
- package/dist/tools/asyncValidation.js.map +1 -0
- package/dist/tools/buildContext.d.ts +17 -0
- package/dist/tools/buildContext.d.ts.map +1 -0
- package/dist/tools/buildContext.js +188 -0
- package/dist/tools/buildContext.js.map +1 -0
- package/dist/tools/getDependencyGraph.d.ts +16 -0
- package/dist/tools/getDependencyGraph.d.ts.map +1 -0
- package/dist/tools/getDependencyGraph.js +436 -0
- package/dist/tools/getDependencyGraph.js.map +1 -0
- package/dist/tools/incrementalValidation.d.ts +71 -0
- package/dist/tools/incrementalValidation.d.ts.map +1 -0
- package/dist/tools/incrementalValidation.js +203 -0
- package/dist/tools/incrementalValidation.js.map +1 -0
- package/dist/tools/index.d.ts +24 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +106 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/validateCode.d.ts +17 -0
- package/dist/tools/validateCode.d.ts.map +1 -0
- package/dist/tools/validateCode.js +368 -0
- package/dist/tools/validateCode.js.map +1 -0
- package/dist/tools/validateCodeLite.d.ts +2 -0
- package/dist/tools/validateCodeLite.d.ts.map +1 -0
- package/dist/tools/validateCodeLite.js +2 -0
- package/dist/tools/validateCodeLite.js.map +1 -0
- package/dist/tools/validation/builtins.d.ts +92 -0
- package/dist/tools/validation/builtins.d.ts.map +1 -0
- package/dist/tools/validation/builtins.js +2184 -0
- package/dist/tools/validation/builtins.js.map +1 -0
- package/dist/tools/validation/contextualNaming.d.ts +99 -0
- package/dist/tools/validation/contextualNaming.d.ts.map +1 -0
- package/dist/tools/validation/contextualNaming.js +959 -0
- package/dist/tools/validation/contextualNaming.js.map +1 -0
- package/dist/tools/validation/deadCode.d.ts +115 -0
- package/dist/tools/validation/deadCode.d.ts.map +1 -0
- package/dist/tools/validation/deadCode.js +861 -0
- package/dist/tools/validation/deadCode.js.map +1 -0
- package/dist/tools/validation/extractors/index.d.ts +131 -0
- package/dist/tools/validation/extractors/index.d.ts.map +1 -0
- package/dist/tools/validation/extractors/index.js +233 -0
- package/dist/tools/validation/extractors/index.js.map +1 -0
- package/dist/tools/validation/extractors/javascript.d.ts +73 -0
- package/dist/tools/validation/extractors/javascript.d.ts.map +1 -0
- package/dist/tools/validation/extractors/javascript.js +1841 -0
- package/dist/tools/validation/extractors/javascript.js.map +1 -0
- package/dist/tools/validation/extractors/python.d.ts +93 -0
- package/dist/tools/validation/extractors/python.d.ts.map +1 -0
- package/dist/tools/validation/extractors/python.js +799 -0
- package/dist/tools/validation/extractors/python.js.map +1 -0
- package/dist/tools/validation/manifest.d.ts +45 -0
- package/dist/tools/validation/manifest.d.ts.map +1 -0
- package/dist/tools/validation/manifest.js +719 -0
- package/dist/tools/validation/manifest.js.map +1 -0
- package/dist/tools/validation/parser.d.ts +58 -0
- package/dist/tools/validation/parser.d.ts.map +1 -0
- package/dist/tools/validation/parser.js +232 -0
- package/dist/tools/validation/parser.js.map +1 -0
- package/dist/tools/validation/registry.d.ts +15 -0
- package/dist/tools/validation/registry.d.ts.map +1 -0
- package/dist/tools/validation/registry.js +169 -0
- package/dist/tools/validation/registry.js.map +1 -0
- package/dist/tools/validation/scoring.d.ts +54 -0
- package/dist/tools/validation/scoring.d.ts.map +1 -0
- package/dist/tools/validation/scoring.js +242 -0
- package/dist/tools/validation/scoring.js.map +1 -0
- package/dist/tools/validation/types.d.ts +120 -0
- package/dist/tools/validation/types.d.ts.map +1 -0
- package/dist/tools/validation/types.js +11 -0
- package/dist/tools/validation/types.js.map +1 -0
- package/dist/tools/validation/unusedLocals.d.ts +36 -0
- package/dist/tools/validation/unusedLocals.d.ts.map +1 -0
- package/dist/tools/validation/unusedLocals.js +333 -0
- package/dist/tools/validation/unusedLocals.js.map +1 -0
- package/dist/tools/validation/validation.d.ts +98 -0
- package/dist/tools/validation/validation.d.ts.map +1 -0
- package/dist/tools/validation/validation.js +1837 -0
- package/dist/tools/validation/validation.js.map +1 -0
- package/dist/types/codeGraph.d.ts +163 -0
- package/dist/types/codeGraph.d.ts.map +1 -0
- package/dist/types/codeGraph.js +9 -0
- package/dist/types/codeGraph.js.map +1 -0
- package/dist/types/symbolGraph.d.ts +68 -0
- package/dist/types/symbolGraph.d.ts.map +1 -0
- package/dist/types/symbolGraph.js +10 -0
- package/dist/types/symbolGraph.js.map +1 -0
- package/dist/types/tools.d.ts +43 -0
- package/dist/types/tools.d.ts.map +1 -0
- package/dist/types/tools.js +7 -0
- package/dist/types/tools.js.map +1 -0
- package/dist/utils/fileFilter.d.ts +37 -0
- package/dist/utils/fileFilter.d.ts.map +1 -0
- package/dist/utils/fileFilter.js +91 -0
- package/dist/utils/fileFilter.js.map +1 -0
- package/dist/utils/gitUtils.d.ts +28 -0
- package/dist/utils/gitUtils.d.ts.map +1 -0
- package/dist/utils/gitUtils.js +81 -0
- package/dist/utils/gitUtils.js.map +1 -0
- package/dist/utils/logger.d.ts +15 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +38 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/serialization.d.ts +25 -0
- package/dist/utils/serialization.d.ts.map +1 -0
- package/dist/utils/serialization.js +53 -0
- package/dist/utils/serialization.js.map +1 -0
- package/package.json +90 -0
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scoring and Fuzzy Matching Module
|
|
3
|
+
*
|
|
4
|
+
* This module provides scoring algorithms and fuzzy matching for generating
|
|
5
|
+
* suggestions and recommendations in the validation system.
|
|
6
|
+
*
|
|
7
|
+
* Responsibilities:
|
|
8
|
+
* - Calculate overall code quality scores (0-100) based on issue severity
|
|
9
|
+
* - Generate actionable recommendations (REJECT, REVIEW, CAUTION, ACCEPT, CLEAN_UP)
|
|
10
|
+
* - Implement Jaro-Winkler similarity for fuzzy string matching
|
|
11
|
+
* - Suggest similar symbols using multiple matching strategies
|
|
12
|
+
* - Detect structural similarity (camelCase, snake_case patterns)
|
|
13
|
+
* - Extract symbol names from suggestion strings
|
|
14
|
+
*
|
|
15
|
+
* @format
|
|
16
|
+
*/
|
|
17
|
+
// ============================================================================
|
|
18
|
+
// Improved Fuzzy Matching for Suggestions
|
|
19
|
+
// ============================================================================
|
|
20
|
+
/**
|
|
21
|
+
* Calculate Jaro-Winkler similarity between two strings.
|
|
22
|
+
* Returns a value between 0 and 1, where 1 is an exact match.
|
|
23
|
+
* Better than Levenshtein for typo detection.
|
|
24
|
+
*/
|
|
25
|
+
export function jaroWinklerSimilarity(s1, s2) {
|
|
26
|
+
if (s1 === s2)
|
|
27
|
+
return 1;
|
|
28
|
+
if (s1.length === 0 || s2.length === 0)
|
|
29
|
+
return 0;
|
|
30
|
+
const matchWindow = Math.floor(Math.max(s1.length, s2.length) / 2) - 1;
|
|
31
|
+
const s1Matches = new Array(s1.length).fill(false);
|
|
32
|
+
const s2Matches = new Array(s2.length).fill(false);
|
|
33
|
+
let matches = 0;
|
|
34
|
+
let transpositions = 0;
|
|
35
|
+
// Find matches
|
|
36
|
+
for (let i = 0; i < s1.length; i++) {
|
|
37
|
+
const start = Math.max(0, i - matchWindow);
|
|
38
|
+
const end = Math.min(i + matchWindow + 1, s2.length);
|
|
39
|
+
for (let j = start; j < end; j++) {
|
|
40
|
+
if (s2Matches[j] || s1[i] !== s2[j])
|
|
41
|
+
continue;
|
|
42
|
+
s1Matches[i] = true;
|
|
43
|
+
s2Matches[j] = true;
|
|
44
|
+
matches++;
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if (matches === 0)
|
|
49
|
+
return 0;
|
|
50
|
+
// Count transpositions
|
|
51
|
+
let k = 0;
|
|
52
|
+
for (let i = 0; i < s1.length; i++) {
|
|
53
|
+
if (!s1Matches[i])
|
|
54
|
+
continue;
|
|
55
|
+
while (!s2Matches[k])
|
|
56
|
+
k++;
|
|
57
|
+
if (s1[i] !== s2[k])
|
|
58
|
+
transpositions++;
|
|
59
|
+
k++;
|
|
60
|
+
}
|
|
61
|
+
const jaro = (matches / s1.length +
|
|
62
|
+
matches / s2.length +
|
|
63
|
+
(matches - transpositions / 2) / matches) /
|
|
64
|
+
3;
|
|
65
|
+
// Calculate common prefix (up to 4 chars)
|
|
66
|
+
let prefix = 0;
|
|
67
|
+
for (let i = 0; i < Math.min(4, s1.length, s2.length); i++) {
|
|
68
|
+
if (s1[i] === s2[i])
|
|
69
|
+
prefix++;
|
|
70
|
+
else
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
// Jaro-Winkler adjustment
|
|
74
|
+
return jaro + prefix * 0.1 * (1 - jaro);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Check if two strings have similar structure (camelCase, snake_case patterns).
|
|
78
|
+
*/
|
|
79
|
+
export function hasSimilarStructure(s1, s2) {
|
|
80
|
+
// Extract word parts from camelCase or snake_case
|
|
81
|
+
const extractParts = (s) => {
|
|
82
|
+
return s
|
|
83
|
+
.replace(/([a-z])([A-Z])/g, "$1_$2")
|
|
84
|
+
.toLowerCase()
|
|
85
|
+
.split(/[_-]/)
|
|
86
|
+
.filter((p) => p.length > 0);
|
|
87
|
+
};
|
|
88
|
+
const parts1 = extractParts(s1);
|
|
89
|
+
const parts2 = extractParts(s2);
|
|
90
|
+
// Check if they share significant word parts
|
|
91
|
+
const shared = parts1.filter((p) => parts2.some((p2) => p === p2 || p.includes(p2) || p2.includes(p)));
|
|
92
|
+
return shared.length > 0;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Calculate common prefix length between two strings.
|
|
96
|
+
*/
|
|
97
|
+
function commonPrefixLength(s1, s2) {
|
|
98
|
+
let i = 0;
|
|
99
|
+
while (i < s1.length && i < s2.length && s1[i] === s2[i]) {
|
|
100
|
+
i++;
|
|
101
|
+
}
|
|
102
|
+
return i;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Suggest similar symbols using multiple matching strategies.
|
|
106
|
+
* Combines Jaro-Winkler similarity, substring matching, and structural similarity.
|
|
107
|
+
*/
|
|
108
|
+
export function suggestSimilar(target, available) {
|
|
109
|
+
if (available.length === 0) {
|
|
110
|
+
return "No similar symbols found. This may be a hallucination.";
|
|
111
|
+
}
|
|
112
|
+
const targetLower = target.toLowerCase();
|
|
113
|
+
// Score each available symbol
|
|
114
|
+
const scored = available.map((name) => {
|
|
115
|
+
const nameLower = name.toLowerCase();
|
|
116
|
+
let score = 0;
|
|
117
|
+
// Jaro-Winkler similarity (0-1, weighted heavily)
|
|
118
|
+
const jwScore = jaroWinklerSimilarity(targetLower, nameLower);
|
|
119
|
+
score += jwScore * 50;
|
|
120
|
+
// Substring matching
|
|
121
|
+
if (nameLower.includes(targetLower) || targetLower.includes(nameLower)) {
|
|
122
|
+
score += 30;
|
|
123
|
+
}
|
|
124
|
+
// Structural similarity (shared word parts)
|
|
125
|
+
if (hasSimilarStructure(target, name)) {
|
|
126
|
+
score += 20;
|
|
127
|
+
}
|
|
128
|
+
// Prefix matching bonus
|
|
129
|
+
const prefixLen = commonPrefixLength(targetLower, nameLower);
|
|
130
|
+
score += prefixLen * 5;
|
|
131
|
+
// Same length bonus (typos often preserve length)
|
|
132
|
+
if (target.length === name.length) {
|
|
133
|
+
score += 10;
|
|
134
|
+
}
|
|
135
|
+
return { name, score };
|
|
136
|
+
});
|
|
137
|
+
// Sort by score descending and take top 3
|
|
138
|
+
const topMatches = scored
|
|
139
|
+
.filter((s) => s.score > 25) // Minimum threshold
|
|
140
|
+
.sort((a, b) => b.score - a.score)
|
|
141
|
+
.slice(0, 3)
|
|
142
|
+
.map((s) => s.name);
|
|
143
|
+
if (topMatches.length > 0) {
|
|
144
|
+
return `Did you mean: ${topMatches.join(", ")}?`;
|
|
145
|
+
}
|
|
146
|
+
return "No similar symbols found. This may be a hallucination.";
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Extract similar symbol names from a suggestion string
|
|
150
|
+
*/
|
|
151
|
+
export function extractSimilarSymbols(suggestion) {
|
|
152
|
+
// Extract symbols from "Did you mean: symbol1, symbol2?" format
|
|
153
|
+
const match = suggestion.match(/Did you mean: ([^?]+)\?/);
|
|
154
|
+
if (match) {
|
|
155
|
+
return match[1].split(",").map((s) => s.trim());
|
|
156
|
+
}
|
|
157
|
+
return [];
|
|
158
|
+
}
|
|
159
|
+
// ============================================================================
|
|
160
|
+
// Scoring and Recommendations
|
|
161
|
+
// ============================================================================
|
|
162
|
+
/**
|
|
163
|
+
* Calculate overall code quality score (0-100) based on issue severity
|
|
164
|
+
*/
|
|
165
|
+
export function calculateScore(issues, deadCode = []) {
|
|
166
|
+
if (issues.length === 0 && deadCode.length === 0)
|
|
167
|
+
return 100;
|
|
168
|
+
const weights = { critical: 25, high: 15, medium: 8, low: 3, warning: 3 };
|
|
169
|
+
let deductions = 0;
|
|
170
|
+
for (const issue of issues) {
|
|
171
|
+
deductions += weights[issue.severity] || 5;
|
|
172
|
+
}
|
|
173
|
+
for (const dc of deadCode) {
|
|
174
|
+
deductions += dc.severity === "medium" ? 5 : 2;
|
|
175
|
+
}
|
|
176
|
+
return Math.max(0, 100 - deductions);
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Generate actionable recommendation based on score and issues
|
|
180
|
+
*/
|
|
181
|
+
export function generateRecommendation(score, issues, deadCode = []) {
|
|
182
|
+
const critical = issues.filter((i) => i.severity === "critical");
|
|
183
|
+
const high = issues.filter((i) => i.severity === "high");
|
|
184
|
+
const depHallucinations = issues.filter((i) => i.type === "dependencyHallucination");
|
|
185
|
+
if (depHallucinations.length > 0) {
|
|
186
|
+
return {
|
|
187
|
+
verdict: "REJECT",
|
|
188
|
+
riskLevel: "critical",
|
|
189
|
+
message: `❌ MISSING DEPENDENCIES - ${depHallucinations.length} package(s) not in manifest`,
|
|
190
|
+
action: "Install missing packages before using this code",
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
const architectureIssues = issues.filter(i => i.type === "architecturalDeviation");
|
|
194
|
+
const semanticBridgeIssues = architectureIssues.filter(i => i.message.includes("impact"));
|
|
195
|
+
if (semanticBridgeIssues.length > 0) {
|
|
196
|
+
return {
|
|
197
|
+
verdict: "CAUTION",
|
|
198
|
+
riskLevel: "high",
|
|
199
|
+
message: `🌉 SEMANTIC BRIDGE ALERT - High cross-language impact detected`,
|
|
200
|
+
action: "Review downstream consumers in the other language before proceeding",
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
if (critical.length > 0) {
|
|
204
|
+
return {
|
|
205
|
+
verdict: "REJECT",
|
|
206
|
+
riskLevel: "critical",
|
|
207
|
+
message: `❌ DO NOT USE - ${critical.length} hallucination(s): references to non-existent code`,
|
|
208
|
+
action: "Fix all critical issues before using this code",
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
if (high.length > 2) {
|
|
212
|
+
return {
|
|
213
|
+
verdict: "REVIEW",
|
|
214
|
+
riskLevel: "high",
|
|
215
|
+
message: `⚠️ HIGH RISK - ${issues.length} hallucination(s) found`,
|
|
216
|
+
action: "Manually verify each flagged symbol exists in your codebase",
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
if (issues.length > 0) {
|
|
220
|
+
return {
|
|
221
|
+
verdict: "CAUTION",
|
|
222
|
+
riskLevel: "medium",
|
|
223
|
+
message: `⚡ ${issues.length} potential hallucination(s) detected`,
|
|
224
|
+
action: "Verify flagged symbols exist in your codebase",
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
if (deadCode.length > 0) {
|
|
228
|
+
return {
|
|
229
|
+
verdict: "CLEAN_UP",
|
|
230
|
+
riskLevel: "low",
|
|
231
|
+
message: `🧹 ${deadCode.length} dead code issue(s) - unused exports/files`,
|
|
232
|
+
action: "Consider removing unused code to reduce maintenance burden",
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
return {
|
|
236
|
+
verdict: "ACCEPT",
|
|
237
|
+
riskLevel: "low",
|
|
238
|
+
message: "✅ LOOKS GOOD - No hallucinations or dead code detected",
|
|
239
|
+
action: "Code appears consistent with your project",
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
//# sourceMappingURL=scoring.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scoring.js","sourceRoot":"","sources":["../../../src/tools/validation/scoring.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Type Definitions for Validation System
|
|
3
|
+
*
|
|
4
|
+
* This module contains all shared interfaces used across the validation system.
|
|
5
|
+
* These types define the data structures for AST extraction, validation results,
|
|
6
|
+
* and project analysis.
|
|
7
|
+
*
|
|
8
|
+
* @format
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Represents a symbol definition found in code (function, class, method, etc.)
|
|
12
|
+
*/
|
|
13
|
+
export interface ASTSymbol {
|
|
14
|
+
name: string;
|
|
15
|
+
type: "function" | "class" | "method" | "variable" | "import" | "decorator" | "interface" | "type" | "route";
|
|
16
|
+
file: string;
|
|
17
|
+
line: number;
|
|
18
|
+
column: number;
|
|
19
|
+
params?: string[];
|
|
20
|
+
paramCount?: number;
|
|
21
|
+
returnType?: string;
|
|
22
|
+
scope?: string;
|
|
23
|
+
isAsync?: boolean;
|
|
24
|
+
isExported?: boolean;
|
|
25
|
+
decorators?: string[];
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Represents a symbol usage in code (function call, method call, etc.)
|
|
29
|
+
*/
|
|
30
|
+
export interface ASTUsage {
|
|
31
|
+
name: string;
|
|
32
|
+
type: "call" | "methodCall" | "instantiation" | "attribute" | "reference" | "apiCall";
|
|
33
|
+
object?: string;
|
|
34
|
+
line: number;
|
|
35
|
+
column: number;
|
|
36
|
+
code: string;
|
|
37
|
+
argCount?: number;
|
|
38
|
+
isExternal?: boolean;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Represents an import statement in code
|
|
42
|
+
*/
|
|
43
|
+
export interface ASTImport {
|
|
44
|
+
module: string;
|
|
45
|
+
names: Array<{
|
|
46
|
+
imported: string;
|
|
47
|
+
local: string;
|
|
48
|
+
}>;
|
|
49
|
+
isExternal: boolean;
|
|
50
|
+
line: number;
|
|
51
|
+
isTypeOnly?: boolean;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Represents a type reference found in code
|
|
55
|
+
* Used for detecting same-file type usage (not just imports)
|
|
56
|
+
*/
|
|
57
|
+
export interface ASTTypeReference {
|
|
58
|
+
name: string;
|
|
59
|
+
context: "typeAnnotation" | "genericParam" | "extends" | "implements" | "returnType" | "propertyType";
|
|
60
|
+
line: number;
|
|
61
|
+
}
|
|
62
|
+
export type IssueSeverity = "critical" | "high" | "medium" | "low" | "warning";
|
|
63
|
+
/**
|
|
64
|
+
* Represents a validation issue found in code (hallucination, wrong param count, etc.)
|
|
65
|
+
*/
|
|
66
|
+
export interface ValidationIssue {
|
|
67
|
+
type: "nonExistentFunction" | "nonExistentClass" | "nonExistentMethod" | "wrongParamCount" | "nonExistentImport" | "dependencyHallucination" | "undefinedVariable" | "unusedImport" | "typeOnlyImportMisuse" | "architecturalDeviation" | "missingDependency";
|
|
68
|
+
severity: IssueSeverity;
|
|
69
|
+
message: string;
|
|
70
|
+
line: number;
|
|
71
|
+
file: string;
|
|
72
|
+
code: string;
|
|
73
|
+
suggestion: string;
|
|
74
|
+
confidence?: number;
|
|
75
|
+
reasoning?: string;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Represents a dead code issue (unused export, orphaned file, etc.)
|
|
79
|
+
*/
|
|
80
|
+
export interface DeadCodeIssue {
|
|
81
|
+
type: "unusedExport" | "orphanedFile" | "unusedFunction";
|
|
82
|
+
severity: "medium" | "low" | "warning";
|
|
83
|
+
name: string;
|
|
84
|
+
file: string;
|
|
85
|
+
message: string;
|
|
86
|
+
line?: number;
|
|
87
|
+
suggestion?: string;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Represents a symbol in the project symbol table
|
|
91
|
+
* Used for validation and dead code detection
|
|
92
|
+
*/
|
|
93
|
+
export interface ProjectSymbol {
|
|
94
|
+
name: string;
|
|
95
|
+
type: "function" | "class" | "method" | "variable" | "import" | "decorator";
|
|
96
|
+
file: string;
|
|
97
|
+
line?: number;
|
|
98
|
+
params?: string[];
|
|
99
|
+
paramCount?: number;
|
|
100
|
+
scope?: string;
|
|
101
|
+
isAsync?: boolean;
|
|
102
|
+
decorators?: string[];
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Represents dependencies loaded from manifest files
|
|
106
|
+
* (package.json, requirements.txt, pyproject.toml)
|
|
107
|
+
*/
|
|
108
|
+
export interface ManifestDependencies {
|
|
109
|
+
dependencies: Set<string>;
|
|
110
|
+
devDependencies: Set<string>;
|
|
111
|
+
all: Set<string>;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Represents the current user session context (Augment Secret #3)
|
|
115
|
+
*/
|
|
116
|
+
export interface SessionContext {
|
|
117
|
+
recentlyEditedFiles: string[];
|
|
118
|
+
activeBranch?: string;
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/tools/validation/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Type Definitions for Validation System
|
|
3
|
+
*
|
|
4
|
+
* This module contains all shared interfaces used across the validation system.
|
|
5
|
+
* These types define the data structures for AST extraction, validation results,
|
|
6
|
+
* and project analysis.
|
|
7
|
+
*
|
|
8
|
+
* @format
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/tools/validation/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AST-Based Unused Local Detection
|
|
3
|
+
*
|
|
4
|
+
* This module provides superior dead code detection using AST parsing instead of regex.
|
|
5
|
+
* It properly handles:
|
|
6
|
+
* - All naming conventions (camelCase, PascalCase, UPPER_SNAKE_CASE)
|
|
7
|
+
* - Both JavaScript/TypeScript AND Python
|
|
8
|
+
* - Exported vs non-exported symbols
|
|
9
|
+
* - Local function declarations, const/let/var, and Python def
|
|
10
|
+
* - React hooks and framework patterns
|
|
11
|
+
*
|
|
12
|
+
* @format
|
|
13
|
+
*/
|
|
14
|
+
import type { DeadCodeIssue } from "./types.js";
|
|
15
|
+
/**
|
|
16
|
+
* Detect unused local functions and variables within a single file using AST parsing.
|
|
17
|
+
* This is the AST-based replacement for the regex-based detectUnusedLocals.
|
|
18
|
+
*
|
|
19
|
+
* Advantages over regex approach:
|
|
20
|
+
* - Handles all naming conventions (camelCase, PascalCase, UPPER_SNAKE_CASE)
|
|
21
|
+
* - Properly distinguishes exported vs non-exported symbols
|
|
22
|
+
* - Accurate line numbers from AST
|
|
23
|
+
* - Works for both JS/TS and Python with proper language support
|
|
24
|
+
* - Understands scope (won't flag parameters as unused when they're used in function body)
|
|
25
|
+
*
|
|
26
|
+
* @param code - The source code string to analyze
|
|
27
|
+
* @param filePath - Path to the file (used to determine language from extension)
|
|
28
|
+
* @returns Array of dead code issues found
|
|
29
|
+
*/
|
|
30
|
+
export declare function detectUnusedLocalsAST(code: string, filePath: string): DeadCodeIssue[];
|
|
31
|
+
/**
|
|
32
|
+
* Backwards-compatible wrapper that uses AST-based detection
|
|
33
|
+
* This replaces the old regex-based detectUnusedLocals
|
|
34
|
+
*/
|
|
35
|
+
export declare function detectUnusedLocals(code: string, filePath: string): DeadCodeIssue[];
|
|
36
|
+
//# sourceMappingURL=unusedLocals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unusedLocals.d.ts","sourceRoot":"","sources":["../../../src/tools/validation/unusedLocals.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAUhD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE,CAsIrF;AAiMD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE,CAGlF"}
|