codereview-aia 0.1.2 → 0.1.3

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 (427) hide show
  1. package/dist/index.js +0 -2
  2. package/docs/opt-in-full-context.md +27 -0
  3. package/package.json +11 -11
  4. package/reports/cr-cr-aia-17-11-2025-20-13.md +354 -0
  5. package/src/clients/implementations/openRouterClient.ts +2 -0
  6. package/src/clients/openRouterClient.ts +8 -1
  7. package/src/clients/utils/promptFormatter.ts +97 -20
  8. package/src/core/handlers/FileProcessingHandler.ts +6 -0
  9. package/src/index.ts +0 -3
  10. package/src/runtime/cliEntry.ts +21 -3
  11. package/src/runtime/fileCollector.ts +278 -5
  12. package/src/runtime/reviewPipeline.ts +46 -7
  13. package/src/runtime/runAiCodeReview.ts +161 -6
  14. package/src/runtime/ui/RuntimeApp.tsx +34 -5
  15. package/src/runtime/ui/screens/ProgressScreen.tsx +49 -1
  16. package/src/runtime/ui/screens/ResultsScreen.tsx +29 -9
  17. package/src/types/review.ts +18 -0
  18. package/dist/analysis/FindingsExtractor.d.ts +0 -105
  19. package/dist/analysis/FindingsExtractor.js +0 -363
  20. package/dist/analysis/FindingsExtractor.js.map +0 -1
  21. package/dist/analysis/ai-detection/analyzers/BaseAnalyzer.d.ts +0 -111
  22. package/dist/analysis/ai-detection/analyzers/BaseAnalyzer.js +0 -215
  23. package/dist/analysis/ai-detection/analyzers/BaseAnalyzer.js.map +0 -1
  24. package/dist/analysis/ai-detection/analyzers/DocumentationAnalyzer.d.ts +0 -142
  25. package/dist/analysis/ai-detection/analyzers/DocumentationAnalyzer.js +0 -503
  26. package/dist/analysis/ai-detection/analyzers/DocumentationAnalyzer.js.map +0 -1
  27. package/dist/analysis/ai-detection/analyzers/GitHistoryAnalyzer.d.ts +0 -88
  28. package/dist/analysis/ai-detection/analyzers/GitHistoryAnalyzer.js +0 -343
  29. package/dist/analysis/ai-detection/analyzers/GitHistoryAnalyzer.js.map +0 -1
  30. package/dist/analysis/ai-detection/core/AIDetectionEngine.d.ts +0 -104
  31. package/dist/analysis/ai-detection/core/AIDetectionEngine.js +0 -369
  32. package/dist/analysis/ai-detection/core/AIDetectionEngine.js.map +0 -1
  33. package/dist/analysis/ai-detection/types/DetectionTypes.d.ts +0 -364
  34. package/dist/analysis/ai-detection/types/DetectionTypes.js +0 -32
  35. package/dist/analysis/ai-detection/types/DetectionTypes.js.map +0 -1
  36. package/dist/analysis/ai-detection/utils/SubmissionConverter.d.ts +0 -97
  37. package/dist/analysis/ai-detection/utils/SubmissionConverter.js +0 -339
  38. package/dist/analysis/ai-detection/utils/SubmissionConverter.js.map +0 -1
  39. package/dist/analysis/context/ReviewContext.d.ts +0 -184
  40. package/dist/analysis/context/ReviewContext.js +0 -294
  41. package/dist/analysis/context/ReviewContext.js.map +0 -1
  42. package/dist/analysis/context/index.d.ts +0 -6
  43. package/dist/analysis/context/index.js +0 -23
  44. package/dist/analysis/context/index.js.map +0 -1
  45. package/dist/analysis/index.d.ts +0 -7
  46. package/dist/analysis/index.js +0 -24
  47. package/dist/analysis/index.js.map +0 -1
  48. package/dist/analysis/tokens/TokenAnalysisFormatter.d.ts +0 -27
  49. package/dist/analysis/tokens/TokenAnalysisFormatter.js +0 -143
  50. package/dist/analysis/tokens/TokenAnalysisFormatter.js.map +0 -1
  51. package/dist/analysis/tokens/TokenAnalyzer.d.ts +0 -155
  52. package/dist/analysis/tokens/TokenAnalyzer.js +0 -502
  53. package/dist/analysis/tokens/TokenAnalyzer.js.map +0 -1
  54. package/dist/analysis/tokens/index.d.ts +0 -7
  55. package/dist/analysis/tokens/index.js +0 -24
  56. package/dist/analysis/tokens/index.js.map +0 -1
  57. package/dist/clients/base/abstractClient.d.ts +0 -99
  58. package/dist/clients/base/abstractClient.js +0 -98
  59. package/dist/clients/base/abstractClient.js.map +0 -1
  60. package/dist/clients/base/httpClient.d.ts +0 -24
  61. package/dist/clients/base/httpClient.js +0 -147
  62. package/dist/clients/base/httpClient.js.map +0 -1
  63. package/dist/clients/base/index.d.ts +0 -11
  64. package/dist/clients/base/index.js +0 -28
  65. package/dist/clients/base/index.js.map +0 -1
  66. package/dist/clients/base/modelDetection.d.ts +0 -41
  67. package/dist/clients/base/modelDetection.js +0 -88
  68. package/dist/clients/base/modelDetection.js.map +0 -1
  69. package/dist/clients/base/responseProcessor.d.ts +0 -45
  70. package/dist/clients/base/responseProcessor.js +0 -495
  71. package/dist/clients/base/responseProcessor.js.map +0 -1
  72. package/dist/clients/factory/clientFactory.d.ts +0 -23
  73. package/dist/clients/factory/clientFactory.js +0 -50
  74. package/dist/clients/factory/clientFactory.js.map +0 -1
  75. package/dist/clients/factory/index.d.ts +0 -7
  76. package/dist/clients/factory/index.js +0 -24
  77. package/dist/clients/factory/index.js.map +0 -1
  78. package/dist/clients/implementations/index.d.ts +0 -7
  79. package/dist/clients/implementations/index.js +0 -24
  80. package/dist/clients/implementations/index.js.map +0 -1
  81. package/dist/clients/implementations/openRouterClient.d.ts +0 -69
  82. package/dist/clients/implementations/openRouterClient.js +0 -294
  83. package/dist/clients/implementations/openRouterClient.js.map +0 -1
  84. package/dist/clients/openRouterClient.d.ts +0 -42
  85. package/dist/clients/openRouterClient.js +0 -738
  86. package/dist/clients/openRouterClient.js.map +0 -1
  87. package/dist/clients/openRouterClientWrapper.d.ts +0 -22
  88. package/dist/clients/openRouterClientWrapper.js +0 -64
  89. package/dist/clients/openRouterClientWrapper.js.map +0 -1
  90. package/dist/clients/utils/directoryStructure.d.ts +0 -14
  91. package/dist/clients/utils/directoryStructure.js +0 -48
  92. package/dist/clients/utils/directoryStructure.js.map +0 -1
  93. package/dist/clients/utils/index.d.ts +0 -10
  94. package/dist/clients/utils/index.js +0 -31
  95. package/dist/clients/utils/index.js.map +0 -1
  96. package/dist/clients/utils/languageDetection.d.ts +0 -13
  97. package/dist/clients/utils/languageDetection.js +0 -46
  98. package/dist/clients/utils/languageDetection.js.map +0 -1
  99. package/dist/clients/utils/promptFormatter.d.ts +0 -36
  100. package/dist/clients/utils/promptFormatter.js +0 -92
  101. package/dist/clients/utils/promptFormatter.js.map +0 -1
  102. package/dist/clients/utils/promptLoader.d.ts +0 -27
  103. package/dist/clients/utils/promptLoader.js +0 -49
  104. package/dist/clients/utils/promptLoader.js.map +0 -1
  105. package/dist/clients/utils/tokenCounter.d.ts +0 -81
  106. package/dist/clients/utils/tokenCounter.js +0 -209
  107. package/dist/clients/utils/tokenCounter.js.map +0 -1
  108. package/dist/core/ApiClientSelector.d.ts +0 -8
  109. package/dist/core/ApiClientSelector.js +0 -29
  110. package/dist/core/ApiClientSelector.js.map +0 -1
  111. package/dist/core/ConfigurationService.d.ts +0 -286
  112. package/dist/core/ConfigurationService.js +0 -477
  113. package/dist/core/ConfigurationService.js.map +0 -1
  114. package/dist/core/ConsolidationService.d.ts +0 -99
  115. package/dist/core/ConsolidationService.js +0 -341
  116. package/dist/core/ConsolidationService.js.map +0 -1
  117. package/dist/core/InteractiveDisplayManager.d.ts +0 -22
  118. package/dist/core/InteractiveDisplayManager.js +0 -70
  119. package/dist/core/InteractiveDisplayManager.js.map +0 -1
  120. package/dist/core/OutputManager.d.ts +0 -26
  121. package/dist/core/OutputManager.js +0 -217
  122. package/dist/core/OutputManager.js.map +0 -1
  123. package/dist/core/ReviewGenerator.d.ts +0 -13
  124. package/dist/core/ReviewGenerator.js +0 -102
  125. package/dist/core/ReviewGenerator.js.map +0 -1
  126. package/dist/core/fileDiscovery.d.ts +0 -35
  127. package/dist/core/fileDiscovery.js +0 -202
  128. package/dist/core/fileDiscovery.js.map +0 -1
  129. package/dist/core/handlers/EstimationHandler.d.ts +0 -18
  130. package/dist/core/handlers/EstimationHandler.js +0 -110
  131. package/dist/core/handlers/EstimationHandler.js.map +0 -1
  132. package/dist/core/handlers/FileProcessingHandler.d.ts +0 -31
  133. package/dist/core/handlers/FileProcessingHandler.js +0 -159
  134. package/dist/core/handlers/FileProcessingHandler.js.map +0 -1
  135. package/dist/core/handlers/OutputHandler.d.ts +0 -27
  136. package/dist/core/handlers/OutputHandler.js +0 -127
  137. package/dist/core/handlers/OutputHandler.js.map +0 -1
  138. package/dist/core/handlers/ReviewExecutor.d.ts +0 -32
  139. package/dist/core/handlers/ReviewExecutor.js +0 -111
  140. package/dist/core/handlers/ReviewExecutor.js.map +0 -1
  141. package/dist/core/reviewOrchestrator.d.ts +0 -24
  142. package/dist/core/reviewOrchestrator.js +0 -294
  143. package/dist/core/reviewOrchestrator.js.map +0 -1
  144. package/dist/core/utils/ModelInfoUtils.d.ts +0 -16
  145. package/dist/core/utils/ModelInfoUtils.js +0 -54
  146. package/dist/core/utils/ModelInfoUtils.js.map +0 -1
  147. package/dist/formatters/outputFormatter.d.ts +0 -31
  148. package/dist/formatters/outputFormatter.js +0 -65
  149. package/dist/formatters/outputFormatter.js.map +0 -1
  150. package/dist/formatters/utils/IssueFormatters.d.ts +0 -20
  151. package/dist/formatters/utils/IssueFormatters.js +0 -67
  152. package/dist/formatters/utils/IssueFormatters.js.map +0 -1
  153. package/dist/formatters/utils/JsonFormatter.d.ts +0 -13
  154. package/dist/formatters/utils/JsonFormatter.js +0 -57
  155. package/dist/formatters/utils/JsonFormatter.js.map +0 -1
  156. package/dist/formatters/utils/MarkdownFormatters.d.ts +0 -51
  157. package/dist/formatters/utils/MarkdownFormatters.js +0 -456
  158. package/dist/formatters/utils/MarkdownFormatters.js.map +0 -1
  159. package/dist/formatters/utils/MetadataFormatter.d.ts +0 -65
  160. package/dist/formatters/utils/MetadataFormatter.js +0 -219
  161. package/dist/formatters/utils/MetadataFormatter.js.map +0 -1
  162. package/dist/formatters/utils/ModelInfoExtractor.d.ts +0 -33
  163. package/dist/formatters/utils/ModelInfoExtractor.js +0 -111
  164. package/dist/formatters/utils/ModelInfoExtractor.js.map +0 -1
  165. package/dist/index.d.ts +0 -2
  166. package/dist/index.js.map +0 -1
  167. package/dist/plugins/PluginInterface.d.ts +0 -44
  168. package/dist/plugins/PluginInterface.js +0 -9
  169. package/dist/plugins/PluginInterface.js.map +0 -1
  170. package/dist/plugins/PluginManager.d.ts +0 -51
  171. package/dist/plugins/PluginManager.js +0 -151
  172. package/dist/plugins/PluginManager.js.map +0 -1
  173. package/dist/prompts/PromptManager.d.ts +0 -30
  174. package/dist/prompts/PromptManager.js +0 -62
  175. package/dist/prompts/PromptManager.js.map +0 -1
  176. package/dist/prompts/cache/PromptCache.d.ts +0 -32
  177. package/dist/prompts/cache/PromptCache.js +0 -48
  178. package/dist/prompts/cache/PromptCache.js.map +0 -1
  179. package/dist/runtime/auth/service.d.ts +0 -2
  180. package/dist/runtime/auth/service.js +0 -41
  181. package/dist/runtime/auth/service.js.map +0 -1
  182. package/dist/runtime/auth/session.d.ts +0 -5
  183. package/dist/runtime/auth/session.js +0 -87
  184. package/dist/runtime/auth/session.js.map +0 -1
  185. package/dist/runtime/auth/types.d.ts +0 -9
  186. package/dist/runtime/auth/types.js +0 -3
  187. package/dist/runtime/auth/types.js.map +0 -1
  188. package/dist/runtime/cliEntry.d.ts +0 -1
  189. package/dist/runtime/cliEntry.js +0 -213
  190. package/dist/runtime/cliEntry.js.map +0 -1
  191. package/dist/runtime/debug/logManager.d.ts +0 -5
  192. package/dist/runtime/debug/logManager.js +0 -31
  193. package/dist/runtime/debug/logManager.js.map +0 -1
  194. package/dist/runtime/errors.d.ts +0 -5
  195. package/dist/runtime/errors.js +0 -15
  196. package/dist/runtime/errors.js.map +0 -1
  197. package/dist/runtime/fileCollector.d.ts +0 -5
  198. package/dist/runtime/fileCollector.js +0 -167
  199. package/dist/runtime/fileCollector.js.map +0 -1
  200. package/dist/runtime/manifest.d.ts +0 -1
  201. package/dist/runtime/manifest.js +0 -65
  202. package/dist/runtime/manifest.js.map +0 -1
  203. package/dist/runtime/openrouterProxy.d.ts +0 -4
  204. package/dist/runtime/openrouterProxy.js +0 -43
  205. package/dist/runtime/openrouterProxy.js.map +0 -1
  206. package/dist/runtime/preprod/webCheck.d.ts +0 -1
  207. package/dist/runtime/preprod/webCheck.js +0 -98
  208. package/dist/runtime/preprod/webCheck.js.map +0 -1
  209. package/dist/runtime/proxyConfig.d.ts +0 -6
  210. package/dist/runtime/proxyConfig.js +0 -86
  211. package/dist/runtime/proxyConfig.js.map +0 -1
  212. package/dist/runtime/proxyEnvironment.d.ts +0 -3
  213. package/dist/runtime/proxyEnvironment.js +0 -63
  214. package/dist/runtime/proxyEnvironment.js.map +0 -1
  215. package/dist/runtime/reportMerge.d.ts +0 -30
  216. package/dist/runtime/reportMerge.js +0 -70
  217. package/dist/runtime/reportMerge.js.map +0 -1
  218. package/dist/runtime/reporting/markdownReportBuilder.d.ts +0 -15
  219. package/dist/runtime/reporting/markdownReportBuilder.js +0 -97
  220. package/dist/runtime/reporting/markdownReportBuilder.js.map +0 -1
  221. package/dist/runtime/reporting/reportDataCollector.d.ts +0 -31
  222. package/dist/runtime/reporting/reportDataCollector.js +0 -170
  223. package/dist/runtime/reporting/reportDataCollector.js.map +0 -1
  224. package/dist/runtime/reporting/summaryGenerator.d.ts +0 -10
  225. package/dist/runtime/reporting/summaryGenerator.js +0 -67
  226. package/dist/runtime/reporting/summaryGenerator.js.map +0 -1
  227. package/dist/runtime/reviewPipeline.d.ts +0 -28
  228. package/dist/runtime/reviewPipeline.js +0 -122
  229. package/dist/runtime/reviewPipeline.js.map +0 -1
  230. package/dist/runtime/runAiCodeReview.d.ts +0 -10
  231. package/dist/runtime/runAiCodeReview.js +0 -138
  232. package/dist/runtime/runAiCodeReview.js.map +0 -1
  233. package/dist/runtime/runtimeConfig.d.ts +0 -4
  234. package/dist/runtime/runtimeConfig.js +0 -7
  235. package/dist/runtime/runtimeConfig.js.map +0 -1
  236. package/dist/runtime/ui/Layout.d.ts +0 -11
  237. package/dist/runtime/ui/Layout.js +0 -47
  238. package/dist/runtime/ui/Layout.js.map +0 -1
  239. package/dist/runtime/ui/RuntimeApp.d.ts +0 -6
  240. package/dist/runtime/ui/RuntimeApp.js +0 -161
  241. package/dist/runtime/ui/RuntimeApp.js.map +0 -1
  242. package/dist/runtime/ui/inkModules.d.ts +0 -10
  243. package/dist/runtime/ui/inkModules.js +0 -63
  244. package/dist/runtime/ui/inkModules.js.map +0 -1
  245. package/dist/runtime/ui/screens/AuthScreen.d.ts +0 -6
  246. package/dist/runtime/ui/screens/AuthScreen.js +0 -67
  247. package/dist/runtime/ui/screens/AuthScreen.js.map +0 -1
  248. package/dist/runtime/ui/screens/ModeSelection.d.ts +0 -10
  249. package/dist/runtime/ui/screens/ModeSelection.js +0 -100
  250. package/dist/runtime/ui/screens/ModeSelection.js.map +0 -1
  251. package/dist/runtime/ui/screens/ProgressScreen.d.ts +0 -7
  252. package/dist/runtime/ui/screens/ProgressScreen.js +0 -38
  253. package/dist/runtime/ui/screens/ProgressScreen.js.map +0 -1
  254. package/dist/runtime/ui/screens/ResultsScreen.d.ts +0 -7
  255. package/dist/runtime/ui/screens/ResultsScreen.js +0 -22
  256. package/dist/runtime/ui/screens/ResultsScreen.js.map +0 -1
  257. package/dist/strategies/ArchitecturalReviewStrategy.d.ts +0 -29
  258. package/dist/strategies/ArchitecturalReviewStrategy.js +0 -42
  259. package/dist/strategies/ArchitecturalReviewStrategy.js.map +0 -1
  260. package/dist/strategies/CodingTestReviewStrategy.d.ts +0 -194
  261. package/dist/strategies/CodingTestReviewStrategy.js +0 -681
  262. package/dist/strategies/CodingTestReviewStrategy.js.map +0 -1
  263. package/dist/strategies/ConsolidatedReviewStrategy.d.ts +0 -25
  264. package/dist/strategies/ConsolidatedReviewStrategy.js +0 -45
  265. package/dist/strategies/ConsolidatedReviewStrategy.js.map +0 -1
  266. package/dist/strategies/ExtractPatternsReviewStrategy.d.ts +0 -30
  267. package/dist/strategies/ExtractPatternsReviewStrategy.js +0 -51
  268. package/dist/strategies/ExtractPatternsReviewStrategy.js.map +0 -1
  269. package/dist/strategies/MultiPassReviewStrategy.d.ts +0 -86
  270. package/dist/strategies/MultiPassReviewStrategy.js +0 -590
  271. package/dist/strategies/MultiPassReviewStrategy.js.map +0 -1
  272. package/dist/strategies/ReviewStrategy.d.ts +0 -45
  273. package/dist/strategies/ReviewStrategy.js +0 -24
  274. package/dist/strategies/ReviewStrategy.js.map +0 -1
  275. package/dist/strategies/StrategyFactory.d.ts +0 -19
  276. package/dist/strategies/StrategyFactory.js +0 -72
  277. package/dist/strategies/StrategyFactory.js.map +0 -1
  278. package/dist/strategies/index.d.ts +0 -13
  279. package/dist/strategies/index.js +0 -30
  280. package/dist/strategies/index.js.map +0 -1
  281. package/dist/tokenizers/baseTokenizer.d.ts +0 -25
  282. package/dist/tokenizers/baseTokenizer.js +0 -48
  283. package/dist/tokenizers/baseTokenizer.js.map +0 -1
  284. package/dist/tokenizers/gptTokenizer.d.ts +0 -7
  285. package/dist/tokenizers/gptTokenizer.js +0 -28
  286. package/dist/tokenizers/gptTokenizer.js.map +0 -1
  287. package/dist/tokenizers/index.d.ts +0 -7
  288. package/dist/tokenizers/index.js +0 -24
  289. package/dist/tokenizers/index.js.map +0 -1
  290. package/dist/types/apiResponses.d.ts +0 -39
  291. package/dist/types/apiResponses.js +0 -9
  292. package/dist/types/apiResponses.js.map +0 -1
  293. package/dist/types/cli.d.ts +0 -22
  294. package/dist/types/cli.js +0 -3
  295. package/dist/types/cli.js.map +0 -1
  296. package/dist/types/common.d.ts +0 -22
  297. package/dist/types/common.js +0 -14
  298. package/dist/types/common.js.map +0 -1
  299. package/dist/types/configuration.d.ts +0 -682
  300. package/dist/types/configuration.js +0 -65
  301. package/dist/types/configuration.js.map +0 -1
  302. package/dist/types/review.d.ts +0 -258
  303. package/dist/types/review.js +0 -8
  304. package/dist/types/review.js.map +0 -1
  305. package/dist/types/reviewSchema.d.ts +0 -543
  306. package/dist/types/reviewSchema.js +0 -121
  307. package/dist/types/reviewSchema.js.map +0 -1
  308. package/dist/types/structuredReview.d.ts +0 -119
  309. package/dist/types/structuredReview.js +0 -6
  310. package/dist/types/structuredReview.js.map +0 -1
  311. package/dist/types/tokenAnalysis.d.ts +0 -44
  312. package/dist/types/tokenAnalysis.js +0 -4
  313. package/dist/types/tokenAnalysis.js.map +0 -1
  314. package/dist/utils/FileReader.d.ts +0 -33
  315. package/dist/utils/FileReader.js +0 -88
  316. package/dist/utils/FileReader.js.map +0 -1
  317. package/dist/utils/FileWriter.d.ts +0 -26
  318. package/dist/utils/FileWriter.js +0 -76
  319. package/dist/utils/FileWriter.js.map +0 -1
  320. package/dist/utils/PathGenerator.d.ts +0 -30
  321. package/dist/utils/PathGenerator.js +0 -82
  322. package/dist/utils/PathGenerator.js.map +0 -1
  323. package/dist/utils/api/apiUtils.d.ts +0 -3
  324. package/dist/utils/api/apiUtils.js +0 -20
  325. package/dist/utils/api/apiUtils.js.map +0 -1
  326. package/dist/utils/api/index.d.ts +0 -1
  327. package/dist/utils/api/index.js +0 -18
  328. package/dist/utils/api/index.js.map +0 -1
  329. package/dist/utils/apiErrorHandler.d.ts +0 -130
  330. package/dist/utils/apiErrorHandler.js +0 -256
  331. package/dist/utils/apiErrorHandler.js.map +0 -1
  332. package/dist/utils/ciDataCollector.d.ts +0 -51
  333. package/dist/utils/ciDataCollector.js +0 -197
  334. package/dist/utils/ciDataCollector.js.map +0 -1
  335. package/dist/utils/codingTestConfigLoader.d.ts +0 -66
  336. package/dist/utils/codingTestConfigLoader.js +0 -420
  337. package/dist/utils/codingTestConfigLoader.js.map +0 -1
  338. package/dist/utils/dependencies/aiDependencyAnalyzer.d.ts +0 -30
  339. package/dist/utils/dependencies/aiDependencyAnalyzer.js +0 -343
  340. package/dist/utils/dependencies/aiDependencyAnalyzer.js.map +0 -1
  341. package/dist/utils/detection/frameworkDetector.d.ts +0 -43
  342. package/dist/utils/detection/frameworkDetector.js +0 -795
  343. package/dist/utils/detection/frameworkDetector.js.map +0 -1
  344. package/dist/utils/detection/index.d.ts +0 -9
  345. package/dist/utils/detection/index.js +0 -28
  346. package/dist/utils/detection/index.js.map +0 -1
  347. package/dist/utils/detection/projectTypeDetector.d.ts +0 -27
  348. package/dist/utils/detection/projectTypeDetector.js +0 -469
  349. package/dist/utils/detection/projectTypeDetector.js.map +0 -1
  350. package/dist/utils/diagramGenerator.d.ts +0 -49
  351. package/dist/utils/diagramGenerator.js +0 -218
  352. package/dist/utils/diagramGenerator.js.map +0 -1
  353. package/dist/utils/errorLogger.d.ts +0 -24
  354. package/dist/utils/errorLogger.js +0 -59
  355. package/dist/utils/errorLogger.js.map +0 -1
  356. package/dist/utils/estimationUtils.d.ts +0 -139
  357. package/dist/utils/estimationUtils.js +0 -329
  358. package/dist/utils/estimationUtils.js.map +0 -1
  359. package/dist/utils/fileFilters.d.ts +0 -72
  360. package/dist/utils/fileFilters.js +0 -338
  361. package/dist/utils/fileFilters.js.map +0 -1
  362. package/dist/utils/fileSystem.d.ts +0 -22
  363. package/dist/utils/fileSystem.js +0 -45
  364. package/dist/utils/fileSystem.js.map +0 -1
  365. package/dist/utils/index.d.ts +0 -22
  366. package/dist/utils/index.js +0 -52
  367. package/dist/utils/index.js.map +0 -1
  368. package/dist/utils/logger.d.ts +0 -77
  369. package/dist/utils/logger.js +0 -271
  370. package/dist/utils/logger.js.map +0 -1
  371. package/dist/utils/pathValidator.d.ts +0 -40
  372. package/dist/utils/pathValidator.js +0 -98
  373. package/dist/utils/pathValidator.js.map +0 -1
  374. package/dist/utils/priorityFilter.d.ts +0 -34
  375. package/dist/utils/priorityFilter.js +0 -54
  376. package/dist/utils/priorityFilter.js.map +0 -1
  377. package/dist/utils/projectDocs.d.ts +0 -47
  378. package/dist/utils/projectDocs.js +0 -158
  379. package/dist/utils/projectDocs.js.map +0 -1
  380. package/dist/utils/promptPaths.d.ts +0 -6
  381. package/dist/utils/promptPaths.js +0 -33
  382. package/dist/utils/promptPaths.js.map +0 -1
  383. package/dist/utils/promptTemplateManager.d.ts +0 -34
  384. package/dist/utils/promptTemplateManager.js +0 -140
  385. package/dist/utils/promptTemplateManager.js.map +0 -1
  386. package/dist/utils/review/consolidateReview.d.ts +0 -15
  387. package/dist/utils/review/consolidateReview.js +0 -481
  388. package/dist/utils/review/consolidateReview.js.map +0 -1
  389. package/dist/utils/review/fixDisplay.d.ts +0 -20
  390. package/dist/utils/review/fixDisplay.js +0 -84
  391. package/dist/utils/review/fixDisplay.js.map +0 -1
  392. package/dist/utils/review/fixImplementation.d.ts +0 -28
  393. package/dist/utils/review/fixImplementation.js +0 -60
  394. package/dist/utils/review/fixImplementation.js.map +0 -1
  395. package/dist/utils/review/index.d.ts +0 -13
  396. package/dist/utils/review/index.js +0 -50
  397. package/dist/utils/review/index.js.map +0 -1
  398. package/dist/utils/review/interactiveProcessing.d.ts +0 -25
  399. package/dist/utils/review/interactiveProcessing.js +0 -251
  400. package/dist/utils/review/interactiveProcessing.js.map +0 -1
  401. package/dist/utils/review/progressTracker.d.ts +0 -106
  402. package/dist/utils/review/progressTracker.js +0 -227
  403. package/dist/utils/review/progressTracker.js.map +0 -1
  404. package/dist/utils/review/reviewExtraction.d.ts +0 -31
  405. package/dist/utils/review/reviewExtraction.js +0 -324
  406. package/dist/utils/review/reviewExtraction.js.map +0 -1
  407. package/dist/utils/review/types.d.ts +0 -45
  408. package/dist/utils/review/types.js +0 -18
  409. package/dist/utils/review/types.js.map +0 -1
  410. package/dist/utils/reviewActionHandler.d.ts +0 -16
  411. package/dist/utils/reviewActionHandler.js +0 -34
  412. package/dist/utils/reviewActionHandler.js.map +0 -1
  413. package/dist/utils/reviewParser.d.ts +0 -34
  414. package/dist/utils/reviewParser.js +0 -218
  415. package/dist/utils/reviewParser.js.map +0 -1
  416. package/dist/utils/sanitizer.d.ts +0 -82
  417. package/dist/utils/sanitizer.js +0 -239
  418. package/dist/utils/sanitizer.js.map +0 -1
  419. package/dist/utils/smartFileSelector.d.ts +0 -50
  420. package/dist/utils/smartFileSelector.js +0 -261
  421. package/dist/utils/smartFileSelector.js.map +0 -1
  422. package/dist/utils/templateLoader.d.ts +0 -44
  423. package/dist/utils/templateLoader.js +0 -431
  424. package/dist/utils/templateLoader.js.map +0 -1
  425. package/dist/utils/treeGenerator.d.ts +0 -12
  426. package/dist/utils/treeGenerator.js +0 -133
  427. package/dist/utils/treeGenerator.js.map +0 -1
