codereview-aia 0.1.3 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (558) hide show
  1. package/dist/analysis/FindingsExtractor.d.ts +105 -0
  2. package/dist/analysis/FindingsExtractor.js +363 -0
  3. package/dist/analysis/FindingsExtractor.js.map +1 -0
  4. package/dist/analysis/ai-detection/analyzers/BaseAnalyzer.d.ts +111 -0
  5. package/dist/analysis/ai-detection/analyzers/BaseAnalyzer.js +215 -0
  6. package/dist/analysis/ai-detection/analyzers/BaseAnalyzer.js.map +1 -0
  7. package/dist/analysis/ai-detection/analyzers/DocumentationAnalyzer.d.ts +142 -0
  8. package/dist/analysis/ai-detection/analyzers/DocumentationAnalyzer.js +503 -0
  9. package/dist/analysis/ai-detection/analyzers/DocumentationAnalyzer.js.map +1 -0
  10. package/dist/analysis/ai-detection/analyzers/GitHistoryAnalyzer.d.ts +88 -0
  11. package/dist/analysis/ai-detection/analyzers/GitHistoryAnalyzer.js +343 -0
  12. package/dist/analysis/ai-detection/analyzers/GitHistoryAnalyzer.js.map +1 -0
  13. package/dist/analysis/ai-detection/core/AIDetectionEngine.d.ts +104 -0
  14. package/dist/analysis/ai-detection/core/AIDetectionEngine.js +369 -0
  15. package/dist/analysis/ai-detection/core/AIDetectionEngine.js.map +1 -0
  16. package/dist/analysis/ai-detection/types/DetectionTypes.d.ts +364 -0
  17. package/dist/analysis/ai-detection/types/DetectionTypes.js +32 -0
  18. package/dist/analysis/ai-detection/types/DetectionTypes.js.map +1 -0
  19. package/dist/analysis/ai-detection/utils/SubmissionConverter.d.ts +97 -0
  20. package/dist/analysis/ai-detection/utils/SubmissionConverter.js +339 -0
  21. package/dist/analysis/ai-detection/utils/SubmissionConverter.js.map +1 -0
  22. package/dist/analysis/context/ReviewContext.d.ts +184 -0
  23. package/dist/analysis/context/ReviewContext.js +294 -0
  24. package/dist/analysis/context/ReviewContext.js.map +1 -0
  25. package/{src/analysis/context/index.ts → dist/analysis/context/index.d.ts} +0 -1
  26. package/dist/analysis/context/index.js +23 -0
  27. package/dist/analysis/context/index.js.map +1 -0
  28. package/{src/analysis/index.ts → dist/analysis/index.d.ts} +0 -1
  29. package/dist/analysis/index.js +24 -0
  30. package/dist/analysis/index.js.map +1 -0
  31. package/dist/analysis/static/wpPhpcsRunner.d.ts +11 -0
  32. package/dist/analysis/static/wpPhpcsRunner.js +219 -0
  33. package/dist/analysis/static/wpPhpcsRunner.js.map +1 -0
  34. package/dist/analysis/tokens/TokenAnalysisFormatter.d.ts +27 -0
  35. package/{src/analysis/tokens/TokenAnalysisFormatter.ts → dist/analysis/tokens/TokenAnalysisFormatter.js} +64 -75
  36. package/dist/analysis/tokens/TokenAnalysisFormatter.js.map +1 -0
  37. package/dist/analysis/tokens/TokenAnalyzer.d.ts +155 -0
  38. package/dist/analysis/tokens/TokenAnalyzer.js +502 -0
  39. package/dist/analysis/tokens/TokenAnalyzer.js.map +1 -0
  40. package/{src/analysis/tokens/index.ts → dist/analysis/tokens/index.d.ts} +0 -1
  41. package/dist/analysis/tokens/index.js +24 -0
  42. package/dist/analysis/tokens/index.js.map +1 -0
  43. package/dist/clients/base/abstractClient.d.ts +99 -0
  44. package/dist/clients/base/abstractClient.js +98 -0
  45. package/dist/clients/base/abstractClient.js.map +1 -0
  46. package/dist/clients/base/httpClient.d.ts +24 -0
  47. package/dist/clients/base/httpClient.js +147 -0
  48. package/dist/clients/base/httpClient.js.map +1 -0
  49. package/{src/clients/base/index.ts → dist/clients/base/index.d.ts} +0 -1
  50. package/dist/clients/base/index.js +28 -0
  51. package/dist/clients/base/index.js.map +1 -0
  52. package/dist/clients/base/modelDetection.d.ts +41 -0
  53. package/dist/clients/base/modelDetection.js +88 -0
  54. package/dist/clients/base/modelDetection.js.map +1 -0
  55. package/dist/clients/base/responseProcessor.d.ts +45 -0
  56. package/dist/clients/base/responseProcessor.js +495 -0
  57. package/dist/clients/base/responseProcessor.js.map +1 -0
  58. package/dist/clients/factory/clientFactory.d.ts +23 -0
  59. package/dist/clients/factory/clientFactory.js +50 -0
  60. package/dist/clients/factory/clientFactory.js.map +1 -0
  61. package/{src/clients/factory/index.ts → dist/clients/factory/index.d.ts} +0 -1
  62. package/dist/clients/factory/index.js +24 -0
  63. package/dist/clients/factory/index.js.map +1 -0
  64. package/{src/clients/implementations/index.ts → dist/clients/implementations/index.d.ts} +0 -1
  65. package/dist/clients/implementations/index.js +24 -0
  66. package/dist/clients/implementations/index.js.map +1 -0
  67. package/dist/clients/implementations/openRouterClient.d.ts +69 -0
  68. package/dist/clients/implementations/openRouterClient.js +294 -0
  69. package/dist/clients/implementations/openRouterClient.js.map +1 -0
  70. package/dist/clients/openRouterClient.d.ts +42 -0
  71. package/dist/clients/openRouterClient.js +580 -0
  72. package/dist/clients/openRouterClient.js.map +1 -0
  73. package/{src/clients/openRouterClientWrapper.ts → dist/clients/openRouterClientWrapper.d.ts} +2 -24
  74. package/dist/clients/openRouterClientWrapper.js +64 -0
  75. package/dist/clients/openRouterClientWrapper.js.map +1 -0
  76. package/dist/clients/utils/directoryStructure.d.ts +14 -0
  77. package/dist/clients/utils/directoryStructure.js +48 -0
  78. package/dist/clients/utils/directoryStructure.js.map +1 -0
  79. package/{src/clients/utils/index.ts → dist/clients/utils/index.d.ts} +0 -1
  80. package/dist/clients/utils/index.js +31 -0
  81. package/dist/clients/utils/index.js.map +1 -0
  82. package/dist/clients/utils/languageDetection.d.ts +13 -0
  83. package/dist/clients/utils/languageDetection.js +46 -0
  84. package/dist/clients/utils/languageDetection.js.map +1 -0
  85. package/dist/clients/utils/promptFormatter.d.ts +37 -0
  86. package/dist/clients/utils/promptFormatter.js +150 -0
  87. package/dist/clients/utils/promptFormatter.js.map +1 -0
  88. package/{src/clients/utils/promptLoader.ts → dist/clients/utils/promptLoader.d.ts} +1 -27
  89. package/dist/clients/utils/promptLoader.js +49 -0
  90. package/dist/clients/utils/promptLoader.js.map +1 -0
  91. package/dist/clients/utils/tokenCounter.d.ts +81 -0
  92. package/dist/clients/utils/tokenCounter.js +184 -0
  93. package/dist/clients/utils/tokenCounter.js.map +1 -0
  94. package/dist/core/ApiClientSelector.d.ts +8 -0
  95. package/dist/core/ApiClientSelector.js +29 -0
  96. package/dist/core/ApiClientSelector.js.map +1 -0
  97. package/dist/core/ConfigurationService.d.ts +307 -0
  98. package/dist/core/ConfigurationService.js +516 -0
  99. package/dist/core/ConfigurationService.js.map +1 -0
  100. package/dist/core/ConsolidationService.d.ts +99 -0
  101. package/dist/core/ConsolidationService.js +341 -0
  102. package/dist/core/ConsolidationService.js.map +1 -0
  103. package/dist/core/InteractiveDisplayManager.d.ts +22 -0
  104. package/dist/core/InteractiveDisplayManager.js +70 -0
  105. package/dist/core/InteractiveDisplayManager.js.map +1 -0
  106. package/dist/core/OutputManager.d.ts +26 -0
  107. package/dist/core/OutputManager.js +217 -0
  108. package/dist/core/OutputManager.js.map +1 -0
  109. package/dist/core/ReviewGenerator.d.ts +13 -0
  110. package/dist/core/ReviewGenerator.js +102 -0
  111. package/dist/core/ReviewGenerator.js.map +1 -0
  112. package/dist/core/fileDiscovery.d.ts +35 -0
  113. package/dist/core/fileDiscovery.js +202 -0
  114. package/dist/core/fileDiscovery.js.map +1 -0
  115. package/dist/core/handlers/EstimationHandler.d.ts +18 -0
  116. package/dist/core/handlers/EstimationHandler.js +110 -0
  117. package/dist/core/handlers/EstimationHandler.js.map +1 -0
  118. package/dist/core/handlers/FileProcessingHandler.d.ts +31 -0
  119. package/dist/core/handlers/FileProcessingHandler.js +164 -0
  120. package/dist/core/handlers/FileProcessingHandler.js.map +1 -0
  121. package/dist/core/handlers/OutputHandler.d.ts +27 -0
  122. package/dist/core/handlers/OutputHandler.js +127 -0
  123. package/dist/core/handlers/OutputHandler.js.map +1 -0
  124. package/dist/core/handlers/ReviewExecutor.d.ts +32 -0
  125. package/dist/core/handlers/ReviewExecutor.js +111 -0
  126. package/dist/core/handlers/ReviewExecutor.js.map +1 -0
  127. package/dist/core/reviewOrchestrator.d.ts +24 -0
  128. package/dist/core/reviewOrchestrator.js +354 -0
  129. package/dist/core/reviewOrchestrator.js.map +1 -0
  130. package/dist/core/utils/ModelInfoUtils.d.ts +16 -0
  131. package/dist/core/utils/ModelInfoUtils.js +54 -0
  132. package/dist/core/utils/ModelInfoUtils.js.map +1 -0
  133. package/{src/formatters/outputFormatter.ts → dist/formatters/outputFormatter.d.ts} +2 -33
  134. package/dist/formatters/outputFormatter.js +65 -0
  135. package/dist/formatters/outputFormatter.js.map +1 -0
  136. package/dist/formatters/utils/IssueFormatters.d.ts +20 -0
  137. package/dist/formatters/utils/IssueFormatters.js +67 -0
  138. package/dist/formatters/utils/IssueFormatters.js.map +1 -0
  139. package/dist/formatters/utils/JsonFormatter.d.ts +13 -0
  140. package/dist/formatters/utils/JsonFormatter.js +57 -0
  141. package/dist/formatters/utils/JsonFormatter.js.map +1 -0
  142. package/dist/formatters/utils/MarkdownFormatters.d.ts +51 -0
  143. package/dist/formatters/utils/MarkdownFormatters.js +456 -0
  144. package/dist/formatters/utils/MarkdownFormatters.js.map +1 -0
  145. package/dist/formatters/utils/MetadataFormatter.d.ts +65 -0
  146. package/dist/formatters/utils/MetadataFormatter.js +219 -0
  147. package/dist/formatters/utils/MetadataFormatter.js.map +1 -0
  148. package/dist/formatters/utils/ModelInfoExtractor.d.ts +33 -0
  149. package/dist/formatters/utils/ModelInfoExtractor.js +111 -0
  150. package/dist/formatters/utils/ModelInfoExtractor.js.map +1 -0
  151. package/dist/index.d.ts +1 -0
  152. package/dist/index.js.map +1 -0
  153. package/dist/plugins/PluginInterface.d.ts +44 -0
  154. package/dist/plugins/PluginInterface.js +9 -0
  155. package/dist/plugins/PluginInterface.js.map +1 -0
  156. package/dist/plugins/PluginManager.d.ts +51 -0
  157. package/dist/plugins/PluginManager.js +151 -0
  158. package/dist/plugins/PluginManager.js.map +1 -0
  159. package/dist/prompts/PromptManager.d.ts +30 -0
  160. package/dist/prompts/PromptManager.js +62 -0
  161. package/dist/prompts/PromptManager.js.map +1 -0
  162. package/dist/prompts/cache/PromptCache.d.ts +32 -0
  163. package/dist/prompts/cache/PromptCache.js +48 -0
  164. package/dist/prompts/cache/PromptCache.js.map +1 -0
  165. package/dist/runtime/auth/service.d.ts +2 -0
  166. package/dist/runtime/auth/service.js +41 -0
  167. package/dist/runtime/auth/service.js.map +1 -0
  168. package/dist/runtime/auth/session.d.ts +5 -0
  169. package/dist/runtime/auth/session.js +87 -0
  170. package/dist/runtime/auth/session.js.map +1 -0
  171. package/dist/runtime/auth/types.d.ts +9 -0
  172. package/dist/runtime/auth/types.js +3 -0
  173. package/dist/runtime/auth/types.js.map +1 -0
  174. package/dist/runtime/cliEntry.d.ts +1 -0
  175. package/dist/runtime/cliEntry.js +276 -0
  176. package/dist/runtime/cliEntry.js.map +1 -0
  177. package/dist/runtime/debug/logManager.d.ts +5 -0
  178. package/dist/runtime/debug/logManager.js +31 -0
  179. package/dist/runtime/debug/logManager.js.map +1 -0
  180. package/dist/runtime/errors.d.ts +5 -0
  181. package/dist/runtime/errors.js +15 -0
  182. package/dist/runtime/errors.js.map +1 -0
  183. package/dist/runtime/fileCollector.d.ts +14 -0
  184. package/dist/runtime/fileCollector.js +381 -0
  185. package/dist/runtime/fileCollector.js.map +1 -0
  186. package/dist/runtime/manifest.d.ts +1 -0
  187. package/dist/runtime/manifest.js +65 -0
  188. package/dist/runtime/manifest.js.map +1 -0
  189. package/dist/runtime/openrouterProxy.d.ts +4 -0
  190. package/dist/runtime/openrouterProxy.js +43 -0
  191. package/dist/runtime/openrouterProxy.js.map +1 -0
  192. package/dist/runtime/preprod/batchStreamer.d.ts +54 -0
  193. package/dist/runtime/preprod/batchStreamer.js +159 -0
  194. package/dist/runtime/preprod/batchStreamer.js.map +1 -0
  195. package/dist/runtime/preprod/crEdgeServiceClient.d.ts +30 -0
  196. package/dist/runtime/preprod/crEdgeServiceClient.js +133 -0
  197. package/dist/runtime/preprod/crEdgeServiceClient.js.map +1 -0
  198. package/dist/runtime/preprod/progressTracker.d.ts +21 -0
  199. package/dist/runtime/preprod/progressTracker.js +80 -0
  200. package/dist/runtime/preprod/progressTracker.js.map +1 -0
  201. package/dist/runtime/preprod/webCheck.d.ts +1 -0
  202. package/dist/runtime/preprod/webCheck.js +102 -0
  203. package/dist/runtime/preprod/webCheck.js.map +1 -0
  204. package/dist/runtime/proxyConfig.d.ts +6 -0
  205. package/dist/runtime/proxyConfig.js +86 -0
  206. package/dist/runtime/proxyConfig.js.map +1 -0
  207. package/dist/runtime/proxyEnvironment.d.ts +3 -0
  208. package/dist/runtime/proxyEnvironment.js +63 -0
  209. package/dist/runtime/proxyEnvironment.js.map +1 -0
  210. package/dist/runtime/reportMerge.d.ts +30 -0
  211. package/dist/runtime/reportMerge.js +70 -0
  212. package/dist/runtime/reportMerge.js.map +1 -0
  213. package/dist/runtime/reporting/markdownReportBuilder.d.ts +17 -0
  214. package/dist/runtime/reporting/markdownReportBuilder.js +154 -0
  215. package/dist/runtime/reporting/markdownReportBuilder.js.map +1 -0
  216. package/dist/runtime/reporting/reportDataCollector.d.ts +31 -0
  217. package/dist/runtime/reporting/reportDataCollector.js +170 -0
  218. package/dist/runtime/reporting/reportDataCollector.js.map +1 -0
  219. package/dist/runtime/reporting/summaryGenerator.d.ts +10 -0
  220. package/dist/runtime/reporting/summaryGenerator.js +67 -0
  221. package/dist/runtime/reporting/summaryGenerator.js.map +1 -0
  222. package/dist/runtime/reviewPipeline.d.ts +61 -0
  223. package/dist/runtime/reviewPipeline.js +231 -0
  224. package/dist/runtime/reviewPipeline.js.map +1 -0
  225. package/dist/runtime/runAiCodeReview.d.ts +36 -0
  226. package/dist/runtime/runAiCodeReview.js +409 -0
  227. package/dist/runtime/runAiCodeReview.js.map +1 -0
  228. package/dist/runtime/runtimeConfig.d.ts +4 -0
  229. package/dist/runtime/runtimeConfig.js +7 -0
  230. package/dist/runtime/runtimeConfig.js.map +1 -0
  231. package/dist/runtime/ui/Layout.d.ts +11 -0
  232. package/dist/runtime/ui/Layout.js +47 -0
  233. package/dist/runtime/ui/Layout.js.map +1 -0
  234. package/dist/runtime/ui/RuntimeApp.d.ts +6 -0
  235. package/dist/runtime/ui/RuntimeApp.js +275 -0
  236. package/dist/runtime/ui/RuntimeApp.js.map +1 -0
  237. package/dist/runtime/ui/inkModules.d.ts +10 -0
  238. package/dist/runtime/ui/inkModules.js +63 -0
  239. package/dist/runtime/ui/inkModules.js.map +1 -0
  240. package/dist/runtime/ui/screens/AuthScreen.d.ts +6 -0
  241. package/dist/runtime/ui/screens/AuthScreen.js +67 -0
  242. package/dist/runtime/ui/screens/AuthScreen.js.map +1 -0
  243. package/dist/runtime/ui/screens/ModeSelection.d.ts +11 -0
  244. package/dist/runtime/ui/screens/ModeSelection.js +169 -0
  245. package/dist/runtime/ui/screens/ModeSelection.js.map +1 -0
  246. package/dist/runtime/ui/screens/ProgressScreen.d.ts +21 -0
  247. package/dist/runtime/ui/screens/ProgressScreen.js +86 -0
  248. package/dist/runtime/ui/screens/ProgressScreen.js.map +1 -0
  249. package/dist/runtime/ui/screens/ResultsScreen.d.ts +7 -0
  250. package/dist/runtime/ui/screens/ResultsScreen.js +34 -0
  251. package/dist/runtime/ui/screens/ResultsScreen.js.map +1 -0
  252. package/dist/strategies/ArchitecturalReviewStrategy.d.ts +29 -0
  253. package/dist/strategies/ArchitecturalReviewStrategy.js +42 -0
  254. package/dist/strategies/ArchitecturalReviewStrategy.js.map +1 -0
  255. package/dist/strategies/CodingTestReviewStrategy.d.ts +194 -0
  256. package/dist/strategies/CodingTestReviewStrategy.js +681 -0
  257. package/dist/strategies/CodingTestReviewStrategy.js.map +1 -0
  258. package/dist/strategies/ConsolidatedReviewStrategy.d.ts +25 -0
  259. package/dist/strategies/ConsolidatedReviewStrategy.js +45 -0
  260. package/dist/strategies/ConsolidatedReviewStrategy.js.map +1 -0
  261. package/dist/strategies/ExtractPatternsReviewStrategy.d.ts +30 -0
  262. package/dist/strategies/ExtractPatternsReviewStrategy.js +51 -0
  263. package/dist/strategies/ExtractPatternsReviewStrategy.js.map +1 -0
  264. package/dist/strategies/MultiPassReviewStrategy.d.ts +86 -0
  265. package/dist/strategies/MultiPassReviewStrategy.js +590 -0
  266. package/dist/strategies/MultiPassReviewStrategy.js.map +1 -0
  267. package/dist/strategies/ReviewStrategy.d.ts +45 -0
  268. package/dist/strategies/ReviewStrategy.js +24 -0
  269. package/dist/strategies/ReviewStrategy.js.map +1 -0
  270. package/dist/strategies/StrategyFactory.d.ts +19 -0
  271. package/dist/strategies/StrategyFactory.js +72 -0
  272. package/dist/strategies/StrategyFactory.js.map +1 -0
  273. package/{src/strategies/index.ts → dist/strategies/index.d.ts} +0 -1
  274. package/dist/strategies/index.js +30 -0
  275. package/dist/strategies/index.js.map +1 -0
  276. package/dist/tokenizers/baseTokenizer.d.ts +25 -0
  277. package/dist/tokenizers/baseTokenizer.js +48 -0
  278. package/dist/tokenizers/baseTokenizer.js.map +1 -0
  279. package/dist/tokenizers/gptTokenizer.d.ts +7 -0
  280. package/dist/tokenizers/gptTokenizer.js +28 -0
  281. package/dist/tokenizers/gptTokenizer.js.map +1 -0
  282. package/{src/tokenizers/index.ts → dist/tokenizers/index.d.ts} +0 -1
  283. package/dist/tokenizers/index.js +24 -0
  284. package/dist/tokenizers/index.js.map +1 -0
  285. package/dist/types/apiResponses.d.ts +39 -0
  286. package/dist/types/apiResponses.js +9 -0
  287. package/dist/types/apiResponses.js.map +1 -0
  288. package/dist/types/cli.d.ts +22 -0
  289. package/dist/types/cli.js +3 -0
  290. package/dist/types/cli.js.map +1 -0
  291. package/{src/types/common.ts → dist/types/common.d.ts} +2 -19
  292. package/dist/types/common.js +14 -0
  293. package/dist/types/common.js.map +1 -0
  294. package/dist/types/configuration.d.ts +682 -0
  295. package/dist/types/configuration.js +65 -0
  296. package/dist/types/configuration.js.map +1 -0
  297. package/dist/types/review.d.ts +318 -0
  298. package/dist/types/review.js +8 -0
  299. package/dist/types/review.js.map +1 -0
  300. package/dist/types/reviewSchema.d.ts +543 -0
  301. package/{src/types/reviewSchema.ts → dist/types/reviewSchema.js} +44 -104
  302. package/dist/types/reviewSchema.js.map +1 -0
  303. package/dist/types/structuredReview.d.ts +119 -0
  304. package/dist/types/structuredReview.js +6 -0
  305. package/dist/types/structuredReview.js.map +1 -0
  306. package/dist/types/tokenAnalysis.d.ts +44 -0
  307. package/dist/types/tokenAnalysis.js +4 -0
  308. package/dist/types/tokenAnalysis.js.map +1 -0
  309. package/dist/utils/FileReader.d.ts +33 -0
  310. package/dist/utils/FileReader.js +88 -0
  311. package/dist/utils/FileReader.js.map +1 -0
  312. package/dist/utils/FileWriter.d.ts +26 -0
  313. package/dist/utils/FileWriter.js +76 -0
  314. package/dist/utils/FileWriter.js.map +1 -0
  315. package/dist/utils/PathGenerator.d.ts +30 -0
  316. package/dist/utils/PathGenerator.js +82 -0
  317. package/dist/utils/PathGenerator.js.map +1 -0
  318. package/dist/utils/api/apiUtils.d.ts +3 -0
  319. package/dist/utils/api/apiUtils.js +20 -0
  320. package/dist/utils/api/apiUtils.js.map +1 -0
  321. package/dist/utils/api/index.js +18 -0
  322. package/dist/utils/api/index.js.map +1 -0
  323. package/dist/utils/apiErrorHandler.d.ts +130 -0
  324. package/dist/utils/apiErrorHandler.js +256 -0
  325. package/dist/utils/apiErrorHandler.js.map +1 -0
  326. package/dist/utils/ciDataCollector.d.ts +51 -0
  327. package/dist/utils/ciDataCollector.js +197 -0
  328. package/dist/utils/ciDataCollector.js.map +1 -0
  329. package/dist/utils/codingTestConfigLoader.d.ts +66 -0
  330. package/dist/utils/codingTestConfigLoader.js +420 -0
  331. package/dist/utils/codingTestConfigLoader.js.map +1 -0
  332. package/dist/utils/dependencies/aiDependencyAnalyzer.d.ts +30 -0
  333. package/dist/utils/dependencies/aiDependencyAnalyzer.js +343 -0
  334. package/dist/utils/dependencies/aiDependencyAnalyzer.js.map +1 -0
  335. package/dist/utils/detection/frameworkDetector.d.ts +43 -0
  336. package/dist/utils/detection/frameworkDetector.js +850 -0
  337. package/dist/utils/detection/frameworkDetector.js.map +1 -0
  338. package/{src/utils/detection/index.ts → dist/utils/detection/index.d.ts} +0 -1
  339. package/dist/utils/detection/index.js +28 -0
  340. package/dist/utils/detection/index.js.map +1 -0
  341. package/dist/utils/detection/projectTypeDetector.d.ts +27 -0
  342. package/dist/utils/detection/projectTypeDetector.js +469 -0
  343. package/dist/utils/detection/projectTypeDetector.js.map +1 -0
  344. package/dist/utils/diagramGenerator.d.ts +49 -0
  345. package/dist/utils/diagramGenerator.js +218 -0
  346. package/dist/utils/diagramGenerator.js.map +1 -0
  347. package/dist/utils/errorLogger.d.ts +24 -0
  348. package/dist/utils/errorLogger.js +59 -0
  349. package/dist/utils/errorLogger.js.map +1 -0
  350. package/dist/utils/estimationUtils.d.ts +139 -0
  351. package/dist/utils/estimationUtils.js +329 -0
  352. package/dist/utils/estimationUtils.js.map +1 -0
  353. package/dist/utils/fileFilters.d.ts +72 -0
  354. package/dist/utils/fileFilters.js +338 -0
  355. package/dist/utils/fileFilters.js.map +1 -0
  356. package/dist/utils/fileSystem.d.ts +22 -0
  357. package/dist/utils/fileSystem.js +45 -0
  358. package/dist/utils/fileSystem.js.map +1 -0
  359. package/{src/utils/index.ts → dist/utils/index.d.ts} +0 -14
  360. package/dist/utils/index.js +52 -0
  361. package/dist/utils/index.js.map +1 -0
  362. package/dist/utils/logger.d.ts +77 -0
  363. package/dist/utils/logger.js +271 -0
  364. package/dist/utils/logger.js.map +1 -0
  365. package/dist/utils/pathValidator.d.ts +40 -0
  366. package/dist/utils/pathValidator.js +98 -0
  367. package/dist/utils/pathValidator.js.map +1 -0
  368. package/{src/utils/priorityFilter.ts → dist/utils/priorityFilter.d.ts} +1 -26
  369. package/dist/utils/priorityFilter.js +54 -0
  370. package/dist/utils/priorityFilter.js.map +1 -0
  371. package/dist/utils/projectDocs.d.ts +47 -0
  372. package/dist/utils/projectDocs.js +158 -0
  373. package/dist/utils/projectDocs.js.map +1 -0
  374. package/dist/utils/promptPaths.d.ts +6 -0
  375. package/dist/utils/promptPaths.js +33 -0
  376. package/dist/utils/promptPaths.js.map +1 -0
  377. package/dist/utils/promptTemplateManager.d.ts +34 -0
  378. package/dist/utils/promptTemplateManager.js +141 -0
  379. package/dist/utils/promptTemplateManager.js.map +1 -0
  380. package/dist/utils/review/consolidateReview.d.ts +15 -0
  381. package/dist/utils/review/consolidateReview.js +481 -0
  382. package/dist/utils/review/consolidateReview.js.map +1 -0
  383. package/dist/utils/review/fixDisplay.d.ts +20 -0
  384. package/dist/utils/review/fixDisplay.js +84 -0
  385. package/dist/utils/review/fixDisplay.js.map +1 -0
  386. package/dist/utils/review/fixImplementation.d.ts +28 -0
  387. package/dist/utils/review/fixImplementation.js +60 -0
  388. package/dist/utils/review/fixImplementation.js.map +1 -0
  389. package/dist/utils/review/index.d.ts +13 -0
  390. package/dist/utils/review/index.js +50 -0
  391. package/dist/utils/review/index.js.map +1 -0
  392. package/dist/utils/review/interactiveProcessing.d.ts +25 -0
  393. package/dist/utils/review/interactiveProcessing.js +251 -0
  394. package/dist/utils/review/interactiveProcessing.js.map +1 -0
  395. package/dist/utils/review/progressTracker.d.ts +106 -0
  396. package/dist/utils/review/progressTracker.js +227 -0
  397. package/dist/utils/review/progressTracker.js.map +1 -0
  398. package/dist/utils/review/reviewExtraction.d.ts +31 -0
  399. package/dist/utils/review/reviewExtraction.js +324 -0
  400. package/dist/utils/review/reviewExtraction.js.map +1 -0
  401. package/dist/utils/review/types.d.ts +45 -0
  402. package/dist/utils/review/types.js +18 -0
  403. package/dist/utils/review/types.js.map +1 -0
  404. package/{src/utils/reviewActionHandler.ts → dist/utils/reviewActionHandler.d.ts} +0 -2
  405. package/dist/utils/reviewActionHandler.js +34 -0
  406. package/dist/utils/reviewActionHandler.js.map +1 -0
  407. package/dist/utils/reviewParser.d.ts +34 -0
  408. package/dist/utils/reviewParser.js +218 -0
  409. package/dist/utils/reviewParser.js.map +1 -0
  410. package/dist/utils/sanitizer.d.ts +82 -0
  411. package/dist/utils/sanitizer.js +239 -0
  412. package/dist/utils/sanitizer.js.map +1 -0
  413. package/dist/utils/smartFileSelector.d.ts +50 -0
  414. package/dist/utils/smartFileSelector.js +261 -0
  415. package/dist/utils/smartFileSelector.js.map +1 -0
  416. package/dist/utils/templateLoader.d.ts +44 -0
  417. package/dist/utils/templateLoader.js +431 -0
  418. package/dist/utils/templateLoader.js.map +1 -0
  419. package/dist/utils/treeGenerator.d.ts +12 -0
  420. package/dist/utils/treeGenerator.js +133 -0
  421. package/dist/utils/treeGenerator.js.map +1 -0
  422. package/package.json +5 -1
  423. package/.cr-aia.yml +0 -23
  424. package/.crignore +0 -0
  425. package/docs/opt-in-full-context.md +0 -27
  426. package/reports/cr-cr-aia-17-11-2025-20-13.md +0 -354
  427. package/src/analysis/FindingsExtractor.ts +0 -431
  428. package/src/analysis/ai-detection/analyzers/BaseAnalyzer.ts +0 -267
  429. package/src/analysis/ai-detection/analyzers/DocumentationAnalyzer.ts +0 -622
  430. package/src/analysis/ai-detection/analyzers/GitHistoryAnalyzer.ts +0 -430
  431. package/src/analysis/ai-detection/core/AIDetectionEngine.ts +0 -467
  432. package/src/analysis/ai-detection/types/DetectionTypes.ts +0 -406
  433. package/src/analysis/ai-detection/utils/SubmissionConverter.ts +0 -390
  434. package/src/analysis/context/ReviewContext.ts +0 -378
  435. package/src/analysis/tokens/TokenAnalyzer.ts +0 -747
  436. package/src/clients/base/abstractClient.ts +0 -190
  437. package/src/clients/base/httpClient.ts +0 -160
  438. package/src/clients/base/modelDetection.ts +0 -107
  439. package/src/clients/base/responseProcessor.ts +0 -586
  440. package/src/clients/factory/clientFactory.ts +0 -55
  441. package/src/clients/implementations/openRouterClient.ts +0 -413
  442. package/src/clients/openRouterClient.ts +0 -870
  443. package/src/clients/utils/directoryStructure.ts +0 -52
  444. package/src/clients/utils/languageDetection.ts +0 -44
  445. package/src/clients/utils/promptFormatter.ts +0 -182
  446. package/src/clients/utils/tokenCounter.ts +0 -297
  447. package/src/core/ApiClientSelector.ts +0 -37
  448. package/src/core/ConfigurationService.ts +0 -591
  449. package/src/core/ConsolidationService.ts +0 -423
  450. package/src/core/InteractiveDisplayManager.ts +0 -81
  451. package/src/core/OutputManager.ts +0 -275
  452. package/src/core/ReviewGenerator.ts +0 -140
  453. package/src/core/fileDiscovery.ts +0 -237
  454. package/src/core/handlers/EstimationHandler.ts +0 -104
  455. package/src/core/handlers/FileProcessingHandler.ts +0 -210
  456. package/src/core/handlers/OutputHandler.ts +0 -125
  457. package/src/core/handlers/ReviewExecutor.ts +0 -104
  458. package/src/core/reviewOrchestrator.ts +0 -333
  459. package/src/core/utils/ModelInfoUtils.ts +0 -56
  460. package/src/formatters/utils/IssueFormatters.ts +0 -83
  461. package/src/formatters/utils/JsonFormatter.ts +0 -77
  462. package/src/formatters/utils/MarkdownFormatters.ts +0 -609
  463. package/src/formatters/utils/MetadataFormatter.ts +0 -269
  464. package/src/formatters/utils/ModelInfoExtractor.ts +0 -115
  465. package/src/index.ts +0 -25
  466. package/src/plugins/PluginInterface.ts +0 -50
  467. package/src/plugins/PluginManager.ts +0 -126
  468. package/src/prompts/PromptManager.ts +0 -69
  469. package/src/prompts/cache/PromptCache.ts +0 -50
  470. package/src/prompts/promptText/common/variables/css-frameworks.json +0 -33
  471. package/src/prompts/promptText/common/variables/framework-versions.json +0 -45
  472. package/src/prompts/promptText/frameworks/react/comprehensive.hbs +0 -19
  473. package/src/prompts/promptText/languages/css/comprehensive.hbs +0 -18
  474. package/src/prompts/promptText/languages/generic/comprehensive.hbs +0 -20
  475. package/src/prompts/promptText/languages/html/comprehensive.hbs +0 -18
  476. package/src/prompts/promptText/languages/javascript/comprehensive.hbs +0 -18
  477. package/src/prompts/promptText/languages/python/comprehensive.hbs +0 -18
  478. package/src/prompts/promptText/languages/typescript/comprehensive.hbs +0 -18
  479. package/src/runtime/auth/service.ts +0 -58
  480. package/src/runtime/auth/session.ts +0 -103
  481. package/src/runtime/auth/types.ts +0 -11
  482. package/src/runtime/cliEntry.ts +0 -214
  483. package/src/runtime/debug/logManager.ts +0 -37
  484. package/src/runtime/errors.ts +0 -13
  485. package/src/runtime/fileCollector.ts +0 -495
  486. package/src/runtime/manifest.ts +0 -64
  487. package/src/runtime/openrouterProxy.ts +0 -45
  488. package/src/runtime/preprod/webCheck.ts +0 -104
  489. package/src/runtime/proxyConfig.ts +0 -94
  490. package/src/runtime/proxyEnvironment.ts +0 -71
  491. package/src/runtime/reportMerge.ts +0 -102
  492. package/src/runtime/reporting/markdownReportBuilder.ts +0 -138
  493. package/src/runtime/reporting/reportDataCollector.ts +0 -234
  494. package/src/runtime/reporting/summaryGenerator.ts +0 -86
  495. package/src/runtime/reviewPipeline.ts +0 -200
  496. package/src/runtime/runAiCodeReview.ts +0 -308
  497. package/src/runtime/runtimeConfig.ts +0 -5
  498. package/src/runtime/ui/Layout.tsx +0 -57
  499. package/src/runtime/ui/RuntimeApp.tsx +0 -262
  500. package/src/runtime/ui/inkModules.ts +0 -73
  501. package/src/runtime/ui/screens/AuthScreen.tsx +0 -128
  502. package/src/runtime/ui/screens/ModeSelection.tsx +0 -185
  503. package/src/runtime/ui/screens/ProgressScreen.tsx +0 -110
  504. package/src/runtime/ui/screens/ResultsScreen.tsx +0 -103
  505. package/src/strategies/ArchitecturalReviewStrategy.ts +0 -54
  506. package/src/strategies/CodingTestReviewStrategy.ts +0 -920
  507. package/src/strategies/ConsolidatedReviewStrategy.ts +0 -59
  508. package/src/strategies/ExtractPatternsReviewStrategy.ts +0 -64
  509. package/src/strategies/MultiPassReviewStrategy.ts +0 -785
  510. package/src/strategies/ReviewStrategy.ts +0 -64
  511. package/src/strategies/StrategyFactory.ts +0 -79
  512. package/src/tokenizers/baseTokenizer.ts +0 -61
  513. package/src/tokenizers/gptTokenizer.ts +0 -27
  514. package/src/types/apiResponses.ts +0 -40
  515. package/src/types/cli.ts +0 -24
  516. package/src/types/configuration.ts +0 -201
  517. package/src/types/handlebars.d.ts +0 -5
  518. package/src/types/patch.d.ts +0 -25
  519. package/src/types/review.ts +0 -312
  520. package/src/types/reviewContext.d.ts +0 -65
  521. package/src/types/structuredReview.ts +0 -167
  522. package/src/types/tokenAnalysis.ts +0 -56
  523. package/src/utils/FileReader.ts +0 -93
  524. package/src/utils/FileWriter.ts +0 -76
  525. package/src/utils/PathGenerator.ts +0 -97
  526. package/src/utils/api/apiUtils.ts +0 -14
  527. package/src/utils/apiErrorHandler.ts +0 -287
  528. package/src/utils/ciDataCollector.ts +0 -252
  529. package/src/utils/codingTestConfigLoader.ts +0 -466
  530. package/src/utils/dependencies/aiDependencyAnalyzer.ts +0 -454
  531. package/src/utils/detection/frameworkDetector.ts +0 -879
  532. package/src/utils/detection/projectTypeDetector.ts +0 -518
  533. package/src/utils/diagramGenerator.ts +0 -206
  534. package/src/utils/errorLogger.ts +0 -60
  535. package/src/utils/estimationUtils.ts +0 -407
  536. package/src/utils/fileFilters.ts +0 -373
  537. package/src/utils/fileSystem.ts +0 -57
  538. package/src/utils/logger.ts +0 -290
  539. package/src/utils/pathValidator.ts +0 -98
  540. package/src/utils/projectDocs.ts +0 -189
  541. package/src/utils/promptPaths.ts +0 -29
  542. package/src/utils/promptTemplateManager.ts +0 -157
  543. package/src/utils/review/consolidateReview.ts +0 -553
  544. package/src/utils/review/fixDisplay.ts +0 -100
  545. package/src/utils/review/fixImplementation.ts +0 -61
  546. package/src/utils/review/index.ts +0 -36
  547. package/src/utils/review/interactiveProcessing.ts +0 -294
  548. package/src/utils/review/progressTracker.ts +0 -296
  549. package/src/utils/review/reviewExtraction.ts +0 -382
  550. package/src/utils/review/types.ts +0 -46
  551. package/src/utils/reviewParser.ts +0 -253
  552. package/src/utils/sanitizer.ts +0 -238
  553. package/src/utils/smartFileSelector.ts +0 -255
  554. package/src/utils/templateLoader.ts +0 -514
  555. package/src/utils/treeGenerator.ts +0 -153
  556. package/tsconfig.build.json +0 -14
  557. package/tsconfig.json +0 -59
  558. /package/{src/utils/api/index.ts → dist/utils/api/index.d.ts} +0 -0
@@ -1,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
- }