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
@@ -0,0 +1,294 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Review context for maintaining state between review passes.
4
+ *
5
+ * This module provides a class for maintaining context between multiple review passes.
6
+ * It stores information about the review, including file metadata, important code elements,
7
+ * and findings from previous passes.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.ReviewContext = exports.CodeElementType = void 0;
11
+ /**
12
+ * Type of code element tracked in the context
13
+ */
14
+ var CodeElementType;
15
+ (function (CodeElementType) {
16
+ CodeElementType["Function"] = "function";
17
+ CodeElementType["Class"] = "class";
18
+ CodeElementType["Interface"] = "interface";
19
+ CodeElementType["Variable"] = "variable";
20
+ CodeElementType["Import"] = "import";
21
+ CodeElementType["ExportedItem"] = "exported";
22
+ CodeElementType["Component"] = "component";
23
+ CodeElementType["EntryPoint"] = "entryPoint";
24
+ })(CodeElementType || (exports.CodeElementType = CodeElementType = {}));
25
+ /**
26
+ * Context for multi-pass reviews
27
+ */
28
+ class ReviewContext {
29
+ /** Project name */
30
+ projectName;
31
+ /** Review type */
32
+ reviewType;
33
+ /** All files involved in the review */
34
+ allFiles;
35
+ /** Current pass number */
36
+ currentPass;
37
+ /** Important code elements tracked across passes */
38
+ codeElements;
39
+ /** Findings from previous passes */
40
+ findings;
41
+ /** File summaries from previous passes */
42
+ fileSummaries;
43
+ /** General notes about the codebase */
44
+ generalNotes;
45
+ /** Timestamp when context was created */
46
+ createdAt;
47
+ /** Timestamp of last update */
48
+ updatedAt;
49
+ /**
50
+ * Create a new review context
51
+ * @param projectName Name of the project
52
+ * @param reviewType Type of review
53
+ * @param files Files involved in the review
54
+ */
55
+ constructor(projectName, reviewType, files) {
56
+ this.projectName = projectName;
57
+ this.reviewType = reviewType;
58
+ this.allFiles = files.map((f) => f.path);
59
+ this.currentPass = 0;
60
+ this.codeElements = new Map();
61
+ this.findings = [];
62
+ this.fileSummaries = new Map();
63
+ this.generalNotes = [];
64
+ this.createdAt = new Date();
65
+ this.updatedAt = new Date();
66
+ }
67
+ /**
68
+ * Start a new review pass
69
+ * @returns Updated pass number
70
+ */
71
+ startPass() {
72
+ this.currentPass++;
73
+ this.updatedAt = new Date();
74
+ return this.currentPass;
75
+ }
76
+ /**
77
+ * Get the current pass number
78
+ * @returns Current pass number
79
+ */
80
+ getCurrentPass() {
81
+ return this.currentPass;
82
+ }
83
+ /**
84
+ * Add a code element to the context
85
+ * @param element Code element to add
86
+ */
87
+ addCodeElement(element) {
88
+ const key = `${element.type}:${element.file}:${element.name}`;
89
+ this.codeElements.set(key, element);
90
+ this.updatedAt = new Date();
91
+ }
92
+ /**
93
+ * Get all tracked code elements
94
+ * @returns Array of code elements
95
+ */
96
+ getCodeElements() {
97
+ return Array.from(this.codeElements.values());
98
+ }
99
+ /**
100
+ * Get code elements of a specific type
101
+ * @param type Type of code elements to get
102
+ * @returns Array of code elements of the specified type
103
+ */
104
+ getCodeElementsByType(type) {
105
+ return this.getCodeElements().filter((el) => el.type === type);
106
+ }
107
+ /**
108
+ * Get code elements in a specific file
109
+ * @param filePath Path of the file
110
+ * @returns Array of code elements in the file
111
+ */
112
+ getCodeElementsInFile(filePath) {
113
+ return this.getCodeElements().filter((el) => el.file === filePath);
114
+ }
115
+ /**
116
+ * Add a review finding
117
+ * @param finding Review finding to add
118
+ */
119
+ addFinding(finding) {
120
+ this.findings.push({
121
+ ...finding,
122
+ passNumber: this.currentPass,
123
+ });
124
+ this.updatedAt = new Date();
125
+ }
126
+ /**
127
+ * Get all findings
128
+ * @returns Array of all findings
129
+ */
130
+ getFindings() {
131
+ return [...this.findings];
132
+ }
133
+ /**
134
+ * Add or update a file summary
135
+ * @param summary File summary to add
136
+ */
137
+ addFileSummary(summary) {
138
+ this.fileSummaries.set(summary.path, {
139
+ ...summary,
140
+ passNumber: this.currentPass,
141
+ });
142
+ this.updatedAt = new Date();
143
+ }
144
+ /**
145
+ * Get summary for a specific file
146
+ * @param filePath Path of the file
147
+ * @returns File summary or undefined if not found
148
+ */
149
+ getFileSummary(filePath) {
150
+ return this.fileSummaries.get(filePath);
151
+ }
152
+ /**
153
+ * Get summaries for all files
154
+ * @returns Array of file summaries
155
+ */
156
+ getAllFileSummaries() {
157
+ return Array.from(this.fileSummaries.values());
158
+ }
159
+ /**
160
+ * Add a general note about the codebase
161
+ * @param note Note to add
162
+ */
163
+ addGeneralNote(note) {
164
+ this.generalNotes.push(note);
165
+ this.updatedAt = new Date();
166
+ }
167
+ /**
168
+ * Get all general notes
169
+ * @returns Array of general notes
170
+ */
171
+ getGeneralNotes() {
172
+ return [...this.generalNotes];
173
+ }
174
+ /**
175
+ * Generate a contextual prompt for the next pass
176
+ * @param files Files to include in the next pass
177
+ * @param maxContextLength Maximum length of context in characters
178
+ * @returns Formatted context string for inclusion in the next prompt
179
+ */
180
+ generateNextPassContext(files, maxContextLength = 2000) {
181
+ let context = `
182
+ ### Review Context (Pass ${this.currentPass})
183
+
184
+ Project: ${this.projectName}
185
+ Review Type: ${this.reviewType}
186
+ Files in this pass: ${files.length} / ${this.allFiles.length}
187
+
188
+ `;
189
+ // Add important findings from previous passes
190
+ const importantFindings = this.findings.sort((a, b) => b.severity - a.severity).slice(0, 5);
191
+ if (importantFindings.length > 0) {
192
+ context += '#### Key Findings from Previous Passes\n\n';
193
+ importantFindings.forEach((finding) => {
194
+ context += `- [${finding.type.toUpperCase()}] ${finding.description}${finding.file ? ` (in ${finding.file})` : ''}\n`;
195
+ });
196
+ context += '\n';
197
+ }
198
+ // Add summaries of files that are related but not in this pass
199
+ const relatedFiles = this.getAllFileSummaries()
200
+ .filter((summary) => !files.includes(summary.path))
201
+ .slice(0, 5);
202
+ if (relatedFiles.length > 0) {
203
+ context += '#### Related Files (Not in This Pass)\n\n';
204
+ relatedFiles.forEach((file) => {
205
+ context += `- ${file.path}: ${file.description}\n`;
206
+ if (file.keyElements.length > 0) {
207
+ context += ` Key elements: ${file.keyElements.join(', ')}\n`;
208
+ }
209
+ });
210
+ context += '\n';
211
+ }
212
+ // Add important code elements relevant to this pass
213
+ const relevantElements = this.getCodeElements()
214
+ .filter((el) => files.includes(el.file) || el.importance > 7)
215
+ .sort((a, b) => b.importance - a.importance)
216
+ .slice(0, 10);
217
+ if (relevantElements.length > 0) {
218
+ context += '#### Important Code Elements\n\n';
219
+ relevantElements.forEach((element) => {
220
+ context += `- ${element.type} \`${element.name}\`${element.signature ? `: ${element.signature}` : ''} (in ${element.file})\n`;
221
+ });
222
+ context += '\n';
223
+ }
224
+ // Add general notes
225
+ if (this.generalNotes.length > 0) {
226
+ context += '#### General Notes\n\n';
227
+ this.generalNotes.slice(0, 3).forEach((note) => {
228
+ context += `- ${note}\n`;
229
+ });
230
+ context += '\n';
231
+ }
232
+ // Truncate if too long
233
+ if (context.length > maxContextLength) {
234
+ context = `${context.substring(0, maxContextLength - 3)}...`;
235
+ }
236
+ return context;
237
+ }
238
+ /**
239
+ * Serialize the context to JSON
240
+ * @returns JSON representation of the context
241
+ */
242
+ toJSON() {
243
+ return {
244
+ projectName: this.projectName,
245
+ reviewType: this.reviewType,
246
+ currentPass: this.currentPass,
247
+ codeElements: Array.from(this.codeElements.values()),
248
+ findings: this.findings,
249
+ fileSummaries: Array.from(this.fileSummaries.values()),
250
+ generalNotes: this.generalNotes,
251
+ createdAt: this.createdAt.toISOString(),
252
+ updatedAt: this.updatedAt.toISOString(),
253
+ };
254
+ }
255
+ /**
256
+ * Create a review context from JSON
257
+ * @param json JSON object
258
+ * @returns New ReviewContext instance
259
+ */
260
+ static fromJSON(json) {
261
+ const context = new ReviewContext(json.projectName, json.reviewType, json.allFiles || []);
262
+ context.currentPass = json.currentPass || 0;
263
+ // Restore code elements
264
+ if (Array.isArray(json.codeElements)) {
265
+ json.codeElements.forEach((element) => {
266
+ context.addCodeElement(element);
267
+ });
268
+ }
269
+ // Restore findings
270
+ if (Array.isArray(json.findings)) {
271
+ context.findings = json.findings;
272
+ }
273
+ // Restore file summaries
274
+ if (Array.isArray(json.fileSummaries)) {
275
+ json.fileSummaries.forEach((summary) => {
276
+ context.fileSummaries.set(summary.path, summary);
277
+ });
278
+ }
279
+ // Restore general notes
280
+ if (Array.isArray(json.generalNotes)) {
281
+ context.generalNotes = json.generalNotes;
282
+ }
283
+ // Restore timestamps
284
+ if (json.createdAt) {
285
+ context.createdAt = new Date(json.createdAt);
286
+ }
287
+ if (json.updatedAt) {
288
+ context.updatedAt = new Date(json.updatedAt);
289
+ }
290
+ return context;
291
+ }
292
+ }
293
+ exports.ReviewContext = ReviewContext;
294
+ //# sourceMappingURL=ReviewContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReviewContext.js","sourceRoot":"","sources":["../../../src/analysis/context/ReviewContext.ts"],"names":[],"mappings":"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"}
@@ -3,5 +3,4 @@
3
3
  *
