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,380 @@
1
+ /**
2
+ * Symbol Graph Builder
3
+ *
4
+ * Builds symbol-level dependency graphs to understand relationships between
5
+ * functions, classes, and other symbols across the codebase.
6
+ *
7
+ * Inspired by Augment Code's semantic dependency analysis.
8
+ *
9
+ * @format
10
+ */
11
+ import { extractUsagesAST, extractImportsAST, } from "../tools/validation/extractors/index.js";
12
+ import { logger } from "../utils/logger.js";
13
+ /**
14
+ * Build symbol-level dependency graph from project context
15
+ */
16
+ export async function buildSymbolGraph(context, options = {}) {
17
+ const { includeCallRelationships = true, includeCoOccurrence = true, minCoOccurrenceCount = 2, } = options;
18
+ logger.debug("Building symbol graph...");
19
+ const startTime = Date.now();
20
+ const graph = {
21
+ relationships: [],
22
+ usage: new Map(),
23
+ symbolToFiles: new Map(),
24
+ fileToSymbols: new Map(),
25
+ coOccurrence: new Map(),
26
+ };
27
+ // Step 1: Build basic symbol-to-file mappings
28
+ await buildSymbolMappings(context, graph);
29
+ // Step 2: Extract import relationships
30
+ await extractImportRelationships(context, graph);
31
+ // Step 3: Extract call relationships (if enabled)
32
+ if (includeCallRelationships) {
33
+ await extractCallRelationships(context, graph);
34
+ }
35
+ // Step 4: Build co-occurrence matrix (if enabled)
36
+ if (includeCoOccurrence) {
37
+ await buildCoOccurrenceMatrix(context, graph, minCoOccurrenceCount);
38
+ }
39
+ // Step 5: Link Semantic Bridge (Cross-Language)
40
+ await linkSemanticBridge(graph);
41
+ // Step 5: Calculate usage statistics
42
+ calculateUsageStats(graph);
43
+ const elapsed = Date.now() - startTime;
44
+ logger.debug(`Symbol graph built in ${elapsed}ms (${graph.relationships.length} relationships, ${graph.usage.size} symbols)`);
45
+ return graph;
46
+ }
47
+ /**
48
+ * Build basic symbol-to-file and file-to-symbol mappings
49
+ */
50
+ async function buildSymbolMappings(context, graph) {
51
+ let i = 0;
52
+ for (const [filePath, fileInfo] of context.files) {
53
+ i++;
54
+ const symbolsInFile = new Set();
55
+ for (const symbol of fileInfo.symbols) {
56
+ // Track symbol -> files
57
+ if (!graph.symbolToFiles.has(symbol.name)) {
58
+ graph.symbolToFiles.set(symbol.name, new Set());
59
+ }
60
+ graph.symbolToFiles.get(symbol.name).add(filePath);
61
+ // Track file -> symbols
62
+ symbolsInFile.add(symbol.name);
63
+ // Initialize usage stats
64
+ if (!graph.usage.has(symbol.name)) {
65
+ graph.usage.set(symbol.name, {
66
+ symbol: symbol.name,
67
+ usageCount: 0,
68
+ importCount: 0,
69
+ calledBy: new Set(),
70
+ calls: new Set(),
71
+ coOccurs: new Map(),
72
+ files: new Set(),
73
+ });
74
+ }
75
+ graph.usage.get(symbol.name).files.add(filePath);
76
+ }
77
+ graph.fileToSymbols.set(filePath, symbolsInFile);
78
+ // Yield every 50 files
79
+ if (i % 50 === 0) {
80
+ await new Promise((resolve) => setImmediate(resolve));
81
+ }
82
+ }
83
+ }
84
+ /**
85
+ * Extract import relationships between symbols
86
+ */
87
+ async function extractImportRelationships(context, graph) {
88
+ let i = 0;
89
+ for (const [filePath, fileInfo] of context.files) {
90
+ i++;
91
+ for (const imp of fileInfo.imports) {
92
+ // For each imported symbol, create a relationship
93
+ const importedSymbols = [
94
+ ...imp.namedImports,
95
+ ...(imp.defaultImport ? [imp.defaultImport] : []),
96
+ ];
97
+ for (const importedSymbol of importedSymbols) {
98
+ // Find which file defines this symbol
99
+ const definingFiles = graph.symbolToFiles.get(importedSymbol);
100
+ if (!definingFiles)
101
+ continue;
102
+ for (const definingFile of definingFiles) {
103
+ graph.relationships.push({
104
+ from: filePath,
105
+ to: importedSymbol,
106
+ type: "imports",
107
+ file: filePath,
108
+ line: imp.line,
109
+ confidence: 1.0,
110
+ reason: "AST-based import",
111
+ });
112
+ // Update usage stats
113
+ const usage = graph.usage.get(importedSymbol);
114
+ if (usage) {
115
+ usage.importCount++;
116
+ }
117
+ }
118
+ }
119
+ }
120
+ // Yield every 50 files
121
+ if (i % 50 === 0) {
122
+ await new Promise((resolve) => setImmediate(resolve));
123
+ }
124
+ }
125
+ }
126
+ /**
127
+ * Extract call relationships by analyzing function calls using AST
128
+ */
129
+ async function extractCallRelationships(context, graph) {
130
+ const fs = await import("fs/promises");
131
+ let i = 0;
132
+ for (const [filePath, fileInfo] of context.files) {
133
+ i++;
134
+ try {
135
+ // Skip files that are too large to parse repeatedly or not source files
136
+ if (fileInfo.size > 500000)
137
+ continue;
138
+ const content = await fs.readFile(filePath, "utf-8");
139
+ const lang = fileInfo.language === "python" ? "python" :
140
+ fileInfo.language === "go" ? "go" :
141
+ "typescript";
142
+ const imports = extractImportsAST(content, lang);
143
+ const usages = extractUsagesAST(content, lang, imports);
144
+ // Heuristic: identify which symbol in the file contains these usages
145
+ // (For now, we attribute them to the containing file or top-level symbols)
146
+ const symbolsInFile = fileInfo.symbols;
147
+ for (const usage of usages) {
148
+ // Find which symbol defines this name
149
+ const definingFiles = graph.symbolToFiles.get(usage.name);
150
+ if (!definingFiles)
151
+ continue;
152
+ for (const definingFile of definingFiles) {
153
+ // If we have a current symbol scope (e.g., we're in a function), we'd use that.
154
+ // Since our AST extraction for usages doesn't yet return the containing symbol,
155
+ // we associate the usage with the file for now, or with all symbols in the file
156
+ // if it's a small file.
157
+ graph.relationships.push({
158
+ from: filePath, // Association with file
159
+ to: usage.name,
160
+ type: usage.type === "call" ? "calls" : "references",
161
+ file: filePath,
162
+ line: usage.line,
163
+ confidence: 0.95, // High confidence (AST-based)
164
+ reason: "AST-based call",
165
+ });
166
+ // Update usage stats
167
+ const toUsage = graph.usage.get(usage.name);
168
+ if (toUsage) {
169
+ toUsage.calledBy.add(filePath);
170
+ toUsage.usageCount++;
171
+ }
172
+ }
173
+ }
174
+ }
175
+ catch (error) {
176
+ logger.debug(`Could not extract call relationships for ${filePath}:`, error);
177
+ }
178
+ // Yield every 10 files
179
+ if (i % 10 === 0) {
180
+ await new Promise((resolve) => setImmediate(resolve));
181
+ }
182
+ }
183
+ }
184
+ /**
185
+ * Build co-occurrence matrix: which symbols are often used together
186
+ */
187
+ async function buildCoOccurrenceMatrix(context, graph, minCount) {
188
+ let i = 0;
189
+ // For each file, track which symbols appear together
190
+ for (const [filePath, fileInfo] of context.files) {
191
+ i++;
192
+ const symbolsInFile = new Set();
193
+ // Collect all symbols used in this file (defined + imported)
194
+ for (const symbol of fileInfo.symbols) {
195
+ symbolsInFile.add(symbol.name);
196
+ }
197
+ for (const imp of fileInfo.imports) {
198
+ imp.namedImports.forEach((s) => symbolsInFile.add(s));
199
+ if (imp.defaultImport)
200
+ symbolsInFile.add(imp.defaultImport);
201
+ }
202
+ // Add symbols from call relationships in this file
203
+ const callRelationships = graph.relationships.filter((r) => r.file === filePath && r.type === "calls");
204
+ for (const rel of callRelationships) {
205
+ symbolsInFile.add(rel.to);
206
+ }
207
+ const symbolArray = Array.from(symbolsInFile);
208
+ for (let j = 0; j < symbolArray.length; j++) {
209
+ for (let k = j + 1; k < symbolArray.length; k++) {
210
+ const sym1 = symbolArray[j];
211
+ const sym2 = symbolArray[k];
212
+ // Update co-occurrence for sym1 and sym2
213
+ incrementCoOccurrence(graph, sym1, sym2);
214
+ incrementCoOccurrence(graph, sym2, sym1);
215
+ // Update usage stats (legacy)
216
+ const usage1 = graph.usage.get(sym1);
217
+ const usage2 = graph.usage.get(sym2);
218
+ if (usage1)
219
+ usage1.coOccurs.set(sym2, (usage1.coOccurs.get(sym2) || 0) + 1);
220
+ if (usage2)
221
+ usage2.coOccurs.set(sym1, (usage2.coOccurs.get(sym1) || 0) + 1);
222
+ }
223
+ }
224
+ // Yield every 20 files
225
+ if (i % 20 === 0) {
226
+ await new Promise((resolve) => setImmediate(resolve));
227
+ }
228
+ }
229
+ // Filter out low-frequency co-occurrences
230
+ for (const [symbol, coOccurs] of graph.coOccurrence) {
231
+ for (const [otherSymbol, count] of coOccurs) {
232
+ if (count < minCount) {
233
+ coOccurs.delete(otherSymbol);
234
+ }
235
+ }
236
+ }
237
+ }
238
+ /**
239
+ * Helper to increment co-occurrence count
240
+ */
241
+ function incrementCoOccurrence(graph, s1, s2) {
242
+ let map = graph.coOccurrence.get(s1);
243
+ if (!map) {
244
+ map = new Map();
245
+ graph.coOccurrence.set(s1, map);
246
+ }
247
+ map.set(s2, (map.get(s2) || 0) + 1);
248
+ }
249
+ /**
250
+ * Calculate final usage statistics
251
+ */
252
+ function calculateUsageStats(graph) {
253
+ for (const usage of graph.usage.values()) {
254
+ // Count total usages (imports + calls)
255
+ usage.usageCount = usage.importCount + usage.calledBy.size;
256
+ }
257
+ }
258
+ /**
259
+ * Link Semantic Bridge: Connect frontend API calls (TS) to backend routes (Python)
260
+ */
261
+ async function linkSemanticBridge(graph) {
262
+ logger.debug("Linking Semantic Bridge (Cross-Language Tracing)...");
263
+ // 1. Identify all route symbols (mostly from Python)
264
+ const routeSymbols = [];
265
+ for (const [symbol, files] of graph.symbolToFiles.entries()) {
266
+ // We need to check if ANY of these files define this as a 'route'
267
+ // For now, we assume if it starts with / and is tracked, it's a route
268
+ if (symbol.startsWith("/")) {
269
+ for (const file of files) {
270
+ routeSymbols.push({ name: symbol, file });
271
+ }
272
+ }
273
+ }
274
+ if (routeSymbols.length === 0)
275
+ return;
276
+ // 2. Scan for TS usages that match these routes
277
+ for (const [symbolName, usage] of graph.usage.entries()) {
278
+ // If a TS file "references" a string that matches a route
279
+ if (symbolName.startsWith("/")) {
280
+ const matchingRoute = routeSymbols.find(r => r.name === symbolName);
281
+ if (matchingRoute) {
282
+ // Link the files that USE this URL to the file that DEFINES the route
283
+ for (const callerFile of usage.calledBy) {
284
+ // Avoid self-linking (unlikely for cross-language)
285
+ if (callerFile === matchingRoute.file)
286
+ continue;
287
+ graph.relationships.push({
288
+ from: callerFile,
289
+ to: matchingRoute.name,
290
+ type: "calls", // We treat API access as a semantic call
291
+ file: callerFile,
292
+ line: 0, // General relationship
293
+ confidence: 0.9,
294
+ reason: `Semantic Bridge: API access to ${matchingRoute.name}`,
295
+ });
296
+ // Update usage stats for the route
297
+ const routeUsage = graph.usage.get(matchingRoute.name);
298
+ if (routeUsage) {
299
+ routeUsage.calledBy.add(callerFile);
300
+ routeUsage.usageCount++;
301
+ }
302
+ }
303
+ }
304
+ }
305
+ }
306
+ }
307
+ /**
308
+ * Find symbols related to a given symbol
309
+ */
310
+ export function findRelatedSymbols(graph, symbolName, maxResults = 10) {
311
+ const related = [];
312
+ const usage = graph.usage.get(symbolName);
313
+ if (!usage) {
314
+ return { symbol: symbolName, related: [] };
315
+ }
316
+ // Add symbols this one calls
317
+ for (const calledSymbol of usage.calls) {
318
+ related.push({
319
+ symbol: calledSymbol,
320
+ relationship: "calls",
321
+ score: 0.9,
322
+ reason: `${symbolName} calls ${calledSymbol}`,
323
+ });
324
+ }
325
+ // Add symbols that call this one
326
+ for (const callerSymbol of usage.calledBy) {
327
+ related.push({
328
+ symbol: callerSymbol,
329
+ relationship: "calls",
330
+ score: 0.8,
331
+ reason: `${callerSymbol} calls ${symbolName}`,
332
+ });
333
+ }
334
+ // Add frequently co-occurring symbols
335
+ const coOccurArray = Array.from(usage.coOccurs.entries())
336
+ .sort((a, b) => b[1] - a[1])
337
+ .slice(0, 5);
338
+ for (const [coSymbol, count] of coOccurArray) {
339
+ const score = Math.min(0.7, count / 10); // Max score 0.7 for co-occurrence
340
+ related.push({
341
+ symbol: coSymbol,
342
+ relationship: "co-occurs",
343
+ score,
344
+ reason: `Often used together (${count} times)`,
345
+ });
346
+ }
347
+ // Sort by score and limit results
348
+ related.sort((a, b) => b.score - a.score);
349
+ return {
350
+ symbol: symbolName,
351
+ related: related.slice(0, maxResults),
352
+ };
353
+ }
354
+ /**
355
+ * Get symbols that are most relevant to a set of imports
356
+ * This is useful for validation - given what's imported, what else is likely needed?
357
+ */
358
+ export function getRelevantSymbols(graph, importedSymbols, maxResults = 20) {
359
+ const relevanceScores = new Map();
360
+ for (const importedSymbol of importedSymbols) {
361
+ const related = findRelatedSymbols(graph, importedSymbol, 20);
362
+ for (const rel of related.related) {
363
+ const currentScore = relevanceScores.get(rel.symbol) || 0;
364
+ relevanceScores.set(rel.symbol, currentScore + rel.score);
365
+ }
366
+ }
367
+ // Sort by relevance score
368
+ const sorted = Array.from(relevanceScores.entries())
369
+ .sort((a, b) => b[1] - a[1])
370
+ .slice(0, maxResults)
371
+ .map(([symbol]) => symbol);
372
+ return sorted;
373
+ }
374
+ /**
375
+ * Get usage statistics for a symbol
376
+ */
377
+ export function getSymbolUsage(graph, symbolName) {
378
+ return graph.usage.get(symbolName) || null;
379
+ }
380
+ //# sourceMappingURL=symbolGraph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbolGraph.js","sourceRoot":"","sources":["../../src/analyzers/symbolGraph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Symbol Table Builder (AST-based)
3
+ *
4
+ * NOTE: This file is intentionally separate from the validation pipeline.
5
+ * The flagship validator uses [`src/tools/validation/extractors/index.ts`](src/tools/validation/extractors/index.ts)
6
+ * + project context indexing.
7
+ *
8
+ * This module provides a lightweight, snippet-level symbol table used by
9
+ * legacy analyzers/tests (e.g. type consistency heuristics).
10
+ *
11
+ * @format
12
+ */
13
+ import { SymbolTable } from "../types/tools.js";
14
+ /**
15
+ * Build symbol table from codebase
16
+ */
17
+ export declare function buildSymbolTable(codebase: string, language: string): Promise<SymbolTable>;
18
+ //# sourceMappingURL=symbolTable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbolTable.d.ts","sourceRoot":"","sources":["../../src/analyzers/symbolTable.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAOhD;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,WAAW,CAAC,CA+BtB"}
@@ -0,0 +1,176 @@
1
+ /**
2
+ * Symbol Table Builder (AST-based)
3
+ *
4
+ * NOTE: This file is intentionally separate from the validation pipeline.
5
+ * The flagship validator uses [`src/tools/validation/extractors/index.ts`](src/tools/validation/extractors/index.ts)
6
+ * + project context indexing.
7
+ *
8
+ * This module provides a lightweight, snippet-level symbol table used by
9
+ * legacy analyzers/tests (e.g. type consistency heuristics).
10
+ *
11
+ * @format
12
+ */
13
+ import { logger } from "../utils/logger.js";
14
+ import { extractSymbolsAST, extractImportsAST, } from "../tools/validation/extractors/index.js";
15
+ /**
16
+ * Build symbol table from codebase
17
+ */
18
+ export async function buildSymbolTable(codebase, language) {
19
+ logger.debug(`Building symbol table for ${language}...`);
20
+ const symbolTable = {
21
+ functions: [],
22
+ classes: [],
23
+ interfaces: [],
24
+ variables: [],
25
+ imports: [],
26
+ dependencies: [],
27
+ };
28
+ try {
29
+ switch (language) {
30
+ case "javascript":
31
+ case "typescript":
32
+ return await buildJavaScriptSymbolTable(codebase, language);
33
+ case "python":
34
+ return await buildPythonSymbolTable(codebase);
35
+ case "go":
36
+ return await buildGoSymbolTable(codebase);
37
+ default:
38
+ logger.warn(`Symbol table building not fully implemented for ${language}`);
39
+ return symbolTable;
40
+ }
41
+ }
42
+ catch (error) {
43
+ logger.error("Error building symbol table:", error);
44
+ return symbolTable;
45
+ }
46
+ }
47
+ /**
48
+ * Build symbol table for JavaScript/TypeScript using Tree-sitter AST extractors.
49
+ *
50
+ * This replaces legacy regex patterns (which were prone to false positives in
51
+ * comments/strings and missed destructuring/object-literal methods).
52
+ */
53
+ async function buildJavaScriptSymbolTable(code, language) {
54
+ const functions = new Set();
55
+ const classes = new Set();
56
+ const interfaces = new Set();
57
+ const variables = new Set();
58
+ const imports = new Set();
59
+ // 1) Symbols (AST)
60
+ const symbols = extractSymbolsAST(code, "", language);
61
+ for (const sym of symbols) {
62
+ switch (sym.type) {
63
+ case "function":
64
+ case "method":
65
+ functions.add(sym.name);
66
+ break;
67
+ case "class":
68
+ classes.add(sym.name);
69
+ break;
70
+ case "interface":
71
+ case "type":
72
+ interfaces.add(sym.name);
73
+ break;
74
+ case "variable":
75
+ variables.add(sym.name);
76
+ break;
77
+ }
78
+ }
79
+ // 2) Imports (AST)
80
+ const astImports = extractImportsAST(code, language);
81
+ for (const imp of astImports) {
82
+ if (imp.module)
83
+ imports.add(imp.module);
84
+ }
85
+ logger.debug(`Found ${functions.size} functions, ${classes.size} classes, ${interfaces.size} interfaces (AST-based)`);
86
+ return {
87
+ functions: Array.from(functions),
88
+ classes: Array.from(classes),
89
+ interfaces: Array.from(interfaces),
90
+ variables: Array.from(variables),
91
+ imports: Array.from(imports),
92
+ dependencies: [],
93
+ classFields: {},
94
+ };
95
+ }
96
+ /**
97
+ * Build symbol table for Python - ENHANCED
98
+ */
99
+ async function buildPythonSymbolTable(code) {
100
+ const functions = new Set();
101
+ const classes = new Set();
102
+ const variables = new Set();
103
+ const imports = new Set();
104
+ // 1) Symbols (AST)
105
+ const symbols = extractSymbolsAST(code, "", "python");
106
+ for (const sym of symbols) {
107
+ switch (sym.type) {
108
+ case "function":
109
+ case "method":
110
+ functions.add(sym.name);
111
+ break;
112
+ case "class":
113
+ classes.add(sym.name);
114
+ break;
115
+ case "variable":
116
+ variables.add(sym.name);
117
+ break;
118
+ }
119
+ }
120
+ // 2) Imports (AST) - normalize to base package (matches validator logic)
121
+ const astImports = extractImportsAST(code, "python");
122
+ for (const imp of astImports) {
123
+ const base = imp.module?.split(".")[0];
124
+ if (base)
125
+ imports.add(base);
126
+ }
127
+ logger.debug(`Found ${functions.size} functions, ${classes.size} classes (AST-based)`);
128
+ // For Python we also expose classFields for class attributes if present
129
+ const classFields = {};
130
+ for (const sym of symbols) {
131
+ if (sym.type === "variable" && sym.scope) {
132
+ if (!classFields[sym.scope])
133
+ classFields[sym.scope] = [];
134
+ classFields[sym.scope].push(sym.name);
135
+ }
136
+ }
137
+ return {
138
+ functions: Array.from(functions),
139
+ classes: Array.from(classes),
140
+ variables: Array.from(variables),
141
+ imports: Array.from(imports),
142
+ dependencies: [],
143
+ classFields,
144
+ };
145
+ }
146
+ /**
147
+ * Build symbol table for Go
148
+ */
149
+ async function buildGoSymbolTable(code) {
150
+ const symbolTable = {
151
+ functions: [],
152
+ classes: [],
153
+ variables: [],
154
+ imports: [],
155
+ dependencies: [],
156
+ };
157
+ // Extract functions
158
+ const functionPattern = /func\s+(\w+)\s*\(/g;
159
+ let match;
160
+ while ((match = functionPattern.exec(code)) !== null) {
161
+ symbolTable.functions.push(match[1]);
162
+ }
163
+ // Extract structs (Go's equivalent of classes)
164
+ const structPattern = /type\s+(\w+)\s+struct/g;
165
+ while ((match = structPattern.exec(code)) !== null) {
166
+ symbolTable.classes.push(match[1]);
167
+ }
168
+ // Extract imports
169
+ const importPattern = /import\s+.*?["']([^"']+)["']/g;
170
+ while ((match = importPattern.exec(code)) !== null) {
171
+ symbolTable.imports.push(match[1]);
172
+ }
173
+ logger.debug(`Found ${symbolTable.functions.length} functions, ${symbolTable.classes.length} structs`);
174
+ return symbolTable;
175
+ }
176
+ //# sourceMappingURL=symbolTable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbolTable.js","sourceRoot":"","sources":["../../src/analyzers/symbolTable.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Type Consistency Checker
3
+ *
4
+ * Validates type consistency in AI-generated code
5
+ *
6
+ * @format
7
+ */
8
+ import { SymbolTable, Issue } from "../types/tools.js";
9
+ /**
10
+ * Check type consistency in new code
11
+ */
12
+ export declare function checkTypeConsistency(newCode: string, symbolTable: SymbolTable, language: string): Promise<Issue[]>;
13
+ //# sourceMappingURL=typeChecker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typeChecker.d.ts","sourceRoot":"","sources":["../../src/analyzers/typeChecker.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAKvD;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,KAAK,EAAE,CAAC,CAkElB"}