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,252 +0,0 @@
1
- /**
2
- * @fileoverview CI/CD data collector utility.
3
- *
4
- * This module collects CI/CD data (type check errors, lint errors) to include
5
- * in code reviews. It supports both project-wide and per-file analysis.
6
- */
7
-
8
- import { exec } from 'node:child_process';
9
- import path from 'node:path';
10
- import { promisify } from 'node:util';
11
- import logger from './logger';
12
-
13
- const execAsync = promisify(exec);
14
-
15
- /**
16
- * CI data structure
17
- */
18
- export interface CIData {
19
- /**
20
- * Number of type check errors
21
- */
22
- typeCheckErrors?: number;
23
-
24
- /**
25
- * Number of lint errors
26
- */
27
- lintErrors?: number;
28
-
29
- /**
30
- * Raw type check output
31
- */
32
- typeCheckOutput?: string;
33
-
34
- /**
35
- * Raw lint output
36
- */
37
- lintOutput?: string;
38
-
39
- /**
40
- * Per-file error counts
41
- */
42
- fileErrors?: {
43
- [filePath: string]: {
44
- typeCheckErrors: number;
45
- lintErrors: number;
46
- typeCheckMessages?: string[];
47
- lintMessages?: string[];
48
- };
49
- };
50
- }
51
-
52
- /**
53
- * Collect CI/CD data for the current project
54
- * @param projectPath Path to the project root
55
- * @returns Promise resolving to CI data
56
- */
57
- export async function collectCIData(projectPath: string): Promise<CIData> {
58
- const ciData: CIData = {
59
- fileErrors: {},
60
- };
61
-
62
- // Collect type check errors
63
- try {
64
- logger.info('Running type check to collect error count...');
65
- const { stdout, stderr } = await execAsync('npm run build:types', {
66
- cwd: projectPath,
67
- env: { ...process.env, CI: 'true' },
68
- });
69
-
70
- ciData.typeCheckOutput = stdout + stderr;
71
- parseTypeCheckErrors(ciData.typeCheckOutput, ciData, projectPath);
72
- } catch (error: any) {
73
- // Type check failed - extract error count from output
74
- const output = error.stdout + error.stderr;
75
- ciData.typeCheckOutput = output;
76
- parseTypeCheckErrors(output, ciData, projectPath);
77
- }
78
-
79
- // Collect lint errors
80
- try {
81
- logger.info('Running lint to collect error count...');
82
- const { stdout, stderr } = await execAsync('npm run lint', {
83
- cwd: projectPath,
84
- env: { ...process.env, CI: 'true' },
85
- });
86
-
87
- ciData.lintOutput = stdout + stderr;
88
- parseLintErrors(ciData.lintOutput, ciData, projectPath);
89
- } catch (error: any) {
90
- // Lint failed - extract error count from output
91
- const output = error.stdout + error.stderr;
92
- ciData.lintOutput = output;
93
- parseLintErrors(output, ciData, projectPath);
94
- }
95
-
96
- // Calculate totals
97
- calculateTotals(ciData);
98
-
99
- return ciData;
100
- }
101
-
102
- /**
103
- * Parse TypeScript errors from output
104
- */
105
- function parseTypeCheckErrors(output: string, ciData: CIData, projectPath: string): void {
106
- const lines = output.split('\n');
107
-
108
- for (const line of lines) {
109
- // TypeScript error format: src/file.ts(line,col): error TS2322: ...
110
- const match = line.match(/^(.+?)\((\d+),(\d+)\): error (TS\d+): (.+)$/);
111
- if (match) {
112
- const [, file, lineNum, colNum, errorCode, message] = match;
113
- const relativeFile = path.relative(projectPath, file);
114
-
115
- if (!ciData.fileErrors?.[relativeFile]) {
116
- ciData.fileErrors![relativeFile] = {
117
- typeCheckErrors: 0,
118
- lintErrors: 0,
119
- typeCheckMessages: [],
120
- lintMessages: [],
121
- };
122
- }
123
-
124
- const fileError = ciData.fileErrors?.[relativeFile];
125
- if (fileError) {
126
- fileError.typeCheckErrors++;
127
- fileError.typeCheckMessages?.push(`Line ${lineNum}:${colNum} - ${errorCode}: ${message}`);
128
- }
129
- }
130
- }
131
- }
132
-
133
- /**
134
- * Parse ESLint errors from output
135
- */
136
- function parseLintErrors(output: string, ciData: CIData, projectPath: string): void {
137
- const lines = output.split('\n');
138
- let currentFile: string | null = null;
139
-
140
- for (const line of lines) {
141
- // ESLint file header format: /path/to/file.ts
142
- if (line.match(/^[/\\]/)) {
143
- currentFile = path.relative(projectPath, line.trim());
144
- if (!ciData.fileErrors?.[currentFile]) {
145
- ciData.fileErrors![currentFile] = {
146
- typeCheckErrors: 0,
147
- lintErrors: 0,
148
- typeCheckMessages: [],
149
- lintMessages: [],
150
- };
151
- }
152
- }
153
- // ESLint error format: line:col error message rule-name
154
- else if (currentFile && line.match(/^\s*\d+:\d+\s+error\s+/)) {
155
- const match = line.match(/^\s*(\d+):(\d+)\s+error\s+(.+?)\s+(.+)$/);
156
- if (match) {
157
- const [, lineNum, colNum, message, rule] = match;
158
- const fileError = ciData.fileErrors?.[currentFile];
159
- if (fileError) {
160
- fileError.lintErrors++;
161
- fileError.lintMessages?.push(`Line ${lineNum}:${colNum} - ${message} (${rule})`);
162
- }
163
- }
164
- }
165
- }
166
- }
167
-
168
- /**
169
- * Calculate total error counts from per-file data
170
- */
171
- function calculateTotals(ciData: CIData): void {
172
- let totalTypeCheckErrors = 0;
173
- let totalLintErrors = 0;
174
-
175
- for (const fileData of Object.values(ciData.fileErrors || {})) {
176
- totalTypeCheckErrors += fileData.typeCheckErrors;
177
- totalLintErrors += fileData.lintErrors;
178
- }
179
-
180
- ciData.typeCheckErrors = totalTypeCheckErrors;
181
- ciData.lintErrors = totalLintErrors;
182
-
183
- logger.info(
184
- `Found ${totalTypeCheckErrors} type check errors and ${totalLintErrors} lint errors across all files`,
185
- );
186
- }
187
-
188
- /**
189
- * Format CI data for inclusion in prompts
190
- * @param ciData CI data to format
191
- * @param specificFile Optional specific file to focus on
192
- * @returns Formatted string for prompt inclusion
193
- */
194
- export function formatCIDataForPrompt(ciData: CIData, specificFile?: string): string {
195
- const lines: string[] = [];
196
-
197
- lines.push('## CI/CD Status');
198
- lines.push('');
199
-
200
- // Overall summary
201
- lines.push(`- Total TypeScript errors: ${ciData.typeCheckErrors || 0}`);
202
- lines.push(`- Total ESLint errors: ${ciData.lintErrors || 0}`);
203
-
204
- // Per-file data
205
- if (ciData.fileErrors && Object.keys(ciData.fileErrors).length > 0) {
206
- lines.push('');
207
- lines.push('### Errors by file:');
208
-
209
- // If reviewing a specific file, show only that file's errors
210
- if (specificFile && ciData.fileErrors[specificFile]) {
211
- const fileData = ciData.fileErrors[specificFile];
212
- lines.push('');
213
- lines.push(`**${specificFile}**:`);
214
- lines.push(`- TypeScript errors: ${fileData.typeCheckErrors}`);
215
- if (fileData.typeCheckMessages && fileData.typeCheckMessages.length > 0) {
216
- lines.push(' TypeScript issues:');
217
- fileData.typeCheckMessages.slice(0, 5).forEach((msg) => {
218
- lines.push(` - ${msg}`);
219
- });
220
- }
221
- lines.push(`- ESLint errors: ${fileData.lintErrors}`);
222
- if (fileData.lintMessages && fileData.lintMessages.length > 0) {
223
- lines.push(' ESLint issues:');
224
- fileData.lintMessages.slice(0, 5).forEach((msg) => {
225
- lines.push(` - ${msg}`);
226
- });
227
- }
228
- } else {
229
- // Show top 5 files with most errors
230
- const fileList = Object.entries(ciData.fileErrors)
231
- .map(([file, data]) => ({
232
- file,
233
- totalErrors: data.typeCheckErrors + data.lintErrors,
234
- ...data,
235
- }))
236
- .sort((a, b) => b.totalErrors - a.totalErrors)
237
- .slice(0, 5);
238
-
239
- for (const fileInfo of fileList) {
240
- lines.push('');
241
- lines.push(`**${fileInfo.file}**: ${fileInfo.totalErrors} total errors`);
242
- lines.push(` - TypeScript: ${fileInfo.typeCheckErrors} errors`);
243
- lines.push(` - ESLint: ${fileInfo.lintErrors} errors`);
244
- }
245
- }
246
- }
247
-
248
- lines.push('');
249
- lines.push('Please include fixes for these CI/CD issues in your code review.');
250
-
251
- return lines.join('\n');
252
- }
@@ -1,466 +0,0 @@
1
- /**
2
- * @fileoverview Coding test configuration loader utility.
3
- *
4
- * This module provides utilities for loading and parsing coding test configuration
5
- * files in various formats (JSON, YAML) and converting them to the internal
6
- * configuration format used by the CodingTestReviewStrategy.
7
- */
8
-
9
- import * as fs from 'node:fs';
10
- import * as path from 'node:path';
11
- import type { CodingTestConfig } from '../strategies/CodingTestReviewStrategy';
12
- import logger from './logger';
13
-
14
- /**
15
- * Extended configuration interface that includes additional metadata
16
- */
17
- export interface ExtendedCodingTestConfig extends CodingTestConfig {
18
- /** Evaluation section with criteria and descriptions */
19
- evaluation?: {
20
- criteria?: Record<string, number | { weight: number; description?: string }>;
21
- };
22
-
23
- /** Additional evaluation criteria beyond the standard ones */
24
- additionalCriteria?: Record<
25
- string,
26
- {
27
- weight: number;
28
- description: string;
29
- }
30
- >;
31
-
32
- /** Expected deliverables checklist */
33
- deliverables?: string[];
34
-
35
- /** Technical requirements */
36
- technicalRequirements?: Record<string, string>;
37
-
38
- /** Bonus points for optional features */
39
- bonusPoints?: string[];
40
-
41
- /** Common pitfalls to avoid */
42
- commonPitfalls?: string[];
43
- }
44
-
45
- /**
46
- * Load coding test configuration from a file
47
- * @param configPath Path to the configuration file
48
- * @returns Parsed configuration object
49
- */
50
- export function loadCodingTestConfig(configPath: string): ExtendedCodingTestConfig {
51
- try {
52
- if (!fs.existsSync(configPath)) {
53
- throw new Error(`Configuration file not found: ${configPath}`);
54
- }
55
-
56
- const configContent = fs.readFileSync(configPath, 'utf8');
57
- const extension = path.extname(configPath).toLowerCase();
58
-
59
- let config: ExtendedCodingTestConfig;
60
-
61
- switch (extension) {
62
- case '.json':
63
- config = JSON.parse(configContent);
64
- break;
65
- case '.yaml':
66
- case '.yml':
67
- // Simple YAML parser for basic structures - in production, use js-yaml
68
- config = parseBasicYaml(configContent);
69
- break;
70
- default:
71
- throw new Error(`Unsupported configuration file format: ${extension}`);
72
- }
73
-
74
- // Validate and normalize the configuration
75
- return validateAndNormalizeConfig(config, configPath);
76
- } catch (error) {
77
- logger.error(`Failed to load coding test configuration from ${configPath}:`, error);
78
- throw error;
79
- }
80
- }
81
-
82
- /**
83
- * Load configuration from URL
84
- * @param configUrl URL to the configuration file
85
- * @returns Parsed configuration object
86
- */
87
- export async function loadCodingTestConfigFromUrl(
88
- configUrl: string,
89
- ): Promise<ExtendedCodingTestConfig> {
90
- try {
91
- const response = await fetch(configUrl);
92
- if (!response.ok) {
93
- throw new Error(`Failed to fetch configuration from ${configUrl}: ${response.statusText}`);
94
- }
95
-
96
- const configContent = await response.text();
97
- const urlParts = new URL(configUrl);
98
- const extension = path.extname(urlParts.pathname).toLowerCase();
99
-
100
- let config: ExtendedCodingTestConfig;
101
-
102
- switch (extension) {
103
- case '.json':
104
- config = JSON.parse(configContent);
105
- break;
106
- case '.yaml':
107
- case '.yml':
108
- // Simple YAML parser for basic structures - in production, use js-yaml
109
- config = parseBasicYaml(configContent);
110
- break;
111
- default: {
112
- // Try to detect format from content-type header
113
- const contentType = response.headers.get('content-type') || '';
114
- if (contentType.includes('application/json')) {
115
- config = JSON.parse(configContent);
116
- } else if (contentType.includes('text/yaml') || contentType.includes('application/yaml')) {
117
- // Simple YAML parser for basic structures - in production, use js-yaml
118
- config = parseBasicYaml(configContent);
119
- } else {
120
- throw new Error(`Unable to determine configuration format from URL: ${configUrl}`);
121
- }
122
- }
123
- }
124
-
125
- // Validate and normalize the configuration
126
- return validateAndNormalizeConfig(config, configUrl);
127
- } catch (error) {
128
- logger.error(`Failed to load coding test configuration from URL ${configUrl}:`, error);
129
- throw error;
130
- }
131
- }
132
-
133
- /**
134
- * Validate and normalize configuration
135
- * @param config Raw configuration object
136
- * @param source Source path or URL for error messages
137
- * @returns Validated and normalized configuration
138
- */
139
- function validateAndNormalizeConfig(
140
- config: ExtendedCodingTestConfig,
141
- source: string,
142
- ): ExtendedCodingTestConfig {
143
- const normalized: ExtendedCodingTestConfig = {
144
- ...config,
145
- };
146
-
147
- // Validate required sections
148
- if (!normalized.assignment) {
149
- throw new Error(`Missing 'assignment' section in configuration: ${source}`);
150
- }
151
-
152
- if (!normalized.evaluation) {
153
- throw new Error(`Missing 'evaluation' section in configuration: ${source}`);
154
- }
155
-
156
- // Normalize assignment defaults
157
- if (normalized.assignment) {
158
- normalized.assignment = {
159
- type: 'coding-challenge',
160
- difficulty: 'mid',
161
- timeLimit: 120,
162
- ...normalized.assignment,
163
- };
164
- }
165
-
166
- // Normalize evaluation criteria
167
- if (normalized.evaluation?.criteria) {
168
- const weights: number[] = [];
169
- Object.values(normalized.evaluation.criteria).forEach((criterion) => {
170
- if (typeof criterion === 'number') {
171
- weights.push(criterion);
172
- } else if (criterion && typeof criterion === 'object' && 'weight' in criterion) {
173
- weights.push(criterion.weight);
174
- }
175
- });
176
-
177
- const criteriaTotal = weights.reduce((sum, weight) => sum + weight, 0);
178
-
179
- if (Math.abs(criteriaTotal - 100) > 0.1) {
180
- logger.warn(
181
- `Criteria weights sum to ${criteriaTotal}, expected 100 (source: ${source}). Normalizing...`,
182
- );
183
-
184
- // Normalize weights to sum to 100
185
- const normalizationFactor = 100 / criteriaTotal;
186
- Object.keys(normalized.evaluation.criteria).forEach((key) => {
187
- const criterion = normalized.evaluation?.criteria?.[key];
188
- if (typeof criterion === 'number' && normalized.evaluation?.criteria) {
189
- normalized.evaluation.criteria[key] = Math.round(criterion * normalizationFactor);
190
- } else if (criterion && typeof criterion === 'object' && 'weight' in criterion) {
191
- criterion.weight = Math.round(criterion.weight * normalizationFactor);
192
- }
193
- });
194
- }
195
- }
196
-
197
- // Normalize scoring defaults
198
- if (normalized.scoring) {
199
- normalized.scoring = {
200
- system: 'numeric',
201
- maxScore: 100,
202
- passingThreshold: 70,
203
- breakdown: true,
204
- ...normalized.scoring,
205
- };
206
- }
207
-
208
- // Normalize feedback defaults
209
- if (normalized.feedback) {
210
- normalized.feedback = {
211
- level: 'detailed',
212
- includeExamples: true,
213
- includeSuggestions: true,
214
- includeResources: false,
215
- ...normalized.feedback,
216
- };
217
- }
218
-
219
- // Validate constraints
220
- if (normalized.constraints) {
221
- if (
222
- normalized.constraints.allowedLibraries &&
223
- !Array.isArray(normalized.constraints.allowedLibraries)
224
- ) {
225
- throw new Error(`'allowedLibraries' must be an array in configuration: ${source}`);
226
- }
227
-
228
- if (
229
- normalized.constraints.forbiddenPatterns &&
230
- !Array.isArray(normalized.constraints.forbiddenPatterns)
231
- ) {
232
- throw new Error(`'forbiddenPatterns' must be an array in configuration: ${source}`);
233
- }
234
- }
235
-
236
- // Validate additional criteria if present
237
- if (normalized.additionalCriteria) {
238
- Object.entries(normalized.additionalCriteria).forEach(([key, criterion]) => {
239
- if (typeof criterion !== 'object' || typeof criterion.weight !== 'number') {
240
- throw new Error(`Invalid additional criterion '${key}' in configuration: ${source}`);
241
- }
242
-
243
- if (criterion.weight < 0 || criterion.weight > 100) {
244
- throw new Error(
245
- `Invalid weight for additional criterion '${key}' in configuration: ${source}`,
246
- );
247
- }
248
- });
249
- }
250
-
251
- return normalized;
252
- }
253
-
254
- /**
255
- * Convert extended configuration to basic CodingTestConfig
256
- * @param extendedConfig Extended configuration object
257
- * @returns Basic configuration object
258
- */
259
- export function convertToCodingTestConfig(
260
- extendedConfig: ExtendedCodingTestConfig,
261
- ): CodingTestConfig {
262
- const basicConfig: CodingTestConfig = {
263
- assignment: extendedConfig.assignment,
264
- criteria: {},
265
- scoring: extendedConfig.scoring,
266
- feedback: extendedConfig.feedback,
267
- constraints: extendedConfig.constraints,
268
- };
269
-
270
- // Convert evaluation criteria
271
- if (extendedConfig.evaluation?.criteria) {
272
- Object.entries(extendedConfig.evaluation.criteria).forEach(([key, criterion]) => {
273
- if (typeof criterion === 'number') {
274
- (basicConfig.criteria as Record<string, number>)[key] = criterion;
275
- } else if (criterion && typeof criterion === 'object' && 'weight' in criterion) {
276
- (basicConfig.criteria as Record<string, number>)[key] = criterion.weight;
277
- }
278
- });
279
- }
280
-
281
- // Merge additional criteria
282
- if (extendedConfig.additionalCriteria) {
283
- Object.entries(extendedConfig.additionalCriteria).forEach(([key, criterion]) => {
284
- (basicConfig.criteria as Record<string, number>)[key] = criterion.weight;
285
- });
286
- }
287
-
288
- return basicConfig;
289
- }
290
-
291
- /**
292
- * Create a default configuration for testing
293
- * @returns Default coding test configuration
294
- */
295
- export function createDefaultCodingTestConfig(): CodingTestConfig {
296
- return {
297
- assignment: {
298
- type: 'coding-challenge',
299
- difficulty: 'mid',
300
- timeLimit: 120,
301
- title: 'Coding Challenge',
302
- description: 'Complete the coding challenge according to the provided requirements.',
303
- requirements: [
304
- 'Implement the core functionality',
305
- 'Include proper error handling',
306
- 'Write comprehensive tests',
307
- 'Provide clear documentation',
308
- ],
309
- },
310
- criteria: {
311
- correctness: 30,
312
- codeQuality: 25,
313
- architecture: 20,
314
- performance: 15,
315
- testing: 10,
316
- },
317
- scoring: {
318
- system: 'numeric',
319
- maxScore: 100,
320
- passingThreshold: 70,
321
- breakdown: true,
322
- },
323
- feedback: {
324
- level: 'detailed',
325
- includeExamples: true,
326
- includeSuggestions: true,
327
- includeResources: false,
328
- },
329
- constraints: {
330
- targetLanguage: 'typescript',
331
- forbiddenPatterns: ['eval', 'Function'],
332
- },
333
- };
334
- }
335
-
336
- /**
337
- * Validate assignment text and extract basic requirements
338
- * @param assignmentText Raw assignment text
339
- * @returns Parsed assignment information
340
- */
341
- export function parseAssignmentText(assignmentText: string): {
342
- title?: string;
343
- description?: string;
344
- requirements?: string[];
345
- } {
346
- const lines = assignmentText
347
- .split('\n')
348
- .map((line) => line.trim())
349
- .filter((line) => line);
350
-
351
- let title: string | undefined;
352
- let description: string | undefined;
353
- const requirements: string[] = [];
354
-
355
- let currentSection = 'description';
356
- const descriptionLines: string[] = [];
357
-
358
- for (const line of lines) {
359
- // Check for title (first line or line starting with #)
360
- if (!title && (line.startsWith('#') || lines.indexOf(line) === 0)) {
361
- title = line.replace(/^#+\s*/, '').trim();
362
- continue;
363
- }
364
-
365
- // Check for requirements section
366
- if (line.toLowerCase().includes('requirement') || line.toLowerCase().includes('task')) {
367
- currentSection = 'requirements';
368
- continue;
369
- }
370
-
371
- // Parse requirements (lines starting with - or numbers)
372
- if (
373
- currentSection === 'requirements' &&
374
- (line.startsWith('-') || line.startsWith('*') || /^\d+\./.test(line))
375
- ) {
376
- const requirement = line.replace(/^[-*\d.)\s]+/, '').trim();
377
- if (requirement) {
378
- requirements.push(requirement);
379
- }
380
- continue;
381
- }
382
-
383
- // Add to description
384
- if (currentSection === 'description') {
385
- descriptionLines.push(line);
386
- }
387
- }
388
-
389
- if (descriptionLines.length > 0) {
390
- description = descriptionLines.join('\n');
391
- }
392
-
393
- return {
394
- title,
395
- description,
396
- requirements: requirements.length > 0 ? requirements : undefined,
397
- };
398
- }
399
-
400
- /**
401
- * Simple YAML parser for basic configuration structures
402
- * Note: This is a minimal implementation. For production use, consider js-yaml
403
- * @param yamlContent YAML content string
404
- * @returns Parsed object
405
- */
406
- function parseBasicYaml(yamlContent: string): ExtendedCodingTestConfig {
407
- try {
408
- // This is a very basic YAML parser - in production, use js-yaml
409
- // For now, we'll try to parse as JSON if possible, or create a basic structure
410
-
411
- // Remove comments and clean up
412
- const _lines = yamlContent
413
- .split('\n')
414
- .map((line) => line.replace(/#.*$/, '').trim())
415
- .filter((line) => line.length > 0);
416
-
417
- // For this POC, we'll return a default structure if YAML parsing fails
418
- // In production, implement proper YAML parsing or use js-yaml
419
- return {
420
- assignment: {
421
- type: 'take-home',
422
- difficulty: 'mid',
423
- timeLimit: 240,
424
- title: 'Events Platform API Development',
425
- description: 'Build a RESTful API for an events platform',
426
- requirements: [
427
- 'Implement user authentication',
428
- 'Create event management endpoints',
429
- 'Add event attendance functionality',
430
- ],
431
- },
432
- evaluation: {
433
- criteria: {
434
- correctness: 35,
435
- codeQuality: 25,
436
- architecture: 20,
437
- performance: 10,
438
- testing: 10,
439
- },
440
- },
441
- scoring: {
442
- system: 'numeric',
443
- maxScore: 100,
444
- passingThreshold: 75,
445
- breakdown: true,
446
- },
447
- feedback: {
448
- level: 'comprehensive',
449
- includeExamples: true,
450
- includeSuggestions: true,
451
- includeResources: true,
452
- },
453
- constraints: {
454
- targetLanguage: 'typescript',
455
- framework: 'express',
456
- allowedLibraries: ['express', 'joi', 'jsonwebtoken'],
457
- forbiddenPatterns: ['eval', 'Function'],
458
- },
459
- };
460
- } catch (_error) {
461
- logger.warn('Failed to parse YAML content, using default configuration');
462
- throw new Error(
463
- 'YAML parsing failed. Please use JSON format or install js-yaml for YAML support.',
464
- );
465
- }
466
- }