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,37 +0,0 @@
1
- import { mkdirSync } from 'node:fs';
2
- import { join, resolve } from 'node:path';
3
- import { disableFileLogging, enableFileLogging } from '../../utils/logger';
4
-
5
- export interface DebugLogSession {
6
- filePath: string;
7
- stop: () => void;
8
- }
9
-
10
- function formatTimestamp(date: Date): string {
11
- const pad = (value: number) => value.toString().padStart(2, '0');
12
- const year = date.getFullYear();
13
- const month = pad(date.getMonth() + 1);
14
- const day = pad(date.getDate());
15
- const hours = pad(date.getHours());
16
- const minutes = pad(date.getMinutes());
17
- const seconds = pad(date.getSeconds());
18
- return `${year}${month}${day}-${hours}${minutes}${seconds}`;
19
- }
20
-
21
- export function startDebugLogSession(workspaceRoot: string): DebugLogSession {
22
- const logsDir = resolve(workspaceRoot, 'logs');
23
- mkdirSync(logsDir, { recursive: true });
24
-
25
- const timestamp = formatTimestamp(new Date());
26
- const fileName = `cr-debug-${timestamp}.log`;
27
- const filePath = join(logsDir, fileName);
28
-
29
- enableFileLogging(filePath);
30
-
31
- return {
32
- filePath,
33
- stop: () => {
34
- disableFileLogging();
35
- },
36
- };
37
- }
@@ -1,13 +0,0 @@
1
- export class MissingCrIgnoreError extends Error {
2
- readonly workspaceRoot: string;
3
- readonly crIgnorePath: string;
4
-
5
- constructor(workspaceRoot: string, crIgnorePath: string) {
6
- super(
7
- `cr-aia needs a .crignore file in ${workspaceRoot}. Create one (can be empty, gitignore syntax) and rerun.`,
8
- );
9
- this.name = 'MissingCrIgnoreError';
10
- this.workspaceRoot = workspaceRoot;
11
- this.crIgnorePath = crIgnorePath;
12
- }
13
- }
@@ -1,495 +0,0 @@
1
- import { existsSync, readFileSync, readdirSync, statSync } from 'node:fs';
2
- import {
3
- relative as relativePath,
4
- resolve as resolvePath,
5
- isAbsolute as isAbsolutePath,
6
- join as joinPath,
7
- dirname as dirnamePath,
8
- } from 'node:path';
9
- import { execa } from 'execa';
10
- import { MissingCrIgnoreError } from './errors';
11
-
12
- export interface FileCollectionStats {
13
- uncommitted: number;
14
- context: number;
15
- }
16
-
17
- export interface FileCollectionResult {
18
- targets: string[];
19
- context: string[];
20
- stats: FileCollectionStats;
21
- }
22
-
23
- export type FileCollectionMode = 'uncommitted' | 'preprod';
24
-
25
- export interface CollectFilesOptions {
26
- mode?: FileCollectionMode;
27
- }
28
-
29
- export async function collectFiles(options: CollectFilesOptions = {}): Promise<FileCollectionResult> {
30
- try {
31
- const { stdout: rootOut } = await execa('git', ['rev-parse', '--show-toplevel']);
32
- const repoRoot = resolvePath(rootOut.trim());
33
- const workspaceRoot = resolvePath(process.cwd());
34
- const workspaceRelative = relativePath(repoRoot, workspaceRoot) || '.';
35
-
36
- if (workspaceRelative.startsWith('..')) {
37
- throw new Error('Workspace is outside of the current git repository.');
38
- }
39
-
40
- const crIgnorePath = joinPath(workspaceRoot, '.crignore');
41
- if (!existsSync(crIgnorePath)) {
42
- throw new MissingCrIgnoreError(workspaceRoot, crIgnorePath);
43
- }
44
-
45
- const isWithinWorkspace = (absolutePath: string): boolean => {
46
- if (workspaceRoot === repoRoot) {
47
- return true;
48
- }
49
-
50
- const rel = relativePath(workspaceRoot, absolutePath);
51
- if (rel === '') {
52
- return true;
53
- }
54
-
55
- return !rel.startsWith('..') && !isAbsolutePath(rel);
56
- };
57
-
58
- const normalize = (filePath: string | undefined | null): string | null => {
59
- if (!filePath) {
60
- return null;
61
- }
62
-
63
- if (filePath.startsWith('.git/') || filePath.includes('node_modules')) {
64
- return null;
65
- }
66
-
67
- const absolutePath = resolvePath(repoRoot, filePath);
68
- if (!isWithinWorkspace(absolutePath)) {
69
- return null;
70
- }
71
-
72
- if (!existsSync(absolutePath)) {
73
- return null;
74
- }
75
-
76
- const stats = statSync(absolutePath);
77
- if (!stats.isFile()) {
78
- return null;
79
- }
80
-
81
- return absolutePath;
82
- };
83
-
84
- const mode: FileCollectionMode = options.mode ?? 'uncommitted';
85
-
86
- const collectUncommittedFiles = async (): Promise<string[]> => {
87
- const gitWorkspaceOptions = { cwd: workspaceRoot } as const;
88
- const gitPathSpec = ['--', '.'] as const;
89
-
90
- const { stdout: statusOut } = await execa('git', ['status', '--porcelain=1', '-z', ...gitPathSpec], gitWorkspaceOptions);
91
- const { stdout: diffOut } = await execa('git', ['diff', '--name-only', '-z', ...gitPathSpec], gitWorkspaceOptions);
92
-
93
- const statusEntries = statusOut.split('\0').filter(Boolean);
94
- const statusFiles: string[] = [];
95
-
96
- for (let i = 0; i < statusEntries.length; i += 1) {
97
- const entry = statusEntries[i];
98
- const statusPrefix = entry.slice(0, 3);
99
- const pathPart = entry.slice(3).trim();
100
-
101
- if (!pathPart) {
102
- continue;
103
- }
104
-
105
- if (statusPrefix.trim().startsWith('R')) {
106
- const renamedTarget = statusEntries[i + 1];
107
- if (renamedTarget) {
108
- statusFiles.push(renamedTarget);
109
- i += 1;
110
- continue;
111
- }
112
- }
113
-
114
- statusFiles.push(pathPart);
115
- }
116
-
117
- const diffFiles = diffOut.split('\0').filter(Boolean);
118
- const unique = new Set([...statusFiles, ...diffFiles]);
119
- return Array.from(unique);
120
- };
121
-
122
- const collectWorkspaceFiles = async (): Promise<string[]> => {
123
- const pathSpec = workspaceRelative === '' ? '.' : workspaceRelative;
124
- const tracked = await listTrackedFiles(repoRoot, pathSpec || '.');
125
- const untracked = await listUntrackedFiles(repoRoot, pathSpec || '.');
126
- return Array.from(new Set([...tracked, ...untracked]));
127
- };
128
-
129
- const pendingFiles = mode === 'preprod' ? await collectWorkspaceFiles() : await collectUncommittedFiles();
130
-
131
- const resolved = pendingFiles
132
- .map((file) => normalize(file))
133
- .filter((file): file is string => Boolean(file));
134
-
135
- const baseSet = new Set(resolved);
136
- const { combinedFiles, extras } = await augmentWithContext(resolved, workspaceRoot);
137
- const extraSet = new Set(extras);
138
-
139
- const gitFiltered = await excludeIgnored(repoRoot, combinedFiles);
140
- const finalFiles = await excludeCrIgnored(workspaceRoot, crIgnorePath, gitFiltered);
141
-
142
- const targets = finalFiles.filter((file) => baseSet.has(file));
143
- const contextFiles = finalFiles.filter((file) => extraSet.has(file) && !baseSet.has(file));
144
-
145
- const stats: FileCollectionStats = {
146
- uncommitted: targets.length,
147
- context: contextFiles.length,
148
- };
149
-
150
- return { targets, context: contextFiles, stats };
151
- } catch (error: any) {
152
- if (error.message?.includes('not a git repository')) {
153
- throw new Error('Not a git repository. Please run this command from a git repository root.');
154
- }
155
- throw error;
156
- }
157
- }
158
-
159
- const CONTEXT_FILENAMES = [
160
- 'README.md',
161
- 'readme.md',
162
- 'README',
163
- 'README.mdx',
164
- 'CHANGELOG.md',
165
- 'changelog.md',
166
- 'HISTORY.md',
167
- 'history.md',
168
- 'package.json',
169
- '.env.example',
170
- '.env.sample',
171
- '.env.template',
172
- '.env.local.example',
173
- '.env.production.example',
174
- ];
175
-
176
- const DEPENDENCY_EXTENSIONS = ['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs', '.mts', '.cts'];
177
- const MAX_CONTEXT_FILE_BYTES = 200 * 1024; // 200KB guardrail
178
-
179
- async function augmentWithContext(
180
- files: string[],
181
- workspaceRoot: string,
182
- ): Promise<{ combinedFiles: string[]; extras: string[] }> {
183
- if (files.length === 0) {
184
- return { combinedFiles: files, extras: [] };
185
- }
186
-
187
- const baseSet = new Set(files);
188
- const contextFiles = collectContextFiles(files, workspaceRoot);
189
- const dependencyFiles = collectDependencyFiles(files, workspaceRoot);
190
- const localMarkdownFiles = collectLocalMarkdownFiles(files);
191
- const globalNamedFiles = await collectGlobalNamedContext(workspaceRoot);
192
-
193
- const extras = Array.from(
194
- new Set(
195
- [...contextFiles, ...dependencyFiles, ...localMarkdownFiles, ...globalNamedFiles].filter(
196
- (file) => !baseSet.has(file),
197
- ),
198
- ),
199
- );
200
-
201
- const combinedFiles = Array.from(new Set([...files, ...extras]));
202
- return { combinedFiles, extras };
203
- }
204
-
205
- function collectContextFiles(files: string[], workspaceRoot: string): string[] {
206
- const extras = new Set<string>();
207
- const candidateDirs = new Set<string>();
208
- files.forEach((file) => candidateDirs.add(dirnamePath(file)));
209
- candidateDirs.add(workspaceRoot);
210
-
211
- for (const dir of candidateDirs) {
212
- for (const filename of CONTEXT_FILENAMES) {
213
- const candidate = joinPath(dir, filename);
214
- if (!candidate.startsWith(workspaceRoot)) {
215
- continue;
216
- }
217
- try {
218
- const stats = statSync(candidate);
219
- if (stats.isFile() && stats.size <= MAX_CONTEXT_FILE_BYTES && isTextFile(candidate)) {
220
- extras.add(candidate);
221
- }
222
- } catch {
223
- // ignored
224
- }
225
- }
226
- }
227
-
228
- return Array.from(extras);
229
- }
230
-
231
- function collectDependencyFiles(files: string[], workspaceRoot: string): string[] {
232
- const extras = new Set<string>();
233
-
234
- for (const file of files) {
235
- if (!isDependencyCandidate(file)) {
236
- continue;
237
- }
238
-
239
- let content: string;
240
- try {
241
- content = readFileSync(file, 'utf-8');
242
- } catch {
243
- continue;
244
- }
245
-
246
- const specifiers = extractImportSpecifiers(content);
247
- if (specifiers.length === 0) {
248
- continue;
249
- }
250
-
251
- const baseDir = dirnamePath(file);
252
- for (const specifier of specifiers) {
253
- const resolved = resolveImportSpecifier(specifier, baseDir, workspaceRoot);
254
- if (resolved) {
255
- extras.add(resolved);
256
- }
257
- }
258
- }
259
-
260
- return Array.from(extras);
261
- }
262
-
263
- function isDependencyCandidate(filePath: string): boolean {
264
- const lower = filePath.toLowerCase();
265
- return DEPENDENCY_EXTENSIONS.some((ext) => lower.endsWith(ext));
266
- }
267
-
268
- function extractImportSpecifiers(content: string): string[] {
269
- const specifiers = new Set<string>();
270
- const patterns = [
271
- /import\s+[^;]*?from\s+['"]([^'"\n]+)['"]/g,
272
- /import\s+['"]([^'"\n]+)['"]/g,
273
- /export\s+[^;]*?from\s+['"]([^'"\n]+)['"]/g,
274
- /require\(\s*['"]([^'"\n]+)['"]\s*\)/g,
275
- /import\(\s*['"]([^'"\n]+)['"]\s*\)/g,
276
- ];
277
-
278
- for (const pattern of patterns) {
279
- let match: RegExpExecArray | null;
280
- while ((match = pattern.exec(content)) !== null) {
281
- const spec = match[1];
282
- if (spec && spec.startsWith('.')) {
283
- specifiers.add(spec);
284
- }
285
- }
286
- }
287
-
288
- return Array.from(specifiers);
289
- }
290
-
291
- function resolveImportSpecifier(
292
- specifier: string,
293
- baseDir: string,
294
- workspaceRoot: string,
295
- ): string | null {
296
- const cleaned = specifier.replace(/[#?].*$/, '');
297
- const resolvedBase = resolvePath(baseDir, cleaned);
298
- const candidates = new Set<string>([resolvedBase]);
299
-
300
- const hasExtension = DEPENDENCY_EXTENSIONS.some((ext) => resolvedBase.endsWith(ext));
301
- if (!hasExtension) {
302
- for (const ext of DEPENDENCY_EXTENSIONS) {
303
- candidates.add(`${resolvedBase}${ext}`);
304
- candidates.add(joinPath(resolvedBase, `index${ext}`));
305
- }
306
- }
307
-
308
- for (const candidate of candidates) {
309
- if (!candidate.startsWith(workspaceRoot)) {
310
- continue;
311
- }
312
- try {
313
- const stats = statSync(candidate);
314
- if (stats.isFile()) {
315
- return candidate;
316
- }
317
- } catch {
318
- continue;
319
- }
320
- }
321
-
322
- return null;
323
- }
324
-
325
- function collectLocalMarkdownFiles(files: string[]): string[] {
326
- const extras = new Set<string>();
327
- const dirs = new Set<string>();
328
- files.forEach((file) => dirs.add(dirnamePath(file)));
329
-
330
- for (const dir of dirs) {
331
- let entries;
332
- try {
333
- entries = readdirSync(dir, { withFileTypes: true });
334
- } catch {
335
- continue;
336
- }
337
-
338
- for (const entry of entries) {
339
- if (!entry.isFile()) {
340
- continue;
341
- }
342
-
343
- const lower = entry.name.toLowerCase();
344
- if (!lower.endsWith('.md') && !lower.endsWith('.mdx')) {
345
- continue;
346
- }
347
-
348
- const fullPath = joinPath(dir, entry.name);
349
- try {
350
- const stats = statSync(fullPath);
351
- if (stats.isFile() && stats.size <= MAX_CONTEXT_FILE_BYTES && isTextFile(fullPath)) {
352
- extras.add(fullPath);
353
- }
354
- } catch {
355
- continue;
356
- }
357
- }
358
- }
359
-
360
- return Array.from(extras);
361
- }
362
-
363
- async function collectGlobalNamedContext(workspaceRoot: string): Promise<string[]> {
364
- try {
365
- const pathspecs = CONTEXT_FILENAMES.map((name) => `:(glob)**/${name}`);
366
- const { stdout } = await execa('git', ['ls-files', '-z', '--', ...pathspecs], {
367
- cwd: workspaceRoot,
368
- reject: false,
369
- });
370
- if (!stdout) {
371
- return [];
372
- }
373
-
374
- return stdout
375
- .split('\0')
376
- .filter(Boolean)
377
- .map((rel) => resolvePath(workspaceRoot, rel))
378
- .filter((abs) => {
379
- try {
380
- const stats = statSync(abs);
381
- return stats.isFile() && stats.size <= MAX_CONTEXT_FILE_BYTES && isTextFile(abs);
382
- } catch {
383
- return false;
384
- }
385
- });
386
- } catch {
387
- return [];
388
- }
389
- }
390
-
391
- function isTextFile(filePath: string): boolean {
392
- try {
393
- const buffer = readFileSync(filePath);
394
- const sample = buffer.subarray(0, 4096);
395
- return !sample.includes(0);
396
- } catch {
397
- return false;
398
- }
399
- }
400
-
401
- async function listTrackedFiles(repoRoot: string, pathSpec: string): Promise<string[]> {
402
- const { stdout } = await execa('git', ['ls-files', '-z', '--', pathSpec], {
403
- cwd: repoRoot,
404
- });
405
- return stdout.split('\0').filter(Boolean);
406
- }
407
-
408
- async function listUntrackedFiles(repoRoot: string, pathSpec: string): Promise<string[]> {
409
- const { stdout } = await execa('git', ['ls-files', '-z', '--others', '--exclude-standard', '--', pathSpec], {
410
- cwd: repoRoot,
411
- });
412
- return stdout.split('\0').filter(Boolean);
413
- }
414
-
415
- async function excludeIgnored(repoRoot: string, files: string[]): Promise<string[]> {
416
- if (files.length === 0) {
417
- return [];
418
- }
419
-
420
- const relPaths = files.map((file) => {
421
- const rel = relativePath(repoRoot, file);
422
- return rel.replace(/\\/g, '/');
423
- });
424
-
425
- const { stdout, exitCode } = await execa('git', ['check-ignore', '--stdin'], {
426
- cwd: repoRoot,
427
- input: relPaths.join('\n'),
428
- reject: false,
429
- });
430
-
431
- if (exitCode !== 0 && exitCode !== 1) {
432
- throw new Error(`git check-ignore failed with code ${exitCode}`);
433
- }
434
-
435
- if (!stdout) {
436
- return files;
437
- }
438
-
439
- const ignored = new Set(
440
- stdout
441
- .split('\n')
442
- .map((line) => line.trim())
443
- .filter(Boolean),
444
- );
445
-
446
- return files.filter((_, index) => !ignored.has(relPaths[index]));
447
- }
448
-
449
- async function excludeCrIgnored(
450
- workspaceRoot: string,
451
- ignoreFile: string,
452
- files: string[],
453
- ): Promise<string[]> {
454
- if (files.length === 0) {
455
- return [];
456
- }
457
-
458
- const entries = files
459
- .map((file) => {
460
- const rel = relativePath(workspaceRoot, file).replace(/\\/g, '/');
461
- return { file, rel };
462
- })
463
- .filter((entry) => entry.rel && entry.rel !== '.crignore');
464
-
465
- if (entries.length === 0) {
466
- return [];
467
- }
468
-
469
- const { stdout, exitCode } = await execa(
470
- 'git',
471
- ['-c', `core.excludesFile=${ignoreFile}`, 'check-ignore', '--stdin'],
472
- {
473
- cwd: workspaceRoot,
474
- input: entries.map((entry) => entry.rel).join('\n'),
475
- reject: false,
476
- },
477
- );
478
-
479
- if (exitCode !== 0 && exitCode !== 1) {
480
- throw new Error(`git check-ignore (crignore) failed with code ${exitCode}`);
481
- }
482
-
483
- if (!stdout) {
484
- return entries.map((entry) => entry.file);
485
- }
486
-
487
- const ignored = new Set(
488
- stdout
489
- .split('\n')
490
- .map((line) => line.trim())
491
- .filter(Boolean),
492
- );
493
-
494
- return entries.filter((entry) => !ignored.has(entry.rel)).map((entry) => entry.file);
495
- }
@@ -1,64 +0,0 @@
1
- import { existsSync, readFileSync } from 'node:fs';
2
- import { join } from 'node:path';
3
- import yaml from 'js-yaml';
4
-
5
- const DEFAULT_MANIFEST: Record<string, unknown> = {
6
- rules: {
7
- universal: {
8
- secret_leaks: 'high',
9
- todos_left: 'medium',
10
- dead_code: 'medium',
11
- license_headers: 'low',
12
- },
13
- ts: {
14
- no_any: 'high',
15
- prefer_readonly: 'medium',
16
- exhaustiveness_in_switch: 'high',
17
- },
18
- py: {
19
- type_hints_required: 'medium',
20
- no_bare_except: 'high',
21
- },
22
- go: {
23
- errcheck_required: 'high',
24
- context_passthrough: 'medium',
25
- },
26
- },
27
- policies: {
28
- fail_on: 'critical',
29
- },
30
- outputs: {
31
- report: 'json',
32
- },
33
- };
34
-
35
- export function loadManifest(repoRoot: string): Record<string, unknown> {
36
- const defaultManifest = clone(DEFAULT_MANIFEST);
37
-
38
- const overridePaths = [join(repoRoot, 'cr-manifest.yml'), join(repoRoot, '.cr-aia.yml')];
39
-
40
- for (const overridePath of overridePaths) {
41
- if (existsSync(overridePath)) {
42
- const override = yaml.load(readFileSync(overridePath, 'utf-8')) as Record<string, unknown>;
43
- return deepMerge(defaultManifest, override);
44
- }
45
- }
46
-
47
- return defaultManifest;
48
- }
49
-
50
- function deepMerge(defaultObj: Record<string, any>, overrideObj: Record<string, any>): Record<string, any> {
51
- const result: Record<string, any> = { ...defaultObj };
52
- for (const key of Object.keys(overrideObj)) {
53
- if (typeof overrideObj[key] === 'object' && overrideObj[key] !== null && !Array.isArray(overrideObj[key])) {
54
- result[key] = deepMerge((result[key] as Record<string, any>) || {}, overrideObj[key] as Record<string, any>);
55
- } else {
56
- result[key] = overrideObj[key];
57
- }
58
- }
59
- return result;
60
- }
61
-
62
- function clone<T>(value: T): T {
63
- return JSON.parse(JSON.stringify(value));
64
- }
@@ -1,45 +0,0 @@
1
- const DEFAULT_PROXY_BASE_URL = 'https://cr.ai.enki.si';
2
-
3
- export function getProxyBaseUrl(): string {
4
- return process.env.CR_AIA_PROXY_BASE_URL || DEFAULT_PROXY_BASE_URL;
5
- }
6
-
7
- export function resolveOpenRouterProxyUrl(): string {
8
- const base = getProxyBaseUrl().replace(/\/$/, '');
9
- if (base.endsWith('/openrouter-proxy')) {
10
- return base;
11
- }
12
- if (base.endsWith('/proxy')) {
13
- return `${base.replace(/\/proxy$/, '')}/openrouter-proxy`;
14
- }
15
- return `${base}/openrouter-proxy`;
16
- }
17
-
18
- export function buildOpenRouterProxyHeaders(): Record<string, string> {
19
- const headers: Record<string, string> = {
20
- 'Content-Type': 'application/json',
21
- };
22
-
23
- const sessionToken = process.env.CR_AIA_PROXY_SESSION_TOKEN;
24
- if (!sessionToken) {
25
- throw new Error(
26
- 'Missing session token. Run `node dist/index.js`, sign in, or set CR_AIA_PROXY_SESSION_TOKEN before running reviews.',
27
- );
28
- }
29
-
30
- headers.Authorization = `Bearer ${sessionToken}`;
31
- headers['x-session-token'] = sessionToken;
32
-
33
- return headers;
34
- }
35
-
36
- export function withProxyMetadata(payload: Record<string, unknown>): Record<string, unknown> {
37
- const enriched = { ...payload };
38
- if (process.env.CR_AIA_PROXY_HTTP_REFERER && enriched['http_referer'] === undefined) {
39
- enriched['http_referer'] = process.env.CR_AIA_PROXY_HTTP_REFERER;
40
- }
41
- if (enriched['x_title'] === undefined) {
42
- enriched['x_title'] = process.env.CR_AIA_PROXY_X_TITLE || 'cr-aia';
43
- }
44
- return enriched;
45
- }