codereview-aia 0.1.3 → 0.1.4

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 (549) 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 +738 -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 +209 -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 +266 -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 +382 -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/webCheck.d.ts +1 -0
  193. package/dist/runtime/preprod/webCheck.js +98 -0
  194. package/dist/runtime/preprod/webCheck.js.map +1 -0
  195. package/dist/runtime/proxyConfig.d.ts +6 -0
  196. package/dist/runtime/proxyConfig.js +86 -0
  197. package/dist/runtime/proxyConfig.js.map +1 -0
  198. package/dist/runtime/proxyEnvironment.d.ts +3 -0
  199. package/dist/runtime/proxyEnvironment.js +63 -0
  200. package/dist/runtime/proxyEnvironment.js.map +1 -0
  201. package/dist/runtime/reportMerge.d.ts +30 -0
  202. package/dist/runtime/reportMerge.js +70 -0
  203. package/dist/runtime/reportMerge.js.map +1 -0
  204. package/dist/runtime/reporting/markdownReportBuilder.d.ts +17 -0
  205. package/dist/runtime/reporting/markdownReportBuilder.js +154 -0
  206. package/dist/runtime/reporting/markdownReportBuilder.js.map +1 -0
  207. package/dist/runtime/reporting/reportDataCollector.d.ts +31 -0
  208. package/dist/runtime/reporting/reportDataCollector.js +170 -0
  209. package/dist/runtime/reporting/reportDataCollector.js.map +1 -0
  210. package/dist/runtime/reporting/summaryGenerator.d.ts +10 -0
  211. package/dist/runtime/reporting/summaryGenerator.js +67 -0
  212. package/dist/runtime/reporting/summaryGenerator.js.map +1 -0
  213. package/dist/runtime/reviewPipeline.d.ts +47 -0
  214. package/dist/runtime/reviewPipeline.js +161 -0
  215. package/dist/runtime/reviewPipeline.js.map +1 -0
  216. package/dist/runtime/runAiCodeReview.d.ts +28 -0
  217. package/dist/runtime/runAiCodeReview.js +373 -0
  218. package/dist/runtime/runAiCodeReview.js.map +1 -0
  219. package/dist/runtime/runtimeConfig.d.ts +4 -0
  220. package/dist/runtime/runtimeConfig.js +7 -0
  221. package/dist/runtime/runtimeConfig.js.map +1 -0
  222. package/dist/runtime/ui/Layout.d.ts +11 -0
  223. package/dist/runtime/ui/Layout.js +47 -0
  224. package/dist/runtime/ui/Layout.js.map +1 -0
  225. package/dist/runtime/ui/RuntimeApp.d.ts +6 -0
  226. package/dist/runtime/ui/RuntimeApp.js +172 -0
  227. package/dist/runtime/ui/RuntimeApp.js.map +1 -0
  228. package/dist/runtime/ui/inkModules.d.ts +10 -0
  229. package/dist/runtime/ui/inkModules.js +63 -0
  230. package/dist/runtime/ui/inkModules.js.map +1 -0
  231. package/dist/runtime/ui/screens/AuthScreen.d.ts +6 -0
  232. package/dist/runtime/ui/screens/AuthScreen.js +67 -0
  233. package/dist/runtime/ui/screens/AuthScreen.js.map +1 -0
  234. package/dist/runtime/ui/screens/ModeSelection.d.ts +10 -0
  235. package/dist/runtime/ui/screens/ModeSelection.js +100 -0
  236. package/dist/runtime/ui/screens/ModeSelection.js.map +1 -0
  237. package/dist/runtime/ui/screens/ProgressScreen.d.ts +12 -0
  238. package/dist/runtime/ui/screens/ProgressScreen.js +64 -0
  239. package/dist/runtime/ui/screens/ProgressScreen.js.map +1 -0
  240. package/dist/runtime/ui/screens/ResultsScreen.d.ts +7 -0
  241. package/dist/runtime/ui/screens/ResultsScreen.js +29 -0
  242. package/dist/runtime/ui/screens/ResultsScreen.js.map +1 -0
  243. package/dist/strategies/ArchitecturalReviewStrategy.d.ts +29 -0
  244. package/dist/strategies/ArchitecturalReviewStrategy.js +42 -0
  245. package/dist/strategies/ArchitecturalReviewStrategy.js.map +1 -0
  246. package/dist/strategies/CodingTestReviewStrategy.d.ts +194 -0
  247. package/dist/strategies/CodingTestReviewStrategy.js +681 -0
  248. package/dist/strategies/CodingTestReviewStrategy.js.map +1 -0
  249. package/dist/strategies/ConsolidatedReviewStrategy.d.ts +25 -0
  250. package/dist/strategies/ConsolidatedReviewStrategy.js +45 -0
  251. package/dist/strategies/ConsolidatedReviewStrategy.js.map +1 -0
  252. package/dist/strategies/ExtractPatternsReviewStrategy.d.ts +30 -0
  253. package/dist/strategies/ExtractPatternsReviewStrategy.js +51 -0
  254. package/dist/strategies/ExtractPatternsReviewStrategy.js.map +1 -0
  255. package/dist/strategies/MultiPassReviewStrategy.d.ts +86 -0
  256. package/dist/strategies/MultiPassReviewStrategy.js +590 -0
  257. package/dist/strategies/MultiPassReviewStrategy.js.map +1 -0
  258. package/dist/strategies/ReviewStrategy.d.ts +45 -0
  259. package/dist/strategies/ReviewStrategy.js +24 -0
  260. package/dist/strategies/ReviewStrategy.js.map +1 -0
  261. package/dist/strategies/StrategyFactory.d.ts +19 -0
  262. package/dist/strategies/StrategyFactory.js +72 -0
  263. package/dist/strategies/StrategyFactory.js.map +1 -0
  264. package/{src/strategies/index.ts → dist/strategies/index.d.ts} +0 -1
  265. package/dist/strategies/index.js +30 -0
  266. package/dist/strategies/index.js.map +1 -0
  267. package/dist/tokenizers/baseTokenizer.d.ts +25 -0
  268. package/dist/tokenizers/baseTokenizer.js +48 -0
  269. package/dist/tokenizers/baseTokenizer.js.map +1 -0
  270. package/dist/tokenizers/gptTokenizer.d.ts +7 -0
  271. package/dist/tokenizers/gptTokenizer.js +28 -0
  272. package/dist/tokenizers/gptTokenizer.js.map +1 -0
  273. package/{src/tokenizers/index.ts → dist/tokenizers/index.d.ts} +0 -1
  274. package/dist/tokenizers/index.js +24 -0
  275. package/dist/tokenizers/index.js.map +1 -0
  276. package/dist/types/apiResponses.d.ts +39 -0
  277. package/dist/types/apiResponses.js +9 -0
  278. package/dist/types/apiResponses.js.map +1 -0
  279. package/dist/types/cli.d.ts +22 -0
  280. package/dist/types/cli.js +3 -0
  281. package/dist/types/cli.js.map +1 -0
  282. package/{src/types/common.ts → dist/types/common.d.ts} +2 -19
  283. package/dist/types/common.js +14 -0
  284. package/dist/types/common.js.map +1 -0
  285. package/dist/types/configuration.d.ts +682 -0
  286. package/dist/types/configuration.js +65 -0
  287. package/dist/types/configuration.js.map +1 -0
  288. package/dist/types/review.d.ts +318 -0
  289. package/dist/types/review.js +8 -0
  290. package/dist/types/review.js.map +1 -0
  291. package/dist/types/reviewSchema.d.ts +543 -0
  292. package/{src/types/reviewSchema.ts → dist/types/reviewSchema.js} +44 -104
  293. package/dist/types/reviewSchema.js.map +1 -0
  294. package/dist/types/structuredReview.d.ts +119 -0
  295. package/dist/types/structuredReview.js +6 -0
  296. package/dist/types/structuredReview.js.map +1 -0
  297. package/dist/types/tokenAnalysis.d.ts +44 -0
  298. package/dist/types/tokenAnalysis.js +4 -0
  299. package/dist/types/tokenAnalysis.js.map +1 -0
  300. package/dist/utils/FileReader.d.ts +33 -0
  301. package/dist/utils/FileReader.js +88 -0
  302. package/dist/utils/FileReader.js.map +1 -0
  303. package/dist/utils/FileWriter.d.ts +26 -0
  304. package/dist/utils/FileWriter.js +76 -0
  305. package/dist/utils/FileWriter.js.map +1 -0
  306. package/dist/utils/PathGenerator.d.ts +30 -0
  307. package/dist/utils/PathGenerator.js +82 -0
  308. package/dist/utils/PathGenerator.js.map +1 -0
  309. package/dist/utils/api/apiUtils.d.ts +3 -0
  310. package/dist/utils/api/apiUtils.js +20 -0
  311. package/dist/utils/api/apiUtils.js.map +1 -0
  312. package/dist/utils/api/index.js +18 -0
  313. package/dist/utils/api/index.js.map +1 -0
  314. package/dist/utils/apiErrorHandler.d.ts +130 -0
  315. package/dist/utils/apiErrorHandler.js +256 -0
  316. package/dist/utils/apiErrorHandler.js.map +1 -0
  317. package/dist/utils/ciDataCollector.d.ts +51 -0
  318. package/dist/utils/ciDataCollector.js +197 -0
  319. package/dist/utils/ciDataCollector.js.map +1 -0
  320. package/dist/utils/codingTestConfigLoader.d.ts +66 -0
  321. package/dist/utils/codingTestConfigLoader.js +420 -0
  322. package/dist/utils/codingTestConfigLoader.js.map +1 -0
  323. package/dist/utils/dependencies/aiDependencyAnalyzer.d.ts +30 -0
  324. package/dist/utils/dependencies/aiDependencyAnalyzer.js +343 -0
  325. package/dist/utils/dependencies/aiDependencyAnalyzer.js.map +1 -0
  326. package/dist/utils/detection/frameworkDetector.d.ts +43 -0
  327. package/dist/utils/detection/frameworkDetector.js +850 -0
  328. package/dist/utils/detection/frameworkDetector.js.map +1 -0
  329. package/{src/utils/detection/index.ts → dist/utils/detection/index.d.ts} +0 -1
  330. package/dist/utils/detection/index.js +28 -0
  331. package/dist/utils/detection/index.js.map +1 -0
  332. package/dist/utils/detection/projectTypeDetector.d.ts +27 -0
  333. package/dist/utils/detection/projectTypeDetector.js +469 -0
  334. package/dist/utils/detection/projectTypeDetector.js.map +1 -0
  335. package/dist/utils/diagramGenerator.d.ts +49 -0
  336. package/dist/utils/diagramGenerator.js +218 -0
  337. package/dist/utils/diagramGenerator.js.map +1 -0
  338. package/dist/utils/errorLogger.d.ts +24 -0
  339. package/dist/utils/errorLogger.js +59 -0
  340. package/dist/utils/errorLogger.js.map +1 -0
  341. package/dist/utils/estimationUtils.d.ts +139 -0
  342. package/dist/utils/estimationUtils.js +329 -0
  343. package/dist/utils/estimationUtils.js.map +1 -0
  344. package/dist/utils/fileFilters.d.ts +72 -0
  345. package/dist/utils/fileFilters.js +338 -0
  346. package/dist/utils/fileFilters.js.map +1 -0
  347. package/dist/utils/fileSystem.d.ts +22 -0
  348. package/dist/utils/fileSystem.js +45 -0
  349. package/dist/utils/fileSystem.js.map +1 -0
  350. package/{src/utils/index.ts → dist/utils/index.d.ts} +0 -14
  351. package/dist/utils/index.js +52 -0
  352. package/dist/utils/index.js.map +1 -0
  353. package/dist/utils/logger.d.ts +77 -0
  354. package/dist/utils/logger.js +271 -0
  355. package/dist/utils/logger.js.map +1 -0
  356. package/dist/utils/pathValidator.d.ts +40 -0
  357. package/dist/utils/pathValidator.js +98 -0
  358. package/dist/utils/pathValidator.js.map +1 -0
  359. package/{src/utils/priorityFilter.ts → dist/utils/priorityFilter.d.ts} +1 -26
  360. package/dist/utils/priorityFilter.js +54 -0
  361. package/dist/utils/priorityFilter.js.map +1 -0
  362. package/dist/utils/projectDocs.d.ts +47 -0
  363. package/dist/utils/projectDocs.js +158 -0
  364. package/dist/utils/projectDocs.js.map +1 -0
  365. package/dist/utils/promptPaths.d.ts +6 -0
  366. package/dist/utils/promptPaths.js +33 -0
  367. package/dist/utils/promptPaths.js.map +1 -0
  368. package/dist/utils/promptTemplateManager.d.ts +34 -0
  369. package/dist/utils/promptTemplateManager.js +141 -0
  370. package/dist/utils/promptTemplateManager.js.map +1 -0
  371. package/dist/utils/review/consolidateReview.d.ts +15 -0
  372. package/dist/utils/review/consolidateReview.js +481 -0
  373. package/dist/utils/review/consolidateReview.js.map +1 -0
  374. package/dist/utils/review/fixDisplay.d.ts +20 -0
  375. package/dist/utils/review/fixDisplay.js +84 -0
  376. package/dist/utils/review/fixDisplay.js.map +1 -0
  377. package/dist/utils/review/fixImplementation.d.ts +28 -0
  378. package/dist/utils/review/fixImplementation.js +60 -0
  379. package/dist/utils/review/fixImplementation.js.map +1 -0
  380. package/dist/utils/review/index.d.ts +13 -0
  381. package/dist/utils/review/index.js +50 -0
  382. package/dist/utils/review/index.js.map +1 -0
  383. package/dist/utils/review/interactiveProcessing.d.ts +25 -0
  384. package/dist/utils/review/interactiveProcessing.js +251 -0
  385. package/dist/utils/review/interactiveProcessing.js.map +1 -0
  386. package/dist/utils/review/progressTracker.d.ts +106 -0
  387. package/dist/utils/review/progressTracker.js +227 -0
  388. package/dist/utils/review/progressTracker.js.map +1 -0
  389. package/dist/utils/review/reviewExtraction.d.ts +31 -0
  390. package/dist/utils/review/reviewExtraction.js +324 -0
  391. package/dist/utils/review/reviewExtraction.js.map +1 -0
  392. package/dist/utils/review/types.d.ts +45 -0
  393. package/dist/utils/review/types.js +18 -0
  394. package/dist/utils/review/types.js.map +1 -0
  395. package/{src/utils/reviewActionHandler.ts → dist/utils/reviewActionHandler.d.ts} +0 -2
  396. package/dist/utils/reviewActionHandler.js +34 -0
  397. package/dist/utils/reviewActionHandler.js.map +1 -0
  398. package/dist/utils/reviewParser.d.ts +34 -0
  399. package/dist/utils/reviewParser.js +218 -0
  400. package/dist/utils/reviewParser.js.map +1 -0
  401. package/dist/utils/sanitizer.d.ts +82 -0
  402. package/dist/utils/sanitizer.js +239 -0
  403. package/dist/utils/sanitizer.js.map +1 -0
  404. package/dist/utils/smartFileSelector.d.ts +50 -0
  405. package/dist/utils/smartFileSelector.js +261 -0
  406. package/dist/utils/smartFileSelector.js.map +1 -0
  407. package/dist/utils/templateLoader.d.ts +44 -0
  408. package/dist/utils/templateLoader.js +431 -0
  409. package/dist/utils/templateLoader.js.map +1 -0
  410. package/dist/utils/treeGenerator.d.ts +12 -0
  411. package/dist/utils/treeGenerator.js +133 -0
  412. package/dist/utils/treeGenerator.js.map +1 -0
  413. package/package.json +5 -2
  414. package/.cr-aia.yml +0 -23
  415. package/.crignore +0 -0
  416. package/docs/opt-in-full-context.md +0 -27
  417. package/reports/cr-cr-aia-17-11-2025-20-13.md +0 -354
  418. package/src/analysis/FindingsExtractor.ts +0 -431
  419. package/src/analysis/ai-detection/analyzers/BaseAnalyzer.ts +0 -267
  420. package/src/analysis/ai-detection/analyzers/DocumentationAnalyzer.ts +0 -622
  421. package/src/analysis/ai-detection/analyzers/GitHistoryAnalyzer.ts +0 -430
  422. package/src/analysis/ai-detection/core/AIDetectionEngine.ts +0 -467
  423. package/src/analysis/ai-detection/types/DetectionTypes.ts +0 -406
  424. package/src/analysis/ai-detection/utils/SubmissionConverter.ts +0 -390
  425. package/src/analysis/context/ReviewContext.ts +0 -378
  426. package/src/analysis/tokens/TokenAnalyzer.ts +0 -747
  427. package/src/clients/base/abstractClient.ts +0 -190
  428. package/src/clients/base/httpClient.ts +0 -160
  429. package/src/clients/base/modelDetection.ts +0 -107
  430. package/src/clients/base/responseProcessor.ts +0 -586
  431. package/src/clients/factory/clientFactory.ts +0 -55
  432. package/src/clients/implementations/openRouterClient.ts +0 -413
  433. package/src/clients/openRouterClient.ts +0 -870
  434. package/src/clients/utils/directoryStructure.ts +0 -52
  435. package/src/clients/utils/languageDetection.ts +0 -44
  436. package/src/clients/utils/promptFormatter.ts +0 -182
  437. package/src/clients/utils/tokenCounter.ts +0 -297
  438. package/src/core/ApiClientSelector.ts +0 -37
  439. package/src/core/ConfigurationService.ts +0 -591
  440. package/src/core/ConsolidationService.ts +0 -423
  441. package/src/core/InteractiveDisplayManager.ts +0 -81
  442. package/src/core/OutputManager.ts +0 -275
  443. package/src/core/ReviewGenerator.ts +0 -140
  444. package/src/core/fileDiscovery.ts +0 -237
  445. package/src/core/handlers/EstimationHandler.ts +0 -104
  446. package/src/core/handlers/FileProcessingHandler.ts +0 -210
  447. package/src/core/handlers/OutputHandler.ts +0 -125
  448. package/src/core/handlers/ReviewExecutor.ts +0 -104
  449. package/src/core/reviewOrchestrator.ts +0 -333
  450. package/src/core/utils/ModelInfoUtils.ts +0 -56
  451. package/src/formatters/utils/IssueFormatters.ts +0 -83
  452. package/src/formatters/utils/JsonFormatter.ts +0 -77
  453. package/src/formatters/utils/MarkdownFormatters.ts +0 -609
  454. package/src/formatters/utils/MetadataFormatter.ts +0 -269
  455. package/src/formatters/utils/ModelInfoExtractor.ts +0 -115
  456. package/src/index.ts +0 -25
  457. package/src/plugins/PluginInterface.ts +0 -50
  458. package/src/plugins/PluginManager.ts +0 -126
  459. package/src/prompts/PromptManager.ts +0 -69
  460. package/src/prompts/cache/PromptCache.ts +0 -50
  461. package/src/prompts/promptText/common/variables/css-frameworks.json +0 -33
  462. package/src/prompts/promptText/common/variables/framework-versions.json +0 -45
  463. package/src/prompts/promptText/frameworks/react/comprehensive.hbs +0 -19
  464. package/src/prompts/promptText/languages/css/comprehensive.hbs +0 -18
  465. package/src/prompts/promptText/languages/generic/comprehensive.hbs +0 -20
  466. package/src/prompts/promptText/languages/html/comprehensive.hbs +0 -18
  467. package/src/prompts/promptText/languages/javascript/comprehensive.hbs +0 -18
  468. package/src/prompts/promptText/languages/python/comprehensive.hbs +0 -18
  469. package/src/prompts/promptText/languages/typescript/comprehensive.hbs +0 -18
  470. package/src/runtime/auth/service.ts +0 -58
  471. package/src/runtime/auth/session.ts +0 -103
  472. package/src/runtime/auth/types.ts +0 -11
  473. package/src/runtime/cliEntry.ts +0 -214
  474. package/src/runtime/debug/logManager.ts +0 -37
  475. package/src/runtime/errors.ts +0 -13
  476. package/src/runtime/fileCollector.ts +0 -495
  477. package/src/runtime/manifest.ts +0 -64
  478. package/src/runtime/openrouterProxy.ts +0 -45
  479. package/src/runtime/preprod/webCheck.ts +0 -104
  480. package/src/runtime/proxyConfig.ts +0 -94
  481. package/src/runtime/proxyEnvironment.ts +0 -71
  482. package/src/runtime/reportMerge.ts +0 -102
  483. package/src/runtime/reporting/markdownReportBuilder.ts +0 -138
  484. package/src/runtime/reporting/reportDataCollector.ts +0 -234
  485. package/src/runtime/reporting/summaryGenerator.ts +0 -86
  486. package/src/runtime/reviewPipeline.ts +0 -200
  487. package/src/runtime/runAiCodeReview.ts +0 -308
  488. package/src/runtime/runtimeConfig.ts +0 -5
  489. package/src/runtime/ui/Layout.tsx +0 -57
  490. package/src/runtime/ui/RuntimeApp.tsx +0 -262
  491. package/src/runtime/ui/inkModules.ts +0 -73
  492. package/src/runtime/ui/screens/AuthScreen.tsx +0 -128
  493. package/src/runtime/ui/screens/ModeSelection.tsx +0 -185
  494. package/src/runtime/ui/screens/ProgressScreen.tsx +0 -110
  495. package/src/runtime/ui/screens/ResultsScreen.tsx +0 -103
  496. package/src/strategies/ArchitecturalReviewStrategy.ts +0 -54
  497. package/src/strategies/CodingTestReviewStrategy.ts +0 -920
  498. package/src/strategies/ConsolidatedReviewStrategy.ts +0 -59
  499. package/src/strategies/ExtractPatternsReviewStrategy.ts +0 -64
  500. package/src/strategies/MultiPassReviewStrategy.ts +0 -785
  501. package/src/strategies/ReviewStrategy.ts +0 -64
  502. package/src/strategies/StrategyFactory.ts +0 -79
  503. package/src/tokenizers/baseTokenizer.ts +0 -61
  504. package/src/tokenizers/gptTokenizer.ts +0 -27
  505. package/src/types/apiResponses.ts +0 -40
  506. package/src/types/cli.ts +0 -24
  507. package/src/types/configuration.ts +0 -201
  508. package/src/types/handlebars.d.ts +0 -5
  509. package/src/types/patch.d.ts +0 -25
  510. package/src/types/review.ts +0 -312
  511. package/src/types/reviewContext.d.ts +0 -65
  512. package/src/types/structuredReview.ts +0 -167
  513. package/src/types/tokenAnalysis.ts +0 -56
  514. package/src/utils/FileReader.ts +0 -93
  515. package/src/utils/FileWriter.ts +0 -76
  516. package/src/utils/PathGenerator.ts +0 -97
  517. package/src/utils/api/apiUtils.ts +0 -14
  518. package/src/utils/apiErrorHandler.ts +0 -287
  519. package/src/utils/ciDataCollector.ts +0 -252
  520. package/src/utils/codingTestConfigLoader.ts +0 -466
  521. package/src/utils/dependencies/aiDependencyAnalyzer.ts +0 -454
  522. package/src/utils/detection/frameworkDetector.ts +0 -879
  523. package/src/utils/detection/projectTypeDetector.ts +0 -518
  524. package/src/utils/diagramGenerator.ts +0 -206
  525. package/src/utils/errorLogger.ts +0 -60
  526. package/src/utils/estimationUtils.ts +0 -407
  527. package/src/utils/fileFilters.ts +0 -373
  528. package/src/utils/fileSystem.ts +0 -57
  529. package/src/utils/logger.ts +0 -290
  530. package/src/utils/pathValidator.ts +0 -98
  531. package/src/utils/projectDocs.ts +0 -189
  532. package/src/utils/promptPaths.ts +0 -29
  533. package/src/utils/promptTemplateManager.ts +0 -157
  534. package/src/utils/review/consolidateReview.ts +0 -553
  535. package/src/utils/review/fixDisplay.ts +0 -100
  536. package/src/utils/review/fixImplementation.ts +0 -61
  537. package/src/utils/review/index.ts +0 -36
  538. package/src/utils/review/interactiveProcessing.ts +0 -294
  539. package/src/utils/review/progressTracker.ts +0 -296
  540. package/src/utils/review/reviewExtraction.ts +0 -382
  541. package/src/utils/review/types.ts +0 -46
  542. package/src/utils/reviewParser.ts +0 -253
  543. package/src/utils/sanitizer.ts +0 -238
  544. package/src/utils/smartFileSelector.ts +0 -255
  545. package/src/utils/templateLoader.ts +0 -514
  546. package/src/utils/treeGenerator.ts +0 -153
  547. package/tsconfig.build.json +0 -14
  548. package/tsconfig.json +0 -59
  549. /package/{src/utils/api/index.ts → dist/utils/api/index.d.ts} +0 -0