4
4
  * This module exports all context management related functions and types.
5
5
  */
6
-
7
6
  export * from './ReviewContext';
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Context management exports.
4
+ *
5
+ * This module exports all context management related functions and types.
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
19
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
20
+ };
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ __exportStar(require("./ReviewContext"), exports);
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/analysis/context/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;AAEH,kDAAgC"}
@@ -3,6 +3,5 @@
3
3
  *
4
4
  * This module exports all analysis related functions and types.
5
5
  */
6
-
7
6
  export * from './context';
8
7
  export * from './tokens';
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Analysis module exports.
4
+ *
5
+ * This module exports all analysis related functions and types.
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
19
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
20
+ };
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ __exportStar(require("./context"), exports);
23
+ __exportStar(require("./tokens"), exports);
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analysis/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;AAEH,4CAA0B;AAC1B,2CAAyB"}
@@ -0,0 +1,11 @@
1
+ import type { WordPressStandardsFinding, WordPressStandardsReport } from '../../types/review';
2
+ export interface WordPressPhpcsOptions {
3
+ enabled?: boolean;
4
+ phpcsPath?: string;
5
+ rulesetPath?: string;
6
+ testVersion?: string;
7
+ }
8
+ export declare function getCachedWordPressReport(projectRoot: string, files: string[], options: WordPressPhpcsOptions): Promise<WordPressStandardsReport>;
9
+ export declare function resetWordPressReportCache(): void;
10
+ export declare function summarizeWordPressReport(report: WordPressStandardsReport, limit?: number, projectRoot?: string): string;
11
+ export declare function formatWordPressFinding(finding: WordPressStandardsFinding, projectRoot: string): string;
@@ -0,0 +1,219 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getCachedWordPressReport = getCachedWordPressReport;
7
+ exports.resetWordPressReportCache = resetWordPressReportCache;
8
+ exports.summarizeWordPressReport = summarizeWordPressReport;
9
+ exports.formatWordPressFinding = formatWordPressFinding;
10
+ const node_fs_1 = __importDefault(require("node:fs"));
11
+ const node_path_1 = __importDefault(require("node:path"));
12
+ const execa_1 = require("execa");
13
+ const logger_1 = __importDefault(require("../../utils/logger"));
14
+ const reportCache = new Map();
15
+ function resolveDefaultRuleset(projectRoot) {
16
+ // 1. Check for project-level configuration (phpcs.xml or phpcs.xml.dist)
17
+ const projectConfigCandidates = [
18
+ node_path_1.default.join(projectRoot, 'phpcs.xml'),
19
+ node_path_1.default.join(projectRoot, 'phpcs.xml.dist'),
20
+ ];
21
+ for (const config of projectConfigCandidates) {
22
+ if (node_fs_1.default.existsSync(config)) {
23
+ logger_1.default.debug(`Found project-level PHPCS config: ${config}`);
24
+ return undefined; // Return undefined to let PHPCS auto-discover this
25
+ }
26
+ }
27
+ // 2. Check for WordPress Coding Standards in standard locations
28
+ const wpcsCandidates = [
29
+ node_path_1.default.resolve(projectRoot, '..', 'WordPress-Coding-Standards-develop', 'WordPress', 'ruleset.xml'),
30
+ node_path_1.default.resolve(projectRoot, 'WordPress-Coding-Standards-develop', 'WordPress', 'ruleset.xml'),
31
+ node_path_1.default.resolve(projectRoot, 'vendor', 'wp-coding-standards', 'wpcs', 'WordPress', 'ruleset.xml'),
32
+ ];
33
+ for (const candidate of wpcsCandidates) {
34
+ if (node_fs_1.default.existsSync(candidate)) {
35
+ return candidate;
36
+ }
37
+ }
38
+ return undefined;
39
+ }
40
+ function pickPhpcsBinary(customPath) {
41
+ if (customPath) {
42
+ return customPath;
43
+ }
44
+ if (process.env.PHPCS_BINARY) {
45
+ return process.env.PHPCS_BINARY;
46
+ }
47
+ return 'phpcs';
48
+ }
49
+ function filterPhpFiles(files) {
50
+ return files
51
+ .map((file) => node_path_1.default.resolve(file))
52
+ .filter((file) => /\.(php|phtml|inc|php5|php7)$/i.test(file));
53
+ }
54
+ async function executePhpcs(projectRoot, files, options) {
55
+ if (options.enabled === false) {
56
+ return {
57
+ status: 'skipped',
58
+ errors: 0,
59
+ warnings: 0,
60
+ findings: [],
61
+ reason: 'WordPress PHPCS disabled',
62
+ };
63
+ }
64
+ const phpFiles = filterPhpFiles(files);
65
+ if (phpFiles.length === 0) {
66
+ return {
67
+ status: 'skipped',
68
+ errors: 0,
69
+ warnings: 0,
70
+ findings: [],
71
+ reason: 'No PHP files provided for PHPCS scan',
72
+ };
73
+ }
74
+ const ruleset = options.rulesetPath || resolveDefaultRuleset(projectRoot);
75
+ // If ruleset is undefined here, it might mean we found a phpcs.xml, or we're relying on global config.
76
+ // We'll proceed and let PHPCS decide, unless we want to enforce a specific fallback.
77
+ const phpcsBinary = pickPhpcsBinary(options.phpcsPath);
78
+ // Base arguments
79
+ const baseArgs = [
80
+ '--report=json',
81
+ '--colors=false',
82
+ '--extensions=php,php5,inc,phtml',
83
+ ];
84
+ if (ruleset) {
85
+ baseArgs.push(`--standard=${ruleset}`);
86
+ }
87
+ if (options.testVersion) {
88
+ baseArgs.push('--runtime-set', 'testVersion', options.testVersion);
89
+ }
90
+ // Batch processing to avoid E2BIG
91
+ const BATCH_SIZE = 50;
92
+ const allFindings = [];
93
+ let totalErrors = 0;
94
+ let totalWarnings = 0;
95
+ let hasFailure = false;
96
+ let failureReason = '';
97
+ for (let i = 0; i < phpFiles.length; i += BATCH_SIZE) {
98
+ const batch = phpFiles.slice(i, i + BATCH_SIZE);
99
+ const args = [...baseArgs, ...batch];
100
+ try {
101
+ const { stdout } = await (0, execa_1.execa)(phpcsBinary, args, {
102
+ cwd: projectRoot,
103
+ reject: false,
104
+ });
105
+ if (!stdout || stdout.trim().length === 0) {
106
+ continue;
107
+ }
108
+ // Robust JSON parsing: find the first '{' and last '}'
109
+ const jsonStart = stdout.indexOf('{');
110
+ const jsonEnd = stdout.lastIndexOf('}');
111
+ if (jsonStart === -1 || jsonEnd === -1) {
112
+ logger_1.default.warn('PHPCS output does not contain valid JSON');
113
+ continue;
114
+ }
115
+ const jsonStr = stdout.substring(jsonStart, jsonEnd + 1);
116
+ let parsed;
117
+ try {
118
+ parsed = JSON.parse(jsonStr);
119
+ }
120
+ catch (error) {
121
+ logger_1.default.warn(`Failed to parse PHPCS output batch ${i}: ${error instanceof Error ? error.message : String(error)}`);
122
+ continue;
123
+ }
124
+ if (parsed.totals) {
125
+ totalErrors += Number(parsed.totals.errors ?? 0);
126
+ totalWarnings += Number(parsed.totals.warnings ?? 0);
127
+ }
128
+ if (parsed.files) {
129
+ for (const [fileName, data] of Object.entries(parsed.files)) {
130
+ const messages = Array.isArray(data.messages) ? data.messages : [];
131
+ for (const message of messages) {
132
+ allFindings.push({
133
+ filePath: fileName,
134
+ line: message.line ?? 0,
135
+ column: message.column ?? 0,
136
+ type: message.type === 'ERROR' ? 'ERROR' : 'WARNING',
137
+ severity: Number(message.severity ?? 0),
138
+ message: message.message ?? 'Violation detected',
139
+ source: message.source ?? 'WordPress',
140
+ });
141
+ }
142
+ }
143
+ }
144
+ }
145
+ catch (error) {
146
+ hasFailure = true;
147
+ failureReason =
148
+ error instanceof Error && 'code' in error && error.code === 'ENOENT'
149
+ ? `PHPCS binary not found (${phpcsBinary})`
150
+ : error instanceof Error
151
+ ? error.message
152
+ : 'Unknown error running PHPCS';
153
+ // If binary is missing, abort immediately
154
+ if (failureReason.includes('binary not found')) {
155
+ return {
156
+ status: 'skipped',
157
+ errors: 0,
158
+ warnings: 0,
159
+ findings: [],
160
+ reason: failureReason,
161
+ };
162
+ }
163
+ logger_1.default.warn(`Error running PHPCS batch: ${failureReason}`);
164
+ }
165
+ }
166
+ if (hasFailure && allFindings.length === 0) {
167
+ return {
168
+ status: 'failed',
169
+ errors: 0,
170
+ warnings: 0,
171
+ findings: [],
172
+ reason: failureReason || 'PHPCS execution failed',
173
+ };
174
+ }
175
+ return {
176
+ status: 'ok',
177
+ errors: totalErrors,
178
+ warnings: totalWarnings,
179
+ findings: allFindings,
180
+ };
181
+ }
182
+ function getCachedWordPressReport(projectRoot, files, options) {
183
+ const cacheKey = `${projectRoot}|${options.rulesetPath || 'default'}|${options.phpcsPath || 'phpcs'}`;
184
+ if (!reportCache.has(cacheKey)) {
185
+ reportCache.set(cacheKey, executePhpcs(projectRoot, files, options));
186
+ }
187
+ return reportCache.get(cacheKey);
188
+ }
189
+ function resetWordPressReportCache() {
190
+ reportCache.clear();
191
+ }
192
+ function summarizeWordPressReport(report, limit = 5, projectRoot = process.cwd()) {
193
+ if (report.status === 'skipped') {
194
+ return `WordPress Coding Standards scan skipped: ${report.reason ?? 'not enabled'}`;
195
+ }
196
+ if (report.status === 'failed') {
197
+ return `WordPress Coding Standards scan failed: ${report.reason ?? 'unknown error'}`;
198
+ }
199
+ if (report.findings.length === 0) {
200
+ return 'WordPress Coding Standards scan passed with no issues.';
201
+ }
202
+ const lines = [
203
+ `WordPress Coding Standards: ${report.errors} error(s), ${report.warnings} warning(s).`,
204
+ ];
205
+ const topFindings = report.findings.slice(0, limit);
206
+ for (const finding of topFindings) {
207
+ const rel = node_path_1.default.relative(projectRoot, finding.filePath);
208
+ lines.push(`- ${rel || finding.filePath}:${finding.line} [${finding.type}] ${finding.source} – ${finding.message}`);
209
+ }
210
+ if (report.findings.length > limit) {
211
+ lines.push(`- ...and ${report.findings.length - limit} more finding(s)`);
212
+ }
213
+ return lines.join('\n');
214
+ }
215
+ function formatWordPressFinding(finding, projectRoot) {
216
+ const rel = node_path_1.default.relative(projectRoot, finding.filePath);
217
+ return `- ${rel || finding.filePath}:${finding.line} [${finding.type}] ${finding.source} – ${finding.message}`;
218
+ }
219
+ //# sourceMappingURL=wpPhpcsRunner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wpPhpcsRunner.js","sourceRoot":"","sources":["../../../src/analysis/static/wpPhpcsRunner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @fileoverview Formatter for token analysis results.
3
+ *
4
+ * This module provides utilities for formatting token analysis results into
5
+ * human-readable strings and other formats for display or logging.
6
+ */
7
+ import type { FileTokenAnalysis, TokenAnalysisResult } from './TokenAnalyzer';
8
+ /**
9
+ * Format token analysis result as a human-readable string
10
+ * @param analysis Token analysis result
11
+ * @param modelName Name of the model used
12
+ * @param includedFiles Whether to include detailed file listing
13
+ * @returns Formatted string representation of the analysis
14
+ */
15
+ export declare function formatTokenAnalysis(analysis: TokenAnalysisResult, modelName: string, includeFiles?: boolean): string;
16
+ /**
17
+ * Format token analysis result as JSON
18
+ * @param analysis Token analysis result
19
+ * @returns JSON string representation of the analysis
20
+ */
21
+ export declare function formatTokenAnalysisAsJson(analysis: TokenAnalysisResult): string;
22
+ /**
23
+ * Format a single file token analysis as a string
24
+ * @param fileAnalysis File token analysis
25
+ * @returns Formatted string representation of the file analysis
26
+ */
27
+ export declare function formatFileTokenAnalysis(fileAnalysis: FileTokenAnalysis): string;