codereview-aia 0.1.3 → 0.2.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 (558) hide show
  1. package/dist/analysis/FindingsExtractor.d.ts +105 -0
  2. package/dist/analysis/FindingsExtractor.js +363 -0
  3. package/dist/analysis/FindingsExtractor.js.map +1 -0
  4. package/dist/analysis/ai-detection/analyzers/BaseAnalyzer.d.ts +111 -0
  5. package/dist/analysis/ai-detection/analyzers/BaseAnalyzer.js +215 -0
  6. package/dist/analysis/ai-detection/analyzers/BaseAnalyzer.js.map +1 -0
  7. package/dist/analysis/ai-detection/analyzers/DocumentationAnalyzer.d.ts +142 -0
  8. package/dist/analysis/ai-detection/analyzers/DocumentationAnalyzer.js +503 -0
  9. package/dist/analysis/ai-detection/analyzers/DocumentationAnalyzer.js.map +1 -0
  10. package/dist/analysis/ai-detection/analyzers/GitHistoryAnalyzer.d.ts +88 -0
  11. package/dist/analysis/ai-detection/analyzers/GitHistoryAnalyzer.js +343 -0
  12. package/dist/analysis/ai-detection/analyzers/GitHistoryAnalyzer.js.map +1 -0
  13. package/dist/analysis/ai-detection/core/AIDetectionEngine.d.ts +104 -0
  14. package/dist/analysis/ai-detection/core/AIDetectionEngine.js +369 -0
  15. package/dist/analysis/ai-detection/core/AIDetectionEngine.js.map +1 -0
  16. package/dist/analysis/ai-detection/types/DetectionTypes.d.ts +364 -0
  17. package/dist/analysis/ai-detection/types/DetectionTypes.js +32 -0
  18. package/dist/analysis/ai-detection/types/DetectionTypes.js.map +1 -0
  19. package/dist/analysis/ai-detection/utils/SubmissionConverter.d.ts +97 -0
  20. package/dist/analysis/ai-detection/utils/SubmissionConverter.js +339 -0
  21. package/dist/analysis/ai-detection/utils/SubmissionConverter.js.map +1 -0
  22. package/dist/analysis/context/ReviewContext.d.ts +184 -0
  23. package/dist/analysis/context/ReviewContext.js +294 -0
  24. package/dist/analysis/context/ReviewContext.js.map +1 -0
  25. package/{src/analysis/context/index.ts → dist/analysis/context/index.d.ts} +0 -1
  26. package/dist/analysis/context/index.js +23 -0
  27. package/dist/analysis/context/index.js.map +1 -0
  28. package/{src/analysis/index.ts → dist/analysis/index.d.ts} +0 -1
  29. package/dist/analysis/index.js +24 -0
  30. package/dist/analysis/index.js.map +1 -0
  31. package/dist/analysis/static/wpPhpcsRunner.d.ts +11 -0
  32. package/dist/analysis/static/wpPhpcsRunner.js +219 -0
  33. package/dist/analysis/static/wpPhpcsRunner.js.map +1 -0
  34. package/dist/analysis/tokens/TokenAnalysisFormatter.d.ts +27 -0
  35. package/{src/analysis/tokens/TokenAnalysisFormatter.ts → dist/analysis/tokens/TokenAnalysisFormatter.js} +64 -75
  36. package/dist/analysis/tokens/TokenAnalysisFormatter.js.map +1 -0
  37. package/dist/analysis/tokens/TokenAnalyzer.d.ts +155 -0
  38. package/dist/analysis/tokens/TokenAnalyzer.js +502 -0
  39. package/dist/analysis/tokens/TokenAnalyzer.js.map +1 -0
  40. package/{src/analysis/tokens/index.ts → dist/analysis/tokens/index.d.ts} +0 -1
  41. package/dist/analysis/tokens/index.js +24 -0
  42. package/dist/analysis/tokens/index.js.map +1 -0
  43. package/dist/clients/base/abstractClient.d.ts +99 -0
  44. package/dist/clients/base/abstractClient.js +98 -0
  45. package/dist/clients/base/abstractClient.js.map +1 -0
  46. package/dist/clients/base/httpClient.d.ts +24 -0
  47. package/dist/clients/base/httpClient.js +147 -0
  48. package/dist/clients/base/httpClient.js.map +1 -0
  49. package/{src/clients/base/index.ts → dist/clients/base/index.d.ts} +0 -1
  50. package/dist/clients/base/index.js +28 -0
  51. package/dist/clients/base/index.js.map +1 -0
  52. package/dist/clients/base/modelDetection.d.ts +41 -0
  53. package/dist/clients/base/modelDetection.js +88 -0
  54. package/dist/clients/base/modelDetection.js.map +1 -0
  55. package/dist/clients/base/responseProcessor.d.ts +45 -0
  56. package/dist/clients/base/responseProcessor.js +495 -0
  57. package/dist/clients/base/responseProcessor.js.map +1 -0
  58. package/dist/clients/factory/clientFactory.d.ts +23 -0
  59. package/dist/clients/factory/clientFactory.js +50 -0
  60. package/dist/clients/factory/clientFactory.js.map +1 -0
  61. package/{src/clients/factory/index.ts → dist/clients/factory/index.d.ts} +0 -1
  62. package/dist/clients/factory/index.js +24 -0
  63. package/dist/clients/factory/index.js.map +1 -0
  64. package/{src/clients/implementations/index.ts → dist/clients/implementations/index.d.ts} +0 -1
  65. package/dist/clients/implementations/index.js +24 -0
  66. package/dist/clients/implementations/index.js.map +1 -0
  67. package/dist/clients/implementations/openRouterClient.d.ts +69 -0
  68. package/dist/clients/implementations/openRouterClient.js +294 -0
  69. package/dist/clients/implementations/openRouterClient.js.map +1 -0
  70. package/dist/clients/openRouterClient.d.ts +42 -0
  71. package/dist/clients/openRouterClient.js +580 -0
  72. package/dist/clients/openRouterClient.js.map +1 -0
  73. package/{src/clients/openRouterClientWrapper.ts → dist/clients/openRouterClientWrapper.d.ts} +2 -24
  74. package/dist/clients/openRouterClientWrapper.js +64 -0
  75. package/dist/clients/openRouterClientWrapper.js.map +1 -0
  76. package/dist/clients/utils/directoryStructure.d.ts +14 -0
  77. package/dist/clients/utils/directoryStructure.js +48 -0
  78. package/dist/clients/utils/directoryStructure.js.map +1 -0
  79. package/{src/clients/utils/index.ts → dist/clients/utils/index.d.ts} +0 -1
  80. package/dist/clients/utils/index.js +31 -0
  81. package/dist/clients/utils/index.js.map +1 -0
  82. package/dist/clients/utils/languageDetection.d.ts +13 -0
  83. package/dist/clients/utils/languageDetection.js +46 -0
  84. package/dist/clients/utils/languageDetection.js.map +1 -0
  85. package/dist/clients/utils/promptFormatter.d.ts +37 -0
  86. package/dist/clients/utils/promptFormatter.js +150 -0
  87. package/dist/clients/utils/promptFormatter.js.map +1 -0
  88. package/{src/clients/utils/promptLoader.ts → dist/clients/utils/promptLoader.d.ts} +1 -27
  89. package/dist/clients/utils/promptLoader.js +49 -0
  90. package/dist/clients/utils/promptLoader.js.map +1 -0
  91. package/dist/clients/utils/tokenCounter.d.ts +81 -0
  92. package/dist/clients/utils/tokenCounter.js +184 -0
  93. package/dist/clients/utils/tokenCounter.js.map +1 -0
  94. package/dist/core/ApiClientSelector.d.ts +8 -0
  95. package/dist/core/ApiClientSelector.js +29 -0
  96. package/dist/core/ApiClientSelector.js.map +1 -0
  97. package/dist/core/ConfigurationService.d.ts +307 -0
  98. package/dist/core/ConfigurationService.js +516 -0
  99. package/dist/core/ConfigurationService.js.map +1 -0
  100. package/dist/core/ConsolidationService.d.ts +99 -0
  101. package/dist/core/ConsolidationService.js +341 -0
  102. package/dist/core/ConsolidationService.js.map +1 -0
  103. package/dist/core/InteractiveDisplayManager.d.ts +22 -0
  104. package/dist/core/InteractiveDisplayManager.js +70 -0
  105. package/dist/core/InteractiveDisplayManager.js.map +1 -0
  106. package/dist/core/OutputManager.d.ts +26 -0
  107. package/dist/core/OutputManager.js +217 -0
  108. package/dist/core/OutputManager.js.map +1 -0
  109. package/dist/core/ReviewGenerator.d.ts +13 -0
  110. package/dist/core/ReviewGenerator.js +102 -0
  111. package/dist/core/ReviewGenerator.js.map +1 -0
  112. package/dist/core/fileDiscovery.d.ts +35 -0
  113. package/dist/core/fileDiscovery.js +202 -0
  114. package/dist/core/fileDiscovery.js.map +1 -0
  115. package/dist/core/handlers/EstimationHandler.d.ts +18 -0
  116. package/dist/core/handlers/EstimationHandler.js +110 -0
  117. package/dist/core/handlers/EstimationHandler.js.map +1 -0
  118. package/dist/core/handlers/FileProcessingHandler.d.ts +31 -0
  119. package/dist/core/handlers/FileProcessingHandler.js +164 -0
  120. package/dist/core/handlers/FileProcessingHandler.js.map +1 -0
  121. package/dist/core/handlers/OutputHandler.d.ts +27 -0
  122. package/dist/core/handlers/OutputHandler.js +127 -0
  123. package/dist/core/handlers/OutputHandler.js.map +1 -0
  124. package/dist/core/handlers/ReviewExecutor.d.ts +32 -0
  125. package/dist/core/handlers/ReviewExecutor.js +111 -0
  126. package/dist/core/handlers/ReviewExecutor.js.map +1 -0
  127. package/dist/core/reviewOrchestrator.d.ts +24 -0
  128. package/dist/core/reviewOrchestrator.js +354 -0
  129. package/dist/core/reviewOrchestrator.js.map +1 -0
  130. package/dist/core/utils/ModelInfoUtils.d.ts +16 -0
  131. package/dist/core/utils/ModelInfoUtils.js +54 -0
  132. package/dist/core/utils/ModelInfoUtils.js.map +1 -0
  133. package/{src/formatters/outputFormatter.ts → dist/formatters/outputFormatter.d.ts} +2 -33
  134. package/dist/formatters/outputFormatter.js +65 -0
  135. package/dist/formatters/outputFormatter.js.map +1 -0
  136. package/dist/formatters/utils/IssueFormatters.d.ts +20 -0
  137. package/dist/formatters/utils/IssueFormatters.js +67 -0
  138. package/dist/formatters/utils/IssueFormatters.js.map +1 -0
  139. package/dist/formatters/utils/JsonFormatter.d.ts +13 -0
  140. package/dist/formatters/utils/JsonFormatter.js +57 -0
  141. package/dist/formatters/utils/JsonFormatter.js.map +1 -0
  142. package/dist/formatters/utils/MarkdownFormatters.d.ts +51 -0
  143. package/dist/formatters/utils/MarkdownFormatters.js +456 -0
  144. package/dist/formatters/utils/MarkdownFormatters.js.map +1 -0
  145. package/dist/formatters/utils/MetadataFormatter.d.ts +65 -0
  146. package/dist/formatters/utils/MetadataFormatter.js +219 -0
  147. package/dist/formatters/utils/MetadataFormatter.js.map +1 -0
  148. package/dist/formatters/utils/ModelInfoExtractor.d.ts +33 -0
  149. package/dist/formatters/utils/ModelInfoExtractor.js +111 -0
  150. package/dist/formatters/utils/ModelInfoExtractor.js.map +1 -0
  151. package/dist/index.d.ts +1 -0
  152. package/dist/index.js.map +1 -0
  153. package/dist/plugins/PluginInterface.d.ts +44 -0
  154. package/dist/plugins/PluginInterface.js +9 -0
  155. package/dist/plugins/PluginInterface.js.map +1 -0
  156. package/dist/plugins/PluginManager.d.ts +51 -0
  157. package/dist/plugins/PluginManager.js +151 -0
  158. package/dist/plugins/PluginManager.js.map +1 -0
  159. package/dist/prompts/PromptManager.d.ts +30 -0
  160. package/dist/prompts/PromptManager.js +62 -0
  161. package/dist/prompts/PromptManager.js.map +1 -0
  162. package/dist/prompts/cache/PromptCache.d.ts +32 -0
  163. package/dist/prompts/cache/PromptCache.js +48 -0
  164. package/dist/prompts/cache/PromptCache.js.map +1 -0
  165. package/dist/runtime/auth/service.d.ts +2 -0
  166. package/dist/runtime/auth/service.js +41 -0
  167. package/dist/runtime/auth/service.js.map +1 -0
  168. package/dist/runtime/auth/session.d.ts +5 -0
  169. package/dist/runtime/auth/session.js +87 -0
  170. package/dist/runtime/auth/session.js.map +1 -0
  171. package/dist/runtime/auth/types.d.ts +9 -0
  172. package/dist/runtime/auth/types.js +3 -0
  173. package/dist/runtime/auth/types.js.map +1 -0
  174. package/dist/runtime/cliEntry.d.ts +1 -0
  175. package/dist/runtime/cliEntry.js +276 -0
  176. package/dist/runtime/cliEntry.js.map +1 -0
  177. package/dist/runtime/debug/logManager.d.ts +5 -0
  178. package/dist/runtime/debug/logManager.js +31 -0
  179. package/dist/runtime/debug/logManager.js.map +1 -0
  180. package/dist/runtime/errors.d.ts +5 -0
  181. package/dist/runtime/errors.js +15 -0
  182. package/dist/runtime/errors.js.map +1 -0
  183. package/dist/runtime/fileCollector.d.ts +14 -0
  184. package/dist/runtime/fileCollector.js +381 -0
  185. package/dist/runtime/fileCollector.js.map +1 -0
  186. package/dist/runtime/manifest.d.ts +1 -0
  187. package/dist/runtime/manifest.js +65 -0
  188. package/dist/runtime/manifest.js.map +1 -0
  189. package/dist/runtime/openrouterProxy.d.ts +4 -0
  190. package/dist/runtime/openrouterProxy.js +43 -0
  191. package/dist/runtime/openrouterProxy.js.map +1 -0
  192. package/dist/runtime/preprod/batchStreamer.d.ts +54 -0
  193. package/dist/runtime/preprod/batchStreamer.js +159 -0
  194. package/dist/runtime/preprod/batchStreamer.js.map +1 -0
  195. package/dist/runtime/preprod/crEdgeServiceClient.d.ts +30 -0
  196. package/dist/runtime/preprod/crEdgeServiceClient.js +133 -0
  197. package/dist/runtime/preprod/crEdgeServiceClient.js.map +1 -0
  198. package/dist/runtime/preprod/progressTracker.d.ts +21 -0
  199. package/dist/runtime/preprod/progressTracker.js +80 -0
  200. package/dist/runtime/preprod/progressTracker.js.map +1 -0
  201. package/dist/runtime/preprod/webCheck.d.ts +1 -0
  202. package/dist/runtime/preprod/webCheck.js +102 -0
  203. package/dist/runtime/preprod/webCheck.js.map +1 -0
  204. package/dist/runtime/proxyConfig.d.ts +6 -0
  205. package/dist/runtime/proxyConfig.js +86 -0
  206. package/dist/runtime/proxyConfig.js.map +1 -0
  207. package/dist/runtime/proxyEnvironment.d.ts +3 -0
  208. package/dist/runtime/proxyEnvironment.js +63 -0
  209. package/dist/runtime/proxyEnvironment.js.map +1 -0
  210. package/dist/runtime/reportMerge.d.ts +30 -0
  211. package/dist/runtime/reportMerge.js +70 -0
  212. package/dist/runtime/reportMerge.js.map +1 -0
  213. package/dist/runtime/reporting/markdownReportBuilder.d.ts +17 -0
  214. package/dist/runtime/reporting/markdownReportBuilder.js +154 -0
  215. package/dist/runtime/reporting/markdownReportBuilder.js.map +1 -0
  216. package/dist/runtime/reporting/reportDataCollector.d.ts +31 -0
  217. package/dist/runtime/reporting/reportDataCollector.js +170 -0
  218. package/dist/runtime/reporting/reportDataCollector.js.map +1 -0
  219. package/dist/runtime/reporting/summaryGenerator.d.ts +10 -0
  220. package/dist/runtime/reporting/summaryGenerator.js +67 -0
  221. package/dist/runtime/reporting/summaryGenerator.js.map +1 -0
  222. package/dist/runtime/reviewPipeline.d.ts +61 -0
  223. package/dist/runtime/reviewPipeline.js +231 -0
  224. package/dist/runtime/reviewPipeline.js.map +1 -0
  225. package/dist/runtime/runAiCodeReview.d.ts +36 -0
  226. package/dist/runtime/runAiCodeReview.js +409 -0
  227. package/dist/runtime/runAiCodeReview.js.map +1 -0
  228. package/dist/runtime/runtimeConfig.d.ts +4 -0
  229. package/dist/runtime/runtimeConfig.js +7 -0
  230. package/dist/runtime/runtimeConfig.js.map +1 -0
  231. package/dist/runtime/ui/Layout.d.ts +11 -0
  232. package/dist/runtime/ui/Layout.js +47 -0
  233. package/dist/runtime/ui/Layout.js.map +1 -0
  234. package/dist/runtime/ui/RuntimeApp.d.ts +6 -0
  235. package/dist/runtime/ui/RuntimeApp.js +275 -0
  236. package/dist/runtime/ui/RuntimeApp.js.map +1 -0
  237. package/dist/runtime/ui/inkModules.d.ts +10 -0
  238. package/dist/runtime/ui/inkModules.js +63 -0
  239. package/dist/runtime/ui/inkModules.js.map +1 -0
  240. package/dist/runtime/ui/screens/AuthScreen.d.ts +6 -0
  241. package/dist/runtime/ui/screens/AuthScreen.js +67 -0
  242. package/dist/runtime/ui/screens/AuthScreen.js.map +1 -0
  243. package/dist/runtime/ui/screens/ModeSelection.d.ts +11 -0
  244. package/dist/runtime/ui/screens/ModeSelection.js +169 -0
  245. package/dist/runtime/ui/screens/ModeSelection.js.map +1 -0
  246. package/dist/runtime/ui/screens/ProgressScreen.d.ts +21 -0
  247. package/dist/runtime/ui/screens/ProgressScreen.js +86 -0
  248. package/dist/runtime/ui/screens/ProgressScreen.js.map +1 -0
  249. package/dist/runtime/ui/screens/ResultsScreen.d.ts +7 -0
  250. package/dist/runtime/ui/screens/ResultsScreen.js +34 -0
  251. package/dist/runtime/ui/screens/ResultsScreen.js.map +1 -0
  252. package/dist/strategies/ArchitecturalReviewStrategy.d.ts +29 -0
  253. package/dist/strategies/ArchitecturalReviewStrategy.js +42 -0
  254. package/dist/strategies/ArchitecturalReviewStrategy.js.map +1 -0
  255. package/dist/strategies/CodingTestReviewStrategy.d.ts +194 -0
  256. package/dist/strategies/CodingTestReviewStrategy.js +681 -0
  257. package/dist/strategies/CodingTestReviewStrategy.js.map +1 -0
  258. package/dist/strategies/ConsolidatedReviewStrategy.d.ts +25 -0
  259. package/dist/strategies/ConsolidatedReviewStrategy.js +45 -0
  260. package/dist/strategies/ConsolidatedReviewStrategy.js.map +1 -0
  261. package/dist/strategies/ExtractPatternsReviewStrategy.d.ts +30 -0
  262. package/dist/strategies/ExtractPatternsReviewStrategy.js +51 -0
  263. package/dist/strategies/ExtractPatternsReviewStrategy.js.map +1 -0
  264. package/dist/strategies/MultiPassReviewStrategy.d.ts +86 -0
  265. package/dist/strategies/MultiPassReviewStrategy.js +590 -0
  266. package/dist/strategies/MultiPassReviewStrategy.js.map +1 -0
  267. package/dist/strategies/ReviewStrategy.d.ts +45 -0
  268. package/dist/strategies/ReviewStrategy.js +24 -0
  269. package/dist/strategies/ReviewStrategy.js.map +1 -0
  270. package/dist/strategies/StrategyFactory.d.ts +19 -0
  271. package/dist/strategies/StrategyFactory.js +72 -0
  272. package/dist/strategies/StrategyFactory.js.map +1 -0
  273. package/{src/strategies/index.ts → dist/strategies/index.d.ts} +0 -1
  274. package/dist/strategies/index.js +30 -0
  275. package/dist/strategies/index.js.map +1 -0
  276. package/dist/tokenizers/baseTokenizer.d.ts +25 -0
  277. package/dist/tokenizers/baseTokenizer.js +48 -0
  278. package/dist/tokenizers/baseTokenizer.js.map +1 -0
  279. package/dist/tokenizers/gptTokenizer.d.ts +7 -0
  280. package/dist/tokenizers/gptTokenizer.js +28 -0
  281. package/dist/tokenizers/gptTokenizer.js.map +1 -0
  282. package/{src/tokenizers/index.ts → dist/tokenizers/index.d.ts} +0 -1
  283. package/dist/tokenizers/index.js +24 -0
  284. package/dist/tokenizers/index.js.map +1 -0
  285. package/dist/types/apiResponses.d.ts +39 -0
  286. package/dist/types/apiResponses.js +9 -0
  287. package/dist/types/apiResponses.js.map +1 -0
  288. package/dist/types/cli.d.ts +22 -0
  289. package/dist/types/cli.js +3 -0
  290. package/dist/types/cli.js.map +1 -0
  291. package/{src/types/common.ts → dist/types/common.d.ts} +2 -19
  292. package/dist/types/common.js +14 -0
  293. package/dist/types/common.js.map +1 -0
  294. package/dist/types/configuration.d.ts +682 -0
  295. package/dist/types/configuration.js +65 -0
  296. package/dist/types/configuration.js.map +1 -0
  297. package/dist/types/review.d.ts +318 -0
  298. package/dist/types/review.js +8 -0
  299. package/dist/types/review.js.map +1 -0
  300. package/dist/types/reviewSchema.d.ts +543 -0
  301. package/{src/types/reviewSchema.ts → dist/types/reviewSchema.js} +44 -104
  302. package/dist/types/reviewSchema.js.map +1 -0
  303. package/dist/types/structuredReview.d.ts +119 -0
  304. package/dist/types/structuredReview.js +6 -0
  305. package/dist/types/structuredReview.js.map +1 -0
  306. package/dist/types/tokenAnalysis.d.ts +44 -0
  307. package/dist/types/tokenAnalysis.js +4 -0
  308. package/dist/types/tokenAnalysis.js.map +1 -0
  309. package/dist/utils/FileReader.d.ts +33 -0
  310. package/dist/utils/FileReader.js +88 -0
  311. package/dist/utils/FileReader.js.map +1 -0
  312. package/dist/utils/FileWriter.d.ts +26 -0
  313. package/dist/utils/FileWriter.js +76 -0
  314. package/dist/utils/FileWriter.js.map +1 -0
  315. package/dist/utils/PathGenerator.d.ts +30 -0
  316. package/dist/utils/PathGenerator.js +82 -0
  317. package/dist/utils/PathGenerator.js.map +1 -0
  318. package/dist/utils/api/apiUtils.d.ts +3 -0
  319. package/dist/utils/api/apiUtils.js +20 -0
  320. package/dist/utils/api/apiUtils.js.map +1 -0
  321. package/dist/utils/api/index.js +18 -0
  322. package/dist/utils/api/index.js.map +1 -0
  323. package/dist/utils/apiErrorHandler.d.ts +130 -0
  324. package/dist/utils/apiErrorHandler.js +256 -0
  325. package/dist/utils/apiErrorHandler.js.map +1 -0
  326. package/dist/utils/ciDataCollector.d.ts +51 -0
  327. package/dist/utils/ciDataCollector.js +197 -0
  328. package/dist/utils/ciDataCollector.js.map +1 -0
  329. package/dist/utils/codingTestConfigLoader.d.ts +66 -0
  330. package/dist/utils/codingTestConfigLoader.js +420 -0
  331. package/dist/utils/codingTestConfigLoader.js.map +1 -0
  332. package/dist/utils/dependencies/aiDependencyAnalyzer.d.ts +30 -0
  333. package/dist/utils/dependencies/aiDependencyAnalyzer.js +343 -0
  334. package/dist/utils/dependencies/aiDependencyAnalyzer.js.map +1 -0
  335. package/dist/utils/detection/frameworkDetector.d.ts +43 -0
  336. package/dist/utils/detection/frameworkDetector.js +850 -0
  337. package/dist/utils/detection/frameworkDetector.js.map +1 -0
  338. package/{src/utils/detection/index.ts → dist/utils/detection/index.d.ts} +0 -1
  339. package/dist/utils/detection/index.js +28 -0
  340. package/dist/utils/detection/index.js.map +1 -0
  341. package/dist/utils/detection/projectTypeDetector.d.ts +27 -0
  342. package/dist/utils/detection/projectTypeDetector.js +469 -0
  343. package/dist/utils/detection/projectTypeDetector.js.map +1 -0
  344. package/dist/utils/diagramGenerator.d.ts +49 -0
  345. package/dist/utils/diagramGenerator.js +218 -0
  346. package/dist/utils/diagramGenerator.js.map +1 -0
  347. package/dist/utils/errorLogger.d.ts +24 -0
  348. package/dist/utils/errorLogger.js +59 -0
  349. package/dist/utils/errorLogger.js.map +1 -0
  350. package/dist/utils/estimationUtils.d.ts +139 -0
  351. package/dist/utils/estimationUtils.js +329 -0
  352. package/dist/utils/estimationUtils.js.map +1 -0
  353. package/dist/utils/fileFilters.d.ts +72 -0
  354. package/dist/utils/fileFilters.js +338 -0
  355. package/dist/utils/fileFilters.js.map +1 -0
  356. package/dist/utils/fileSystem.d.ts +22 -0
  357. package/dist/utils/fileSystem.js +45 -0
  358. package/dist/utils/fileSystem.js.map +1 -0
  359. package/{src/utils/index.ts → dist/utils/index.d.ts} +0 -14
  360. package/dist/utils/index.js +52 -0
  361. package/dist/utils/index.js.map +1 -0
  362. package/dist/utils/logger.d.ts +77 -0
  363. package/dist/utils/logger.js +271 -0
  364. package/dist/utils/logger.js.map +1 -0
  365. package/dist/utils/pathValidator.d.ts +40 -0
  366. package/dist/utils/pathValidator.js +98 -0
  367. package/dist/utils/pathValidator.js.map +1 -0
  368. package/{src/utils/priorityFilter.ts → dist/utils/priorityFilter.d.ts} +1 -26
  369. package/dist/utils/priorityFilter.js +54 -0
  370. package/dist/utils/priorityFilter.js.map +1 -0
  371. package/dist/utils/projectDocs.d.ts +47 -0
  372. package/dist/utils/projectDocs.js +158 -0
  373. package/dist/utils/projectDocs.js.map +1 -0
  374. package/dist/utils/promptPaths.d.ts +6 -0
  375. package/dist/utils/promptPaths.js +33 -0
  376. package/dist/utils/promptPaths.js.map +1 -0
  377. package/dist/utils/promptTemplateManager.d.ts +34 -0
  378. package/dist/utils/promptTemplateManager.js +141 -0
  379. package/dist/utils/promptTemplateManager.js.map +1 -0
  380. package/dist/utils/review/consolidateReview.d.ts +15 -0
  381. package/dist/utils/review/consolidateReview.js +481 -0
  382. package/dist/utils/review/consolidateReview.js.map +1 -0
  383. package/dist/utils/review/fixDisplay.d.ts +20 -0
  384. package/dist/utils/review/fixDisplay.js +84 -0
  385. package/dist/utils/review/fixDisplay.js.map +1 -0
  386. package/dist/utils/review/fixImplementation.d.ts +28 -0
  387. package/dist/utils/review/fixImplementation.js +60 -0
  388. package/dist/utils/review/fixImplementation.js.map +1 -0
  389. package/dist/utils/review/index.d.ts +13 -0
  390. package/dist/utils/review/index.js +50 -0
  391. package/dist/utils/review/index.js.map +1 -0
  392. package/dist/utils/review/interactiveProcessing.d.ts +25 -0
  393. package/dist/utils/review/interactiveProcessing.js +251 -0
  394. package/dist/utils/review/interactiveProcessing.js.map +1 -0
  395. package/dist/utils/review/progressTracker.d.ts +106 -0
  396. package/dist/utils/review/progressTracker.js +227 -0
  397. package/dist/utils/review/progressTracker.js.map +1 -0
  398. package/dist/utils/review/reviewExtraction.d.ts +31 -0
  399. package/dist/utils/review/reviewExtraction.js +324 -0
  400. package/dist/utils/review/reviewExtraction.js.map +1 -0
  401. package/dist/utils/review/types.d.ts +45 -0
  402. package/dist/utils/review/types.js +18 -0
  403. package/dist/utils/review/types.js.map +1 -0
  404. package/{src/utils/reviewActionHandler.ts → dist/utils/reviewActionHandler.d.ts} +0 -2
  405. package/dist/utils/reviewActionHandler.js +34 -0
  406. package/dist/utils/reviewActionHandler.js.map +1 -0
  407. package/dist/utils/reviewParser.d.ts +34 -0
  408. package/dist/utils/reviewParser.js +218 -0
  409. package/dist/utils/reviewParser.js.map +1 -0
  410. package/dist/utils/sanitizer.d.ts +82 -0
  411. package/dist/utils/sanitizer.js +239 -0
  412. package/dist/utils/sanitizer.js.map +1 -0
  413. package/dist/utils/smartFileSelector.d.ts +50 -0
  414. package/dist/utils/smartFileSelector.js +261 -0
  415. package/dist/utils/smartFileSelector.js.map +1 -0
  416. package/dist/utils/templateLoader.d.ts +44 -0
  417. package/dist/utils/templateLoader.js +431 -0
  418. package/dist/utils/templateLoader.js.map +1 -0
  419. package/dist/utils/treeGenerator.d.ts +12 -0
  420. package/dist/utils/treeGenerator.js +133 -0
  421. package/dist/utils/treeGenerator.js.map +1 -0
  422. package/package.json +5 -1
  423. package/.cr-aia.yml +0 -23
  424. package/.crignore +0 -0
  425. package/docs/opt-in-full-context.md +0 -27
  426. package/reports/cr-cr-aia-17-11-2025-20-13.md +0 -354
  427. package/src/analysis/FindingsExtractor.ts +0 -431
  428. package/src/analysis/ai-detection/analyzers/BaseAnalyzer.ts +0 -267
  429. package/src/analysis/ai-detection/analyzers/DocumentationAnalyzer.ts +0 -622
  430. package/src/analysis/ai-detection/analyzers/GitHistoryAnalyzer.ts +0 -430
  431. package/src/analysis/ai-detection/core/AIDetectionEngine.ts +0 -467
  432. package/src/analysis/ai-detection/types/DetectionTypes.ts +0 -406
  433. package/src/analysis/ai-detection/utils/SubmissionConverter.ts +0 -390
  434. package/src/analysis/context/ReviewContext.ts +0 -378
  435. package/src/analysis/tokens/TokenAnalyzer.ts +0 -747
  436. package/src/clients/base/abstractClient.ts +0 -190
  437. package/src/clients/base/httpClient.ts +0 -160
  438. package/src/clients/base/modelDetection.ts +0 -107
  439. package/src/clients/base/responseProcessor.ts +0 -586
  440. package/src/clients/factory/clientFactory.ts +0 -55
  441. package/src/clients/implementations/openRouterClient.ts +0 -413
  442. package/src/clients/openRouterClient.ts +0 -870
  443. package/src/clients/utils/directoryStructure.ts +0 -52
  444. package/src/clients/utils/languageDetection.ts +0 -44
  445. package/src/clients/utils/promptFormatter.ts +0 -182
  446. package/src/clients/utils/tokenCounter.ts +0 -297
  447. package/src/core/ApiClientSelector.ts +0 -37
  448. package/src/core/ConfigurationService.ts +0 -591
  449. package/src/core/ConsolidationService.ts +0 -423
  450. package/src/core/InteractiveDisplayManager.ts +0 -81
  451. package/src/core/OutputManager.ts +0 -275
  452. package/src/core/ReviewGenerator.ts +0 -140
  453. package/src/core/fileDiscovery.ts +0 -237
  454. package/src/core/handlers/EstimationHandler.ts +0 -104
  455. package/src/core/handlers/FileProcessingHandler.ts +0 -210
  456. package/src/core/handlers/OutputHandler.ts +0 -125
  457. package/src/core/handlers/ReviewExecutor.ts +0 -104
  458. package/src/core/reviewOrchestrator.ts +0 -333
  459. package/src/core/utils/ModelInfoUtils.ts +0 -56
  460. package/src/formatters/utils/IssueFormatters.ts +0 -83
  461. package/src/formatters/utils/JsonFormatter.ts +0 -77
  462. package/src/formatters/utils/MarkdownFormatters.ts +0 -609
  463. package/src/formatters/utils/MetadataFormatter.ts +0 -269
  464. package/src/formatters/utils/ModelInfoExtractor.ts +0 -115
  465. package/src/index.ts +0 -25
  466. package/src/plugins/PluginInterface.ts +0 -50
  467. package/src/plugins/PluginManager.ts +0 -126
  468. package/src/prompts/PromptManager.ts +0 -69
  469. package/src/prompts/cache/PromptCache.ts +0 -50
  470. package/src/prompts/promptText/common/variables/css-frameworks.json +0 -33
  471. package/src/prompts/promptText/common/variables/framework-versions.json +0 -45
  472. package/src/prompts/promptText/frameworks/react/comprehensive.hbs +0 -19
  473. package/src/prompts/promptText/languages/css/comprehensive.hbs +0 -18
  474. package/src/prompts/promptText/languages/generic/comprehensive.hbs +0 -20
  475. package/src/prompts/promptText/languages/html/comprehensive.hbs +0 -18
  476. package/src/prompts/promptText/languages/javascript/comprehensive.hbs +0 -18
  477. package/src/prompts/promptText/languages/python/comprehensive.hbs +0 -18
  478. package/src/prompts/promptText/languages/typescript/comprehensive.hbs +0 -18
  479. package/src/runtime/auth/service.ts +0 -58
  480. package/src/runtime/auth/session.ts +0 -103
  481. package/src/runtime/auth/types.ts +0 -11
  482. package/src/runtime/cliEntry.ts +0 -214
  483. package/src/runtime/debug/logManager.ts +0 -37
  484. package/src/runtime/errors.ts +0 -13
  485. package/src/runtime/fileCollector.ts +0 -495
  486. package/src/runtime/manifest.ts +0 -64
  487. package/src/runtime/openrouterProxy.ts +0 -45
  488. package/src/runtime/preprod/webCheck.ts +0 -104
  489. package/src/runtime/proxyConfig.ts +0 -94
  490. package/src/runtime/proxyEnvironment.ts +0 -71
  491. package/src/runtime/reportMerge.ts +0 -102
  492. package/src/runtime/reporting/markdownReportBuilder.ts +0 -138
  493. package/src/runtime/reporting/reportDataCollector.ts +0 -234
  494. package/src/runtime/reporting/summaryGenerator.ts +0 -86
  495. package/src/runtime/reviewPipeline.ts +0 -200
  496. package/src/runtime/runAiCodeReview.ts +0 -308
  497. package/src/runtime/runtimeConfig.ts +0 -5
  498. package/src/runtime/ui/Layout.tsx +0 -57
  499. package/src/runtime/ui/RuntimeApp.tsx +0 -262
  500. package/src/runtime/ui/inkModules.ts +0 -73
  501. package/src/runtime/ui/screens/AuthScreen.tsx +0 -128
  502. package/src/runtime/ui/screens/ModeSelection.tsx +0 -185
  503. package/src/runtime/ui/screens/ProgressScreen.tsx +0 -110
  504. package/src/runtime/ui/screens/ResultsScreen.tsx +0 -103
  505. package/src/strategies/ArchitecturalReviewStrategy.ts +0 -54
  506. package/src/strategies/CodingTestReviewStrategy.ts +0 -920
  507. package/src/strategies/ConsolidatedReviewStrategy.ts +0 -59
  508. package/src/strategies/ExtractPatternsReviewStrategy.ts +0 -64
  509. package/src/strategies/MultiPassReviewStrategy.ts +0 -785
  510. package/src/strategies/ReviewStrategy.ts +0 -64
  511. package/src/strategies/StrategyFactory.ts +0 -79
  512. package/src/tokenizers/baseTokenizer.ts +0 -61
  513. package/src/tokenizers/gptTokenizer.ts +0 -27
  514. package/src/types/apiResponses.ts +0 -40
  515. package/src/types/cli.ts +0 -24
  516. package/src/types/configuration.ts +0 -201
  517. package/src/types/handlebars.d.ts +0 -5
  518. package/src/types/patch.d.ts +0 -25
  519. package/src/types/review.ts +0 -312
  520. package/src/types/reviewContext.d.ts +0 -65
  521. package/src/types/structuredReview.ts +0 -167
  522. package/src/types/tokenAnalysis.ts +0 -56
  523. package/src/utils/FileReader.ts +0 -93
  524. package/src/utils/FileWriter.ts +0 -76
  525. package/src/utils/PathGenerator.ts +0 -97
  526. package/src/utils/api/apiUtils.ts +0 -14
  527. package/src/utils/apiErrorHandler.ts +0 -287
  528. package/src/utils/ciDataCollector.ts +0 -252
  529. package/src/utils/codingTestConfigLoader.ts +0 -466
  530. package/src/utils/dependencies/aiDependencyAnalyzer.ts +0 -454
  531. package/src/utils/detection/frameworkDetector.ts +0 -879
  532. package/src/utils/detection/projectTypeDetector.ts +0 -518
  533. package/src/utils/diagramGenerator.ts +0 -206
  534. package/src/utils/errorLogger.ts +0 -60
  535. package/src/utils/estimationUtils.ts +0 -407
  536. package/src/utils/fileFilters.ts +0 -373
  537. package/src/utils/fileSystem.ts +0 -57
  538. package/src/utils/logger.ts +0 -290
  539. package/src/utils/pathValidator.ts +0 -98
  540. package/src/utils/projectDocs.ts +0 -189
  541. package/src/utils/promptPaths.ts +0 -29
  542. package/src/utils/promptTemplateManager.ts +0 -157
  543. package/src/utils/review/consolidateReview.ts +0 -553
  544. package/src/utils/review/fixDisplay.ts +0 -100
  545. package/src/utils/review/fixImplementation.ts +0 -61
  546. package/src/utils/review/index.ts +0 -36
  547. package/src/utils/review/interactiveProcessing.ts +0 -294
  548. package/src/utils/review/progressTracker.ts +0 -296
  549. package/src/utils/review/reviewExtraction.ts +0 -382
  550. package/src/utils/review/types.ts +0 -46
  551. package/src/utils/reviewParser.ts +0 -253
  552. package/src/utils/sanitizer.ts +0 -238
  553. package/src/utils/smartFileSelector.ts +0 -255
  554. package/src/utils/templateLoader.ts +0 -514
  555. package/src/utils/treeGenerator.ts +0 -153
  556. package/tsconfig.build.json +0 -14
  557. package/tsconfig.json +0 -59
  558. /package/{src/utils/api/index.ts → dist/utils/api/index.d.ts} +0 -0
