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,580 @@
1
+ /**
2
+ * Type Consistency Checker
3
+ *
4
+ * Validates type consistency in AI-generated code
5
+ *
6
+ * @format
7
+ */
8
+ import { logger } from "../utils/logger.js";
9
+ import { extractTypeReferencesAST } from "../tools/validation/extractors/index.js";
10
+ import { getParser } from "../tools/validation/parser.js";
11
+ /**
12
+ * Check type consistency in new code
13
+ */
14
+ export async function checkTypeConsistency(newCode, symbolTable, language) {
15
+ logger.debug("Checking type consistency...");
16
+ const issues = [];
17
+ // Only perform detailed type checking for TypeScript
18
+ if (language !== "typescript") {
19
+ logger.debug("Type checking only fully supported for TypeScript");
20
+ return issues;
21
+ }
22
+ try {
23
+ // Check for common type issues in TypeScript (AST-based)
24
+ // 1) 'any' type usage in type positions
25
+ issues.push(...detectAnyTypeUsageAST(newCode));
26
+ // 2) Missing explicit return types on named functions/methods
27
+ issues.push(...detectMissingReturnTypesAST(newCode));
28
+ // 3) Implicit-any parameters on named functions/methods
29
+ issues.push(...detectImplicitAnyParamsAST(newCode));
30
+ // 4. Check for non-existent type references (AST-based)
31
+ const typeReferences = extractTypeReferencesFromAST(newCode);
32
+ for (const typeRef of typeReferences) {
33
+ const existsInSymbolTable = symbolTable.classes.includes(typeRef.name) ||
34
+ symbolTable.interfaces?.includes(typeRef.name) ||
35
+ isBuiltInType(typeRef.name);
36
+ if (!existsInSymbolTable) {
37
+ issues.push({
38
+ type: "nonExistentType",
39
+ severity: "high",
40
+ message: `Type '${typeRef.name}' does not exist in codebase`,
41
+ line: typeRef.line,
42
+ column: typeRef.column,
43
+ code: typeRef.code,
44
+ suggestion: `Available types: ${getAvailableTypes(symbolTable).join(", ") || "none found"}`,
45
+ confidence: 85,
46
+ });
47
+ }
48
+ }
49
+ // 5. Check for property access hallucinations (AST-based)
50
+ const propertyAccesses = extractPropertyAccessesAST(newCode, symbolTable);
51
+ for (const access of propertyAccesses) {
52
+ issues.push({
53
+ type: "nonExistentProperty",
54
+ severity: "high",
55
+ message: `Property '${access.property}' does not exist on '${access.object}'`,
56
+ line: access.line,
57
+ column: access.column,
58
+ code: access.code,
59
+ suggestion: `Check available properties on ${access.object}`,
60
+ confidence: 70,
61
+ });
62
+ }
63
+ logger.debug(`Found ${issues.length} type consistency issues`);
64
+ }
65
+ catch (error) {
66
+ logger.error("Error checking type consistency:", error);
67
+ }
68
+ return issues;
69
+ }
70
+ // ============================================================================
71
+ // AST-based TypeScript checks (regex migrations)
72
+ // ============================================================================
73
+ function getLineTextByLineNumber(code, line) {
74
+ const lines = code.split("\n");
75
+ return lines[line - 1] || "";
76
+ }
77
+ function detectAnyTypeUsageAST(code) {
78
+ const issues = [];
79
+ const parser = getParser("typescript");
80
+ const tree = parser.parse(code);
81
+ const root = tree.rootNode;
82
+ const getText = (node) => code.slice(node.startIndex, node.endIndex);
83
+ const isTypeContext = (node) => {
84
+ let cur = node;
85
+ for (let i = 0; i < 8 && cur; i++) {
86
+ if (cur.type === "type_annotation" ||
87
+ cur.type === "return_type" ||
88
+ cur.type === "type_alias_declaration" ||
89
+ cur.type === "interface_declaration" ||
90
+ cur.type === "extends_clause" ||
91
+ cur.type === "implements_clause" ||
92
+ cur.type === "generic_type" ||
93
+ cur.type === "type_arguments" ||
94
+ cur.type === "type_parameter" ||
95
+ cur.type === "mapped_type_clause" ||
96
+ cur.type === "as_expression") {
97
+ return true;
98
+ }
99
+ cur = cur.parent;
100
+ }
101
+ return false;
102
+ };
103
+ const visit = (node) => {
104
+ if (!node)
105
+ return;
106
+ // Tree-sitter TS represents `any` as a predefined type in type positions.
107
+ if (node.type === "predefined_type") {
108
+ const t = getText(node);
109
+ if (t === "any" && isTypeContext(node)) {
110
+ const line = node.startPosition?.row + 1 || 0;
111
+ issues.push({
112
+ type: "typeMismatch",
113
+ severity: "medium",
114
+ message: "Usage of 'any' type defeats TypeScript's type safety",
115
+ line,
116
+ column: node.startPosition?.column || 0,
117
+ code: getLineTextByLineNumber(code, line).trim(),
118
+ suggestion: "Use a specific type instead of any",
119
+ confidence: 100,
120
+ });
121
+ }
122
+ }
123
+ for (const child of node.children || []) {
124
+ visit(child);
125
+ }
126
+ };
127
+ visit(root);
128
+ return issues;
129
+ }
130
+ function detectMissingReturnTypesAST(code) {
131
+ const issues = [];
132
+ const parser = getParser("typescript");
133
+ const tree = parser.parse(code);
134
+ const root = tree.rootNode;
135
+ const getText = (node) => code.slice(node.startIndex, node.endIndex);
136
+ const getFunctionName = (node) => {
137
+ if (!node)
138
+ return null;
139
+ if (node.type === "function_declaration") {
140
+ const nameNode = node.childForFieldName?.("name");
141
+ return nameNode ? getText(nameNode) : null;
142
+ }
143
+ if (node.type === "method_definition") {
144
+ const nameNode = node.childForFieldName?.("name");
145
+ if (!nameNode)
146
+ return null;
147
+ const name = getText(nameNode);
148
+ if (name === "constructor")
149
+ return null;
150
+ return name;
151
+ }
152
+ if (node.type === "arrow_function" || node.type === "function" || node.type === "function_expression") {
153
+ const parent = node.parent;
154
+ if (parent?.type === "variable_declarator") {
155
+ const nameNode = parent.childForFieldName?.("name");
156
+ if (nameNode?.type === "identifier")
157
+ return getText(nameNode);
158
+ }
159
+ }
160
+ return null;
161
+ };
162
+ const hasReturnType = (node) => {
163
+ // Common field name on TS nodes
164
+ if (node.childForFieldName?.("return_type"))
165
+ return true;
166
+ // Some grammars attach return type as a named child
167
+ return (node.children || []).some((c) => c?.type === "return_type");
168
+ };
169
+ const visit = (node) => {
170
+ if (!node)
171
+ return;
172
+ const isFunctionLike = node.type === "function_declaration" ||
173
+ node.type === "method_definition" ||
174
+ node.type === "arrow_function" ||
175
+ node.type === "function" ||
176
+ node.type === "function_expression";
177
+ if (isFunctionLike) {
178
+ const name = getFunctionName(node);
179
+ if (name && !hasReturnType(node)) {
180
+ const line = node.startPosition?.row + 1 || 0;
181
+ issues.push({
182
+ type: "missingReturnType",
183
+ severity: "low",
184
+ message: "Function missing explicit return type",
185
+ line,
186
+ column: node.startPosition?.column || 0,
187
+ code: getLineTextByLineNumber(code, line).trim(),
188
+ suggestion: "Add explicit return type annotation",
189
+ confidence: 80,
190
+ });
191
+ }
192
+ }
193
+ for (const child of node.children || []) {
194
+ visit(child);
195
+ }
196
+ };
197
+ visit(root);
198
+ return issues;
199
+ }
200
+ function detectImplicitAnyParamsAST(code) {
201
+ const issues = [];
202
+ const parser = getParser("typescript");
203
+ const tree = parser.parse(code);
204
+ const root = tree.rootNode;
205
+ const getText = (node) => code.slice(node.startIndex, node.endIndex);
206
+ const getFunctionNameForParams = (node) => {
207
+ if (!node)
208
+ return null;
209
+ if (node.type === "function_declaration") {
210
+ const nameNode = node.childForFieldName?.("name");
211
+ return nameNode ? getText(nameNode) : null;
212
+ }
213
+ if (node.type === "method_definition") {
214
+ const nameNode = node.childForFieldName?.("name");
215
+ if (!nameNode)
216
+ return null;
217
+ const name = getText(nameNode);
218
+ if (name === "constructor")
219
+ return null;
220
+ return name;
221
+ }
222
+ if (node.type === "arrow_function" || node.type === "function" || node.type === "function_expression") {
223
+ const parent = node.parent;
224
+ if (parent?.type === "variable_declarator") {
225
+ const nameNode = parent.childForFieldName?.("name");
226
+ if (nameNode?.type === "identifier")
227
+ return getText(nameNode);
228
+ }
229
+ }
230
+ return null;
231
+ };
232
+ const paramsHaveTypeAnnotation = (paramNode) => {
233
+ if (!paramNode)
234
+ return false;
235
+ if (paramNode.childForFieldName?.("type"))
236
+ return true;
237
+ // tree-sitter-typescript commonly uses `type_annotation` nodes
238
+ const stack = [paramNode];
239
+ while (stack.length) {
240
+ const n = stack.pop();
241
+ if (!n)
242
+ continue;
243
+ if (n.type === "type_annotation")
244
+ return true;
245
+ // Avoid walking into default value expressions too deeply
246
+ for (const c of n.children || []) {
247
+ stack.push(c);
248
+ }
249
+ }
250
+ return false;
251
+ };
252
+ const visit = (node) => {
253
+ if (!node)
254
+ return;
255
+ const isFunctionLike = node.type === "function_declaration" ||
256
+ node.type === "method_definition" ||
257
+ node.type === "arrow_function" ||
258
+ node.type === "function" ||
259
+ node.type === "function_expression";
260
+ if (isFunctionLike) {
261
+ const funcName = getFunctionNameForParams(node);
262
+ if (funcName) {
263
+ const paramsNode = node.childForFieldName?.("parameters") || node.childForFieldName?.("parameter");
264
+ if (paramsNode) {
265
+ // Consider children that are parameters (identifier / required_parameter / optional_parameter / rest_pattern)
266
+ for (const child of paramsNode.children || []) {
267
+ const patternNode = child.childForFieldName?.("pattern") || child;
268
+ if (patternNode?.type === "identifier") {
269
+ if (!paramsHaveTypeAnnotation(child)) {
270
+ const line = patternNode.startPosition?.row + 1 || 0;
271
+ issues.push({
272
+ type: "implicitAny",
273
+ severity: "medium",
274
+ message: "Parameter has implicit any type",
275
+ line,
276
+ column: patternNode.startPosition?.column || 0,
277
+ code: getLineTextByLineNumber(code, line).trim(),
278
+ suggestion: "Add type annotation to parameter",
279
+ confidence: 75,
280
+ });
281
+ }
282
+ }
283
+ }
284
+ }
285
+ }
286
+ }
287
+ for (const child of node.children || []) {
288
+ visit(child);
289
+ }
290
+ };
291
+ visit(root);
292
+ return issues;
293
+ }
294
+ /**
295
+ * Extract type references from code using Tree-sitter extractor.
296
+ */
297
+ function extractTypeReferencesFromAST(code) {
298
+ const refs = [];
299
+ const typeRefs = extractTypeReferencesAST(code, "typescript");
300
+ const lines = code.split("\n");
301
+ for (const ref of typeRefs) {
302
+ const lineText = lines[ref.line - 1] || "";
303
+ // Best-effort column: first occurrence of the type name in the line.
304
+ const col = Math.max(0, lineText.indexOf(ref.name));
305
+ if (!isKeyword(ref.name, "typescript") && ref.name.length > 1) {
306
+ refs.push({
307
+ name: ref.name,
308
+ line: ref.line,
309
+ column: col,
310
+ code: lineText.trim(),
311
+ });
312
+ }
313
+ }
314
+ return refs;
315
+ }
316
+ /**
317
+ * Extract property accesses from code using Tree-sitter.
318
+ *
319
+ * We intentionally only emit accesses for *simple* object identifiers.
320
+ * This matches the original heuristic intent while avoiding regex false positives
321
+ * in strings/comments.
322
+ */
323
+ function extractPropertyAccessesAST(code, symbolTable) {
324
+ const accesses = [];
325
+ const parser = getParser("typescript");
326
+ const tree = parser.parse(code);
327
+ const root = tree.rootNode;
328
+ const lines = code.split("\n");
329
+ const getText = (node) => code.slice(node.startIndex, node.endIndex);
330
+ const unwrapParens = (node) => {
331
+ if (!node)
332
+ return node;
333
+ if (node.type !== "parenthesized_expression")
334
+ return node;
335
+ // ( expr )
336
+ for (const c of node.children || []) {
337
+ if (c.type !== "(" && c.type !== ")")
338
+ return c;
339
+ }
340
+ return node;
341
+ };
342
+ const visit = (node) => {
343
+ if (!node)
344
+ return;
345
+ if (node.type === "member_expression") {
346
+ const objNode = unwrapParens(node.childForFieldName?.("object"));
347
+ const propNode = node.childForFieldName?.("property");
348
+ if (objNode && propNode) {
349
+ // Only treat simple identifiers as "objects" for this heuristic.
350
+ if (objNode.type === "identifier") {
351
+ const objectName = getText(objNode);
352
+ const propertyName = getText(propNode);
353
+ const line = node.startPosition?.row + 1 || 0;
354
+ if (!isBuiltInObject(objectName) &&
355
+ !isReturnObject(objectName) &&
356
+ !isKnownProperty(objectName, propertyName, symbolTable) &&
357
+ symbolTable.variables.includes(objectName)) {
358
+ accesses.push({
359
+ object: objectName,
360
+ property: propertyName,
361
+ line,
362
+ column: propNode.startPosition?.column || 0,
363
+ code: (lines[line - 1] || "").trim(),
364
+ });
365
+ }
366
+ }
367
+ }
368
+ }
369
+ for (const child of node.children || []) {
370
+ visit(child);
371
+ }
372
+ };
373
+ visit(root);
374
+ return accesses;
375
+ }
376
+ /**
377
+ * Check if object name is a common return variable name
378
+ */
379
+ function isReturnObject(name) {
380
+ const returnNames = [
381
+ "result",
382
+ "data",
383
+ "response",
384
+ "res",
385
+ "output",
386
+ "value",
387
+ "item",
388
+ "obj",
389
+ "profile",
390
+ "session",
391
+ "token",
392
+ ];
393
+ return returnNames.includes(name.toLowerCase());
394
+ }
395
+ /**
396
+ * Check if a type is built-in
397
+ */
398
+ function isBuiltInType(name) {
399
+ const builtInTypes = [
400
+ "string",
401
+ "number",
402
+ "boolean",
403
+ "void",
404
+ "null",
405
+ "undefined",
406
+ "any",
407
+ "unknown",
408
+ "never",
409
+ "object",
410
+ "Array",
411
+ "Function",
412
+ "Promise",
413
+ "Date",
414
+ "RegExp",
415
+ "Error",
416
+ "Map",
417
+ "Set",
418
+ "WeakMap",
419
+ "WeakSet",
420
+ "JSON",
421
+ "Math",
422
+ "URL",
423
+ "URLSearchParams",
424
+ "FormData",
425
+ "Blob",
426
+ "Response",
427
+ "Request",
428
+ "Headers",
429
+ "ReadonlyArray",
430
+ "Partial",
431
+ "Required",
432
+ "Pick",
433
+ "Omit",
434
+ "Record",
435
+ "Exclude",
436
+ "Extract",
437
+ ];
438
+ return builtInTypes.includes(name);
439
+ }
440
+ /**
441
+ * Check if an object is built-in
442
+ */
443
+ function isBuiltInObject(name) {
444
+ const builtInObjects = [
445
+ "console",
446
+ "Math",
447
+ "JSON",
448
+ "Date",
449
+ "Array",
450
+ "Object",
451
+ "String",
452
+ "Number",
453
+ "Boolean",
454
+ "Promise",
455
+ "Map",
456
+ "Set",
457
+ "WeakMap",
458
+ "WeakSet",
459
+ "URL",
460
+ "URLSearchParams",
461
+ "FormData",
462
+ "Blob",
463
+ "localStorage",
464
+ "sessionStorage",
465
+ "document",
466
+ "window",
467
+ "navigator",
468
+ ];
469
+ return builtInObjects.includes(name);
470
+ }
471
+ /**
472
+ * Check if a property is known for an object
473
+ */
474
+ function isKnownProperty(object, property, _symbolTable) {
475
+ // This is a simplified check. In a full implementation, we would
476
+ // track type definitions and their properties
477
+ const knownProperties = {
478
+ user: ["id", "name", "email"],
479
+ config: ["port", "host", "environment"],
480
+ request: ["headers", "body", "method", "url"],
481
+ response: ["status", "data", "headers"],
482
+ };
483
+ const lowerObject = object.toLowerCase();
484
+ for (const [key, props] of Object.entries(knownProperties)) {
485
+ if (lowerObject.includes(key) && props.includes(property)) {
486
+ return true;
487
+ }
488
+ }
489
+ return false;
490
+ }
491
+ /**
492
+ * Get available types from symbol table
493
+ */
494
+ function getAvailableTypes(symbolTable) {
495
+ return [
496
+ ...symbolTable.classes,
497
+ ...(symbolTable.interfaces || []),
498
+ "string",
499
+ "number",
500
+ "boolean",
501
+ "void",
502
+ "Array",
503
+ "Object",
504
+ "Promise",
505
+ ];
506
+ }
507
+ /**
508
+ * Check if a name is a language keyword
509
+ */
510
+ function isKeyword(name, language) {
511
+ const keywords = {
512
+ javascript: [
513
+ "if",
514
+ "else",
515
+ "for",
516
+ "while",
517
+ "return",
518
+ "function",
519
+ "const",
520
+ "let",
521
+ "var",
522
+ "class",
523
+ "new",
524
+ "this",
525
+ "typeof",
526
+ "instanceof",
527
+ ],
528
+ typescript: [
529
+ "if",
530
+ "else",
531
+ "for",
532
+ "while",
533
+ "return",
534
+ "function",
535
+ "const",
536
+ "let",
537
+ "var",
538
+ "class",
539
+ "new",
540
+ "this",
541
+ "typeof",
542
+ "instanceof",
543
+ "interface",
544
+ "type",
545
+ ],
546
+ python: [
547
+ "if",
548
+ "elif",
549
+ "else",
550
+ "for",
551
+ "while",
552
+ "return",
553
+ "def",
554
+ "class",
555
+ "import",
556
+ "from",
557
+ "as",
558
+ "with",
559
+ "lambda",
560
+ "yield",
561
+ ],
562
+ go: [
563
+ "if",
564
+ "else",
565
+ "for",
566
+ "return",
567
+ "func",
568
+ "type",
569
+ "struct",
570
+ "interface",
571
+ "go",
572
+ "defer",
573
+ "range",
574
+ "var",
575
+ "const",
576
+ ],
577
+ };
578
+ return keywords[language]?.includes(name) || false;
579
+ }
580
+ //# sourceMappingURL=typeChecker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typeChecker.js","sourceRoot":"","sources":["../../src/analyzers/typeChecker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Usage Pattern Analyzer
3
+ *
4
+ * Secret #5: Usage Pattern Consistency (The Helpfulness Pattern)
5
+ *
6
+ * Learns "rituals" from the codebase:
7
+ * - Co-occurrence: Which functions are almost always called together?
8
+ * - Argument Rituals: Common arguments passed to specific functions.
9
+ * - Call Ordering: (Heuristic) Which symbols often appear in sequence.
10
+ *
11
+ * @format
12
+ */
13
+ import { SymbolGraph } from "../types/symbolGraph.js";
14
+ export interface UsagePattern {
15
+ symbol: string;
16
+ coOccurringSymbols: Array<{
17
+ name: string;
18
+ frequency: number;
19
+ }>;
20
+ commonArguments: Array<{
21
+ value: string;
22
+ count: number;
23
+ }>;
24
+ callConfidence: number;
25
+ }
26
+ export declare class UsagePatternAnalyzer {
27
+ private patterns;
28
+ /**
29
+ * Analyze the symbol graph to discover patterns
30
+ */
31
+ analyze(graph: SymbolGraph): Promise<void>;
32
+ /**
33
+ * Check if new code deviates from established patterns
34
+ */
35
+ checkDeviations(symbolName: string, surroundingSymbols: string[]): string[];
36
+ /**
37
+ * Extract co-occurrence statistics for a symbol
38
+ */
39
+ private extractCoOccurrence;
40
+ }
41
+ export declare const usagePatternAnalyzer: UsagePatternAnalyzer;
42
+ //# sourceMappingURL=usagePatterns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usagePatterns.d.ts","sourceRoot":"","sources":["../../src/analyzers/usagePatterns.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAGtD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/D,eAAe,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzD,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAmC;IAEnD;;OAEG;IACG,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBhD;;OAEG;IACH,eAAe,CACb,UAAU,EAAE,MAAM,EAClB,kBAAkB,EAAE,MAAM,EAAE,GAC3B,MAAM,EAAE;IAoBX;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAoB5B;AAED,eAAO,MAAM,oBAAoB,sBAA6B,CAAC"}