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,368 @@
1
+ /**
2
+ * Validate Code Tool - Unified AST-Based Validator
3
+ *
4
+ * THE UNIFIED AI CODE VALIDATOR
5
+ *
6
+ * Catches THREE types of AI mistakes:
7
+ * 1. HALLUCINATIONS - References to things that don't exist
8
+ * 2. DEPENDENCY HALLUCINATIONS - Imports from packages not in manifest
9
+ * 3. DEAD CODE - Code that nothing uses (AI over-generation)
10
+ *
11
+ * Uses Tree-sitter AST parsing for accurate, production-grade validation.
12
+ *
13
+ * @format
14
+ */
15
+ import { logger } from "../utils/logger.js";
16
+ import { validationReportStore } from "../resources/validationReportStore.js";
17
+ import { incrementalValidation } from "./incrementalValidation.js";
18
+ import { orchestrateContext, explainContextQuality, } from "../context/contextOrchestrator.js";
19
+ // Import validation modules
20
+ import { extractUsagesAST, extractImportsASTWithOptions, } from "./validation/extractors/index.js";
21
+ import { loadManifestDependencies, loadPythonModuleExports, } from "./validation/manifest.js";
22
+ import { validateManifest, validateSymbols, buildSymbolTable, validateUsagePatterns, getLineFromCode, } from "./validation/validation.js";
23
+ import { extractSymbolsAST, extractTypeReferencesAST } from "./validation/extractors/index.js";
24
+ import { impactAnalyzer } from "../analyzers/impactAnalyzer.js";
25
+ import { detectDeadCode } from "./validation/deadCode.js";
26
+ import { calculateScore, generateRecommendation, } from "./validation/scoring.js";
27
+ import { verifyFindingsAutomatically, getConfirmedFindings, } from "../analyzers/findingVerifier.js";
28
+ import { PROMPT_PATTERNS, VALIDATION_CONSTRAINTS } from "../prompts/library.js";
29
+ // ============================================================================
30
+ // Tool Definition
31
+ // ============================================================================
32
+ export const validateCodeTool = {
33
+ definition: {
34
+ name: "validate_code",
35
+ description: "Validate code for hallucinations, missing dependencies, and dead code in one pass. Smart filtering ensures only relevant project symbols are checked. ALWAYS call after generating code.",
36
+ inputSchema: {
37
+ type: "object",
38
+ properties: {
39
+ projectPath: {
40
+ type: "string",
41
+ description: 'Path to your project (e.g., ".", "src", "backend")',
42
+ },
43
+ newCode: {
44
+ type: "string",
45
+ description: "The AI-generated code to validate (optional - omit for dead code scan only)",
46
+ },
47
+ language: {
48
+ type: "string",
49
+ enum: ["javascript", "typescript", "python", "go"],
50
+ description: "Programming language",
51
+ },
52
+ strictMode: {
53
+ type: "boolean",
54
+ description: "ONLY use true if explicitly requested. When true, flags ALL unresolved symbols including edge cases. Default is false which catches likely hallucinations without excessive noise.",
55
+ default: false,
56
+ },
57
+ useSmartContext: {
58
+ type: "boolean",
59
+ description: "Use smart context selection for faster validation (default: true)",
60
+ },
61
+ sessionId: {
62
+ type: "string",
63
+ description: "Optional session ID for incremental validation (reuses previous results)",
64
+ },
65
+ recentlyEditedFiles: {
66
+ type: "array",
67
+ items: { type: "string" },
68
+ description: "Optional list of files edited in this session to boost relevance",
69
+ },
70
+ },
71
+ required: ["projectPath", "language"],
72
+ },
73
+ },
74
+ async handler(args) {
75
+ const startTime = Date.now();
76
+ const { projectPath, newCode, language, strictMode = false, useSmartContext = true, sessionId, recentlyEditedFiles = [], } = args;
77
+ logger.info(`Validating code against project: ${projectPath} (strictMode: ${strictMode})`);
78
+ try {
79
+ const virtualFilePath = sessionId ? `session:${sessionId}` : "new_code_validation";
80
+ // Step 0: Parse imports first (needed for context orchestration)
81
+ let imports = [];
82
+ let importedSymbols = [];
83
+ if (newCode) {
84
+ imports = extractImportsASTWithOptions(newCode, language, {
85
+ filePath: virtualFilePath,
86
+ cacheKey: virtualFilePath,
87
+ });
88
+ importedSymbols = imports
89
+ .flatMap((imp) => [...imp.names.map((n) => n.local)])
90
+ .filter(Boolean);
91
+ }
92
+ // Step 1: Orchestrate all context features to work together
93
+ const orchestration = await orchestrateContext({
94
+ projectPath,
95
+ language,
96
+ newCode,
97
+ imports: importedSymbols,
98
+ useSmartContext,
99
+ sessionId,
100
+ recentlyEditedFiles,
101
+ });
102
+ const { projectContext, lineageContext, relevantSymbols, contextQuality, } = orchestration;
103
+ logger.info(`Context quality: ${contextQuality} - ${explainContextQuality(contextQuality)}`);
104
+ // Step 2: Check if we can use incremental validation
105
+ let incrementalResult = { canUse: false };
106
+ if (sessionId && newCode && orchestration.useIncremental) {
107
+ incrementalResult = incrementalValidation.canUseIncremental(sessionId, newCode);
108
+ if (incrementalResult.canUse) {
109
+ logger.info(`Using incremental validation (session: ${sessionId})`);
110
+ }
111
+ }
112
+ // Step 3: Load manifest dependencies (package.json / requirements.txt)
113
+ const manifest = await loadManifestDependencies(projectPath, language);
114
+ // Step 4: Load Python __all__ exports for module validation
115
+ let pythonExports = new Map();
116
+ if (language === "python") {
117
+ pythonExports = await loadPythonModuleExports(projectPath);
118
+ }
119
+ // Step 5: Build symbol table (filtered by smart context if available)
120
+ const symbolTable = buildSymbolTable(projectContext, relevantSymbols.length > 0 ? relevantSymbols : undefined);
121
+ // Step 5: Run comprehensive validation if new code provided
122
+ const issues = [];
123
+ let usedSymbols = [];
124
+ if (newCode) {
125
+ // Tier 0: Check manifest dependencies
126
+ const manifestIssues = await validateManifest(imports, manifest, newCode, language);
127
+ issues.push(...manifestIssues);
128
+ // Tier 1: Validate symbols (hallucinations)
129
+ // Don't skip imported symbols in extraction - we'll filter them intelligently in validation
130
+ usedSymbols = extractUsagesAST(newCode, language, [], {
131
+ filePath: virtualFilePath,
132
+ cacheKey: virtualFilePath,
133
+ });
134
+ const missingPackages = new Set();
135
+ for (const issue of manifestIssues) {
136
+ if (issue.type === "dependencyHallucination") {
137
+ const match = issue.message.match(/Package '([^']+)'/);
138
+ if (match)
139
+ missingPackages.add(match[1]);
140
+ }
141
+ }
142
+ // Extract type references for unused import detection
143
+ // This is essential for TypeScript where imports might only be used as types
144
+ const typeReferences = extractTypeReferencesAST(newCode, language, {
145
+ filePath: virtualFilePath,
146
+ cacheKey: virtualFilePath,
147
+ });
148
+ const symbolIssues = validateSymbols(usedSymbols, symbolTable, newCode, language, strictMode, imports, pythonExports, projectContext,
149
+ // Don't pass a fake file path - let validation fall back to global symbol lookup
150
+ // for relative imports.
151
+ "", missingPackages, typeReferences);
152
+ issues.push(...symbolIssues);
153
+ // Secret #5: Usage Pattern Consistency (Rituals)
154
+ const patternIssues = validateUsagePatterns(usedSymbols, projectContext);
155
+ issues.push(...patternIssues);
156
+ // Secret #6: Change Impact Analysis (Blast Radius) - ONLY for changes
157
+ const symbolsInNewCode = extractSymbolsAST(newCode, "new_code_validation", language);
158
+ for (const sym of symbolsInNewCode) {
159
+ // Skip non-exported symbols and generic short names to reduce noise
160
+ if (!sym.isExported || sym.name.length <= 2) {
161
+ continue;
162
+ }
163
+ if (projectContext.symbolIndex.has(sym.name)) {
164
+ const blast = impactAnalyzer.traceBlastRadius(sym.name, projectContext.symbolGraph, 2);
165
+ if (blast.severity === "high") {
166
+ issues.push({
167
+ type: "architecturalDeviation",
168
+ severity: "high",
169
+ file: "new_code_validation", // Virtual file for inline code validation
170
+ message: `Modifying '${sym.name}' has a HIGH project-wide impact affecting ${blast.affectedFiles.length} files.`,
171
+ line: sym.line,
172
+ code: getLineFromCode(newCode, sym.line),
173
+ suggestion: `Run 'analyze_change_impact' for '${sym.name}' to see the full list of affected symbols.`,
174
+ confidence: 85,
175
+ reasoning: `Found ${blast.impactedSymbols.length} downstream consumers in the symbol graph.`,
176
+ });
177
+ }
178
+ }
179
+ }
180
+ }
181
+ // Step 6: ALWAYS check for dead code (comprehensive validation)
182
+ // Only run when validating large snippets (heuristic) or when no code is provided.
183
+ // This keeps validate_code fast for small snippets while still supporting
184
+ // full dead-code scans.
185
+ const shouldCheckDeadCode = !newCode || newCode.split("\n").length > 50;
186
+ let deadCodeIssues = [];
187
+ if (shouldCheckDeadCode) {
188
+ const DEAD_CODE_TIMEOUT = 30000; // 30 seconds max
189
+ const deadCodePromise = detectDeadCode(projectContext, newCode);
190
+ let timeoutId;
191
+ const timeoutPromise = new Promise((resolve) => {
192
+ timeoutId = setTimeout(() => {
193
+ logger.warn(`Dead code detection timed out after ${DEAD_CODE_TIMEOUT}ms`);
194
+ resolve([]);
195
+ }, DEAD_CODE_TIMEOUT);
196
+ });
197
+ try {
198
+ deadCodeIssues = await Promise.race([deadCodePromise, timeoutPromise]);
199
+ }
200
+ finally {
201
+ if (timeoutId)
202
+ clearTimeout(timeoutId);
203
+ }
204
+ }
205
+ // Step 7: Automated Verification (eliminates false positives)
206
+ logger.info(`Verifying ${issues.length} findings to eliminate false positives...`);
207
+ const verificationResult = await verifyFindingsAutomatically(issues, deadCodeIssues, projectContext, projectPath, language);
208
+ // Get filtered findings (only confirmed, no false positives)
209
+ const { hallucinations: confirmedIssues, deadCode: confirmedDeadCode } = getConfirmedFindings(verificationResult);
210
+ logger.info(`Verification complete: ${confirmedIssues.length} confirmed, ${verificationResult.stats.falsePositiveCount} false positives filtered`);
211
+ // Step 8: Calculate score and recommendation using CONFIRMED issues only
212
+ const score = calculateScore(confirmedIssues, confirmedDeadCode);
213
+ const recommendation = generateRecommendation(score, confirmedIssues, confirmedDeadCode);
214
+ const elapsed = Date.now() - startTime;
215
+ // Save snapshot for incremental validation (store ALL issues for analysis)
216
+ if (sessionId && newCode) {
217
+ incrementalValidation.saveSnapshot(sessionId, newCode, issues, // Store original issues for comparison
218
+ deadCodeIssues);
219
+ }
220
+ // Use CONFIRMED issues for the response (no false positives)
221
+ const totalIssues = confirmedIssues.length + confirmedDeadCode.length;
222
+ const isLargeResult = totalIssues > 50;
223
+ // Generate a unique ID for this validation run to store it in resources
224
+ const validationId = `sync_${Date.now()}_${Math.random().toString(36).substring(2, 7)}`;
225
+ // Store CONFIRMED issues in report store (wait for disk write to complete)
226
+ await validationReportStore.store(validationId, projectPath, {
227
+ summary: generateStructuredExplanation(confirmedIssues, confirmedDeadCode),
228
+ stats: {
229
+ filesScanned: projectContext.totalFiles,
230
+ symbolsInProject: projectContext.symbolIndex.size,
231
+ hallucinationsFound: confirmedIssues.length,
232
+ deadCodeFound: confirmedDeadCode.length,
233
+ analysisTime: `${elapsed}ms`,
234
+ verification: {
235
+ confirmed: verificationResult.stats.confirmedCount,
236
+ falsePositivesFiltered: verificationResult.stats.falsePositiveCount,
237
+ uncertain: verificationResult.stats.uncertainCount,
238
+ },
239
+ },
240
+ hallucinations: confirmedIssues,
241
+ deadCode: confirmedDeadCode,
242
+ score,
243
+ recommendation,
244
+ });
245
+ const reportUri = validationReportStore.getReportUri(validationId);
246
+ // If the result is large, return a compact response with the URI
247
+ if (isLargeResult) {
248
+ return formatResponse({
249
+ success: true,
250
+ validated: true,
251
+ score,
252
+ hallucinationDetected: confirmedIssues.length > 0,
253
+ deadCodeDetected: confirmedDeadCode.length > 0,
254
+ reportUri,
255
+ message: `Validation found ${totalIssues} confirmed issues (${verificationResult.stats.falsePositiveCount} false positives automatically filtered). Results are stored as an MCP Resource.`,
256
+ recommendation,
257
+ verification: {
258
+ confirmedCount: verificationResult.stats.confirmedCount,
259
+ falsePositiveCount: verificationResult.stats.falsePositiveCount,
260
+ uncertainCount: verificationResult.stats.uncertainCount,
261
+ },
262
+ stats: {
263
+ hallucinationsFound: confirmedIssues.length,
264
+ deadCodeFound: confirmedDeadCode.length,
265
+ analysisTime: `${elapsed}ms`,
266
+ },
267
+ resourceAccess: {
268
+ summaryUri: reportUri,
269
+ hallucinationsUri: `${reportUri}/hallucinations/0`,
270
+ deadCodeUri: `${reportUri}/dead-code/0`,
271
+ bySeverityUri: `${reportUri}/by-severity/critical`,
272
+ byTypeUri: `${reportUri}/by-type/dependencyHallucination`,
273
+ tip: "Use 'read_resource' to fetch chunks of issues from the URIs above. You can also filter by file: .../by-file/{filePath}",
274
+ },
275
+ });
276
+ }
277
+ // Small results can still be returned inline, but we also include the URI
278
+ return formatResponse({
279
+ success: true,
280
+ validated: true,
281
+ score,
282
+ hallucinationDetected: confirmedIssues.length > 0,
283
+ deadCodeDetected: confirmedDeadCode.length > 0,
284
+ // Return ONLY confirmed findings (no false positives)
285
+ hallucinations: confirmedIssues,
286
+ deadCode: confirmedDeadCode,
287
+ reportUri,
288
+ recommendation,
289
+ structuredExplanation: generateStructuredExplanation(confirmedIssues, confirmedDeadCode),
290
+ /**
291
+ * Automated verification results - shows confidence that findings are true positives
292
+ */
293
+ verification: {
294
+ confirmedCount: verificationResult.stats.confirmedCount,
295
+ falsePositiveCount: verificationResult.stats.falsePositiveCount,
296
+ uncertainCount: verificationResult.stats.uncertainCount,
297
+ /** Detailed breakdown of verification for each finding */
298
+ details: verificationResult.confirmed.map(v => ({
299
+ type: v.original.type,
300
+ message: v.original.message,
301
+ confidence: v.confidence,
302
+ verificationMethod: v.verificationMethod,
303
+ reasons: v.reasons,
304
+ })),
305
+ },
306
+ stats: {
307
+ filesScanned: projectContext.totalFiles,
308
+ symbolsInProject: projectContext.symbolIndex.size,
309
+ symbolsValidatedAgainst: symbolTable.length,
310
+ relevanceFiltering: relevantSymbols.length > 0 ? "enabled" : "disabled",
311
+ contextQuality,
312
+ symbolsChecked: usedSymbols.length,
313
+ importsChecked: imports.length,
314
+ manifestPackages: manifest.all.size,
315
+ hallucinationsFound: issues.length,
316
+ deadCodeFound: deadCodeIssues.length,
317
+ analysisTime: `${elapsed}ms`,
318
+ incrementalValidation: incrementalResult.canUse ? "enabled" : "disabled",
319
+ },
320
+ });
321
+ }
322
+ catch (err) {
323
+ logger.error("Validation error:", err);
324
+ return formatResponse({
325
+ success: false,
326
+ error: err instanceof Error ? err.message : String(err),
327
+ });
328
+ }
329
+ },
330
+ };
331
+ // ============================================================================
332
+ // Response Formatting
333
+ // ============================================================================
334
+ /**
335
+ * Generate a structured explanation for the issues using prompt library patterns
336
+ */
337
+ function generateStructuredExplanation(issues, deadCode) {
338
+ const total = issues.length + deadCode.length;
339
+ if (total === 0)
340
+ return "Code is clean. No issues detected.";
341
+ const task = `Analyze ${total} issues found in the code and provide actionable feedback.`;
342
+ const roleMsg = PROMPT_PATTERNS.role("Code Quality Auditor", task);
343
+ const constrainedMsg = PROMPT_PATTERNS.withConstraints(roleMsg, VALIDATION_CONSTRAINTS);
344
+ const steps = [
345
+ "Verify symbols against the project's current symbol table",
346
+ "Check for missing package dependencies in manifest files",
347
+ "Identify unused exports or dead code blocks",
348
+ "Evaluate architectural impact on the wider project",
349
+ ];
350
+ const reasoningMsg = PROMPT_PATTERNS.stepByStep(constrainedMsg, steps);
351
+ const issueDetails = [...issues, ...deadCode]
352
+ .map((i, idx) => {
353
+ let detail = `${idx + 1}. [${i.severity.toUpperCase()}] ${i.type}: ${i.message}`;
354
+ if ("line" in i && i.line)
355
+ detail += ` (Line ${i.line})`;
356
+ if (i.suggestion)
357
+ detail += `\n Suggestion: ${i.suggestion}`;
358
+ return detail;
359
+ })
360
+ .join("\n");
361
+ return `${reasoningMsg}\n\nISSUE BREAKDOWN:\n${issueDetails}`;
362
+ }
363
+ function formatResponse(data) {
364
+ return {
365
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
366
+ };
367
+ }
368
+ //# sourceMappingURL=validateCode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateCode.js","sourceRoot":"","sources":["../../src/tools/validateCode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=validateCodeLite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateCodeLite.d.ts","sourceRoot":"","sources":["../../src/tools/validateCodeLite.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=validateCodeLite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateCodeLite.js","sourceRoot":"","sources":["../../src/tools/validateCodeLite.ts"],"names":[],"mappings":""}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Built-in Symbol Sets Module
3
+ *
4
+ * This module centralizes all built-in symbol sets for different programming languages.
5
+ * It provides fast lookup functions for checking if a symbol is a language built-in,
6
+ * which is essential for validation to avoid false positives when detecting hallucinations.
7
+ *
8
+ * Supported Languages:
9
+ * - Python: Built-in functions, types, exceptions, and standard library modules
10
+ * - JavaScript/TypeScript: Built-in globals, constructors, DOM APIs, and utility types
11
+ *
12
+ * @format
13
+ */
14
+ /**
15
+ * Python built-in functions, types, and constants
16
+ * Based on Python 3.11+ builtins
17
+ */
18
+ export declare const PYTHON_BUILTINS: Set<string>;
19
+ /**
20
+ * Python built-in types for type hint checking
21
+ */
22
+ export declare const PYTHON_BUILTIN_TYPES: Set<string>;
23
+ /**
24
+ * JavaScript/TypeScript built-in globals and constructors
25
+ * Based on ECMAScript 2023 and common Node.js/Browser APIs
26
+ */
27
+ export declare const JS_BUILTINS: Set<string>;
28
+ /**
29
+ * Standard HTML tags to avoid false positives in JSX
30
+ */
31
+ export declare const HTML_TAGS: Set<string>;
32
+ /**
33
+ * Standard SVG tags to avoid false positives in JSX
34
+ */
35
+ export declare const SVG_TAGS: Set<string>;
36
+ /**
37
+ * TypeScript built-in types (for type reference checking)
38
+ */
39
+ export declare const TS_BUILTIN_TYPES: Set<string>;
40
+ /**
41
+ * Get Node.js built-in modules.
42
+ *
43
+ * @returns A Set of Node.js built-In module names
44
+ */
45
+ export declare function getNodeBuiltInModules(): Set<string>;
46
+ /**
47
+ * Node.js built-in modules
48
+ * Based on Node.js 20+ documentation
49
+ */
50
+ export declare const NODE_BUILTIN_MODULES: Set<string>;
51
+ /**
52
+ * Check if a name is a Python built-in function, type, or constant.
53
+ * @param name - The symbol name to check
54
+ * @returns true if the name is a Python built-in
55
+ */
56
+ export declare function isPythonBuiltin(name: string): boolean;
57
+ /**
58
+ * Common method names from popular libraries that should not be flagged as hallucinations.
59
+ * These are methods that are commonly returned by library functions but not tracked in our symbol table.
60
+ */
61
+ export declare const COMMON_LIBRARY_METHODS: Set<string>;
62
+ /**
63
+ * Common Python methods to whitelist globally to reduce noise
64
+ */
65
+ export declare const PYTHON_COMMON_METHODS: Set<string>;
66
+ /**
67
+ * Check if a name is a JavaScript built-in global or constructor.
68
+ * @param name - The symbol name to check
69
+ * @returns true if the name is a JavaScript built-in
70
+ */
71
+ export declare function isJSBuiltin(name: string): boolean;
72
+ /**
73
+ * Check if a name is a Python built-in type (for type hint checking).
74
+ * @param name - The type name to check
75
+ * @returns true if the name is a Python built-in type
76
+ */
77
+ export declare function isPythonBuiltinType(name: string): boolean;
78
+ /**
79
+ * Check if a name is a TypeScript built-in type.
80
+ * @param name - The type name to check
81
+ * @returns true if the name is a TypeScript built-in type
82
+ */
83
+ export declare function isTSBuiltinType(name: string): boolean;
84
+ /**
85
+ * Get Python standard library modules.
86
+ * This is a comprehensive list based on Python 3.11+ documentation.
87
+ * Organized by category for maintainability.
88
+ *
89
+ * @returns A Set of Python standard library module names
90
+ */
91
+ export declare function getPythonStdLib(): Set<string>;
92
+ //# sourceMappingURL=builtins.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtins.d.ts","sourceRoot":"","sources":["../../../src/tools/validation/builtins.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH;;;GAGG;AACH,eAAO,MAAM,eAAe,aA+S1B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,oBAAoB,aAmG/B,CAAC;AAIH;;;GAGG;AACH,eAAO,MAAM,WAAW,aAkRtB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,SAAS,aA4FpB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,QAAQ,aA6CnB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,gBAAgB,aAslB3B,CAAC;AAEH;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,GAAG,CAAC,MAAM,CAAC,CAEnD;AAED;;;GAGG;AACH,eAAO,MAAM,oBAAoB,aAkD/B,CAAC;AAIH;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAMrD;AAED;;;GAGG;AACH,eAAO,MAAM,sBAAsB,aAgUjC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,qBAAqB,aAyFhC,CAAC;AAEH;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAOjD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAErD;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,IAAI,GAAG,CAAC,MAAM,CAAC,CA4M7C"}