@@ -1,382 +0,0 @@
1
- /**
2
- * @fileoverview Utilities for extracting and parsing code review results.
3
- *
4
- * This module provides functions for extracting actionable items from code review results,
5
- * including parsing sections by priority, identifying file locations, and extracting code snippets.
6
- */
7
-
8
- import path from 'node:path';
9
- import logger from '../logger';
10
- import { FixPriority, type FixSuggestion } from './types';
11
-
12
- /**
13
- * Extract fix suggestions from review content
14
- * @param reviewContent The content of the review
15
- * @param projectPath Base path of the project
16
- * @param priorityLevel Optional priority level to extract (if not provided, extracts all)
17
- * @returns Array of fix suggestions
18
- */
19
- export async function extractFixSuggestions(
20
- reviewContent: string,
21
- projectPath: string,
22
- priorityLevel?: FixPriority,
23
- ): Promise<FixSuggestion[]> {
24
- const suggestions: FixSuggestion[] = [];
25
-
26
- // If a specific priority level is requested, only extract that level
27
- if (priorityLevel) {
28
- let section: string | null = null;
29
-
30
- switch (priorityLevel) {
31
- case FixPriority.HIGH:
32
- section = extractSection(reviewContent, '### 🟥 High Priority', '### 🟧 Medium Priority');
33
- break;
34
- case FixPriority.MEDIUM:
35
- section = extractSection(reviewContent, '### 🟧 Medium Priority', '### 🟩 Low Priority');
36
- break;
37
- case FixPriority.LOW:
38
- section = extractSection(reviewContent, '### 🟩 Low Priority', '---');
39
- break;
40
- }
41
-
42
- if (section) {
43
- const prioritySuggestions = await parseSuggestions(section, priorityLevel, projectPath);
44
- suggestions.push(...prioritySuggestions);
45
- }
46
-
47
- return suggestions;
48
- }
49
-
50
- // Otherwise, extract all priority levels
51
- // Extract high priority issues
52
- const highPrioritySection = extractSection(
53
- reviewContent,
54
- '### 🟥 High Priority',
55
- '### 🟧 Medium Priority',
56
- );
57
- if (highPrioritySection) {
58
- const highPrioritySuggestions = await parseSuggestions(
59
- highPrioritySection,
60
- FixPriority.HIGH,
61
- projectPath,
62
- );
63
- suggestions.push(...highPrioritySuggestions);
64
- }
65
-
66
- // Extract medium priority issues
67
- const mediumPrioritySection = extractSection(
68
- reviewContent,
69
- '### 🟧 Medium Priority',
70
- '### 🟩 Low Priority',
71
- );
72
- if (mediumPrioritySection) {
73
- const mediumPrioritySuggestions = await parseSuggestions(
74
- mediumPrioritySection,
75
- FixPriority.MEDIUM,
76
- projectPath,
77
- );
78
- suggestions.push(...mediumPrioritySuggestions);
79
- }
80
-
81
- // Extract low priority issues
82
- const lowPrioritySection = extractSection(reviewContent, '### 🟩 Low Priority', '---');
83
- if (lowPrioritySection) {
84
- const lowPrioritySuggestions = await parseSuggestions(
85
- lowPrioritySection,
86
- FixPriority.LOW,
87
- projectPath,
88
- );
89
- suggestions.push(...lowPrioritySuggestions);
90
- }
91
-
92
- return suggestions;
93
- }
94
-
95
- /**
96
- * Extract a section from the review content
97
- * @param content Full review content
98
- * @param startMarker Start marker for the section
99
- * @param endMarker End marker for the section
100
- * @returns The extracted section or null if not found
101
- */
102
- export function extractSection(
103
- content: string,
104
- startMarker: string,
105
- endMarker: string,
106
- ): string | null {
107
- // Try exact match first
108
- let startIndex = content.indexOf(startMarker);
109
-
110
- // If exact match fails, try more flexible matching
111
- if (startIndex === -1) {
112
- // Try without emoji
113
- const startMarkerNoEmoji = startMarker.replace(/🟥|🟧|🟩/g, '').trim();
114
- startIndex = content.indexOf(startMarkerNoEmoji);
115
-
116
- // Try with different heading levels (## or # instead of ###)
117
- if (startIndex === -1) {
118
- const startMarkerAltHeading = startMarker.replace('###', '##');
119
- startIndex = content.indexOf(startMarkerAltHeading);
120
- }
121
-
122
- if (startIndex === -1) {
123
- const startMarkerAltHeading2 = startMarker.replace('###', '#');
124
- startIndex = content.indexOf(startMarkerAltHeading2);
125
- }
126
-
127
- // Try with case-insensitive match for priority level
128
- if (startIndex === -1) {
129
- const priorityLevel = startMarker.includes('High')
130
- ? 'high'
131
- : startMarker.includes('Medium')
132
- ? 'medium'
133
- : startMarker.includes('Low')
134
- ? 'low'
135
- : '';
136
-
137
- if (priorityLevel) {
138
- const regex = new RegExp(`[#]{1,3}\\s*(?:🟥|🟧|🟩)?\\s*${priorityLevel}\\s*priority`, 'i');
139
- const match = content.match(regex);
140
- if (match && match.index !== undefined) {
141
- startIndex = match.index;
142
- }
143
- }
144
- }
145
- }
146
-
147
- if (startIndex === -1) return null;
148
-
149
- // Try exact match for end marker
150
- let endIndex = content.indexOf(endMarker, startIndex);
151
-
152
- // If exact match fails, try more flexible matching for end marker
153
- if (endIndex === -1) {
154
- // Try without emoji
155
- const endMarkerNoEmoji = endMarker.replace(/🟥|🟧|🟩/g, '').trim();
156
- endIndex = content.indexOf(endMarkerNoEmoji, startIndex);
157
-
158
- // Try with different heading levels
159
- if (endIndex === -1) {
160
- const endMarkerAltHeading = endMarker.replace('###', '##');
161
- endIndex = content.indexOf(endMarkerAltHeading, startIndex);
162
- }
163
-
164
- if (endIndex === -1) {
165
- const endMarkerAltHeading2 = endMarker.replace('###', '#');
166
- endIndex = content.indexOf(endMarkerAltHeading2, startIndex);
167
- }
168
-
169
- // If we still can't find the end marker, look for the next heading
170
- if (endIndex === -1) {
171
- const nextHeadingMatch = content.substring(startIndex).match(/\n[#]{1,3}\s/);
172
- if (nextHeadingMatch && nextHeadingMatch.index !== undefined) {
173
- endIndex = startIndex + nextHeadingMatch.index;
174
- }
175
- }
176
- }
177
-
178
- if (endIndex === -1) return content.substring(startIndex);
179
-
180
- return content.substring(startIndex, endIndex);
181
- }
182
-
183
- /**
184
- * Parse suggestions from a section of the review
185
- * @param sectionContent Content of the section
186
- * @param priority Priority level of the suggestions
187
- * @param projectPath Base path of the project
188
- * @returns Array of fix suggestions
189
- */
190
- export async function parseSuggestions(
191
- sectionContent: string,
192
- priority: FixPriority,
193
- projectPath: string,
194
- ): Promise<FixSuggestion[]> {
195
- const suggestions: FixSuggestion[] = [];
196
-
197
- // Split the section into individual issues to reduce memory usage
198
- // Try different patterns to match issue blocks
199
- let issueBlocks: string[] = [];
200
-
201
- // Pattern 1: **Issue**: format
202
- const pattern1Blocks = sectionContent
203
- .split(/(?=\*\*Issue\*\*:)/)
204
- .filter((block) => block.trim().startsWith('**Issue**:'));
205
- if (pattern1Blocks.length > 0) {
206
- issueBlocks = pattern1Blocks;
207
- } else {
208
- // Pattern 2: 1. **Issue**: format (numbered list)
209
- const pattern2Blocks = sectionContent
210
- .split(/(?=\d+\.\s*\*\*Issue\*\*:)/)
211
- .filter((block) => block.trim().match(/^\d+\.\s*\*\*Issue\*\*/));
212
- if (pattern2Blocks.length > 0) {
213
- issueBlocks = pattern2Blocks;
214
- } else {
215
- // Pattern 3: ### Issue: format (heading)
216
- const pattern3Blocks = sectionContent
217
- .split(/(?=[#]{1,3}\s+Issue:)/)
218
- .filter((block) => block.trim().match(/^[#]{1,3}\s+Issue:/));
219
- if (pattern3Blocks.length > 0) {
220
- issueBlocks = pattern3Blocks;
221
- } else {
222
- // Pattern 4: **Finding**: format (security reviews)
223
- const pattern4Blocks = sectionContent
224
- .split(/(?=\*\*Finding\*\*:)/)
225
- .filter((block) => block.trim().startsWith('**Finding**:'));
226
- if (pattern4Blocks.length > 0) {
227
- issueBlocks = pattern4Blocks;
228
- } else {
229
- // Pattern 5: **Performance Issue**: format (performance reviews)
230
- const pattern5Blocks = sectionContent
231
- .split(/(?=\*\*Performance Issue\*\*:)/)
232
- .filter((block) => block.trim().startsWith('**Performance Issue**:'));
233
- if (pattern5Blocks.length > 0) {
234
- issueBlocks = pattern5Blocks;
235
- }
236
- }
237
- }
238
- }
239
- }
240
-
241
- for (const issueBlock of issueBlocks) {
242
- try {
243
- // Extract issue description using multiple patterns
244
- let issueDescription = '';
245
- let issueMatch = issueBlock.match(/\*\*Issue\*\*:([^*]+)/);
246
- if (!issueMatch) {
247
- // Try alternative patterns
248
- issueMatch = issueBlock.match(/\d+\.\s*\*\*Issue\*\*:([^*]+)/);
249
- }
250
- if (!issueMatch) {
251
- issueMatch = issueBlock.match(/[#]{1,3}\s+Issue:([^\n]+)/);
252
- }
253
- if (!issueMatch) {
254
- issueMatch = issueBlock.match(/\*\*Finding\*\*:([^*]+)/);
255
- }
256
- if (!issueMatch) {
257
- issueMatch = issueBlock.match(/\*\*Performance Issue\*\*:([^*]+)/);
258
- }
259
- if (!issueMatch) continue;
260
- issueDescription = issueMatch[1].trim();
261
-
262
- // Extract file path using multiple patterns
263
- let filePath = '';
264
- let fileMatch = issueBlock.match(/\*\*File\*\*:([^*]+)/);
265
- if (!fileMatch) {
266
- fileMatch = issueBlock.match(/\*\*Location\*\*:([^*]+)/);
267
- }
268
- if (!fileMatch) {
269
- fileMatch = issueBlock.match(/File:([^\n]+)/);
270
- }
271
- if (!fileMatch) {
272
- fileMatch = issueBlock.match(/Path:([^\n]+)/);
273
- }
274
- if (!fileMatch) {
275
- // Try to find any path-like string in the issue block
276
- const pathMatch = issueBlock.match(
277
- /(?:src|lib|test|app|components|utils|helpers|services|models|controllers|views|pages|api|config|public|assets|styles|css|js|ts|tsx|jsx)\/[\w\-./_]+\.(ts|js|tsx|jsx|json|css|scss|html|md)/,
278
- );
279
- if (pathMatch) {
280
- filePath = pathMatch[0].trim();
281
- } else {
282
- continue; // Skip if we can't find a file path
283
- }
284
- } else {
285
- filePath = fileMatch[1].trim();
286
- }
287
- // Remove any markdown formatting from the file path
288
- let cleanFilePath = filePath.replace(/`/g, '').replace(/\*/g, '').trim();
289
-
290
- // Extract the actual file path from common patterns
291
- const filePathMatch = cleanFilePath.match(/(?:src|\/)\S+\.(ts|js|tsx|jsx|json)/);
292
- if (filePathMatch) {
293
- cleanFilePath = filePathMatch[0];
294
- } else {
295
- // If we can't extract a clear file path, try to find the most likely path
296
- const possiblePaths = cleanFilePath
297
- .split(/[\s,()]/)
298
- .filter((part) => part.includes('/') || part.includes('.ts') || part.includes('.js'));
299
-
300
- if (possiblePaths.length > 0) {
301
- cleanFilePath = possiblePaths[0];
302
- }
303
- }
304
-
305
- // Resolve the full file path
306
- const fullFilePath = path.resolve(projectPath, cleanFilePath);
307
-
308
- // Extract location
309
- const locationMatch = issueBlock.match(/\*\*Location\*\*:([^*]+)/);
310
- const location = locationMatch ? locationMatch[1].trim() : '';
311
-
312
- // Extract code blocks with more flexible pattern matching
313
- // Match code blocks with or without language specifier
314
- const codeBlockMatches = issueBlock.match(/```(?:[a-zA-Z0-9_-]*)?\s*([\s\S]*?)```/g) || [];
315
-
316
- // If no code blocks found with triple backticks, try alternative formats
317
- let codeBlocks: string[] = [];
318
-
319
- if (codeBlockMatches.length > 0) {
320
- codeBlocks = codeBlockMatches.map((block: string) => {
321
- // Extract the content inside the code block
322
- const content = block.replace(/```(?:[a-zA-Z0-9_-]*)?\s*|```$/g, '');
323
- return content.trim();
324
- });
325
- } else {
326
- // Try to find code blocks with indentation (4 spaces or tab)
327
- const indentedCodeBlockMatch = issueBlock.match(
328
- /(?:^|\n)(?: {4}|\t)([^\n]+(?:\n(?: {4}|\t)[^\n]+)*)/g,
329
- );
330
- if (indentedCodeBlockMatch) {
331
- codeBlocks = indentedCodeBlockMatch.map((block: string) => {
332
- // Remove the indentation
333
- return block.replace(/(?:^|\n)(?: {4}|\t)/g, '\n').trim();
334
- });
335
- }
336
-
337
- // Try to find code blocks with 'Current code:' and 'Suggested code:' markers
338
- const currentCodeMatch = issueBlock.match(/Current code:([\s\S]*?)(?:Suggested code:|$)/i);
339
- const suggestedCodeMatch = issueBlock.match(/Suggested code:([\s\S]*?)(?:Impact:|$)/i);
340
-
341
- if (currentCodeMatch?.[1].trim()) {
342
- codeBlocks.push(currentCodeMatch[1].trim());
343
- }
344
-
345
- if (suggestedCodeMatch?.[1].trim()) {
346
- codeBlocks.push(suggestedCodeMatch[1].trim());
347
- }
348
- }
349
-
350
- // Create suggestion
351
- const suggestion: FixSuggestion = {
352
- priority,
353
- file: fullFilePath,
354
- description: issueDescription,
355
- };
356
-
357
- // If we have code blocks, assume the first is current code and second is suggested code
358
- if (codeBlocks.length >= 2) {
359
- suggestion.currentCode = codeBlocks[0];
360
- suggestion.suggestedCode = codeBlocks[1];
361
- } else if (codeBlocks.length === 1) {
362
- // If only one code block, assume it's the suggested code
363
- suggestion.suggestedCode = codeBlocks[0];
364
- }
365
-
366
- // Try to extract line numbers from location
367
- const lineNumberMatch = location.match(/lines? (\d+)(?:-(\d+))?/i);
368
- if (lineNumberMatch) {
369
- const startLine = parseInt(lineNumberMatch[1], 10);
370
- const endLine = lineNumberMatch[2] ? parseInt(lineNumberMatch[2], 10) : startLine;
371
- suggestion.lineNumbers = { start: startLine, end: endLine };
372
- }
373
-
374
- suggestions.push(suggestion);
375
- } catch (error) {
376
- logger.error('Error parsing suggestion:', error);
377
- // Continue with the next issue block
378
- }
379
- }
380
-
381
- return suggestions;
382
- }
@@ -1,46 +0,0 @@
1
- /**
2
- * @fileoverview Type definitions for review action modules
3
- *
4
- * This module provides shared types used across the review action modules.
5
- */
6
-
7
- /**
8
- * Priority levels for code review fixes
9
- */
10
- export enum FixPriority {
11
- HIGH = 'high',
12
- MEDIUM = 'medium',
13
- LOW = 'low',
14
- }
15
-
16
- /**
17
- * Structure representing a code fix suggestion
18
- */
19
- export interface FixSuggestion {
20
- priority: FixPriority;
21
- file: string;
22
- description: string;
23
- currentCode?: string;
24
- suggestedCode?: string;
25
- lineNumbers?: { start: number; end: number };
26
- }
27
-
28
- /**
29
- * Summary of fix actions taken
30
- */
31
- export interface FixSummary {
32
- highPriorityFixed: number;
33
- mediumPriorityFixed: number;
34
- lowPriorityFixed: number;
35
- totalSuggestions: number;
36
- }
37
-
38
- /**
39
- * Summary of suggestions found
40
- */
41
- export interface SuggestionSummary {
42
- highPrioritySuggestions: FixSuggestion[];
43
- mediumPrioritySuggestions: FixSuggestion[];
44
- lowPrioritySuggestions: FixSuggestion[];
45
- totalSuggestions: number;
46
- }
@@ -1,253 +0,0 @@
1
- /**
2
- * @fileoverview Utilities for parsing structured review output.
3
- *
4
- * This module provides functions for parsing and processing structured review output
5
- * in interactive mode. It handles JSON parsing, validation, and extraction of review
6
- * information from the AI's response.
7
- */
8
-
9
- // import { z } from 'zod'; // Not currently used
10
- import {
11
- IssuePriority,
12
- type ReviewIssue,
13
- type ReviewSchema,
14
- reviewSchema,
15
- } from '../types/reviewSchema';
16
- import logger from './logger';
17
-
18
- /**
19
- * Parse a JSON string into a ReviewSchema object
20
- * @param jsonString The JSON string to parse
21
- * @returns The parsed ReviewSchema object or null if parsing fails
22
- */
23
- export function parseReviewJson(jsonString: string): ReviewSchema | null {
24
- try {
25
- // Step 1: First attempt to parse as direct JSON if the string is already properly formatted
26
- // This should be the fast path for models that correctly return structured JSON
27
- if (jsonString.trim().startsWith('{') && jsonString.trim().endsWith('}')) {
28
- try {
29
- // Try to parse directly first - this is the ideal case and should work with the
30
- // updated model instructions that request structured JSON
31
- const directJson = JSON.parse(jsonString);
32
-
33
- // Validate using Zod schema
34
- const directValidation = reviewSchema.safeParse(directJson);
35
- if (directValidation.success) {
36
- logger.debug('Successfully parsed direct JSON response');
37
- return directValidation.data;
38
- }
39
- if (directJson.review) {
40
- // Basic validation passed
41
- logger.debug(
42
- 'Direct JSON has review property but failed schema validation, using fallback',
43
- );
44
- return directJson as ReviewSchema;
45
- }
46
- } catch (_e) {
47
- // If direct parsing fails, continue with the extraction approaches
48
- logger.debug('Direct parsing failed, attempting extraction patterns');
49
- }
50
- }
51
-
52
- // Step 2: If direct parsing fails, try various extraction patterns
53
- // Try to extract JSON from the response with improved language marker handling
54
- // Handle various formats:
55
- // 1. ```json {...}```
56
- // 2. ```typescript {...}``` or other language markers
57
- // 3. ```{...}```
58
- // 4. Plain JSON outside code blocks
59
-
60
- // First try to find code blocks with JSON content
61
- const jsonBlockMatch = jsonString.match(/```(?:json)?\s*({[\s\S]*?})\s*```/);
62
-
63
- // If no JSON block, look for any code block (could have typescript or other language marker)
64
- const anyCodeBlockMatch = !jsonBlockMatch
65
- ? jsonString.match(/```(?:[\w]*)?[\s\n]*({[\s\S]*?})[\s\n]*```/)
66
- : null;
67
-
68
- // Check for code blocks with language markers that aren't proper JSON
69
- const languageBlockRegex =
70
- /```(typescript|javascript|js|ts|jsx|tsx|java|python|ruby|go|rust|c|cpp|csharp|php)\s*([\s\S]*?)\s*```/;
71
- const languageBlockMatch =
72
- !jsonBlockMatch && !anyCodeBlockMatch ? jsonString.match(languageBlockRegex) : null;
73
-
74
- if (languageBlockMatch) {
75
- // Don't treat language-specific code blocks as JSON - log a warning
76
- const language = languageBlockMatch[1];
77
- logger.warn(
78
- `Found ${language} code block but not valid JSON. Skipping JSON parsing attempt for this block.`,
79
- );
80
- // Return early with null to avoid trying to parse code as JSON
81
- return null;
82
- }
83
-
84
- // If no code block match at all, try other patterns for JSON outside code blocks
85
- // First look for review patterns - the most likely structure
86
- const reviewJsonPattern = /({[\s\S]*?"review"[\s\S]*?})/;
87
- const reviewJsonMatch = jsonString.match(reviewJsonPattern);
88
-
89
- // Then fall back to any JSON-like patterns
90
- const anyJsonPattern = /({[\s\S]*?})/;
91
- const anyJsonMatch = !reviewJsonMatch ? jsonString.match(anyJsonPattern) : null;
92
-
93
- // Determine which match to use
94
- let jsonContent = jsonString; // default to full string
95
-
96
- if (jsonBlockMatch) {
97
- logger.debug('Found JSON code block, extracting content');
98
- jsonContent = jsonBlockMatch[1];
99
- } else if (anyCodeBlockMatch) {
100
- logger.debug('Found code block with JSON-like content, attempting to parse');
101
- jsonContent = anyCodeBlockMatch[1];
102
- } else if (reviewJsonMatch) {
103
- logger.debug('Found review JSON content outside code blocks');
104
- jsonContent = reviewJsonMatch[1];
105
- } else if (anyJsonMatch) {
106
- logger.debug('Found generic JSON-like content');
107
- jsonContent = anyJsonMatch[1];
108
- } else {
109
- logger.debug('No JSON content patterns found, attempting to parse raw content');
110
- }
111
-
112
- // Clean up the content - remove comments that might be in the JSON
113
- // Remove both single-line and inline comments
114
- jsonContent = jsonContent
115
- .replace(/\/\/.*?(?=\n|$)/g, '') // Remove inline comments (// style)
116
- .replace(/^\s*\/\/.*$/gm, '') // Remove single-line comments
117
- .replace(/\/\*[\s\S]*?\*\//g, '') // Remove multi-line comments
118
- .replace(/,\s*}/g, '}') // Fix trailing commas that might appear after removing comments
119
- .replace(/,\s*]/g, ']'); // Fix trailing commas in arrays
120
-
121
- // Additional cleanup for specific JSON parsing issues
122
- jsonContent = jsonContent
123
- .replace(/([{,])\s*"(\w+)":\s*"([^"]*)",\s*\/\/.*?(?=\n|$)/g, '$1"$2":"$3",') // Clean inline comments after values
124
- .replace(/([{,])\s*"(\w+)":\s*(\d+),\s*\/\/.*?(?=\n|$)/g, '$1"$2":$3,'); // Clean inline comments after numeric values
125
-
126
- // Parse the JSON
127
- const parsedJson = JSON.parse(jsonContent);
128
-
129
- // Validate using Zod schema
130
- const validationResult = reviewSchema.safeParse(parsedJson);
131
-
132
- if (validationResult.success) {
133
- logger.debug('Successfully validated review JSON with Zod schema');
134
- return validationResult.data;
135
- }
136
- logger.warn('Failed to validate review JSON schema:', validationResult.error.errors);
137
-
138
- // Fallback to basic validation if the schema doesn't match exactly
139
- // This helps with backward compatibility
140
- if (parsedJson.review) {
141
- logger.warn('Using fallback validation for review JSON');
142
- return parsedJson as ReviewSchema;
143
- }
144
-
145
- return null;
146
- } catch (error) {
147
- logger.error('Error parsing review JSON:', error);
148
- return null;
149
- }
150
- }
151
-
152
- /**
153
- * Extract the review content from a string that might contain JSON
154
- * @param content The content to extract from
155
- * @returns The extracted review content
156
- */
157
- export function extractReviewContent(content: string): string {
158
- // Try to find JSON in the content
159
- const parsedReview = parseReviewJson(content);
160
-
161
- if (parsedReview) {
162
- // If we successfully parsed the JSON, return it formatted
163
- return JSON.stringify(parsedReview, null, 2);
164
- }
165
-
166
- // Otherwise, return the original content
167
- return content;
168
- }
169
-
170
- /**
171
- * Format an issue for display in the console
172
- * @param issue The issue to format
173
- * @param filePath Path to the file containing the issue
174
- * @param fileIndex Index of the file
175
- * @param issueIndex Index of the issue
176
- * @returns Formatted issue string
177
- */
178
- export function formatIssueForDisplay(
179
- issue: ReviewIssue,
180
- filePath: string,
181
- fileIndex: number,
182
- issueIndex: number,
183
- ): string {
184
- const priorityColors: Record<IssuePriority, string> = {
185
- [IssuePriority.HIGH]: '\x1b[31m', // Red
186
- [IssuePriority.MEDIUM]: '\x1b[33m', // Yellow
187
- [IssuePriority.LOW]: '\x1b[32m', // Green
188
- };
189
-
190
- const priorityColor = priorityColors[issue.priority as IssuePriority] || '\x1b[37m'; // Default to white
191
- const reset = '\x1b[0m';
192
- const bold = '\x1b[1m';
193
-
194
- let output = `\n${bold}Issue ${fileIndex + 1}.${issueIndex + 1}: ${priorityColor}[${issue.priority}]${reset}${bold} ${issue.id}${reset}\n`;
195
- output += `${bold}Description:${reset} ${issue.description}\n`;
196
- output += `${bold}File:${reset} ${filePath}\n`;
197
- output += `${bold}Location:${reset} Lines ${issue.location.startLine}-${issue.location.endLine}\n\n`;
198
-
199
- output += `${bold}Current Code:${reset}\n`;
200
- output += '```\n';
201
- output += issue.currentCode;
202
- output += '\n```\n\n';
203
-
204
- output += `${bold}Suggested Code:${reset}\n`;
205
- output += '```\n';
206
- output += issue.suggestedCode;
207
- output += '\n```\n\n';
208
-
209
- if (issue.explanation) {
210
- output += `${bold}Explanation:${reset}\n`;
211
- output += issue.explanation;
212
- output += '\n\n';
213
- }
214
-
215
- return output;
216
- }
217
-
218
- /**
219
- * Display a structured review in the console
220
- * @param parsedReview The parsed review object
221
- */
222
- export function displayStructuredReview(parsedReview: ReviewSchema): void {
223
- const { review } = parsedReview;
224
-
225
- logger.info('\n=== Structured Code Review Results ===\n');
226
-
227
- // Display files one by one
228
- review.files.forEach((file, fileIndex) => {
229
- logger.info(`\n${'-'.repeat(80)}`);
230
- logger.info(`File ${fileIndex + 1}: ${file.filePath}`);
231
- logger.info(`${'-'.repeat(80)}`);
232
-
233
- if (file.issues.length === 0) {
234
- logger.info('No issues found in this file.');
235
- return;
236
- }
237
-
238
- // Display issues for this file
239
- file.issues.forEach((issue, issueIndex) => {
240
- const formattedIssue = formatIssueForDisplay(issue, file.filePath, fileIndex, issueIndex);
241
- logger.info(formattedIssue);
242
- });
243
- });
244
-
245
- // Display summary
246
- logger.info(`\n${'-'.repeat(80)}`);
247
- logger.info('Summary:');
248
- logger.info(`${'-'.repeat(80)}`);
249
- logger.info(`High Priority Issues: ${review.summary.highPriorityIssues}`);
250
- logger.info(`Medium Priority Issues: ${review.summary.mediumPriorityIssues}`);
251
- logger.info(`Low Priority Issues: ${review.summary.lowPriorityIssues}`);
252
- logger.info(`Total Issues: ${review.summary.totalIssues}`);
253
- }