@@ -1,795 +0,0 @@
1
- "use strict";
2
- /**
3
- * @fileoverview Framework detection utility for cr-aia
4
- *
5
- * This module analyzes project files to determine which framework is being used,
6
- * allowing for more specific prompts and improved review quality.
7
- */
8
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
- if (k2 === undefined) k2 = k;
10
- var desc = Object.getOwnPropertyDescriptor(m, k);
11
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
- desc = { enumerable: true, get: function() { return m[k]; } };
13
- }
14
- Object.defineProperty(o, k2, desc);
15
- }) : (function(o, m, k, k2) {
16
- if (k2 === undefined) k2 = k;
17
- o[k2] = m[k];
18
- }));
19
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
- Object.defineProperty(o, "default", { enumerable: true, value: v });
21
- }) : function(o, v) {
22
- o["default"] = v;
23
- });
24
- var __importStar = (this && this.__importStar) || (function () {
25
- var ownKeys = function(o) {
26
- ownKeys = Object.getOwnPropertyNames || function (o) {
27
- var ar = [];
28
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
- return ar;
30
- };
31
- return ownKeys(o);
32
- };
33
- return function (mod) {
34
- if (mod && mod.__esModule) return mod;
35
- var result = {};
36
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
- __setModuleDefault(result, mod);
38
- return result;
39
- };
40
- })();
41
- var __importDefault = (this && this.__importDefault) || function (mod) {
42
- return (mod && mod.__esModule) ? mod : { "default": mod };
43
- };
44
- Object.defineProperty(exports, "__esModule", { value: true });
45
- exports.detectFramework = detectFramework;
46
- exports.detectPrimaryLanguage = detectPrimaryLanguage;
47
- const fs = __importStar(require("node:fs/promises"));
48
- const path = __importStar(require("node:path"));
49
- const logger_1 = __importDefault(require("../logger"));
50
- /**
51
- * Recursively count files with specific extensions in a directory
52
- * @param dirPath Directory path to search
53
- * @param extensions Array of file extensions to count (e.g., ['.ts', '.tsx'])
54
- * @returns Promise resolving to the count of matching files
55
- */
56
- async function countFilesByExtension(dirPath, extensions) {
57
- let count = 0;
58
- try {
59
- const entries = await fs.readdir(dirPath, { withFileTypes: true });
60
- for (const entry of entries) {
61
- const fullPath = path.join(dirPath, entry.name);
62
- if (entry.isDirectory()) {
63
- // Skip common directories that shouldn't be counted
64
- if (!['node_modules', '.git', 'dist', 'build', '.next', 'coverage'].includes(entry.name)) {
65
- count += await countFilesByExtension(fullPath, extensions);
66
- }
67
- }
68
- else if (entry.isFile()) {
69
- const ext = path.extname(entry.name);
70
- if (extensions.includes(ext)) {
71
- count++;
72
- }
73
- }
74
- }
75
- }
76
- catch (error) {
77
- logger_1.default.debug(`Error reading directory ${dirPath}: ${error}`);
78
- }
79
- return count;
80
- }
81
- /**
82
- * Language-specific framework signatures
83
- */
84
- const FRAMEWORK_SIGNATURES = {
85
- typescript: [
86
- {
87
- name: 'react',
88
- files: ['src/App.tsx', 'src/App.jsx', 'public/index.html'],
89
- dependencies: ['react', 'react-dom'],
90
- weight: 0.8,
91
- type: 'ui',
92
- },
93
- {
94
- name: 'nextjs',
95
- files: ['next.config.js', 'pages/_app.tsx', 'pages/index.tsx'],
96
- dependencies: ['next'],
97
- weight: 0.9,
98
- type: 'fullstack',
99
- },
100
- {
101
- name: 'angular',
102
- files: ['angular.json', 'src/app/app.module.ts'],
103
- dependencies: ['@angular/core', '@angular/common'],
104
- weight: 0.9,
105
- type: 'ui',
106
- },
107
- {
108
- name: 'vue',
109
- files: ['src/App.vue', 'vue.config.js'],
110
- dependencies: ['vue'],
111
- weight: 0.8,
112
- type: 'ui',
113
- },
114
- {
115
- name: 'express',
116
- files: ['app.js', 'server.js'],
117
- dependencies: ['express'],
118
- weight: 0.7,
119
- type: 'backend',
120
- },
121
- ],
122
- php: [
123
- {
124
- name: 'laravel',
125
- files: ['artisan', 'composer.json'],
126
- directories: ['app/Http/Controllers', 'resources/views'],
127
- weight: 0.9,
128
- type: 'fullstack',
129
- },
130
- {
131
- name: 'symfony',
132
- files: ['symfony.lock', 'composer.json', 'config/bundles.php'],
133
- dependencies: ['symfony/symfony', 'symfony/framework-bundle'],
134
- weight: 0.9,
135
- type: 'fullstack',
136
- },
137
- {
138
- name: 'wordpress',
139
- files: ['wp-config.php', 'wp-content/themes'],
140
- directories: ['wp-admin', 'wp-content'],
141
- weight: 0.8,
142
- type: 'fullstack',
143
- },
144
- ],
145
- python: [
146
- {
147
- name: 'django',
148
- files: ['manage.py', 'settings.py'],
149
- directories: ['app/migrations'],
150
- dependencies: ['django'],
151
- weight: 0.9,
152
- type: 'fullstack',
153
- },
154
- {
155
- name: 'flask',
156
- files: ['app.py', 'wsgi.py'],
157
- dependencies: ['flask'],
158
- weight: 0.8,
159
- type: 'backend',
160
- },
161
- {
162
- name: 'fastapi',
163
- files: ['main.py'],
164
- dependencies: ['fastapi'],
165
- weight: 0.7,
166
- type: 'backend',
167
- },
168
- ],
169
- ruby: [
170
- {
171
- name: 'rails',
172
- files: ['Gemfile', 'config/routes.rb', 'app/controllers/application_controller.rb'],
173
- directories: ['app/models', 'app/controllers', 'app/views'],
174
- weight: 0.9,
175
- type: 'fullstack',
176
- },
177
- {
178
- name: 'sinatra',
179
- files: ['Gemfile', 'config.ru'],
180
- dependencies: ['sinatra'],
181
- weight: 0.8,
182
- type: 'backend',
183
- },
184
- ],
185
- dart: [
186
- {
187
- name: 'flutter',
188
- files: [
189
- 'pubspec.yaml',
190
- 'lib/main.dart',
191
- 'android/app/build.gradle',
192
- 'ios/Runner.xcodeproj/project.pbxproj',
193
- ],
194
- directories: ['lib', 'android', 'ios'],
195
- dependencies: ['flutter'],
196
- weight: 0.9,
197
- type: 'ui',
198
- },
199
- ],
200
- css: [
201
- {
202
- name: 'tailwind',
203
- files: ['tailwind.config.js', 'postcss.config.js'],
204
- dependencies: ['tailwindcss'],
205
- weight: 0.9,
206
- type: 'css',
207
- },
208
- {
209
- name: 'bootstrap',
210
- files: ['bootstrap.min.css', 'bootstrap.bundle.min.js'],
211
- dependencies: ['bootstrap'],
212
- weight: 0.8,
213
- type: 'css',
214
- },
215
- {
216
- name: 'material-ui',
217
- files: [],
218
- dependencies: ['@mui/material', '@material-ui/core'],
219
- weight: 0.8,
220
- type: 'css',
221
- },
222
- {
223
- name: 'styled-components',
224
- files: [],
225
- dependencies: ['styled-components'],
226
- weight: 0.7,
227
- type: 'css',
228
- },
229
- {
230
- name: 'emotion',
231
- files: [],
232
- dependencies: ['@emotion/react', '@emotion/styled'],
233
- weight: 0.7,
234
- type: 'css',
235
- },
236
- {
237
- name: 'chakra-ui',
238
- files: [],
239
- dependencies: ['@chakra-ui/react'],
240
- weight: 0.8,
241
- type: 'css',
242
- },
243
- {
244
- name: 'bulma',
245
- dependencies: ['bulma'],
246
- files: ['bulma.min.css'],
247
- weight: 0.7,
248
- type: 'css',
249
- },
250
- ],
251
- };
252
- /**
253
- * Detect frameworks used in a project
254
- * @param projectPath Path to project root directory
255
- * @returns Promise resolving to framework detection result
256
- */
257
- async function detectFramework(projectPath) {
258
- try {
259
- logger_1.default.debug(`Detecting framework for project at ${projectPath}`);
260
- // First, detect the primary language
261
- const language = await detectPrimaryLanguage(projectPath);
262
- if (!language) {
263
- logger_1.default.debug('Could not detect primary language.');
264
- return null;
265
- }
266
- logger_1.default.debug(`Detected primary language: ${language}`);
267
- // Now detect the framework based on the language
268
- if (FRAMEWORK_SIGNATURES[language]) {
269
- const frameworkResult = await detectFrameworkForLanguage(projectPath, language);
270
- if (frameworkResult) {
271
- logger_1.default.debug(`Detected framework: ${frameworkResult.framework} with confidence ${frameworkResult.confidence.toFixed(2)}`);
272
- if (frameworkResult.additionalFrameworks &&
273
- frameworkResult.additionalFrameworks.length > 0) {
274
- logger_1.default.debug(`Additional frameworks detected: ${frameworkResult.additionalFrameworks.join(', ')}`);
275
- }
276
- return frameworkResult;
277
- }
278
- }
279
- // If we couldn't detect a specific framework, return just the language
280
- logger_1.default.debug(`No specific framework detected for ${language}`);
281
- return {
282
- language,
283
- framework: 'none',
284
- confidence: 0.5,
285
- detectionMethod: 'language-only',
286
- };
287
- }
288
- catch (error) {
289
- logger_1.default.error(`Error detecting framework: ${error instanceof Error ? error.message : String(error)}`);
290
- return null;
291
- }
292
- }
293
- /**
294
- * Detect the primary programming language used in a project
295
- * @param projectPath Path to project root directory
296
- * @returns Promise resolving to language name
297
- */
298
- async function detectPrimaryLanguage(projectPath) {
299
- try {
300
- // Check for language-specific files
301
- const fileExtensionMap = {
302
- typescript: ['.ts', '.tsx'],
303
- javascript: ['.js', '.jsx'],
304
- php: ['.php'],
305
- python: ['.py'],
306
- ruby: ['.rb'],
307
- dart: ['.dart'],
308
- };
309
- // Count files by extension
310
- const extensionCounts = {};
311
- for (const [language, extensions] of Object.entries(fileExtensionMap)) {
312
- try {
313
- const count = await countFilesByExtension(projectPath, extensions);
314
- extensionCounts[language] = count;
315
- }
316
- catch (error) {
317
- logger_1.default.debug(`Error counting ${language} files: ${error}`);
318
- extensionCounts[language] = 0;
319
- }
320
- }
321
- // Find the language with the most files
322
- let maxCount = 0;
323
- let primaryLanguage = null;
324
- for (const [language, count] of Object.entries(extensionCounts)) {
325
- if (count > maxCount) {
326
- maxCount = count;
327
- primaryLanguage = language;
328
- }
329
- }
330
- // If TypeScript and JavaScript are close, prefer TypeScript
331
- if (primaryLanguage === 'javascript' &&
332
- extensionCounts.typescript > 0 &&
333
- extensionCounts.typescript >= extensionCounts.javascript * 0.5) {
334
- primaryLanguage = 'typescript';
335
- }
336
- // Check for special cases: package.json (Node.js), composer.json (PHP), Gemfile (Ruby), requirements.txt (Python), pubspec.yaml (Dart/Flutter)
337
- try {
338
- const packageJsonExists = await fileExists(path.join(projectPath, 'package.json'));
339
- const composerJsonExists = await fileExists(path.join(projectPath, 'composer.json'));
340
- const gemfileExists = await fileExists(path.join(projectPath, 'Gemfile'));
341
- const requirementsTxtExists = await fileExists(path.join(projectPath, 'requirements.txt'));
342
- const pubspecYamlExists = await fileExists(path.join(projectPath, 'pubspec.yaml'));
343
- // IMPORTANT: Language detection priority:
344
- // 1. Strong file evidence for non-JS/TS languages (Python, PHP, Ruby) takes absolute priority
345
- // 2. For JS/TS projects, config files can influence the decision
346
- // 3. Package.json presence suggests Node.js ecosystem
347
- // If we have strong evidence for Python, PHP, Ruby, or Dart, respect it absolutely
348
- if (primaryLanguage === 'python' && extensionCounts.python > 3) {
349
- // Keep Python if we have clear Python files
350
- logger_1.default.debug(`Strong Python evidence (${extensionCounts.python} files), keeping Python despite package.json`);
351
- }
352
- else if (primaryLanguage === 'php' && extensionCounts.php > 3) {
353
- // Keep PHP if we have clear PHP files
354
- logger_1.default.debug(`Strong PHP evidence (${extensionCounts.php} files), keeping PHP`);
355
- }
356
- else if (primaryLanguage === 'ruby' && extensionCounts.ruby > 3) {
357
- // Keep Ruby if we have clear Ruby files
358
- logger_1.default.debug(`Strong Ruby evidence (${extensionCounts.ruby} files), keeping Ruby`);
359
- }
360
- else if (primaryLanguage === 'dart' && extensionCounts.dart > 0) {
361
- // Keep Dart if we have any Dart files - Dart projects are usually pure Dart
362
- logger_1.default.debug(`Strong Dart evidence (${extensionCounts.dart} files), keeping Dart`);
363
- }
364
- else if (packageJsonExists) {
365
- // Handle Node.js projects (package.json present)
366
- if (primaryLanguage === null ||
367
- primaryLanguage === 'javascript' ||
368
- primaryLanguage === 'typescript') {
369
- // Check if this is a TypeScript-oriented project
370
- const isTypescriptProject = await isTypeScriptProject(projectPath);
371
- if (isTypescriptProject || extensionCounts.typescript > 0) {
372
- primaryLanguage = 'typescript';
373
- }
374
- else if (extensionCounts.javascript > 0 || extensionCounts.typescript === 0) {
375
- // For backward compatibility with tests, default to TypeScript for Node.js projects
376
- // This maintains the existing behavior while fixing Python detection
377
- primaryLanguage = 'typescript';
378
- }
379
- }
380
- // If primaryLanguage is Python/PHP/Ruby with few files, package.json might be for tooling
381
- }
382
- else if (composerJsonExists && (primaryLanguage === null || extensionCounts.php > 0)) {
383
- primaryLanguage = 'php';
384
- }
385
- else if (gemfileExists && (primaryLanguage === null || extensionCounts.ruby > 0)) {
386
- primaryLanguage = 'ruby';
387
- }
388
- else if (requirementsTxtExists &&
389
- (primaryLanguage === null || extensionCounts.python > 0)) {
390
- primaryLanguage = 'python';
391
- }
392
- else if (pubspecYamlExists && (primaryLanguage === null || extensionCounts.dart > 0)) {
393
- primaryLanguage = 'dart';
394
- }
395
- // Additional Python detection for projects with Python files but no requirements.txt
396
- if (primaryLanguage === null && extensionCounts.python > 0) {
397
- primaryLanguage = 'python';
398
- }
399
- // Additional Dart detection for projects with Dart files but no pubspec.yaml
400
- if (primaryLanguage === null && extensionCounts.dart > 0) {
401
- primaryLanguage = 'dart';
402
- }
403
- }
404
- catch (error) {
405
- logger_1.default.debug(`Error checking for special files: ${error}`);
406
- }
407
- return primaryLanguage;
408
- }
409
- catch (error) {
410
- logger_1.default.error(`Error detecting primary language: ${error instanceof Error ? error.message : String(error)}`);
411
- return null;
412
- }
413
- }
414
- /**
415
- * Detect frameworks for a specific language
416
- * @param projectPath Path to project root directory
417
- * @param language Language to detect frameworks for
418
- * @returns Promise resolving to framework detection result
419
- */
420
- async function detectFrameworkForLanguage(projectPath, language) {
421
- try {
422
- const signatures = FRAMEWORK_SIGNATURES[language] || [];
423
- const scores = {};
424
- const detectionMethods = {};
425
- // Get all dependencies for this project
426
- const dependencies = await getDependencies(projectPath, language);
427
- // Detect CSS frameworks
428
- const cssFrameworks = await detectCssFrameworks(projectPath, dependencies);
429
- // Store framework versions
430
- let frameworkVersion;
431
- let frameworkType;
432
- // Check for each framework signature
433
- for (const signature of signatures) {
434
- let score = 0;
435
- const methods = [];
436
- // Check for files
437
- for (const file of signature.files) {
438
- if (await fileExists(path.join(projectPath, file))) {
439
- score += signature.weight;
440
- methods.push(`found file: ${file}`);
441
- }
442
- }
443
- // Check for directories
444
- if (signature.directories) {
445
- for (const dir of signature.directories) {
446
- if (await directoryExists(path.join(projectPath, dir))) {
447
- score += signature.weight * 0.8;
448
- methods.push(`found directory: ${dir}`);
449
- }
450
- }
451
- }
452
- // Check for dependencies
453
- if (signature.dependencies) {
454
- for (const dep of signature.dependencies) {
455
- if (dependencies[dep]) {
456
- score += signature.weight * 0.9;
457
- methods.push(`found dependency: ${dep}`);
458
- // Store version of the main dependency
459
- if (!frameworkVersion) {
460
- frameworkVersion = dependencies[dep];
461
- }
462
- }
463
- }
464
- }
465
- scores[signature.name] = score;
466
- detectionMethods[signature.name] = methods;
467
- // Store the framework type if this signature has a high score
468
- if (score > 0.7 && signature.type) {
469
- frameworkType = signature.type;
470
- }
471
- }
472
- // Find the framework with the highest score
473
- let maxScore = 0;
474
- let detectedFramework = null;
475
- for (const [framework, score] of Object.entries(scores)) {
476
- if (score > maxScore) {
477
- maxScore = score;
478
- detectedFramework = framework;
479
- }
480
- }
481
- // Calculate additional frameworks
482
- const additionalFrameworks = [];
483
- for (const [framework, score] of Object.entries(scores)) {
484
- if (framework !== detectedFramework && score > 0.5) {
485
- additionalFrameworks.push(framework);
486
- }
487
- }
488
- // If a framework was detected, return it
489
- if (detectedFramework) {
490
- return {
491
- language,
492
- framework: detectedFramework,
493
- confidence: Math.min(maxScore, 1),
494
- detectionMethod: detectionMethods[detectedFramework].join(', '),
495
- additionalFrameworks: additionalFrameworks.length > 0 ? additionalFrameworks : undefined,
496
- cssFrameworks: cssFrameworks.length > 0 ? cssFrameworks : undefined,
497
- frameworkVersion: frameworkVersion,
498
- frameworkType: frameworkType,
499
- };
500
- }
501
- // If no framework was detected but we have CSS frameworks, return language with CSS frameworks
502
- if (cssFrameworks.length > 0) {
503
- return {
504
- language,
505
- framework: 'none',
506
- confidence: 0.5,
507
- detectionMethod: 'css-frameworks-only',
508
- cssFrameworks: cssFrameworks,
509
- };
510
- }
511
- return null;
512
- }
513
- catch (error) {
514
- logger_1.default.error(`Error detecting framework for ${language}: ${error instanceof Error ? error.message : String(error)}`);
515
- return null;
516
- }
517
- }
518
- /**
519
- * Check if a file exists
520
- * @param filePath Path to file
521
- * @returns Promise resolving to boolean
522
- */
523
- async function fileExists(filePath) {
524
- try {
525
- await fs.access(filePath);
526
- return true;
527
- }
528
- catch (_error) {
529
- return false;
530
- }
531
- }
532
- /**
533
- * Check if a directory exists
534
- * @param dirPath Path to directory
535
- * @returns Promise resolving to boolean
536
- */
537
- async function directoryExists(dirPath) {
538
- try {
539
- const stats = await fs.stat(dirPath);
540
- return stats.isDirectory();
541
- }
542
- catch (_error) {
543
- return false;
544
- }
545
- }
546
- /**
547
- * Check if a Node.js project should be considered a TypeScript project
548
- * @param projectPath Path to project root
549
- * @returns Promise resolving to boolean
550
- */
551
- async function isTypeScriptProject(projectPath) {
552
- try {
553
- // Check for TypeScript config files
554
- const tsconfigExists = await fileExists(path.join(projectPath, 'tsconfig.json'));
555
- if (tsconfigExists) {
556
- return true;
557
- }
558
- // Check package.json for TypeScript dependencies
559
- const packageJsonPath = path.join(projectPath, 'package.json');
560
- if (await fileExists(packageJsonPath)) {
561
- const packageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf-8'));
562
- // Check for TypeScript in dependencies or devDependencies
563
- const allDeps = {
564
- ...packageJson.dependencies,
565
- ...packageJson.devDependencies,
566
- };
567
- // Look for TypeScript-specific packages
568
- const typescriptIndicators = [
569
- 'typescript',
570
- '@types/node',
571
- 'ts-node',
572
- '@typescript-eslint/parser',
573
- '@typescript-eslint/eslint-plugin',
574
- ];
575
- return typescriptIndicators.some((indicator) => allDeps[indicator]);
576
- }
577
- return false;
578
- }
579
- catch (error) {
580
- logger_1.default.debug(`Error checking if TypeScript project: ${error}`);
581
- return false;
582
- }
583
- }
584
- /**
585
- * Get dependencies for a project
586
- * @param projectPath Path to project
587
- * @param language Language to get dependencies for
588
- * @returns Promise resolving to dependency map with versions
589
- */
590
- async function getDependencies(projectPath, language) {
591
- const dependencies = {};
592
- try {
593
- if (language === 'typescript' || language === 'javascript') {
594
- // Parse package.json
595
- const packageJsonPath = path.join(projectPath, 'package.json');
596
- if (await fileExists(packageJsonPath)) {
597
- const packageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf-8'));
598
- // Add both dependencies and devDependencies
599
- if (packageJson.dependencies) {
600
- Object.assign(dependencies, packageJson.dependencies);
601
- }
602
- if (packageJson.devDependencies) {
603
- Object.assign(dependencies, packageJson.devDependencies);
604
- }
605
- }
606
- }
607
- else if (language === 'php') {
608
- // Parse composer.json
609
- const composerJsonPath = path.join(projectPath, 'composer.json');
610
- if (await fileExists(composerJsonPath)) {
611
- const composerJson = JSON.parse(await fs.readFile(composerJsonPath, 'utf-8'));
612
- if (composerJson.require) {
613
- Object.assign(dependencies, composerJson.require);
614
- }
615
- if (composerJson['require-dev']) {
616
- Object.assign(dependencies, composerJson['require-dev']);
617
- }
618
- }
619
- }
620
- else if (language === 'ruby') {
621
- // Parse Gemfile
622
- const gemfilePath = path.join(projectPath, 'Gemfile');
623
- if (await fileExists(gemfilePath)) {
624
- const gemfile = await fs.readFile(gemfilePath, 'utf-8');
625
- // Simple regex to extract gem names
626
- const gemRegex = /gem\s+['"]([^'"]+)['"](?:,\s*['"]([^'"]+)['"])?/g;
627
- let match;
628
- while ((match = gemRegex.exec(gemfile)) !== null) {
629
- dependencies[match[1]] = match[2] || '*';
630
- }
631
- }
632
- }
633
- else if (language === 'python') {
634
- // Parse requirements.txt
635
- const requirementsPath = path.join(projectPath, 'requirements.txt');
636
- if (await fileExists(requirementsPath)) {
637
- const requirements = await fs.readFile(requirementsPath, 'utf-8');
638
- // Parse each line
639
- for (const line of requirements.split('\n')) {
640
- const trimmedLine = line.trim();
641
- if (trimmedLine && !trimmedLine.startsWith('#')) {
642
- // Extract package name and version
643
- const parts = trimmedLine.split(/([=<>!~]=?)/);
644
- if (parts.length >= 1) {
645
- const packageName = parts[0].trim().toLowerCase();
646
- const version = parts.length >= 3 ? parts[1] + parts[2] : '*';
647
- if (packageName) {
648
- dependencies[packageName] = version;
649
- }
650
- }
651
- }
652
- }
653
- }
654
- }
655
- else if (language === 'dart') {
656
- // Parse pubspec.yaml
657
- const pubspecPath = path.join(projectPath, 'pubspec.yaml');
658
- if (await fileExists(pubspecPath)) {
659
- const pubspecContent = await fs.readFile(pubspecPath, 'utf-8');
660
- // Simple YAML parsing for dependencies
661
- const lines = pubspecContent.split('\n');
662
- let inDependencies = false;
663
- let inDevDependencies = false;
664
- for (const line of lines) {
665
- const trimmedLine = line.trim();
666
- // Check for dependencies sections
667
- if (trimmedLine === 'dependencies:') {
668
- inDependencies = true;
669
- inDevDependencies = false;
670
- continue;
671
- }
672
- if (trimmedLine === 'dev_dependencies:') {
673
- inDependencies = false;
674
- inDevDependencies = true;
675
- continue;
676
- }
677
- if (trimmedLine.endsWith(':') && !trimmedLine.startsWith(' ')) {
678
- // New top-level section
679
- inDependencies = false;
680
- inDevDependencies = false;
681
- continue;
682
- }
683
- // Parse dependency lines
684
- if ((inDependencies || inDevDependencies) &&
685
- trimmedLine &&
686
- !trimmedLine.startsWith('#')) {
687
- // Handle different dependency formats:
688
- // package_name: ^1.0.0
689
- // package_name:
690
- // sdk: flutter
691
- const colonIndex = trimmedLine.indexOf(':');
692
- if (colonIndex > 0) {
693
- const packageName = trimmedLine.substring(0, colonIndex).trim();
694
- const versionPart = trimmedLine.substring(colonIndex + 1).trim();
695
- // Skip SDK dependencies and empty values
696
- if (packageName && !versionPart.startsWith('sdk:') && packageName !== 'sdk') {
697
- const version = versionPart || '*';
698
- dependencies[packageName] = version;
699
- }
700
- }
701
- }
702
- }
703
- }
704
- }
705
- }
706
- catch (error) {
707
- logger_1.default.warn(`Error getting dependencies: ${error instanceof Error ? error.message : String(error)}`);
708
- }
709
- return dependencies;
710
- }
711
- /**
712
- * Detect CSS frameworks used in a project
713
- * @param projectPath Path to project root directory
714
- * @param dependencies Dependencies map
715
- * @returns Promise resolving to CSS frameworks detection results
716
- */
717
- async function detectCssFrameworks(projectPath, dependencies) {
718
- const cssFrameworks = [];
719
- try {
720
- // Check for CSS frameworks based on FRAMEWORK_SIGNATURES
721
- if (FRAMEWORK_SIGNATURES.css) {
722
- for (const signature of FRAMEWORK_SIGNATURES.css) {
723
- let score = 0;
724
- let foundDependency = false;
725
- let version;
726
- // Check for dependencies
727
- if (signature.dependencies) {
728
- for (const dep of signature.dependencies) {
729
- if (dependencies[dep]) {
730
- score += signature.weight * 0.9;
731
- foundDependency = true;
732
- version = dependencies[dep];
733
- break;
734
- }
735
- }
736
- }
737
- // Check for files
738
- if (signature.files) {
739
- for (const file of signature.files) {
740
- if (await fileExists(path.join(projectPath, file))) {
741
- score += signature.weight * 0.8;
742
- break;
743
- }
744
- }
745
- }
746
- // If we have a score, add it to the list
747
- if (score > 0.5) {
748
- cssFrameworks.push({
749
- name: signature.name,
750
- version: foundDependency ? version : undefined,
751
- confidence: Math.min(score, 1),
752
- });
753
- }
754
- }
755
- }
756
- // Look for specific CSS files in common locations
757
- const cssDirs = ['src/styles', 'src/css', 'public/css', 'assets/css', 'styles', 'css'];
758
- for (const dir of cssDirs) {
759
- const fullPath = path.join(projectPath, dir);
760
- if (await directoryExists(fullPath)) {
761
- try {
762
- const files = await fs.readdir(fullPath);
763
- // Look for common CSS framework files
764
- for (const file of files) {
765
- const lowerFile = file.toLowerCase();
766
- if (lowerFile.includes('bootstrap') && lowerFile.endsWith('.css')) {
767
- if (!cssFrameworks.some((f) => f.name === 'bootstrap')) {
768
- cssFrameworks.push({ name: 'bootstrap', confidence: 0.7 });
769
- }
770
- }
771
- else if (lowerFile.includes('bulma') && lowerFile.endsWith('.css')) {
772
- if (!cssFrameworks.some((f) => f.name === 'bulma')) {
773
- cssFrameworks.push({ name: 'bulma', confidence: 0.7 });
774
- }
775
- }
776
- else if (lowerFile.includes('tailwind') && lowerFile.endsWith('.css')) {
777
- if (!cssFrameworks.some((f) => f.name === 'tailwind')) {
778
- cssFrameworks.push({ name: 'tailwind', confidence: 0.7 });
779
- }
780
- }
781
- }
782
- }
783
- catch (_error) {
784
- // Ignore directory read errors
785
- }
786
- }
787
- }
788
- return cssFrameworks;
789
- }
790
- catch (error) {
791
- logger_1.default.warn(`Error detecting CSS frameworks: ${error instanceof Error ? error.message : String(error)}`);
792
- return [];
793
- }
794
- }
795
- //# sourceMappingURL=frameworkDetector.js.map