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,308 +0,0 @@
1
- import { existsSync, mkdirSync, readdirSync, readFileSync, statSync } from 'node:fs';
2
- import path from 'node:path';
3
- import { join, relative, resolve } from 'node:path';
4
- import { execa } from 'execa';
5
- import type { OutputFormat } from '../types/common';
6
- import type { ReviewOptions, ReviewType, RunContext } from '../types/review';
7
- import { orchestrateReview } from '../core/reviewOrchestrator';
8
- import { RUNTIME_CONFIG } from './runtimeConfig';
9
-
10
- interface FileProgressPayload {
11
- file: string;
12
- index: number;
13
- total: number;
14
- }
15
-
16
- interface ReviewGroup {
17
- label: string;
18
- files: string[];
19
- absoluteFiles: string[];
20
- targetPath: string;
21
- }
22
-
23
- const MAX_FILES_PER_GROUP = 5;
24
- const MAX_CONTEXT_DOCS_PER_GROUP = 5;
25
- const MAX_CONTEXT_DOC_CHARS = 2000;
26
-
27
- interface ContextDocEntry {
28
- path: string;
29
- relativePath: string;
30
- snippet: string;
31
- }
32
-
33
- export interface AiReviewOptions {
34
- provider: 'openrouter';
35
- type: string;
36
- outDir: string;
37
- format: 'json' | 'md';
38
- model?: string;
39
- configPath?: string;
40
- debug?: boolean;
41
- onFileProgress?: (payload: FileProgressPayload) => void;
42
- runContext?: RunContext;
43
- }
44
-
45
- export async function runAiCodeReview(
46
- targetFiles: string[],
47
- contextFiles: string[],
48
- opts: AiReviewOptions,
49
- ): Promise<any[]> {
50
- if (targetFiles.length === 0) return [];
51
-
52
- const workspaceRoot = process.cwd();
53
- let repoRoot: string;
54
- try {
55
- const { stdout } = await execa('git', ['rev-parse', '--show-toplevel']);
56
- repoRoot = stdout.trim();
57
- } catch {
58
- repoRoot = process.cwd();
59
- }
60
-
61
- const absOutDir = resolve(workspaceRoot, opts.outDir);
62
-
63
- if (!existsSync(absOutDir)) {
64
- mkdirSync(absOutDir, { recursive: true });
65
- }
66
-
67
- const outputFileMeta = new Map<string, { mtimeMs: number; size: number }>();
68
- if (existsSync(absOutDir)) {
69
- for (const file of readdirSync(absOutDir)) {
70
- if (!file.endsWith('.json')) continue;
71
- try {
72
- const stats = statSync(join(absOutDir, file));
73
- outputFileMeta.set(file, { mtimeMs: stats.mtimeMs, size: stats.size });
74
- } catch {
75
- // ignore stale files
76
- }
77
- }
78
- }
79
-
80
- function getAllFilesInDir(dirPath: string, repo: string): string[] {
81
- const entries = readdirSync(dirPath, { withFileTypes: true });
82
- const nested: string[] = [];
83
- for (const entry of entries) {
84
- const fullPath = join(dirPath, entry.name);
85
- const relPath = relative(repo, fullPath);
86
- if (relPath.includes('.git/') || relPath.includes('node_modules/')) {
87
- continue;
88
- }
89
-
90
- if (entry.isDirectory()) {
91
- const subFiles = getAllFilesInDir(fullPath, repo);
92
- nested.push(...subFiles);
93
- } else if (entry.isFile()) {
94
- nested.push(fullPath);
95
- }
96
- }
97
- return nested;
98
- }
99
-
100
- const expandedFiles: string[] = [];
101
- for (const file of targetFiles) {
102
- const absPath = resolve(file);
103
- try {
104
- const stats = statSync(absPath);
105
- if (stats.isDirectory()) {
106
- const dirFiles = getAllFilesInDir(absPath, repoRoot);
107
- expandedFiles.push(...dirFiles);
108
- } else if (stats.isFile()) {
109
- expandedFiles.push(absPath);
110
- }
111
- } catch {
112
- continue;
113
- }
114
- }
115
-
116
- const uniqueExpandedFiles = Array.from(new Set(expandedFiles));
117
- const relativeFilesSet = new Set<string>();
118
- for (const absPath of uniqueExpandedFiles) {
119
- try {
120
- const stats = statSync(absPath);
121
- if (!stats.isFile()) continue;
122
- const repoRelative = relative(repoRoot, absPath);
123
- if (!repoRelative || repoRelative.startsWith('..')) continue;
124
-
125
- const workspaceRelative = relative(workspaceRoot, absPath).replace(/\\/g, '/');
126
- if (!workspaceRelative || workspaceRelative.startsWith('..')) continue;
127
-
128
- relativeFilesSet.add(workspaceRelative);
129
- } catch {
130
- continue;
131
- }
132
- }
133
-
134
- const outputs: any[] = [];
135
-
136
- const collectOutputs = () => {
137
- if (!existsSync(absOutDir)) {
138
- return;
139
- }
140
- const jsonFiles = readdirSync(absOutDir).filter((f) => f.endsWith('.json'));
141
- for (const file of jsonFiles) {
142
- const filePath = join(absOutDir, file);
143
- try {
144
- const stats = statSync(filePath);
145
- const previous = outputFileMeta.get(file);
146
- if (previous && stats.mtimeMs <= previous.mtimeMs && stats.size === previous.size) {
147
- continue;
148
- }
149
- const content = JSON.parse(readFileSync(filePath, 'utf-8'));
150
- outputs.push(content);
151
- outputFileMeta.set(file, { mtimeMs: stats.mtimeMs, size: stats.size });
152
- } catch {
153
- continue;
154
- }
155
- }
156
- };
157
-
158
- if (relativeFilesSet.size === 0) {
159
- throw new Error('No files to review after filtering');
160
- }
161
-
162
- const targets = Array.from(relativeFilesSet);
163
- const mappedFormat: OutputFormat = opts.format === 'md' ? 'markdown' : 'json';
164
-
165
- const baseOptions: (ReviewOptions & { config?: string }) = {
166
- type: opts.type as ReviewType,
167
- output: mappedFormat,
168
- outputDir: absOutDir,
169
- model: opts.model || RUNTIME_CONFIG.DEFAULT_MODEL,
170
- debug: opts.debug ?? false,
171
- };
172
-
173
- if (opts.configPath) {
174
- baseOptions.config = opts.configPath;
175
- }
176
-
177
- const groups = createReviewGroups(targets, workspaceRoot);
178
- const contextDocEntries = prepareContextDocs(contextFiles, workspaceRoot);
179
- const totalFiles = targets.length;
180
- let processedCount = 0;
181
-
182
- const groupCount = groups.length;
183
- for (let groupIdx = 0; groupIdx < groups.length; groupIdx += 1) {
184
- const group = groups[groupIdx];
185
- const progressIndex = Math.min(processedCount + 1, totalFiles);
186
- const displayName = formatGroupDisplay(group.files);
187
- opts.onFileProgress?.({ file: displayName, index: progressIndex, total: totalFiles });
188
-
189
- const selectedContextDocs = selectContextDocs(group.files, contextDocEntries);
190
- const inheritedContext = opts.runContext;
191
- const runContext = inheritedContext
192
- ? {
193
- ...inheritedContext,
194
- groupIndex: groupIdx + 1,
195
- groupCount,
196
- groupLabel: group.label,
197
- groupFiles: group.files,
198
- docFiles: selectedContextDocs.map((doc) => doc.relativePath),
199
- contextDocs: selectedContextDocs.map((doc) => ({
200
- path: doc.relativePath,
201
- snippet: doc.snippet,
202
- })),
203
- }
204
- : undefined;
205
-
206
- await orchestrateReview(group.targetPath, {
207
- ...baseOptions,
208
- targetFileList: group.absoluteFiles,
209
- runContext,
210
- });
211
- processedCount += group.files.length;
212
- collectOutputs();
213
- }
214
-
215
- return outputs;
216
- }
217
-
218
- function createReviewGroups(targets: string[], workspaceRoot: string): ReviewGroup[] {
219
- const directoryMap = new Map<string, string[]>();
220
- for (const target of targets) {
221
- const dir = path.posix.dirname(target) || '.';
222
- if (!directoryMap.has(dir)) {
223
- directoryMap.set(dir, []);
224
- }
225
- directoryMap.get(dir)!.push(target);
226
- }
227
-
228
- const groups: ReviewGroup[] = [];
229
- for (const [dir, files] of directoryMap) {
230
- for (let i = 0; i < files.length; i += MAX_FILES_PER_GROUP) {
231
- const chunk = files.slice(i, i + MAX_FILES_PER_GROUP);
232
- const absoluteFiles = chunk.map((file) => resolve(workspaceRoot, file));
233
- const targetPath = dir === '.' ? chunk[0] ?? '.' : dir;
234
- groups.push({
235
- label: dir,
236
- files: chunk,
237
- absoluteFiles,
238
- targetPath,
239
- });
240
- }
241
- }
242
-
243
- return groups;
244
- }
245
-
246
- function formatGroupDisplay(files: string[]): string {
247
- if (files.length === 0) {
248
- return 'pending files';
249
- }
250
-
251
- if (files.length === 1) {
252
- return files[0];
253
- }
254
-
255
- return `${files[0]} (+${files.length - 1} more)`;
256
- }
257
-
258
- function prepareContextDocs(contextFiles: string[], workspaceRoot: string): ContextDocEntry[] {
259
- const docs: ContextDocEntry[] = [];
260
- const seen = new Set<string>();
261
-
262
- for (const file of contextFiles) {
263
- const absPath = resolve(file);
264
- if (seen.has(absPath)) continue;
265
- seen.add(absPath);
266
-
267
- try {
268
- const stats = statSync(absPath);
269
- if (!stats.isFile()) continue;
270
- const buffer = readFileSync(absPath);
271
- if (buffer.length === 0 || buffer.includes(0)) continue;
272
- const snippet = buffer.toString('utf-8').slice(0, MAX_CONTEXT_DOC_CHARS);
273
- const relativePath = relative(workspaceRoot, absPath).replace(/\\/g, '/');
274
- if (!relativePath || relativePath.startsWith('..')) continue;
275
- docs.push({ path: absPath, relativePath, snippet });
276
- } catch {
277
- continue;
278
- }
279
- }
280
-
281
- return docs;
282
- }
283
-
284
- function selectContextDocs(
285
- groupFiles: string[],
286
- docs: ContextDocEntry[],
287
- limit = MAX_CONTEXT_DOCS_PER_GROUP,
288
- ): ContextDocEntry[] {
289
- if (docs.length === 0 || limit <= 0) {
290
- return [];
291
- }
292
-
293
- const groupDirs = new Set(groupFiles.map((file) => path.posix.dirname(file)));
294
- const prioritized: ContextDocEntry[] = [];
295
- const remaining: ContextDocEntry[] = [];
296
-
297
- for (const doc of docs) {
298
- const docDir = path.posix.dirname(doc.relativePath);
299
- if (groupDirs.has(docDir)) {
300
- prioritized.push(doc);
301
- } else {
302
- remaining.push(doc);
303
- }
304
- }
305
-
306
- const ordered = [...prioritized, ...remaining];
307
- return ordered.slice(0, limit);
308
- }
@@ -1,5 +0,0 @@
1
- export const RUNTIME_CONFIG = {
2
- DEFAULT_MODEL: 'openrouter:x-ai/grok-4-fast',
3
- } as const;
4
-
5
- export type RuntimeConfig = typeof RUNTIME_CONFIG;
@@ -1,57 +0,0 @@
1
- import React, { createContext, useContext, useEffect, useMemo, useState } from 'react';
2
- import { getInk } from './inkModules';
3
-
4
- interface LayoutValue {
5
- columns: number;
6
- rows: number;
7
- frameWidth: number;
8
- }
9
-
10
- const DEFAULT_COLUMNS = 80;
11
- const DEFAULT_ROWS = 24;
12
-
13
- const LayoutContext = createContext<LayoutValue>({
14
- columns: DEFAULT_COLUMNS,
15
- rows: DEFAULT_ROWS,
16
- frameWidth: DEFAULT_COLUMNS - 4,
17
- });
18
-
19
- export function LayoutProvider({ children }: { children: React.ReactNode }) {
20
- const { useStdout } = getInk();
21
- const { stdout } = useStdout();
22
- const [dimensions, setDimensions] = useState<LayoutValue>(() => ({
23
- columns: stdout?.columns ?? DEFAULT_COLUMNS,
24
- rows: stdout?.rows ?? DEFAULT_ROWS,
25
- frameWidth: Math.max(60, Math.min((stdout?.columns ?? DEFAULT_COLUMNS) - 4, 110)),
26
- }));
27
-
28
- useEffect(() => {
29
- if (!stdout) {
30
- return;
31
- }
32
-
33
- const handleResize = () => {
34
- const cols = stdout.columns ?? DEFAULT_COLUMNS;
35
- const rows = stdout.rows ?? DEFAULT_ROWS;
36
- setDimensions({
37
- columns: cols,
38
- rows,
39
- frameWidth: Math.max(60, Math.min(cols - 4, 110)),
40
- });
41
- };
42
-
43
- stdout.on('resize', handleResize);
44
- return () => {
45
- stdout.off('resize', handleResize);
46
- };
47
- }, [stdout]);
48
-
49
- const value = useMemo<LayoutValue>(() => dimensions, [dimensions]);
50
-
51
- return <LayoutContext.Provider value={value}>{children}</LayoutContext.Provider>;
52
- }
53
-
54
- export function useLayout(): LayoutValue {
55
- return useContext(LayoutContext);
56
- }
57
-
@@ -1,262 +0,0 @@
1
- import React, { useCallback, useEffect, useMemo, useState } from 'react';
2
- import { LayoutProvider, useLayout } from './Layout';
3
- import { AuthScreen } from './screens/AuthScreen';
4
- import { ModeSelection } from './screens/ModeSelection';
5
- import { ProgressScreen } from './screens/ProgressScreen';
6
- import { ResultsScreen } from './screens/ResultsScreen';
7
- import { getInk, getInkSpinner } from './inkModules';
8
- import type { ReviewMode, ReviewResult, ReviewStage, StageUpdate } from '../reviewPipeline';
9
- import { executeReview } from '../reviewPipeline';
10
- import { loadSession, getSessionToken } from '../auth/session';
11
- import type { SessionUser } from '../auth/types';
12
- import { RUNTIME_CONFIG } from '../runtimeConfig';
13
- import { MissingCrIgnoreError } from '../errors';
14
- import { triggerManualWebCheck } from '../preprod/webCheck';
15
- import { startDebugLogSession, type DebugLogSession } from '../debug/logManager';
16
- import logger from '../../utils/logger';
17
-
18
- type ScreenState = 'auth' | 'mode' | 'progress' | 'results';
19
-
20
- interface RuntimeAppProps {
21
- debug?: boolean;
22
- }
23
-
24
- interface ProgressState {
25
- stage: ReviewStage;
26
- filesFound?: number;
27
- currentFile?: string;
28
- currentIndex?: number;
29
- totalFiles?: number;
30
- uncommittedFiles?: number;
31
- contextFiles?: number;
32
- }
33
-
34
- const defaultProgress: ProgressState = { stage: 'collecting' };
35
- const GENERIC_ERROR_MESSAGE =
36
- 'Something went wrong. Press D to enable debug mode and rerun to capture logs.';
37
- const PREPROD_ERROR_MESSAGE =
38
- 'Could not start the website check. Double-check the URL or try again later.';
39
-
40
- function transformStageUpdate(stage: ReviewStage, info?: StageUpdate): ProgressState {
41
- return {
42
- stage,
43
- filesFound: info?.filesFound,
44
- currentFile: info?.currentFile,
45
- currentIndex:
46
- typeof info?.fileIndex === 'number' && info.fileIndex > 0 ? info.fileIndex : undefined,
47
- totalFiles: info?.totalFiles,
48
- uncommittedFiles: info?.uncommittedFiles,
49
- contextFiles: info?.contextFiles,
50
- };
51
- }
52
-
53
- function AppBody({ debug = false }: RuntimeAppProps) {
54
- const { Box, Text, useApp, useInput } = getInk();
55
- const { exit } = useApp();
56
- const layout = useLayout();
57
- const [screen, setScreen] = useState<ScreenState>('auth');
58
- const [user, setUser] = useState<SessionUser | null>(null);
59
- const [progress, setProgress] = useState<ProgressState>(defaultProgress);
60
- const [results, setResults] = useState<ReviewResult | null>(null);
61
- const [debugEnabled, setDebugEnabled] = useState(false);
62
- const [lastDebugLogPath, setLastDebugLogPath] = useState<string | null>(null);
63
- type ErrorInfo = { type: 'generic' | 'crignore'; message: string; hint?: string };
64
- const [error, setError] = useState<ErrorInfo | null>(null);
65
- const combinedDebugFlag = useMemo(() => debug || debugEnabled, [debug, debugEnabled]);
66
-
67
- useEffect(() => {
68
- const sessionUser = loadSession();
69
- const token = getSessionToken();
70
- if (token) {
71
- process.env.CR_AIA_PROXY_SESSION_TOKEN = token;
72
- }
73
- if (sessionUser) {
74
- setUser(sessionUser);
75
- setScreen('mode');
76
- }
77
- }, []);
78
-
79
- useInput(
80
- useCallback(
81
- (input, key) => {
82
- if (key.ctrl && input === 'c') {
83
- exit();
84
- }
85
-
86
- if (screen === 'results' && key.return) {
87
- setScreen('mode');
88
- }
89
- },
90
- [exit, screen],
91
- ),
92
- );
93
-
94
- const handleAuth = useCallback((nextUser: SessionUser) => {
95
- setUser(nextUser);
96
- setScreen('mode');
97
- }, []);
98
-
99
- const handleToggleDebug = useCallback(() => {
100
- setDebugEnabled((prev) => {
101
- if (prev) {
102
- setLastDebugLogPath(null);
103
- }
104
- return !prev;
105
- });
106
- }, []);
107
-
108
- const handleRunReview = useCallback(async (mode: ReviewMode, extras?: { targetUrl?: string }) => {
109
- const trimmedUrl = extras?.targetUrl?.trim();
110
-
111
- if (mode === 'preprod' && !trimmedUrl) {
112
- setError({ type: 'generic', message: 'Pre-production mode requires a website URL.' });
113
- return;
114
- }
115
-
116
- setScreen('progress');
117
- setResults(null);
118
- setError(null);
119
- setProgress(mode === 'preprod' ? { stage: 'preparing' } : { ...defaultProgress });
120
- setLastDebugLogPath(null);
121
-
122
- let debugSession: DebugLogSession | null = null;
123
- const finalizeDebugLogging = () => {
124
- if (debugSession) {
125
- debugSession.stop();
126
- setLastDebugLogPath(debugSession.filePath);
127
- } else {
128
- setLastDebugLogPath(null);
129
- }
130
- };
131
-
132
- if (debugEnabled) {
133
- try {
134
- debugSession = startDebugLogSession(process.cwd());
135
- } catch (logInitError) {
136
- const message =
137
- logInitError instanceof Error
138
- ? logInitError.message
139
- : 'Unable to initialize debug logging.';
140
- setError({ type: 'generic', message: `Debug logging disabled: ${message}` });
141
- }
142
- }
143
-
144
- if (mode === 'preprod' && trimmedUrl) {
145
- try {
146
- logger.info('Triggering manual website check', { url: trimmedUrl });
147
- await triggerManualWebCheck(trimmedUrl);
148
- } catch (webError) {
149
- logger.error('Pre-production web check failed', webError);
150
- setError({ type: 'generic', message: PREPROD_ERROR_MESSAGE });
151
- setScreen('mode');
152
- finalizeDebugLogging();
153
- return;
154
- }
155
- }
156
-
157
- try {
158
- logger.info('Starting code review run', { mode, workspace: process.cwd(), preprodTarget: trimmedUrl });
159
- setProgress({ ...defaultProgress });
160
- const reviewResult = await executeReview({
161
- model: process.env.AI_CODE_REVIEW_MODEL || RUNTIME_CONFIG.DEFAULT_MODEL,
162
- outDir: './reports',
163
- debug: combinedDebugFlag,
164
- mode,
165
- preprodTargetUrl: trimmedUrl,
166
- onStage: (stage, info) =>
167
- setProgress(transformStageUpdate(stage, info)),
168
- });
169
-
170
- logger.info('Code review run complete', {
171
- mode,
172
- durationSeconds: reviewResult.duration,
173
- filesReviewed: reviewResult.filesReviewed,
174
- });
175
- setResults(reviewResult);
176
- setScreen('results');
177
- } catch (reviewError) {
178
- logger.error('Code review run failed', reviewError);
179
- if (reviewError instanceof MissingCrIgnoreError) {
180
- setError({
181
- type: 'crignore',
182
- message: 'cr-aia needs a .crignore file in this repo.',
183
- hint: `Create ${reviewError.crIgnorePath} (can be empty, gitignore syntax) and rerun.`,
184
- });
185
- } else {
186
- setError({ type: 'generic', message: GENERIC_ERROR_MESSAGE });
187
- }
188
- setScreen('mode');
189
- } finally {
190
- finalizeDebugLogging();
191
- }
192
- }, [combinedDebugFlag, debugEnabled]);
193
-
194
- return (
195
- <Box width={layout.frameWidth} flexDirection="column" gap={1}>
196
- {screen === 'auth' && <AuthScreen onAuth={handleAuth} />}
197
- {screen === 'mode' && user && (
198
- <ModeSelection
199
- onSelect={(mode, payload) => handleRunReview(mode, payload)}
200
- debugEnabled={debugEnabled}
201
- onToggleDebug={handleToggleDebug}
202
- />
203
- )}
204
- {screen === 'progress' && (
205
- <ProgressScreen
206
- stage={progress.stage}
207
- filesFound={progress.filesFound}
208
- currentFile={progress.currentFile}
209
- currentIndex={progress.currentIndex}
210
- totalFiles={progress.totalFiles}
211
- uncommittedFiles={progress.uncommittedFiles}
212
- contextFiles={progress.contextFiles}
213
- />
214
- )}
215
- {screen === 'results' && results && (
216
- <ResultsScreen result={results} debugLogPath={lastDebugLogPath} />
217
- )}
218
- {error && (
219
- <Box
220
- borderStyle="round"
221
- borderColor={error.type === 'crignore' ? 'yellow' : 'red'}
222
- paddingX={1}
223
- paddingY={1}
224
- >
225
- <Text color={error.type === 'crignore' ? 'yellow' : 'red'}>
226
- {error.message}
227
- {error.hint ? `\n${error.hint}` : ''}
228
- </Text>
229
- </Box>
230
- )}
231
- {lastDebugLogPath && screen !== 'results' && (
232
- <Box>
233
- <Text dimColor>Debug logs saved to: {lastDebugLogPath}</Text>
234
- </Box>
235
- )}
236
- <Box justifyContent="space-between">
237
- <Text dimColor>{user ? `Logged in as ${user.username}` : 'Authenticate to start reviewing'}</Text>
238
- <Text dimColor>Ctrl+C to exit</Text>
239
- </Box>
240
- </Box>
241
- );
242
- }
243
-
244
- export function RuntimeApp(props: RuntimeAppProps) {
245
- return (
246
- <LayoutProvider>
247
- <AppBody {...props} />
248
- </LayoutProvider>
249
- );
250
- }
251
-
252
- export function LoadingScreen() {
253
- const { Box, Text } = getInk();
254
- const Spinner = getInkSpinner();
255
- return (
256
- <Box flexDirection="column" paddingX={1} paddingY={1}>
257
- <Text>
258
- <Spinner type="dots" /> Preparing runtime environment...
259
- </Text>
260
- </Box>
261
- );
262
- }
@@ -1,73 +0,0 @@
1
- type InkModule = typeof import('ink');
2
- type SpinnerModule = typeof import('ink-spinner');
3
- type TextInputModule = typeof import('ink-text-input');
4
- type SelectInputModule = typeof import('ink-select-input');
5
-
6
- const dynamicImporter = new Function('specifier', 'return import(specifier);') as (
7
- specifier: string,
8
- ) => Promise<unknown>;
9
-
10
- let inkModule: InkModule | null = null;
11
- let spinnerModule: SpinnerModule['default'] | null = null;
12
- let textInputModule: TextInputModule['default'] | null = null;
13
- let selectInputModule: SelectInputModule['default'] | null = null;
14
-
15
- async function loadInk(): Promise<void> {
16
- if (!inkModule) {
17
- inkModule = (await dynamicImporter('ink')) as InkModule;
18
- }
19
- }
20
-
21
- async function loadSpinner(): Promise<void> {
22
- if (!spinnerModule) {
23
- const mod = (await dynamicImporter('ink-spinner')) as SpinnerModule;
24
- spinnerModule = mod.default;
25
- }
26
- }
27
-
28
- async function loadTextInput(): Promise<void> {
29
- if (!textInputModule) {
30
- const mod = (await dynamicImporter('ink-text-input')) as TextInputModule;
31
- textInputModule = mod.default;
32
- }
33
- }
34
-
35
- async function loadSelectInput(): Promise<void> {
36
- if (!selectInputModule) {
37
- const mod = (await dynamicImporter('ink-select-input')) as SelectInputModule;
38
- selectInputModule = mod.default;
39
- }
40
- }
41
-
42
- export async function preloadInkModules(): Promise<void> {
43
- await Promise.all([loadInk(), loadSpinner(), loadTextInput(), loadSelectInput()]);
44
- }
45
-
46
- export function getInk(): InkModule {
47
- if (!inkModule) {
48
- throw new Error('Ink module not loaded. Call preloadInkModules() before rendering UI.');
49
- }
50
- return inkModule;
51
- }
52
-
53
- export function getInkSpinner(): SpinnerModule['default'] {
54
- if (!spinnerModule) {
55
- throw new Error('Ink spinner module not loaded. Call preloadInkModules() before rendering UI.');
56
- }
57
- return spinnerModule;
58
- }
59
-
60
- export function getInkTextInput(): TextInputModule['default'] {
61
- if (!textInputModule) {
62
- throw new Error('Ink TextInput module not loaded. Call preloadInkModules() before rendering UI.');
63
- }
64
- return textInputModule;
65
- }
66
-
67
- export function getInkSelectInput(): SelectInputModule['default'] {
68
- if (!selectInputModule) {
69
- throw new Error('Ink SelectInput module not loaded. Call preloadInkModules() before rendering UI.');
70
- }
71
- return selectInputModule;
72
- }
73
-