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.
Files changed (335) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +348 -0
  3. package/dist/agent/agentTools.d.ts +26 -0
  4. package/dist/agent/agentTools.d.ts.map +1 -0
  5. package/dist/agent/agentTools.js +699 -0
  6. package/dist/agent/agentTools.js.map +1 -0
  7. package/dist/agent/autoValidator.d.ts +110 -0
  8. package/dist/agent/autoValidator.d.ts.map +1 -0
  9. package/dist/agent/autoValidator.js +964 -0
  10. package/dist/agent/autoValidator.js.map +1 -0
  11. package/dist/agent/fileWatcher.d.ts +28 -0
  12. package/dist/agent/fileWatcher.d.ts.map +1 -0
  13. package/dist/agent/fileWatcher.js +88 -0
  14. package/dist/agent/fileWatcher.js.map +1 -0
  15. package/dist/agent/guardianPersistence.d.ts +98 -0
  16. package/dist/agent/guardianPersistence.d.ts.map +1 -0
  17. package/dist/agent/guardianPersistence.js +296 -0
  18. package/dist/agent/guardianPersistence.js.map +1 -0
  19. package/dist/agent/mcpNotifications.d.ts +38 -0
  20. package/dist/agent/mcpNotifications.d.ts.map +1 -0
  21. package/dist/agent/mcpNotifications.js +81 -0
  22. package/dist/agent/mcpNotifications.js.map +1 -0
  23. package/dist/analyzers/aiPatterns.d.ts +16 -0
  24. package/dist/analyzers/aiPatterns.d.ts.map +1 -0
  25. package/dist/analyzers/aiPatterns.js +103 -0
  26. package/dist/analyzers/aiPatterns.js.map +1 -0
  27. package/dist/analyzers/antiPatterns.d.ts +60 -0
  28. package/dist/analyzers/antiPatterns.d.ts.map +1 -0
  29. package/dist/analyzers/antiPatterns.js +198 -0
  30. package/dist/analyzers/antiPatterns.js.map +1 -0
  31. package/dist/analyzers/builtinTypes.d.ts +18 -0
  32. package/dist/analyzers/builtinTypes.d.ts.map +1 -0
  33. package/dist/analyzers/builtinTypes.js +1275 -0
  34. package/dist/analyzers/builtinTypes.js.map +1 -0
  35. package/dist/analyzers/complexity.d.ts +14 -0
  36. package/dist/analyzers/complexity.d.ts.map +1 -0
  37. package/dist/analyzers/complexity.js +610 -0
  38. package/dist/analyzers/complexity.js.map +1 -0
  39. package/dist/analyzers/findingVerifier.d.ts +59 -0
  40. package/dist/analyzers/findingVerifier.d.ts.map +1 -0
  41. package/dist/analyzers/findingVerifier.js +1169 -0
  42. package/dist/analyzers/findingVerifier.js.map +1 -0
  43. package/dist/analyzers/impactAnalyzer.d.ts +53 -0
  44. package/dist/analyzers/impactAnalyzer.d.ts.map +1 -0
  45. package/dist/analyzers/impactAnalyzer.js +152 -0
  46. package/dist/analyzers/impactAnalyzer.js.map +1 -0
  47. package/dist/analyzers/languageDetector.d.ts +48 -0
  48. package/dist/analyzers/languageDetector.d.ts.map +1 -0
  49. package/dist/analyzers/languageDetector.js +404 -0
  50. package/dist/analyzers/languageDetector.js.map +1 -0
  51. package/dist/analyzers/parsers/incrementalParser.d.ts +53 -0
  52. package/dist/analyzers/parsers/incrementalParser.d.ts.map +1 -0
  53. package/dist/analyzers/parsers/incrementalParser.js +193 -0
  54. package/dist/analyzers/parsers/incrementalParser.js.map +1 -0
  55. package/dist/analyzers/parsers/scopeResolver.d.ts +92 -0
  56. package/dist/analyzers/parsers/scopeResolver.d.ts.map +1 -0
  57. package/dist/analyzers/parsers/scopeResolver.js +324 -0
  58. package/dist/analyzers/parsers/scopeResolver.js.map +1 -0
  59. package/dist/analyzers/parsers/semanticIndex.d.ts +127 -0
  60. package/dist/analyzers/parsers/semanticIndex.d.ts.map +1 -0
  61. package/dist/analyzers/parsers/semanticIndex.js +429 -0
  62. package/dist/analyzers/parsers/semanticIndex.js.map +1 -0
  63. package/dist/analyzers/parsers/sessionDiffAnalyzer.d.ts +42 -0
  64. package/dist/analyzers/parsers/sessionDiffAnalyzer.d.ts.map +1 -0
  65. package/dist/analyzers/parsers/sessionDiffAnalyzer.js +233 -0
  66. package/dist/analyzers/parsers/sessionDiffAnalyzer.js.map +1 -0
  67. package/dist/analyzers/parsers/treeSitterParser.d.ts +76 -0
  68. package/dist/analyzers/parsers/treeSitterParser.d.ts.map +1 -0
  69. package/dist/analyzers/parsers/treeSitterParser.js +709 -0
  70. package/dist/analyzers/parsers/treeSitterParser.js.map +1 -0
  71. package/dist/analyzers/relevanceScorer.d.ts +43 -0
  72. package/dist/analyzers/relevanceScorer.d.ts.map +1 -0
  73. package/dist/analyzers/relevanceScorer.js +200 -0
  74. package/dist/analyzers/relevanceScorer.js.map +1 -0
  75. package/dist/analyzers/standardLibrary.d.ts +22 -0
  76. package/dist/analyzers/standardLibrary.d.ts.map +1 -0
  77. package/dist/analyzers/standardLibrary.js +211 -0
  78. package/dist/analyzers/standardLibrary.js.map +1 -0
  79. package/dist/analyzers/symbolGraph.d.ts +30 -0
  80. package/dist/analyzers/symbolGraph.d.ts.map +1 -0
  81. package/dist/analyzers/symbolGraph.js +380 -0
  82. package/dist/analyzers/symbolGraph.js.map +1 -0
  83. package/dist/analyzers/symbolTable.d.ts +18 -0
  84. package/dist/analyzers/symbolTable.d.ts.map +1 -0
  85. package/dist/analyzers/symbolTable.js +176 -0
  86. package/dist/analyzers/symbolTable.js.map +1 -0
  87. package/dist/analyzers/typeChecker.d.ts +13 -0
  88. package/dist/analyzers/typeChecker.d.ts.map +1 -0
  89. package/dist/analyzers/typeChecker.js +580 -0
  90. package/dist/analyzers/typeChecker.js.map +1 -0
  91. package/dist/analyzers/usagePatterns.d.ts +42 -0
  92. package/dist/analyzers/usagePatterns.d.ts.map +1 -0
  93. package/dist/analyzers/usagePatterns.js +75 -0
  94. package/dist/analyzers/usagePatterns.js.map +1 -0
  95. package/dist/api-contract/context/backend.d.ts +19 -0
  96. package/dist/api-contract/context/backend.d.ts.map +1 -0
  97. package/dist/api-contract/context/backend.js +64 -0
  98. package/dist/api-contract/context/backend.js.map +1 -0
  99. package/dist/api-contract/context/contract.d.ts +34 -0
  100. package/dist/api-contract/context/contract.d.ts.map +1 -0
  101. package/dist/api-contract/context/contract.js +306 -0
  102. package/dist/api-contract/context/contract.js.map +1 -0
  103. package/dist/api-contract/context/frontend.d.ts +19 -0
  104. package/dist/api-contract/context/frontend.d.ts.map +1 -0
  105. package/dist/api-contract/context/frontend.js +64 -0
  106. package/dist/api-contract/context/frontend.js.map +1 -0
  107. package/dist/api-contract/detector.d.ts +28 -0
  108. package/dist/api-contract/detector.d.ts.map +1 -0
  109. package/dist/api-contract/detector.js +393 -0
  110. package/dist/api-contract/detector.js.map +1 -0
  111. package/dist/api-contract/extractors/python.d.ts +32 -0
  112. package/dist/api-contract/extractors/python.d.ts.map +1 -0
  113. package/dist/api-contract/extractors/python.js +521 -0
  114. package/dist/api-contract/extractors/python.js.map +1 -0
  115. package/dist/api-contract/extractors/pythonAstUtils.d.ts +44 -0
  116. package/dist/api-contract/extractors/pythonAstUtils.d.ts.map +1 -0
  117. package/dist/api-contract/extractors/pythonAstUtils.js +489 -0
  118. package/dist/api-contract/extractors/pythonAstUtils.js.map +1 -0
  119. package/dist/api-contract/extractors/tsAstUtils.d.ts +47 -0
  120. package/dist/api-contract/extractors/tsAstUtils.d.ts.map +1 -0
  121. package/dist/api-contract/extractors/tsAstUtils.js +173 -0
  122. package/dist/api-contract/extractors/tsAstUtils.js.map +1 -0
  123. package/dist/api-contract/extractors/typescript.d.ts +32 -0
  124. package/dist/api-contract/extractors/typescript.d.ts.map +1 -0
  125. package/dist/api-contract/extractors/typescript.js +666 -0
  126. package/dist/api-contract/extractors/typescript.js.map +1 -0
  127. package/dist/api-contract/index.d.ts +104 -0
  128. package/dist/api-contract/index.d.ts.map +1 -0
  129. package/dist/api-contract/index.js +232 -0
  130. package/dist/api-contract/index.js.map +1 -0
  131. package/dist/api-contract/types.d.ts +151 -0
  132. package/dist/api-contract/types.d.ts.map +1 -0
  133. package/dist/api-contract/types.js +19 -0
  134. package/dist/api-contract/types.js.map +1 -0
  135. package/dist/api-contract/validators/endpoint.d.ts +21 -0
  136. package/dist/api-contract/validators/endpoint.d.ts.map +1 -0
  137. package/dist/api-contract/validators/endpoint.js +224 -0
  138. package/dist/api-contract/validators/endpoint.js.map +1 -0
  139. package/dist/api-contract/validators/index.d.ts +40 -0
  140. package/dist/api-contract/validators/index.d.ts.map +1 -0
  141. package/dist/api-contract/validators/index.js +875 -0
  142. package/dist/api-contract/validators/index.js.map +1 -0
  143. package/dist/api-contract/validators/parameter.d.ts +17 -0
  144. package/dist/api-contract/validators/parameter.d.ts.map +1 -0
  145. package/dist/api-contract/validators/parameter.js +250 -0
  146. package/dist/api-contract/validators/parameter.js.map +1 -0
  147. package/dist/api-contract/validators/type.d.ts +38 -0
  148. package/dist/api-contract/validators/type.d.ts.map +1 -0
  149. package/dist/api-contract/validators/type.js +244 -0
  150. package/dist/api-contract/validators/type.js.map +1 -0
  151. package/dist/context/apiContract/complexTypeSupport.d.ts +83 -0
  152. package/dist/context/apiContract/complexTypeSupport.d.ts.map +1 -0
  153. package/dist/context/apiContract/complexTypeSupport.js +665 -0
  154. package/dist/context/apiContract/complexTypeSupport.js.map +1 -0
  155. package/dist/context/apiContract/graphqlSupport.d.ts +105 -0
  156. package/dist/context/apiContract/graphqlSupport.d.ts.map +1 -0
  157. package/dist/context/apiContract/graphqlSupport.js +671 -0
  158. package/dist/context/apiContract/graphqlSupport.js.map +1 -0
  159. package/dist/context/apiContract/index.d.ts +14 -0
  160. package/dist/context/apiContract/index.d.ts.map +1 -0
  161. package/dist/context/apiContract/index.js +17 -0
  162. package/dist/context/apiContract/index.js.map +1 -0
  163. package/dist/context/apiContract/webSocketSupport.d.ts +104 -0
  164. package/dist/context/apiContract/webSocketSupport.d.ts.map +1 -0
  165. package/dist/context/apiContract/webSocketSupport.js +465 -0
  166. package/dist/context/apiContract/webSocketSupport.js.map +1 -0
  167. package/dist/context/apiContractContext.d.ts +15 -0
  168. package/dist/context/apiContractContext.d.ts.map +1 -0
  169. package/dist/context/apiContractContext.js +979 -0
  170. package/dist/context/apiContractContext.js.map +1 -0
  171. package/dist/context/apiContractExtraction.d.ts +52 -0
  172. package/dist/context/apiContractExtraction.d.ts.map +1 -0
  173. package/dist/context/apiContractExtraction.js +438 -0
  174. package/dist/context/apiContractExtraction.js.map +1 -0
  175. package/dist/context/contextLineage.d.ts +79 -0
  176. package/dist/context/contextLineage.d.ts.map +1 -0
  177. package/dist/context/contextLineage.js +259 -0
  178. package/dist/context/contextLineage.js.map +1 -0
  179. package/dist/context/contextOrchestrator.d.ts +57 -0
  180. package/dist/context/contextOrchestrator.d.ts.map +1 -0
  181. package/dist/context/contextOrchestrator.js +162 -0
  182. package/dist/context/contextOrchestrator.js.map +1 -0
  183. package/dist/context/intentTracker.d.ts +73 -0
  184. package/dist/context/intentTracker.d.ts.map +1 -0
  185. package/dist/context/intentTracker.js +168 -0
  186. package/dist/context/intentTracker.js.map +1 -0
  187. package/dist/context/projectContext.d.ts +219 -0
  188. package/dist/context/projectContext.d.ts.map +1 -0
  189. package/dist/context/projectContext.js +1984 -0
  190. package/dist/context/projectContext.js.map +1 -0
  191. package/dist/prompts/index.d.ts +17 -0
  192. package/dist/prompts/index.d.ts.map +1 -0
  193. package/dist/prompts/index.js +260 -0
  194. package/dist/prompts/index.js.map +1 -0
  195. package/dist/prompts/library.d.ts +51 -0
  196. package/dist/prompts/library.d.ts.map +1 -0
  197. package/dist/prompts/library.js +65 -0
  198. package/dist/prompts/library.js.map +1 -0
  199. package/dist/prompts/templates.d.ts +44 -0
  200. package/dist/prompts/templates.d.ts.map +1 -0
  201. package/dist/prompts/templates.js +97 -0
  202. package/dist/prompts/templates.js.map +1 -0
  203. package/dist/queue/jobPersistence.d.ts +46 -0
  204. package/dist/queue/jobPersistence.d.ts.map +1 -0
  205. package/dist/queue/jobPersistence.js +158 -0
  206. package/dist/queue/jobPersistence.js.map +1 -0
  207. package/dist/queue/jobQueue.d.ts +116 -0
  208. package/dist/queue/jobQueue.d.ts.map +1 -0
  209. package/dist/queue/jobQueue.js +275 -0
  210. package/dist/queue/jobQueue.js.map +1 -0
  211. package/dist/queue/validationJob.d.ts +69 -0
  212. package/dist/queue/validationJob.d.ts.map +1 -0
  213. package/dist/queue/validationJob.js +435 -0
  214. package/dist/queue/validationJob.js.map +1 -0
  215. package/dist/resources/index.d.ts +15 -0
  216. package/dist/resources/index.d.ts.map +1 -0
  217. package/dist/resources/index.js +328 -0
  218. package/dist/resources/index.js.map +1 -0
  219. package/dist/resources/validationReportStore.d.ts +170 -0
  220. package/dist/resources/validationReportStore.d.ts.map +1 -0
  221. package/dist/resources/validationReportStore.js +515 -0
  222. package/dist/resources/validationReportStore.js.map +1 -0
  223. package/dist/server.d.ts +12 -0
  224. package/dist/server.d.ts.map +1 -0
  225. package/dist/server.js +102 -0
  226. package/dist/server.js.map +1 -0
  227. package/dist/tools/asyncValidation.d.ts +19 -0
  228. package/dist/tools/asyncValidation.d.ts.map +1 -0
  229. package/dist/tools/asyncValidation.js +346 -0
  230. package/dist/tools/asyncValidation.js.map +1 -0
  231. package/dist/tools/buildContext.d.ts +17 -0
  232. package/dist/tools/buildContext.d.ts.map +1 -0
  233. package/dist/tools/buildContext.js +188 -0
  234. package/dist/tools/buildContext.js.map +1 -0
  235. package/dist/tools/getDependencyGraph.d.ts +16 -0
  236. package/dist/tools/getDependencyGraph.d.ts.map +1 -0
  237. package/dist/tools/getDependencyGraph.js +436 -0
  238. package/dist/tools/getDependencyGraph.js.map +1 -0
  239. package/dist/tools/incrementalValidation.d.ts +71 -0
  240. package/dist/tools/incrementalValidation.d.ts.map +1 -0
  241. package/dist/tools/incrementalValidation.js +203 -0
  242. package/dist/tools/incrementalValidation.js.map +1 -0
  243. package/dist/tools/index.d.ts +24 -0
  244. package/dist/tools/index.d.ts.map +1 -0
  245. package/dist/tools/index.js +106 -0
  246. package/dist/tools/index.js.map +1 -0
  247. package/dist/tools/validateCode.d.ts +17 -0
  248. package/dist/tools/validateCode.d.ts.map +1 -0
  249. package/dist/tools/validateCode.js +368 -0
  250. package/dist/tools/validateCode.js.map +1 -0
  251. package/dist/tools/validateCodeLite.d.ts +2 -0
  252. package/dist/tools/validateCodeLite.d.ts.map +1 -0
  253. package/dist/tools/validateCodeLite.js +2 -0
  254. package/dist/tools/validateCodeLite.js.map +1 -0
  255. package/dist/tools/validation/builtins.d.ts +92 -0
  256. package/dist/tools/validation/builtins.d.ts.map +1 -0
  257. package/dist/tools/validation/builtins.js +2184 -0
  258. package/dist/tools/validation/builtins.js.map +1 -0
  259. package/dist/tools/validation/contextualNaming.d.ts +99 -0
  260. package/dist/tools/validation/contextualNaming.d.ts.map +1 -0
  261. package/dist/tools/validation/contextualNaming.js +959 -0
  262. package/dist/tools/validation/contextualNaming.js.map +1 -0
  263. package/dist/tools/validation/deadCode.d.ts +115 -0
  264. package/dist/tools/validation/deadCode.d.ts.map +1 -0
  265. package/dist/tools/validation/deadCode.js +861 -0
  266. package/dist/tools/validation/deadCode.js.map +1 -0
  267. package/dist/tools/validation/extractors/index.d.ts +131 -0
  268. package/dist/tools/validation/extractors/index.d.ts.map +1 -0
  269. package/dist/tools/validation/extractors/index.js +233 -0
  270. package/dist/tools/validation/extractors/index.js.map +1 -0
  271. package/dist/tools/validation/extractors/javascript.d.ts +73 -0
  272. package/dist/tools/validation/extractors/javascript.d.ts.map +1 -0
  273. package/dist/tools/validation/extractors/javascript.js +1841 -0
  274. package/dist/tools/validation/extractors/javascript.js.map +1 -0
  275. package/dist/tools/validation/extractors/python.d.ts +93 -0
  276. package/dist/tools/validation/extractors/python.d.ts.map +1 -0
  277. package/dist/tools/validation/extractors/python.js +799 -0
  278. package/dist/tools/validation/extractors/python.js.map +1 -0
  279. package/dist/tools/validation/manifest.d.ts +45 -0
  280. package/dist/tools/validation/manifest.d.ts.map +1 -0
  281. package/dist/tools/validation/manifest.js +719 -0
  282. package/dist/tools/validation/manifest.js.map +1 -0
  283. package/dist/tools/validation/parser.d.ts +58 -0
  284. package/dist/tools/validation/parser.d.ts.map +1 -0
  285. package/dist/tools/validation/parser.js +232 -0
  286. package/dist/tools/validation/parser.js.map +1 -0
  287. package/dist/tools/validation/registry.d.ts +15 -0
  288. package/dist/tools/validation/registry.d.ts.map +1 -0
  289. package/dist/tools/validation/registry.js +169 -0
  290. package/dist/tools/validation/registry.js.map +1 -0
  291. package/dist/tools/validation/scoring.d.ts +54 -0
  292. package/dist/tools/validation/scoring.d.ts.map +1 -0
  293. package/dist/tools/validation/scoring.js +242 -0
  294. package/dist/tools/validation/scoring.js.map +1 -0
  295. package/dist/tools/validation/types.d.ts +120 -0
  296. package/dist/tools/validation/types.d.ts.map +1 -0
  297. package/dist/tools/validation/types.js +11 -0
  298. package/dist/tools/validation/types.js.map +1 -0
  299. package/dist/tools/validation/unusedLocals.d.ts +36 -0
  300. package/dist/tools/validation/unusedLocals.d.ts.map +1 -0
  301. package/dist/tools/validation/unusedLocals.js +333 -0
  302. package/dist/tools/validation/unusedLocals.js.map +1 -0
  303. package/dist/tools/validation/validation.d.ts +98 -0
  304. package/dist/tools/validation/validation.d.ts.map +1 -0
  305. package/dist/tools/validation/validation.js +1837 -0
  306. package/dist/tools/validation/validation.js.map +1 -0
  307. package/dist/types/codeGraph.d.ts +163 -0
  308. package/dist/types/codeGraph.d.ts.map +1 -0
  309. package/dist/types/codeGraph.js +9 -0
  310. package/dist/types/codeGraph.js.map +1 -0
  311. package/dist/types/symbolGraph.d.ts +68 -0
  312. package/dist/types/symbolGraph.d.ts.map +1 -0
  313. package/dist/types/symbolGraph.js +10 -0
  314. package/dist/types/symbolGraph.js.map +1 -0
  315. package/dist/types/tools.d.ts +43 -0
  316. package/dist/types/tools.d.ts.map +1 -0
  317. package/dist/types/tools.js +7 -0
  318. package/dist/types/tools.js.map +1 -0
  319. package/dist/utils/fileFilter.d.ts +37 -0
  320. package/dist/utils/fileFilter.d.ts.map +1 -0
  321. package/dist/utils/fileFilter.js +91 -0
  322. package/dist/utils/fileFilter.js.map +1 -0
  323. package/dist/utils/gitUtils.d.ts +28 -0
  324. package/dist/utils/gitUtils.d.ts.map +1 -0
  325. package/dist/utils/gitUtils.js +81 -0
  326. package/dist/utils/gitUtils.js.map +1 -0
  327. package/dist/utils/logger.d.ts +15 -0
  328. package/dist/utils/logger.d.ts.map +1 -0
  329. package/dist/utils/logger.js +38 -0
  330. package/dist/utils/logger.js.map +1 -0
  331. package/dist/utils/serialization.d.ts +25 -0
  332. package/dist/utils/serialization.d.ts.map +1 -0
  333. package/dist/utils/serialization.js +53 -0
  334. package/dist/utils/serialization.js.map +1 -0
  335. 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"}