@@ -1,206 +0,0 @@
1
- /**
2
- * @fileoverview Diagram generator for creating Mermaid architecture diagrams.
3
- *
4
- * This module is responsible for extracting and generating Mermaid diagrams
5
- * from review content, particularly for architectural reviews.
6
- */
7
-
8
- import * as fs from 'node:fs/promises';
9
- import * as path from 'node:path';
10
- import logger from './logger';
11
-
12
- /**
13
- * Extract Mermaid diagram blocks from review content
14
- * @param content Review content that may contain Mermaid diagram blocks
15
- * @returns Array of Mermaid diagram strings
16
- */
17
- export function extractMermaidDiagrams(content: string): string[] {
18
- const diagrams: string[] = [];
19
-
20
- // Match Mermaid code blocks in various formats
21
- const mermaidBlockRegex = /```mermaid\n([\s\S]*?)```/g;
22
- let match;
23
-
24
- while ((match = mermaidBlockRegex.exec(content)) !== null) {
25
- diagrams.push(match[1].trim());
26
- }
27
-
28
- // Also check for inline mermaid notation that might be present
29
- const inlineMermaidRegex = /graph\s+(TB|TD|BT|RL|LR)[\s\S]*?(?=\n\n|\n##|$)/g;
30
-
31
- while ((match = inlineMermaidRegex.exec(content)) !== null) {
32
- // Only add if not already captured in a code block
33
- const diagram = match[0].trim();
34
- if (!diagrams.some((d) => d.includes(diagram))) {
35
- diagrams.push(diagram);
36
- }
37
- }
38
-
39
- return diagrams;
40
- }
41
-
42
- /**
43
- * Generate a Mermaid diagram prompt for architectural reviews
44
- * @param projectName Name of the project being reviewed
45
- * @param framework Framework being used (if detected)
46
- * @returns Prompt text for generating architecture diagrams
47
- */
48
- export function generateDiagramPrompt(projectName: string, framework?: string): string {
49
- const frameworkContext = framework ? ` (${framework} framework)` : '';
50
-
51
- return `
52
- ## Architecture Diagram
53
-
54
- Please generate a Mermaid diagram that visualizes the architecture of the ${projectName}${frameworkContext} project. Include:
55
-
56
- 1. **Component Diagram**: Show the main components/modules and their relationships
57
- 2. **Data Flow**: Illustrate how data flows through the system
58
- 3. **Key Dependencies**: Show external services, databases, and APIs
59
- 4. **Layer Architecture**: If applicable, show the layered architecture (presentation, business logic, data access)
60
-
61
- Use the following Mermaid syntax:
62
-
63
- \`\`\`mermaid
64
- graph TB
65
- subgraph "Presentation Layer"
66
- UI[User Interface]
67
- API[API Gateway]
68
- end
69
-
70
- subgraph "Business Logic"
71
- Service[Service Layer]
72
- Domain[Domain Models]
73
- end
74
-
75
- subgraph "Data Layer"
76
- DB[(Database)]
77
- Cache[(Cache)]
78
- end
79
-
80
- UI --> API
81
- API --> Service
82
- Service --> Domain
83
- Service --> DB
84
- Service --> Cache
85
- \`\`\`
86
-
87
- Please provide a comprehensive architecture diagram based on the actual code structure analyzed.
88
- `;
89
- }
90
-
91
- /**
92
- * Save Mermaid diagrams to separate files
93
- * @param diagrams Array of Mermaid diagram strings
94
- * @param outputPath Path to the main review output file
95
- * @returns Promise resolving to the paths of saved diagram files
96
- */
97
- export async function saveDiagramFiles(diagrams: string[], outputPath: string): Promise<string[]> {
98
- if (diagrams.length === 0) {
99
- logger.debug('No diagrams to save');
100
- return [];
101
- }
102
-
103
- const savedPaths: string[] = [];
104
- const baseDir = path.dirname(outputPath);
105
- const baseName = path.basename(outputPath, path.extname(outputPath));
106
-
107
- for (let i = 0; i < diagrams.length; i++) {
108
- const diagramNumber = diagrams.length > 1 ? `-${i + 1}` : '';
109
- const diagramPath = path.join(baseDir, `${baseName}-diagram${diagramNumber}.md`);
110
-
111
- // Create markdown file with the Mermaid diagram
112
- const diagramContent = `# Architecture Diagram${diagramNumber ? ` ${i + 1}` : ''}
113
-
114
- Generated from: ${path.basename(outputPath)}
115
- Date: ${new Date().toISOString()}
116
-
117
- ## Diagram
118
-
119
- \`\`\`mermaid
120
- ${diagrams[i]}
121
- \`\`\`
122
-
123
- ## Rendering Instructions
124
-
125
- To view this diagram:
126
- 1. Use a Markdown viewer that supports Mermaid (GitHub, GitLab, VS Code with Mermaid extension)
127
- 2. Or paste the Mermaid code into https://mermaid.live/
128
- 3. Or use the Mermaid CLI: \`mmdc -i ${path.basename(diagramPath)} -o ${baseName}-diagram${diagramNumber}.svg\`
129
-
130
- ## Notes
131
-
132
- This diagram was automatically generated as part of an architectural code review.
133
- For the full review, see: ${path.basename(outputPath)}
134
- `;
135
-
136
- try {
137
- await fs.writeFile(diagramPath, diagramContent, 'utf-8');
138
- savedPaths.push(diagramPath);
139
- logger.info(`Saved architecture diagram to: ${diagramPath}`);
140
- } catch (error) {
141
- logger.error(`Failed to save diagram file: ${error}`);
142
- }
143
- }
144
-
145
- return savedPaths;
146
- }
147
-
148
- /**
149
- * Process review content to extract and save diagrams
150
- * @param reviewContent The full review content
151
- * @param outputPath Path to the main review output file
152
- * @param options Review options
153
- * @returns Promise resolving to paths of any saved diagram files
154
- */
155
- export async function processDiagrams(
156
- reviewContent: string,
157
- outputPath: string,
158
- options: { diagram?: boolean; type: string },
159
- ): Promise<string[]> {
160
- // Only process diagrams if the flag is set and it's an architectural review
161
- if (!options.diagram || options.type !== 'architectural') {
162
- return [];
163
- }
164
-
165
- logger.info('Processing review content for architecture diagrams...');
166
-
167
- // Extract any Mermaid diagrams from the review content
168
- const diagrams = extractMermaidDiagrams(reviewContent);
169
-
170
- if (diagrams.length === 0) {
171
- logger.info('No Mermaid diagrams found in review content');
172
- return [];
173
- }
174
-
175
- logger.info(`Found ${diagrams.length} Mermaid diagram(s) in review`);
176
-
177
- // Save the diagrams to separate files
178
- return saveDiagramFiles(diagrams, outputPath);
179
- }
180
-
181
- /**
182
- * Enhance review prompt to include diagram generation
183
- * @param originalPrompt The original review prompt
184
- * @param options Review options
185
- * @param projectName Project name
186
- * @param framework Detected framework (optional)
187
- * @returns Enhanced prompt with diagram instructions
188
- */
189
- export function enhancePromptForDiagrams(
190
- originalPrompt: string,
191
- options: { diagram?: boolean; type: string },
192
- projectName: string,
193
- framework?: string,
194
- ): string {
195
- // Only enhance if diagram flag is set and it's an architectural review
196
- if (!options.diagram || options.type !== 'architectural') {
197
- return originalPrompt;
198
- }
199
-
200
- const diagramPrompt = generateDiagramPrompt(projectName, framework);
201
-
202
- // Add the diagram prompt to the original prompt
203
- return `${originalPrompt}
204
-
205
- ${diagramPrompt}`;
206
- }
@@ -1,60 +0,0 @@
1
- /**
2
- * @fileoverview Error logging utilities for the code review tool.
3
- *
4
- * This module provides error logging functionality to capture and persist error
5
- * information for debugging and troubleshooting. It writes detailed error logs
6
- * to files with timestamps and contextual information to help diagnose issues.
7
- *
8
- * Key responsibilities:
9
- * - Capturing error details including stack traces
10
- * - Recording contextual information about the error environment
11
- * - Writing error logs to timestamped files
12
- * - Creating error log directories as needed
13
- * - Providing a consistent error logging interface across the application
14
- *
15
- * These utilities help developers diagnose and fix issues by preserving detailed
16
- * error information that might otherwise be lost in console output.
17
- */
18
-
19
- import fs from 'node:fs/promises';
20
- import path from 'node:path';
21
- import { createDirectory } from './fileSystem';
22
- import logger from './logger';
23
-
24
- /**
25
- * Log an error to a file
26
- * @param error Error to log
27
- * @param context Additional context information
28
- * @returns Promise resolving to the path of the error log file
29
- */
30
- export async function logError(
31
- error: unknown,
32
- context: Record<string, unknown> = {},
33
- ): Promise<string> {
34
- try {
35
- // Create error logs directory
36
- const errorLogsDir = path.resolve('error-logs');
37
- await createDirectory(errorLogsDir);
38
-
39
- // Generate timestamp for the filename
40
- const timestamp = new Date().toISOString().replace(/:/g, '-');
41
- const errorLogPath = path.join(errorLogsDir, `error-${timestamp}.json`);
42
-
43
- // Format error object
44
- const errorObj = {
45
- timestamp: new Date().toISOString(),
46
- message: error instanceof Error ? error.message : 'Unknown error',
47
- stack: error instanceof Error ? error.stack : undefined,
48
- context,
49
- };
50
-
51
- // Write error to file
52
- await fs.writeFile(errorLogPath, JSON.stringify(errorObj, null, 2));
53
-
54
- logger.error(`Error logged to: ${errorLogPath}`);
55
- return errorLogPath;
56
- } catch (logError) {
57
- logger.error('Failed to log error:', logError);
58
- return '';
59
- }
60
- }
@@ -1,407 +0,0 @@
1
- /**
2
- * @fileoverview Utilities for estimating token usage and costs for code reviews.
3
- *
4
- * This module provides functions for estimating token usage and costs for code reviews
5
- * based on file content and model selection. It uses the tokenCounter utilities for
6
- * basic token counting and cost calculation, and adds specialized functions for
7
- * estimating review-specific token usage patterns.
8
- */
9
-
10
- import fs from 'node:fs/promises';
11
- import path from 'node:path';
12
- import { estimateTokenCount, formatCost, getCostInfo } from '../clients/utils/tokenCounter';
13
- import type { FileInfo } from '../types/review';
14
- import logger from './logger';
15
-
16
- /**
17
- * Ratio of output tokens to input tokens based on empirical observations
18
- * This is an approximation and may vary based on the specific review type and content
19
- */
20
- const OUTPUT_TO_INPUT_RATIO = {
21
- architectural: 0.6, // Architectural reviews tend to be more concise
22
- 'quick-fixes': 0.8, // Quick fixes often include code snippets
23
- security: 0.7, // Security reviews are moderately detailed
24
- performance: 0.7, // Performance reviews are similar to security
25
- default: 0.75, // Default ratio if review type is not specified
26
- };
27
-
28
- /**
29
- * Overhead tokens for review context, instructions, and formatting
30
- * This is added to the total token count to account for the review framework
31
- */
32
- const REVIEW_OVERHEAD_TOKENS = 1500;
33
-
34
- /**
35
- * Context maintenance overhead factor for multi-pass reviews
36
- * This factor is applied to estimate additional tokens needed for maintaining context
37
- */
38
- const MULTI_PASS_CONTEXT_MAINTENANCE_FACTOR = 0.15;
39
-
40
- /**
41
- * Additional overhead tokens per pass in multi-pass reviews
42
- * This accounts for pass management, coordination, and state tracking
43
- */
44
- const MULTI_PASS_OVERHEAD_PER_PASS = 800;
45
-
46
- /**
47
- * Estimate the number of output tokens based on input tokens and review type
48
- * @param inputTokens Number of input tokens
49
- * @param reviewType Type of review
50
- * @returns Estimated number of output tokens
51
- */
52
- export function estimateOutputTokens(inputTokens: number, reviewType: string): number {
53
- const ratio =
54
- OUTPUT_TO_INPUT_RATIO[reviewType as keyof typeof OUTPUT_TO_INPUT_RATIO] ||
55
- OUTPUT_TO_INPUT_RATIO.default;
56
- return Math.ceil(inputTokens * ratio);
57
- }
58
-
59
- /**
60
- * Estimate token usage and cost for a set of files
61
- *
62
- * This function calculates the estimated token usage and cost for reviewing a set of files
63
- * using a specified AI model. It considers:
64
- * - The content of each file (code, comments, etc.)
65
- * - The type of review being performed (quick, security, architectural, etc.)
66
- * - The specific AI model being used and its pricing structure
67
- *
68
- * The estimation includes overhead tokens for system prompts and instructions that are
69
- * included in every review, in addition to the tokens from the file content itself.
70
- *
71
- * @param files Array of file information objects containing file content and metadata
72
- * @param reviewType Type of review (quick, security, architectural, performance)
73
- * @param modelName Name of the model to use (e.g., 'openrouter:anthropic/claude-3-opus-20240229')
74
- * @returns Estimated token usage and cost information including:
75
- * - inputTokens: Number of tokens in the input (files + prompts)
76
- * - outputTokens: Estimated number of tokens in the AI response
77
- * - totalTokens: Total token usage (input + output)
78
- * - estimatedCost: Estimated cost in USD
79
- * - formattedCost: Cost formatted as a string (e.g., '$0.12 USD')
80
- * - fileCount: Number of files being reviewed
81
- * - totalFileSize: Total size of all files in bytes
82
- */
83
- export async function estimateReviewCost(
84
- files: FileInfo[],
85
- reviewType: string,
86
- modelName: string = process.env.AI_CODE_REVIEW_MODEL || 'openrouter:anthropic/claude-3-opus-20240229',
87
- ): Promise<{
88
- inputTokens: number;
89
- outputTokens: number;
90
- totalTokens: number;
91
- estimatedCost: number;
92
- formattedCost: string;
93
- fileCount: number;
94
- totalFileSize: number;
95
- }> {
96
- // Calculate total input tokens from all files
97
- let totalInputTokens = REVIEW_OVERHEAD_TOKENS; // Start with overhead tokens
98
- let totalFileSize = 0;
99
-
100
- for (const file of files) {
101
- const fileTokens = estimateTokenCount(file.content);
102
- totalInputTokens += fileTokens;
103
- totalFileSize += file.content.length;
104
- }
105
-
106
- // Estimate output tokens based on input tokens and review type
107
- const estimatedOutputTokens = estimateOutputTokens(totalInputTokens, reviewType);
108
-
109
- // Calculate cost information
110
- const costInfo = getCostInfo(totalInputTokens, estimatedOutputTokens, modelName);
111
-
112
- return {
113
- ...costInfo,
114
- fileCount: files.length,
115
- totalFileSize,
116
- };
117
- }
118
-
119
- /**
120
- * Format estimation results as a human-readable string
121
- *
122
- * This function takes the estimation results from estimateReviewCost or estimateFromFilePaths
123
- * and formats them into a user-friendly string that can be displayed to the user.
124
- *
125
- * The formatted string includes:
126
- * - Number of files being reviewed
127
- * - Total file size
128
- * - Input token count
129
- * - Estimated output token count
130
- * - Total token usage
131
- * - Estimated cost in USD
132
- *
133
- * @param estimation Estimation results from estimateReviewCost or estimateFromFilePaths
134
- * @param reviewType Type of review (quick, security, architectural, performance)
135
- * @param modelName Name of the model being used
136
- * @returns Formatted estimation string ready for display
137
- * @example
138
- * // Example output:
139
- * // Estimation for 5 files (25.5 KB) using openrouter:anthropic/claude-3-opus-20240229:
140
- * // - Review type: quick
141
- * // - Input tokens: 5,000
142
- * // - Output tokens: 2,500 (estimated)
143
- * // - Total tokens: 7,500
144
- * // - Estimated Cost: $0.015 USD
145
- */
146
- export function formatEstimation(
147
- estimation: ReturnType<typeof estimateReviewCost> extends Promise<infer T> ? T : never,
148
- reviewType: string,
149
- modelName: string,
150
- ): string {
151
- // Extract provider and model if available
152
- const [provider, model] = modelName.includes(':') ? modelName.split(':') : [undefined, modelName];
153
- const displayModel = model || modelName;
154
- const displayProvider = provider
155
- ? `${provider.charAt(0).toUpperCase() + provider.slice(1)}`
156
- : 'Unknown';
157
- const fileSizeInKB = (estimation.totalFileSize / 1024).toFixed(2);
158
- const averageFileSize =
159
- estimation.fileCount > 0
160
- ? (estimation.totalFileSize / estimation.fileCount / 1024).toFixed(2)
161
- : '0.00';
162
-
163
- return `
164
- === Token Usage and Cost Estimation ===
165
-
166
- Review Type: ${reviewType}
167
- Provider: ${displayProvider}
168
- Model: ${displayModel}
169
- Files: ${estimation.fileCount} (${fileSizeInKB} KB total, ${averageFileSize} KB average)
170
-
171
- Token Usage:
172
- Input Tokens: ${estimation.inputTokens.toLocaleString()} (includes ${REVIEW_OVERHEAD_TOKENS.toLocaleString()} overhead tokens)
173
- Estimated Output Tokens: ${estimation.outputTokens.toLocaleString()}
174
- Total Tokens: ${estimation.totalTokens.toLocaleString()}
175
-
176
- Estimated Cost: ${estimation.formattedCost}
177
-
178
- Note: This is an estimate based on approximate token counts and may vary
179
- based on the actual content and model behavior.
180
- `;
181
- }
182
-
183
- /**
184
- * Estimate token usage and cost for a set of file paths
185
- *
186
- * This function is a convenience wrapper around estimateReviewCost that takes file paths
187
- * instead of FileInfo objects. It reads the content of each file and then calls
188
- * estimateReviewCost to calculate the token usage and cost.
189
- *
190
- * This is particularly useful for the --estimate command line flag, which needs to
191
- * estimate costs before actually performing a review.
192
- *
193
- * @param filePaths Array of file paths to estimate token usage for
194
- * @param reviewType Type of review (quick, security, architectural, performance)
195
- * @param modelName Name of the model to use (e.g., 'openrouter:anthropic/claude-3-opus-20240229')
196
- * @returns Estimated token usage and cost information (same as estimateReviewCost)
197
- * @throws Error if any file cannot be read
198
- * @see estimateReviewCost for details on the return value
199
- */
200
- export async function estimateFromFilePaths(
201
- filePaths: string[],
202
- reviewType: string,
203
- modelName: string = process.env.AI_CODE_REVIEW_MODEL || 'openrouter:anthropic/claude-3-opus-20240229',
204
- ): Promise<ReturnType<typeof estimateReviewCost> extends Promise<infer T> ? T : never> {
205
- // Read file contents
206
- const files: FileInfo[] = [];
207
-
208
- for (const filePath of filePaths) {
209
- try {
210
- const content = await fs.readFile(filePath, 'utf-8');
211
- files.push({
212
- path: filePath,
213
- relativePath: path.basename(filePath),
214
- content,
215
- });
216
- } catch (error) {
217
- logger.error(
218
- `Error reading file ${filePath}: ${error instanceof Error ? error.message : String(error)}`,
219
- );
220
- }
221
- }
222
-
223
- // Estimate cost
224
- return await estimateReviewCost(files, reviewType, modelName);
225
- }
226
-
227
- /**
228
- * Estimate token usage and cost for a multi-pass review
229
- *
230
- * This function extends the standard token estimation by accounting for the overhead
231
- * of multi-pass reviews, including context maintenance between passes and additional
232
- * overhead for each pass.
233
- *
234
- * @param files Array of file information objects containing file content and metadata
235
- * @param reviewType Type of review (quick, security, architectural, performance)
236
- * @param modelName Name of the model to use (e.g., 'openrouter:anthropic/claude-3-opus-20240229')
237
- * @param options Additional estimation options
238
- * @param options.passCount Number of passes to estimate (if known)
239
- * @param options.contextMaintenanceFactor Factor for context maintenance overhead (0-1)
240
- * @returns Estimated token usage and cost information for multi-pass review
241
- */
242
- export async function estimateMultiPassReviewCost(
243
- files: FileInfo[],
244
- reviewType: string,
245
- modelName: string = process.env.AI_CODE_REVIEW_MODEL || 'openrouter:anthropic/claude-3-opus-20240229',
246
- options: {
247
- passCount?: number;
248
- contextMaintenanceFactor?: number;
249
- } = {},
250
- ): Promise<{
251
- inputTokens: number;
252
- outputTokens: number;
253
- totalTokens: number;
254
- estimatedCost: number;
255
- formattedCost: string;
256
- fileCount: number;
257
- totalFileSize: number;
258
- passCount: number;
259
- perPassCosts: {
260
- passNumber: number;
261
- inputTokens: number;
262
- outputTokens: number;
263
- totalTokens: number;
264
- estimatedCost: number;
265
- }[];
266
- }> {
267
- // Calculate total input tokens from all files
268
- let totalFileTokens = 0;
269
- let totalFileSize = 0;
270
-
271
- for (const file of files) {
272
- const fileTokens = estimateTokenCount(file.content);
273
- totalFileTokens += fileTokens;
274
- totalFileSize += file.content.length;
275
- }
276
-
277
- // Calculate or determine the number of passes
278
- const contextMaintenanceFactor =
279
- options.contextMaintenanceFactor || MULTI_PASS_CONTEXT_MAINTENANCE_FACTOR;
280
-
281
- // Get a rough estimate of context window size based on the model
282
- // This is a simplified approach; in production we'd pull this from provider metadata.
283
- const getContextWindow = (model: string): number => {
284
- if (model.includes('claude')) return 200000;
285
- if (model.includes('gpt-4o')) return 128000;
286
- if (model.includes('gpt-4')) return 128000;
287
- return 128000; // Default for OpenRouter models
288
- };
289
-
290
- const contextWindow = getContextWindow(modelName);
291
- const effectiveContextSize = Math.floor(contextWindow * (1 - contextMaintenanceFactor));
292
-
293
- // Determine number of passes if not provided
294
- const passCount =
295
- options.passCount || Math.max(1, Math.ceil(totalFileTokens / effectiveContextSize));
296
-
297
- // Calculate tokens per pass (roughly equal distribution for estimation)
298
- const tokensPerPass = totalFileTokens / passCount;
299
-
300
- // Calculate per-pass costs
301
- const perPassCosts = [];
302
- let totalInputTokens = 0;
303
- let totalOutputTokens = 0;
304
- let totalEstimatedCost = 0;
305
-
306
- for (let i = 0; i < passCount; i++) {
307
- // Each pass has standard overhead plus context maintenance overhead
308
- const passInputTokens = Math.ceil(
309
- tokensPerPass + REVIEW_OVERHEAD_TOKENS + MULTI_PASS_OVERHEAD_PER_PASS,
310
- );
311
-
312
- // For passes after the first, add context from previous passes
313
- const contextTokens = i > 0 ? Math.ceil(i * MULTI_PASS_OVERHEAD_PER_PASS * 1.5) : 0;
314
- const totalPassInputTokens = passInputTokens + contextTokens;
315
-
316
- // Estimate output tokens
317
- const passOutputTokens = estimateOutputTokens(totalPassInputTokens, reviewType);
318
-
319
- // Calculate cost for this pass
320
- const passCostInfo = getCostInfo(totalPassInputTokens, passOutputTokens, modelName);
321
-
322
- perPassCosts.push({
323
- passNumber: i + 1,
324
- inputTokens: totalPassInputTokens,
325
- outputTokens: passOutputTokens,
326
- totalTokens: totalPassInputTokens + passOutputTokens,
327
- estimatedCost: passCostInfo.estimatedCost,
328
- });
329
-
330
- // Accumulate totals
331
- totalInputTokens += totalPassInputTokens;
332
- totalOutputTokens += passOutputTokens;
333
- totalEstimatedCost += passCostInfo.estimatedCost;
334
- }
335
-
336
- return {
337
- inputTokens: totalInputTokens,
338
- outputTokens: totalOutputTokens,
339
- totalTokens: totalInputTokens + totalOutputTokens,
340
- estimatedCost: totalEstimatedCost,
341
- formattedCost: formatCost(totalEstimatedCost),
342
- fileCount: files.length,
343
- totalFileSize,
344
- passCount,
345
- perPassCosts,
346
- };
347
- }
348
-
349
- /**
350
- * Format multi-pass estimation results as a human-readable string
351
- *
352
- * @param estimation Multi-pass estimation results
353
- * @param reviewType Type of review
354
- * @param modelName Name of the model being used
355
- * @returns Formatted estimation string
356
- */
357
- export function formatMultiPassEstimation(
358
- estimation: ReturnType<typeof estimateMultiPassReviewCost> extends Promise<infer T> ? T : never,
359
- reviewType: string,
360
- modelName: string,
361
- ): string {
362
- // Extract provider and model if available
363
- const [provider, model] = modelName.includes(':') ? modelName.split(':') : [undefined, modelName];
364
- const displayModel = model || modelName;
365
- const displayProvider = provider
366
- ? `${provider.charAt(0).toUpperCase() + provider.slice(1)}`
367
- : 'Unknown';
368
- const fileSizeInKB = (estimation.totalFileSize / 1024).toFixed(2);
369
- const averageFileSize =
370
- estimation.fileCount > 0
371
- ? (estimation.totalFileSize / estimation.fileCount / 1024).toFixed(2)
372
- : '0.00';
373
-
374
- let output = `
375
- === Multi-Pass Token Usage and Cost Estimation ===
376
-
377
- Review Type: ${reviewType}
378
- Provider: ${displayProvider}
379
- Model: ${displayModel}
380
- Files: ${estimation.fileCount} (${fileSizeInKB} KB total, ${averageFileSize} KB average)
381
- Passes: ${estimation.passCount}
382
-
383
- Total Token Usage:
384
- Input Tokens: ${estimation.inputTokens.toLocaleString()}
385
- Estimated Output Tokens: ${estimation.outputTokens.toLocaleString()}
386
- Total Tokens: ${estimation.totalTokens.toLocaleString()}
387
-
388
- Estimated Total Cost: ${estimation.formattedCost}
389
-
390
- Per-Pass Breakdown:
391
- `;
392
-
393
- estimation.perPassCosts.forEach((passCost) => {
394
- output += ` Pass ${passCost.passNumber}:
395
- Input Tokens: ${passCost.inputTokens.toLocaleString()}
396
- Output Tokens: ${passCost.outputTokens.toLocaleString()}
397
- Cost: ${formatCost(passCost.estimatedCost)}
398
- `;
399
- });
400
-
401
- output += `
402
- Note: This is an estimate based on approximate token counts and may vary
403
- based on the actual content and model behavior.
404
- `;
405
-
406
- return output;
407
- }