codereview-aia 0.2.0 → 0.2.2

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 (435) hide show
  1. package/dist/index.js +0 -7
  2. package/dist/index.js.map +1 -1
  3. package/dist/runtime/api/batcher.d.ts +20 -0
  4. package/dist/runtime/api/batcher.js +52 -0
  5. package/dist/runtime/api/batcher.js.map +1 -0
  6. package/dist/runtime/api/edgeClient.d.ts +102 -0
  7. package/dist/runtime/api/edgeClient.js +162 -0
  8. package/dist/runtime/api/edgeClient.js.map +1 -0
  9. package/dist/runtime/api/index.d.ts +2 -0
  10. package/dist/runtime/api/index.js +9 -0
  11. package/dist/runtime/api/index.js.map +1 -0
  12. package/dist/runtime/cliEntry.js +24 -76
  13. package/dist/runtime/cliEntry.js.map +1 -1
  14. package/dist/runtime/errors.d.ts +13 -3
  15. package/dist/runtime/errors.js +31 -8
  16. package/dist/runtime/errors.js.map +1 -1
  17. package/dist/runtime/llm/index.d.ts +1 -0
  18. package/dist/runtime/llm/index.js +6 -0
  19. package/dist/runtime/llm/index.js.map +1 -0
  20. package/dist/runtime/llm/openRouterClient.d.ts +13 -0
  21. package/dist/runtime/llm/openRouterClient.js +187 -0
  22. package/dist/runtime/llm/openRouterClient.js.map +1 -0
  23. package/dist/runtime/phpFileResolver.d.ts +14 -0
  24. package/dist/runtime/phpFileResolver.js +231 -0
  25. package/dist/runtime/phpFileResolver.js.map +1 -0
  26. package/dist/runtime/phpcsParser.d.ts +10 -0
  27. package/dist/runtime/phpcsParser.js +35 -0
  28. package/dist/runtime/phpcsParser.js.map +1 -0
  29. package/dist/runtime/phpcsRunner.d.ts +32 -0
  30. package/dist/runtime/phpcsRunner.js +62 -0
  31. package/dist/runtime/phpcsRunner.js.map +1 -0
  32. package/dist/runtime/reportWriter.d.ts +17 -0
  33. package/dist/runtime/reportWriter.js +80 -0
  34. package/dist/runtime/reportWriter.js.map +1 -0
  35. package/dist/runtime/reviewPipeline.d.ts +14 -36
  36. package/dist/runtime/reviewPipeline.js +146 -199
  37. package/dist/runtime/reviewPipeline.js.map +1 -1
  38. package/dist/runtime/ui/RuntimeApp.js +23 -154
  39. package/dist/runtime/ui/RuntimeApp.js.map +1 -1
  40. package/dist/runtime/ui/screens/AuthScreen.d.ts +2 -3
  41. package/dist/runtime/ui/screens/AuthScreen.js +7 -53
  42. package/dist/runtime/ui/screens/AuthScreen.js.map +1 -1
  43. package/dist/runtime/ui/screens/ModeSelection.d.ts +1 -2
  44. package/dist/runtime/ui/screens/ModeSelection.js +14 -139
  45. package/dist/runtime/ui/screens/ModeSelection.js.map +1 -1
  46. package/dist/runtime/ui/screens/ProgressScreen.d.ts +5 -13
  47. package/dist/runtime/ui/screens/ProgressScreen.js +24 -61
  48. package/dist/runtime/ui/screens/ProgressScreen.js.map +1 -1
  49. package/dist/runtime/ui/screens/ResultsScreen.js +7 -17
  50. package/dist/runtime/ui/screens/ResultsScreen.js.map +1 -1
  51. package/package.json +4 -44
  52. package/dist/analysis/FindingsExtractor.d.ts +0 -105
  53. package/dist/analysis/FindingsExtractor.js +0 -363
  54. package/dist/analysis/FindingsExtractor.js.map +0 -1
  55. package/dist/analysis/ai-detection/analyzers/BaseAnalyzer.d.ts +0 -111
  56. package/dist/analysis/ai-detection/analyzers/BaseAnalyzer.js +0 -215
  57. package/dist/analysis/ai-detection/analyzers/BaseAnalyzer.js.map +0 -1
  58. package/dist/analysis/ai-detection/analyzers/DocumentationAnalyzer.d.ts +0 -142
  59. package/dist/analysis/ai-detection/analyzers/DocumentationAnalyzer.js +0 -503
  60. package/dist/analysis/ai-detection/analyzers/DocumentationAnalyzer.js.map +0 -1
  61. package/dist/analysis/ai-detection/analyzers/GitHistoryAnalyzer.d.ts +0 -88
  62. package/dist/analysis/ai-detection/analyzers/GitHistoryAnalyzer.js +0 -343
  63. package/dist/analysis/ai-detection/analyzers/GitHistoryAnalyzer.js.map +0 -1
  64. package/dist/analysis/ai-detection/core/AIDetectionEngine.d.ts +0 -104
  65. package/dist/analysis/ai-detection/core/AIDetectionEngine.js +0 -369
  66. package/dist/analysis/ai-detection/core/AIDetectionEngine.js.map +0 -1
  67. package/dist/analysis/ai-detection/types/DetectionTypes.d.ts +0 -364
  68. package/dist/analysis/ai-detection/types/DetectionTypes.js +0 -32
  69. package/dist/analysis/ai-detection/types/DetectionTypes.js.map +0 -1
  70. package/dist/analysis/ai-detection/utils/SubmissionConverter.d.ts +0 -97
  71. package/dist/analysis/ai-detection/utils/SubmissionConverter.js +0 -339
  72. package/dist/analysis/ai-detection/utils/SubmissionConverter.js.map +0 -1
  73. package/dist/analysis/context/ReviewContext.d.ts +0 -184
  74. package/dist/analysis/context/ReviewContext.js +0 -294
  75. package/dist/analysis/context/ReviewContext.js.map +0 -1
  76. package/dist/analysis/context/index.d.ts +0 -6
  77. package/dist/analysis/context/index.js +0 -23
  78. package/dist/analysis/context/index.js.map +0 -1
  79. package/dist/analysis/index.d.ts +0 -7
  80. package/dist/analysis/index.js +0 -24
  81. package/dist/analysis/index.js.map +0 -1
  82. package/dist/analysis/static/wpPhpcsRunner.d.ts +0 -11
  83. package/dist/analysis/static/wpPhpcsRunner.js +0 -219
  84. package/dist/analysis/static/wpPhpcsRunner.js.map +0 -1
  85. package/dist/analysis/tokens/TokenAnalysisFormatter.d.ts +0 -27
  86. package/dist/analysis/tokens/TokenAnalysisFormatter.js +0 -143
  87. package/dist/analysis/tokens/TokenAnalysisFormatter.js.map +0 -1
  88. package/dist/analysis/tokens/TokenAnalyzer.d.ts +0 -155
  89. package/dist/analysis/tokens/TokenAnalyzer.js +0 -502
  90. package/dist/analysis/tokens/TokenAnalyzer.js.map +0 -1
  91. package/dist/analysis/tokens/index.d.ts +0 -7
  92. package/dist/analysis/tokens/index.js +0 -24
  93. package/dist/analysis/tokens/index.js.map +0 -1
  94. package/dist/clients/base/abstractClient.d.ts +0 -99
  95. package/dist/clients/base/abstractClient.js +0 -98
  96. package/dist/clients/base/abstractClient.js.map +0 -1
  97. package/dist/clients/base/httpClient.d.ts +0 -24
  98. package/dist/clients/base/httpClient.js +0 -147
  99. package/dist/clients/base/httpClient.js.map +0 -1
  100. package/dist/clients/base/index.d.ts +0 -11
  101. package/dist/clients/base/index.js +0 -28
  102. package/dist/clients/base/index.js.map +0 -1
  103. package/dist/clients/base/modelDetection.d.ts +0 -41
  104. package/dist/clients/base/modelDetection.js +0 -88
  105. package/dist/clients/base/modelDetection.js.map +0 -1
  106. package/dist/clients/base/responseProcessor.d.ts +0 -45
  107. package/dist/clients/base/responseProcessor.js +0 -495
  108. package/dist/clients/base/responseProcessor.js.map +0 -1
  109. package/dist/clients/factory/clientFactory.d.ts +0 -23
  110. package/dist/clients/factory/clientFactory.js +0 -50
  111. package/dist/clients/factory/clientFactory.js.map +0 -1
  112. package/dist/clients/factory/index.d.ts +0 -7
  113. package/dist/clients/factory/index.js +0 -24
  114. package/dist/clients/factory/index.js.map +0 -1
  115. package/dist/clients/implementations/index.d.ts +0 -7
  116. package/dist/clients/implementations/index.js +0 -24
  117. package/dist/clients/implementations/index.js.map +0 -1
  118. package/dist/clients/implementations/openRouterClient.d.ts +0 -69
  119. package/dist/clients/implementations/openRouterClient.js +0 -294
  120. package/dist/clients/implementations/openRouterClient.js.map +0 -1
  121. package/dist/clients/openRouterClient.d.ts +0 -42
  122. package/dist/clients/openRouterClient.js +0 -580
  123. package/dist/clients/openRouterClient.js.map +0 -1
  124. package/dist/clients/openRouterClientWrapper.d.ts +0 -22
  125. package/dist/clients/openRouterClientWrapper.js +0 -64
  126. package/dist/clients/openRouterClientWrapper.js.map +0 -1
  127. package/dist/clients/utils/directoryStructure.d.ts +0 -14
  128. package/dist/clients/utils/directoryStructure.js +0 -48
  129. package/dist/clients/utils/directoryStructure.js.map +0 -1
  130. package/dist/clients/utils/index.d.ts +0 -10
  131. package/dist/clients/utils/index.js +0 -31
  132. package/dist/clients/utils/index.js.map +0 -1
  133. package/dist/clients/utils/languageDetection.d.ts +0 -13
  134. package/dist/clients/utils/languageDetection.js +0 -46
  135. package/dist/clients/utils/languageDetection.js.map +0 -1
  136. package/dist/clients/utils/promptFormatter.d.ts +0 -37
  137. package/dist/clients/utils/promptFormatter.js +0 -150
  138. package/dist/clients/utils/promptFormatter.js.map +0 -1
  139. package/dist/clients/utils/promptLoader.d.ts +0 -27
  140. package/dist/clients/utils/promptLoader.js +0 -49
  141. package/dist/clients/utils/promptLoader.js.map +0 -1
  142. package/dist/clients/utils/tokenCounter.d.ts +0 -81
  143. package/dist/clients/utils/tokenCounter.js +0 -184
  144. package/dist/clients/utils/tokenCounter.js.map +0 -1
  145. package/dist/core/ApiClientSelector.d.ts +0 -8
  146. package/dist/core/ApiClientSelector.js +0 -29
  147. package/dist/core/ApiClientSelector.js.map +0 -1
  148. package/dist/core/ConfigurationService.d.ts +0 -307
  149. package/dist/core/ConfigurationService.js +0 -516
  150. package/dist/core/ConfigurationService.js.map +0 -1
  151. package/dist/core/ConsolidationService.d.ts +0 -99
  152. package/dist/core/ConsolidationService.js +0 -341
  153. package/dist/core/ConsolidationService.js.map +0 -1
  154. package/dist/core/InteractiveDisplayManager.d.ts +0 -22
  155. package/dist/core/InteractiveDisplayManager.js +0 -70
  156. package/dist/core/InteractiveDisplayManager.js.map +0 -1
  157. package/dist/core/OutputManager.d.ts +0 -26
  158. package/dist/core/OutputManager.js +0 -217
  159. package/dist/core/OutputManager.js.map +0 -1
  160. package/dist/core/ReviewGenerator.d.ts +0 -13
  161. package/dist/core/ReviewGenerator.js +0 -102
  162. package/dist/core/ReviewGenerator.js.map +0 -1
  163. package/dist/core/fileDiscovery.d.ts +0 -35
  164. package/dist/core/fileDiscovery.js +0 -202
  165. package/dist/core/fileDiscovery.js.map +0 -1
  166. package/dist/core/handlers/EstimationHandler.d.ts +0 -18
  167. package/dist/core/handlers/EstimationHandler.js +0 -110
  168. package/dist/core/handlers/EstimationHandler.js.map +0 -1
  169. package/dist/core/handlers/FileProcessingHandler.d.ts +0 -31
  170. package/dist/core/handlers/FileProcessingHandler.js +0 -164
  171. package/dist/core/handlers/FileProcessingHandler.js.map +0 -1
  172. package/dist/core/handlers/OutputHandler.d.ts +0 -27
  173. package/dist/core/handlers/OutputHandler.js +0 -127
  174. package/dist/core/handlers/OutputHandler.js.map +0 -1
  175. package/dist/core/handlers/ReviewExecutor.d.ts +0 -32
  176. package/dist/core/handlers/ReviewExecutor.js +0 -111
  177. package/dist/core/handlers/ReviewExecutor.js.map +0 -1
  178. package/dist/core/reviewOrchestrator.d.ts +0 -24
  179. package/dist/core/reviewOrchestrator.js +0 -354
  180. package/dist/core/reviewOrchestrator.js.map +0 -1
  181. package/dist/core/utils/ModelInfoUtils.d.ts +0 -16
  182. package/dist/core/utils/ModelInfoUtils.js +0 -54
  183. package/dist/core/utils/ModelInfoUtils.js.map +0 -1
  184. package/dist/formatters/outputFormatter.d.ts +0 -31
  185. package/dist/formatters/outputFormatter.js +0 -65
  186. package/dist/formatters/outputFormatter.js.map +0 -1
  187. package/dist/formatters/utils/IssueFormatters.d.ts +0 -20
  188. package/dist/formatters/utils/IssueFormatters.js +0 -67
  189. package/dist/formatters/utils/IssueFormatters.js.map +0 -1
  190. package/dist/formatters/utils/JsonFormatter.d.ts +0 -13
  191. package/dist/formatters/utils/JsonFormatter.js +0 -57
  192. package/dist/formatters/utils/JsonFormatter.js.map +0 -1
  193. package/dist/formatters/utils/MarkdownFormatters.d.ts +0 -51
  194. package/dist/formatters/utils/MarkdownFormatters.js +0 -456
  195. package/dist/formatters/utils/MarkdownFormatters.js.map +0 -1
  196. package/dist/formatters/utils/MetadataFormatter.d.ts +0 -65
  197. package/dist/formatters/utils/MetadataFormatter.js +0 -219
  198. package/dist/formatters/utils/MetadataFormatter.js.map +0 -1
  199. package/dist/formatters/utils/ModelInfoExtractor.d.ts +0 -33
  200. package/dist/formatters/utils/ModelInfoExtractor.js +0 -111
  201. package/dist/formatters/utils/ModelInfoExtractor.js.map +0 -1
  202. package/dist/plugins/PluginInterface.d.ts +0 -44
  203. package/dist/plugins/PluginInterface.js +0 -9
  204. package/dist/plugins/PluginInterface.js.map +0 -1
  205. package/dist/plugins/PluginManager.d.ts +0 -51
  206. package/dist/plugins/PluginManager.js +0 -151
  207. package/dist/plugins/PluginManager.js.map +0 -1
  208. package/dist/prompts/PromptManager.d.ts +0 -30
  209. package/dist/prompts/PromptManager.js +0 -62
  210. package/dist/prompts/PromptManager.js.map +0 -1
  211. package/dist/prompts/cache/PromptCache.d.ts +0 -32
  212. package/dist/prompts/cache/PromptCache.js +0 -48
  213. package/dist/prompts/cache/PromptCache.js.map +0 -1
  214. package/dist/runtime/auth/service.d.ts +0 -2
  215. package/dist/runtime/auth/service.js +0 -41
  216. package/dist/runtime/auth/service.js.map +0 -1
  217. package/dist/runtime/auth/session.d.ts +0 -5
  218. package/dist/runtime/auth/session.js +0 -87
  219. package/dist/runtime/auth/session.js.map +0 -1
  220. package/dist/runtime/auth/types.d.ts +0 -9
  221. package/dist/runtime/auth/types.js +0 -3
  222. package/dist/runtime/auth/types.js.map +0 -1
  223. package/dist/runtime/fileCollector.d.ts +0 -14
  224. package/dist/runtime/fileCollector.js +0 -381
  225. package/dist/runtime/fileCollector.js.map +0 -1
  226. package/dist/runtime/manifest.d.ts +0 -1
  227. package/dist/runtime/manifest.js +0 -65
  228. package/dist/runtime/manifest.js.map +0 -1
  229. package/dist/runtime/openrouterProxy.d.ts +0 -4
  230. package/dist/runtime/openrouterProxy.js +0 -43
  231. package/dist/runtime/openrouterProxy.js.map +0 -1
  232. package/dist/runtime/preprod/batchStreamer.d.ts +0 -54
  233. package/dist/runtime/preprod/batchStreamer.js +0 -159
  234. package/dist/runtime/preprod/batchStreamer.js.map +0 -1
  235. package/dist/runtime/preprod/crEdgeServiceClient.d.ts +0 -30
  236. package/dist/runtime/preprod/crEdgeServiceClient.js +0 -133
  237. package/dist/runtime/preprod/crEdgeServiceClient.js.map +0 -1
  238. package/dist/runtime/preprod/progressTracker.d.ts +0 -21
  239. package/dist/runtime/preprod/progressTracker.js +0 -80
  240. package/dist/runtime/preprod/progressTracker.js.map +0 -1
  241. package/dist/runtime/preprod/webCheck.d.ts +0 -1
  242. package/dist/runtime/preprod/webCheck.js +0 -102
  243. package/dist/runtime/preprod/webCheck.js.map +0 -1
  244. package/dist/runtime/proxyConfig.d.ts +0 -6
  245. package/dist/runtime/proxyConfig.js +0 -86
  246. package/dist/runtime/proxyConfig.js.map +0 -1
  247. package/dist/runtime/proxyEnvironment.d.ts +0 -3
  248. package/dist/runtime/proxyEnvironment.js +0 -63
  249. package/dist/runtime/proxyEnvironment.js.map +0 -1
  250. package/dist/runtime/reportMerge.d.ts +0 -30
  251. package/dist/runtime/reportMerge.js +0 -70
  252. package/dist/runtime/reportMerge.js.map +0 -1
  253. package/dist/runtime/reporting/markdownReportBuilder.d.ts +0 -17
  254. package/dist/runtime/reporting/markdownReportBuilder.js +0 -154
  255. package/dist/runtime/reporting/markdownReportBuilder.js.map +0 -1
  256. package/dist/runtime/reporting/reportDataCollector.d.ts +0 -31
  257. package/dist/runtime/reporting/reportDataCollector.js +0 -170
  258. package/dist/runtime/reporting/reportDataCollector.js.map +0 -1
  259. package/dist/runtime/reporting/summaryGenerator.d.ts +0 -10
  260. package/dist/runtime/reporting/summaryGenerator.js +0 -67
  261. package/dist/runtime/reporting/summaryGenerator.js.map +0 -1
  262. package/dist/runtime/runAiCodeReview.d.ts +0 -36
  263. package/dist/runtime/runAiCodeReview.js +0 -409
  264. package/dist/runtime/runAiCodeReview.js.map +0 -1
  265. package/dist/runtime/runtimeConfig.d.ts +0 -4
  266. package/dist/runtime/runtimeConfig.js +0 -7
  267. package/dist/runtime/runtimeConfig.js.map +0 -1
  268. package/dist/strategies/ArchitecturalReviewStrategy.d.ts +0 -29
  269. package/dist/strategies/ArchitecturalReviewStrategy.js +0 -42
  270. package/dist/strategies/ArchitecturalReviewStrategy.js.map +0 -1
  271. package/dist/strategies/CodingTestReviewStrategy.d.ts +0 -194
  272. package/dist/strategies/CodingTestReviewStrategy.js +0 -681
  273. package/dist/strategies/CodingTestReviewStrategy.js.map +0 -1
  274. package/dist/strategies/ConsolidatedReviewStrategy.d.ts +0 -25
  275. package/dist/strategies/ConsolidatedReviewStrategy.js +0 -45
  276. package/dist/strategies/ConsolidatedReviewStrategy.js.map +0 -1
  277. package/dist/strategies/ExtractPatternsReviewStrategy.d.ts +0 -30
  278. package/dist/strategies/ExtractPatternsReviewStrategy.js +0 -51
  279. package/dist/strategies/ExtractPatternsReviewStrategy.js.map +0 -1
  280. package/dist/strategies/MultiPassReviewStrategy.d.ts +0 -86
  281. package/dist/strategies/MultiPassReviewStrategy.js +0 -590
  282. package/dist/strategies/MultiPassReviewStrategy.js.map +0 -1
  283. package/dist/strategies/ReviewStrategy.d.ts +0 -45
  284. package/dist/strategies/ReviewStrategy.js +0 -24
  285. package/dist/strategies/ReviewStrategy.js.map +0 -1
  286. package/dist/strategies/StrategyFactory.d.ts +0 -19
  287. package/dist/strategies/StrategyFactory.js +0 -72
  288. package/dist/strategies/StrategyFactory.js.map +0 -1
  289. package/dist/strategies/index.d.ts +0 -13
  290. package/dist/strategies/index.js +0 -30
  291. package/dist/strategies/index.js.map +0 -1
  292. package/dist/tokenizers/baseTokenizer.d.ts +0 -25
  293. package/dist/tokenizers/baseTokenizer.js +0 -48
  294. package/dist/tokenizers/baseTokenizer.js.map +0 -1
  295. package/dist/tokenizers/gptTokenizer.d.ts +0 -7
  296. package/dist/tokenizers/gptTokenizer.js +0 -28
  297. package/dist/tokenizers/gptTokenizer.js.map +0 -1
  298. package/dist/tokenizers/index.d.ts +0 -7
  299. package/dist/tokenizers/index.js +0 -24
  300. package/dist/tokenizers/index.js.map +0 -1
  301. package/dist/types/apiResponses.d.ts +0 -39
  302. package/dist/types/apiResponses.js +0 -9
  303. package/dist/types/apiResponses.js.map +0 -1
  304. package/dist/types/cli.d.ts +0 -22
  305. package/dist/types/cli.js +0 -3
  306. package/dist/types/cli.js.map +0 -1
  307. package/dist/types/common.d.ts +0 -22
  308. package/dist/types/common.js +0 -14
  309. package/dist/types/common.js.map +0 -1
  310. package/dist/types/configuration.d.ts +0 -682
  311. package/dist/types/configuration.js +0 -65
  312. package/dist/types/configuration.js.map +0 -1
  313. package/dist/types/review.d.ts +0 -318
  314. package/dist/types/review.js +0 -8
  315. package/dist/types/review.js.map +0 -1
  316. package/dist/types/reviewSchema.d.ts +0 -543
  317. package/dist/types/reviewSchema.js +0 -121
  318. package/dist/types/reviewSchema.js.map +0 -1
  319. package/dist/types/structuredReview.d.ts +0 -119
  320. package/dist/types/structuredReview.js +0 -6
  321. package/dist/types/structuredReview.js.map +0 -1
  322. package/dist/types/tokenAnalysis.d.ts +0 -44
  323. package/dist/types/tokenAnalysis.js +0 -4
  324. package/dist/types/tokenAnalysis.js.map +0 -1
  325. package/dist/utils/FileReader.d.ts +0 -33
  326. package/dist/utils/FileReader.js +0 -88
  327. package/dist/utils/FileReader.js.map +0 -1
  328. package/dist/utils/FileWriter.d.ts +0 -26
  329. package/dist/utils/FileWriter.js +0 -76
  330. package/dist/utils/FileWriter.js.map +0 -1
  331. package/dist/utils/PathGenerator.d.ts +0 -30
  332. package/dist/utils/PathGenerator.js +0 -82
  333. package/dist/utils/PathGenerator.js.map +0 -1
  334. package/dist/utils/api/apiUtils.d.ts +0 -3
  335. package/dist/utils/api/apiUtils.js +0 -20
  336. package/dist/utils/api/apiUtils.js.map +0 -1
  337. package/dist/utils/api/index.d.ts +0 -1
  338. package/dist/utils/api/index.js +0 -18
  339. package/dist/utils/api/index.js.map +0 -1
  340. package/dist/utils/apiErrorHandler.d.ts +0 -130
  341. package/dist/utils/apiErrorHandler.js +0 -256
  342. package/dist/utils/apiErrorHandler.js.map +0 -1
  343. package/dist/utils/ciDataCollector.d.ts +0 -51
  344. package/dist/utils/ciDataCollector.js +0 -197
  345. package/dist/utils/ciDataCollector.js.map +0 -1
  346. package/dist/utils/codingTestConfigLoader.d.ts +0 -66
  347. package/dist/utils/codingTestConfigLoader.js +0 -420
  348. package/dist/utils/codingTestConfigLoader.js.map +0 -1
  349. package/dist/utils/dependencies/aiDependencyAnalyzer.d.ts +0 -30
  350. package/dist/utils/dependencies/aiDependencyAnalyzer.js +0 -343
  351. package/dist/utils/dependencies/aiDependencyAnalyzer.js.map +0 -1
  352. package/dist/utils/detection/frameworkDetector.d.ts +0 -43
  353. package/dist/utils/detection/frameworkDetector.js +0 -850
  354. package/dist/utils/detection/frameworkDetector.js.map +0 -1
  355. package/dist/utils/detection/index.d.ts +0 -9
  356. package/dist/utils/detection/index.js +0 -28
  357. package/dist/utils/detection/index.js.map +0 -1
  358. package/dist/utils/detection/projectTypeDetector.d.ts +0 -27
  359. package/dist/utils/detection/projectTypeDetector.js +0 -469
  360. package/dist/utils/detection/projectTypeDetector.js.map +0 -1
  361. package/dist/utils/diagramGenerator.d.ts +0 -49
  362. package/dist/utils/diagramGenerator.js +0 -218
  363. package/dist/utils/diagramGenerator.js.map +0 -1
  364. package/dist/utils/errorLogger.d.ts +0 -24
  365. package/dist/utils/errorLogger.js +0 -59
  366. package/dist/utils/errorLogger.js.map +0 -1
  367. package/dist/utils/estimationUtils.d.ts +0 -139
  368. package/dist/utils/estimationUtils.js +0 -329
  369. package/dist/utils/estimationUtils.js.map +0 -1
  370. package/dist/utils/fileFilters.d.ts +0 -72
  371. package/dist/utils/fileFilters.js +0 -338
  372. package/dist/utils/fileFilters.js.map +0 -1
  373. package/dist/utils/fileSystem.d.ts +0 -22
  374. package/dist/utils/fileSystem.js +0 -45
  375. package/dist/utils/fileSystem.js.map +0 -1
  376. package/dist/utils/index.d.ts +0 -22
  377. package/dist/utils/index.js +0 -52
  378. package/dist/utils/index.js.map +0 -1
  379. package/dist/utils/pathValidator.d.ts +0 -40
  380. package/dist/utils/pathValidator.js +0 -98
  381. package/dist/utils/pathValidator.js.map +0 -1
  382. package/dist/utils/priorityFilter.d.ts +0 -34
  383. package/dist/utils/priorityFilter.js +0 -54
  384. package/dist/utils/priorityFilter.js.map +0 -1
  385. package/dist/utils/projectDocs.d.ts +0 -47
  386. package/dist/utils/projectDocs.js +0 -158
  387. package/dist/utils/projectDocs.js.map +0 -1
  388. package/dist/utils/promptPaths.d.ts +0 -6
  389. package/dist/utils/promptPaths.js +0 -33
  390. package/dist/utils/promptPaths.js.map +0 -1
  391. package/dist/utils/promptTemplateManager.d.ts +0 -34
  392. package/dist/utils/promptTemplateManager.js +0 -141
  393. package/dist/utils/promptTemplateManager.js.map +0 -1
  394. package/dist/utils/review/consolidateReview.d.ts +0 -15
  395. package/dist/utils/review/consolidateReview.js +0 -481
  396. package/dist/utils/review/consolidateReview.js.map +0 -1
  397. package/dist/utils/review/fixDisplay.d.ts +0 -20
  398. package/dist/utils/review/fixDisplay.js +0 -84
  399. package/dist/utils/review/fixDisplay.js.map +0 -1
  400. package/dist/utils/review/fixImplementation.d.ts +0 -28
  401. package/dist/utils/review/fixImplementation.js +0 -60
  402. package/dist/utils/review/fixImplementation.js.map +0 -1
  403. package/dist/utils/review/index.d.ts +0 -13
  404. package/dist/utils/review/index.js +0 -50
  405. package/dist/utils/review/index.js.map +0 -1
  406. package/dist/utils/review/interactiveProcessing.d.ts +0 -25
  407. package/dist/utils/review/interactiveProcessing.js +0 -251
  408. package/dist/utils/review/interactiveProcessing.js.map +0 -1
  409. package/dist/utils/review/progressTracker.d.ts +0 -106
  410. package/dist/utils/review/progressTracker.js +0 -227
  411. package/dist/utils/review/progressTracker.js.map +0 -1
  412. package/dist/utils/review/reviewExtraction.d.ts +0 -31
  413. package/dist/utils/review/reviewExtraction.js +0 -324
  414. package/dist/utils/review/reviewExtraction.js.map +0 -1
  415. package/dist/utils/review/types.d.ts +0 -45
  416. package/dist/utils/review/types.js +0 -18
  417. package/dist/utils/review/types.js.map +0 -1
  418. package/dist/utils/reviewActionHandler.d.ts +0 -16
  419. package/dist/utils/reviewActionHandler.js +0 -34
  420. package/dist/utils/reviewActionHandler.js.map +0 -1
  421. package/dist/utils/reviewParser.d.ts +0 -34
  422. package/dist/utils/reviewParser.js +0 -218
  423. package/dist/utils/reviewParser.js.map +0 -1
  424. package/dist/utils/sanitizer.d.ts +0 -82
  425. package/dist/utils/sanitizer.js +0 -239
  426. package/dist/utils/sanitizer.js.map +0 -1
  427. package/dist/utils/smartFileSelector.d.ts +0 -50
  428. package/dist/utils/smartFileSelector.js +0 -261
  429. package/dist/utils/smartFileSelector.js.map +0 -1
  430. package/dist/utils/templateLoader.d.ts +0 -44
  431. package/dist/utils/templateLoader.js +0 -431
  432. package/dist/utils/templateLoader.js.map +0 -1
  433. package/dist/utils/treeGenerator.d.ts +0 -12
  434. package/dist/utils/treeGenerator.js +0 -133
  435. package/dist/utils/treeGenerator.js.map +0 -1
@@ -1,590 +0,0 @@
1
- "use strict";
2
- /**
3
- * @fileoverview Multi-pass review strategy implementation.
4
- *
5
- * This strategy analyzes large codebases by splitting files into multiple chunks
6
- * and processing them sequentially, maintaining context between passes to ensure
7
- * a cohesive review. It's automatically used when token counts exceed model limits.
8
- */
9
- var __importDefault = (this && this.__importDefault) || function (mod) {
10
- return (mod && mod.__esModule) ? mod : { "default": mod };
11
- };
12
- Object.defineProperty(exports, "__esModule", { value: true });
13
- exports.MultiPassReviewStrategy = void 0;
14
- const context_1 = require("../analysis/context");
15
- const FindingsExtractor_1 = require("../analysis/FindingsExtractor");
16
- const tokens_1 = require("../analysis/tokens");
17
- const ConsolidationService_1 = require("../core/ConsolidationService");
18
- const ReviewGenerator_1 = require("../core/ReviewGenerator");
19
- const logger_1 = __importDefault(require("../utils/logger"));
20
- const review_1 = require("../utils/review");
21
- const ReviewStrategy_1 = require("./ReviewStrategy");
22
- // Helper function to accommodate the type mismatch with existing formatters
23
- // const ensureString = (value: string | undefined): string => {
24
- // return value || 'unknown';
25
- // };
26
- /**
27
- * Strategy for performing multi-pass reviews of large codebases
28
- */
29
- class MultiPassReviewStrategy extends ReviewStrategy_1.BaseReviewStrategy {
30
- consolidationService;
31
- findingsExtractor;
32
- /**
33
- * Create a new multi-pass review strategy
34
- * @param reviewType Type of review to perform
35
- */
36
- constructor(reviewType) {
37
- super(reviewType);
38
- this.consolidationService = new ConsolidationService_1.ConsolidationService();
39
- this.findingsExtractor = new FindingsExtractor_1.FindingsExtractor();
40
- logger_1.default.debug('Initialized MultiPassReviewStrategy with services');
41
- }
42
- /**
43
- * Execute the multi-pass review strategy
44
- * @param files Files to review
45
- * @param projectName Project name
46
- * @param projectDocs Project documentation
47
- * @param options Review options
48
- * @param apiClientConfig API client configuration
49
- * @returns Promise resolving to the review result
50
- */
51
- async execute(files, projectName, projectDocs, options, apiClientConfig) {
52
- logger_1.default.info(`Executing multi-pass ${this.reviewType} review strategy...`);
53
- // Make sure API client is initialized
54
- if (!apiClientConfig.initialized) {
55
- throw new Error('API client not initialized');
56
- }
57
- // Create a progress tracker
58
- const progressTracker = new review_1.MultiPassProgressTracker(1, files.length, {
59
- quiet: options.quiet,
60
- });
61
- // Start with analysis phase
62
- progressTracker.setPhase('analyzing');
63
- // Analyze token usage to determine chunking strategy
64
- const tokenAnalysisOptions = {
65
- reviewType: this.reviewType,
66
- modelName: apiClientConfig.modelName,
67
- batchTokenLimit: options.batchTokenLimit,
68
- };
69
- const tokenAnalysis = tokens_1.TokenAnalyzer.analyzeFiles(files, tokenAnalysisOptions);
70
- // Log token analysis results
71
- logger_1.default.info('Token analysis completed:');
72
- logger_1.default.info((0, tokens_1.formatTokenAnalysis)(tokenAnalysis, apiClientConfig.modelName));
73
- // Create or get the review context
74
- const reviewContext = new context_1.ReviewContext(projectName, this.reviewType, files);
75
- // Determine if we need to use chunking
76
- if (!tokenAnalysis.chunkingRecommendation.chunkingRecommended) {
77
- logger_1.default.info('Content fits within context window, using standard review');
78
- progressTracker.complete();
79
- // If chunking is not needed, delegate to standard review process
80
- return (0, ReviewGenerator_1.generateReview)(files, projectName, this.reviewType, projectDocs, options, apiClientConfig);
81
- }
82
- // We need to use chunking
83
- logger_1.default.info(`Content exceeds context window (${tokenAnalysis.estimatedTotalTokens} > ${tokenAnalysis.contextWindowSize}), using multi-pass review`);
84
- logger_1.default.info(`Estimated ${tokenAnalysis.estimatedPassesNeeded} passes needed`);
85
- // Update progress tracker with actual pass count
86
- const totalPasses = tokenAnalysis.estimatedPassesNeeded;
87
- progressTracker.stopProgressUpdates();
88
- const newProgressTracker = new review_1.MultiPassProgressTracker(totalPasses, files.length, {
89
- quiet: options.quiet,
90
- });
91
- // Create a consolidated result to aggregate findings
92
- let consolidatedResult = {
93
- content: '',
94
- filePath: 'multi-pass-review',
95
- files: files,
96
- reviewType: this.reviewType,
97
- timestamp: new Date().toISOString(),
98
- costInfo: {
99
- inputTokens: 0,
100
- outputTokens: 0,
101
- totalTokens: 0,
102
- estimatedCost: 0,
103
- formattedCost: '$0.00 USD',
104
- cost: 0,
105
- passCount: totalPasses,
106
- perPassCosts: [],
107
- contextMaintenanceFactor: options.contextMaintenanceFactor || 0.15,
108
- },
109
- totalPasses: totalPasses,
110
- };
111
- // Create filtered subsets of files for each pass
112
- const chunks = tokenAnalysis.chunkingRecommendation.recommendedChunks;
113
- // Process each chunk
114
- for (let i = 0; i < chunks.length; i++) {
115
- const chunk = chunks[i];
116
- const passNumber = i + 1;
117
- const chunkFiles = files.filter((f) => chunk.files.includes(f.path));
118
- // Update progress tracker
119
- newProgressTracker.startPass(passNumber, chunkFiles.map((f) => f.path));
120
- // Start a new pass in the context
121
- reviewContext.startPass();
122
- // Generate next-pass context
123
- const chunkContext = reviewContext.generateNextPassContext(chunkFiles.map((f) => f.path));
124
- // Append the next-pass context to project docs
125
- let enhancedProjectDocs = null;
126
- if (projectDocs) {
127
- enhancedProjectDocs = { ...projectDocs };
128
- }
129
- else {
130
- enhancedProjectDocs = { readme: '' };
131
- }
132
- // Add the review context to the project docs
133
- enhancedProjectDocs.custom = {
134
- ...(enhancedProjectDocs.custom || {}),
135
- 'REVIEW_CONTEXT.md': chunkContext,
136
- };
137
- // Create a modified options object with metadata about the multi-pass process
138
- const chunkOptions = {
139
- ...options,
140
- multiPass: true,
141
- passNumber,
142
- totalPasses: chunks.length,
143
- };
144
- // Generate review for this chunk with error handling
145
- let chunkResult;
146
- let chunkRetryCount = 0;
147
- const maxChunkRetries = 2;
148
- while (chunkRetryCount <= maxChunkRetries) {
149
- try {
150
- // Enhanced logging before API call
151
- logger_1.default.debug(`Attempting to generate review for pass ${passNumber}, attempt ${chunkRetryCount + 1}/${maxChunkRetries + 1}`);
152
- logger_1.default.debug(` Files in chunk: ${chunkFiles.length}`);
153
- logger_1.default.debug(` API client: ${apiClientConfig.clientType}:${apiClientConfig.modelName}`);
154
- logger_1.default.debug(` Review type: ${this.reviewType}`);
155
- chunkResult = await (0, ReviewGenerator_1.generateReview)(chunkFiles, projectName, this.reviewType, enhancedProjectDocs, chunkOptions, apiClientConfig);
156
- // Log the result immediately after the API call
157
- logger_1.default.debug(`API call completed for pass ${passNumber}, attempt ${chunkRetryCount + 1}`);
158
- logger_1.default.debug(` Result exists: ${!!chunkResult}`);
159
- logger_1.default.debug(` Content exists: ${!!(chunkResult && chunkResult.content)}`);
160
- logger_1.default.debug(` Content length: ${chunkResult && chunkResult.content ? chunkResult.content.length : 'N/A'}`);
161
- logger_1.default.debug(` Model used: ${chunkResult && chunkResult.modelUsed ? chunkResult.modelUsed : 'N/A'}`);
162
- // Validate that we got valid content
163
- if (!chunkResult || !chunkResult.content || chunkResult.content.trim() === '') {
164
- // Enhanced error logging for debugging
165
- logger_1.default.error(`Empty or invalid chunk result for pass ${passNumber}:`);
166
- logger_1.default.error(` chunkResult exists: ${!!chunkResult}`);
167
- logger_1.default.error(` chunkResult.content exists: ${!!(chunkResult && chunkResult.content)}`);
168
- logger_1.default.error(` chunkResult.content length: ${chunkResult && chunkResult.content ? chunkResult.content.length : 'N/A'}`);
169
- logger_1.default.error(` chunkResult.modelUsed: ${chunkResult && chunkResult.modelUsed ? chunkResult.modelUsed : 'N/A'}`);
170
- logger_1.default.error(` chunkFiles count: ${chunkFiles.length}`);
171
- logger_1.default.error(` chunkFiles paths: ${chunkFiles.map((f) => f.path).join(', ')}`);
172
- logger_1.default.error(` apiClientConfig: ${JSON.stringify(apiClientConfig)}`);
173
- // Log the full chunkResult for debugging (but limit size)
174
- if (chunkResult) {
175
- const resultForLogging = {
176
- ...chunkResult,
177
- content: chunkResult.content
178
- ? `[${chunkResult.content.length} chars]: ${chunkResult.content.substring(0, 200)}...`
179
- : 'null/undefined',
180
- };
181
- logger_1.default.error(` Full chunkResult: ${JSON.stringify(resultForLogging, null, 2)}`);
182
- }
183
- throw new Error(`Empty or invalid chunk result for pass ${passNumber}`);
184
- }
185
- // Success - break out of retry loop
186
- break;
187
- }
188
- catch (chunkError) {
189
- chunkRetryCount++;
190
- logger_1.default.error(`Error generating review for pass ${passNumber} (attempt ${chunkRetryCount}/${maxChunkRetries + 1}): ${chunkError instanceof Error ? chunkError.message : String(chunkError)}`);
191
- if (chunkRetryCount > maxChunkRetries) {
192
- // Create a fallback result for this chunk
193
- logger_1.default.warn(`Creating fallback result for pass ${passNumber} after ${maxChunkRetries + 1} attempts`);
194
- chunkResult = {
195
- content: `## Error in Pass ${passNumber}\n\nFailed to generate review for ${chunkFiles.length} files after ${maxChunkRetries + 1} attempts.\n\nFiles attempted:\n${chunkFiles.map((f) => `- ${f.path}`).join('\n')}\n\nError: ${chunkError instanceof Error ? chunkError.message : String(chunkError)}`,
196
- filePath: 'error-pass',
197
- files: chunkFiles,
198
- reviewType: this.reviewType,
199
- timestamp: new Date().toISOString(),
200
- costInfo: {
201
- inputTokens: 0,
202
- outputTokens: 0,
203
- totalTokens: 0,
204
- estimatedCost: 0,
205
- formattedCost: '$0.00 USD',
206
- cost: 0,
207
- },
208
- };
209
- break;
210
- }
211
- // Wait before retrying
212
- const waitTime = Math.min(2000 * 2 ** (chunkRetryCount - 1), 8000);
213
- logger_1.default.info(`Waiting ${waitTime}ms before retry ${chunkRetryCount + 1}/${maxChunkRetries + 1} for pass ${passNumber}`);
214
- await new Promise((resolve) => setTimeout(resolve, waitTime));
215
- }
216
- }
217
- // Ensure we have a valid result
218
- if (!chunkResult) {
219
- // This should never happen, but provide a safety fallback
220
- logger_1.default.error(`No chunk result generated for pass ${passNumber} - creating emergency fallback`);
221
- chunkResult = {
222
- content: `## Error in Pass ${passNumber}\n\nNo result generated for ${chunkFiles.length} files.\n\nFiles attempted:\n${chunkFiles.map((f) => `- ${f.path}`).join('\n')}\n\nEmergency fallback result.`,
223
- filePath: 'emergency-fallback',
224
- files: chunkFiles,
225
- reviewType: this.reviewType,
226
- timestamp: new Date().toISOString(),
227
- costInfo: {
228
- inputTokens: 0,
229
- outputTokens: 0,
230
- totalTokens: 0,
231
- estimatedCost: 0,
232
- formattedCost: '$0.00 USD',
233
- cost: 0,
234
- },
235
- };
236
- }
237
- // Extract findings from this pass and update the context
238
- this.updateContextFromReviewResults(reviewContext, chunkResult, chunkFiles);
239
- // Accumulate costs
240
- if (consolidatedResult.costInfo && chunkResult.costInfo) {
241
- consolidatedResult.costInfo.inputTokens += chunkResult.costInfo.inputTokens || 0;
242
- consolidatedResult.costInfo.outputTokens += chunkResult.costInfo.outputTokens || 0;
243
- consolidatedResult.costInfo.totalTokens += chunkResult.costInfo.totalTokens || 0;
244
- consolidatedResult.costInfo.estimatedCost += chunkResult.costInfo.estimatedCost || 0;
245
- // Update formatted cost
246
- consolidatedResult.costInfo.formattedCost = `$${consolidatedResult.costInfo.estimatedCost.toFixed(6)} USD`;
247
- // Add per-pass cost information
248
- if (consolidatedResult.costInfo.perPassCosts &&
249
- Array.isArray(consolidatedResult.costInfo.perPassCosts)) {
250
- consolidatedResult.costInfo.perPassCosts.push({
251
- passNumber: passNumber,
252
- inputTokens: chunkResult.costInfo.inputTokens || 0,
253
- outputTokens: chunkResult.costInfo.outputTokens || 0,
254
- totalTokens: chunkResult.costInfo.totalTokens || 0,
255
- estimatedCost: chunkResult.costInfo.estimatedCost || 0,
256
- });
257
- }
258
- }
259
- // Accumulate content with pass information
260
- consolidatedResult.content += `\n## Pass ${passNumber}: Review of ${chunkFiles.length} Files\n\n`;
261
- consolidatedResult.content += chunkResult.content;
262
- consolidatedResult.content += '\n\n';
263
- // Mark the pass as complete
264
- newProgressTracker.completePass(passNumber);
265
- }
266
- // Set the initial processing phase
267
- newProgressTracker.setPhase('processing');
268
- // Add a summary section based on token analysis
269
- const initialSummary = this.generateMultiPassSummary(consolidatedResult, tokenAnalysis, reviewContext, files, apiClientConfig.modelName);
270
- // Add the initial summary to the consolidated result
271
- consolidatedResult.content = initialSummary + consolidatedResult.content;
272
- // Set the consolidation phase for the final AI analysis
273
- newProgressTracker.setPhase('consolidating');
274
- // Create a final consolidated report through AI with robust error handling
275
- logger_1.default.info('Generating final consolidated review report with grading...');
276
- // Check if we have enough valid content to consolidate
277
- const validPassCount = consolidatedResult.content.split('## Pass').length - 1;
278
- const errorPassCount = consolidatedResult.content.split('## Error in Pass').length - 1;
279
- if (validPassCount === 0) {
280
- logger_1.default.error('No valid passes to consolidate - all passes failed');
281
- consolidatedResult = {
282
- ...consolidatedResult,
283
- content: `# Review Failed\n\nAll ${totalPasses} passes failed to generate valid reviews. Please check the logs for details.\n\n${consolidatedResult.content}`,
284
- };
285
- }
286
- else if (errorPassCount > validPassCount * 0.5) {
287
- logger_1.default.warn(`High error rate: ${errorPassCount}/${totalPasses} passes failed`);
288
- }
289
- try {
290
- logger_1.default.debug('Starting consolidation phase with model provider: ' +
291
- apiClientConfig.provider +
292
- ', model: ' +
293
- apiClientConfig.modelName);
294
- // Make sure model information is set in the consolidated result
295
- // This ensures we use the same model for consolidation
296
- // Note: apiClientConfig.modelName already contains the full model string (e.g., "openrouter:anthropic/claude-3-haiku")
297
- consolidatedResult.modelUsed = apiClientConfig.modelName;
298
- const finalReport = await this.generateConsolidatedReport(consolidatedResult, apiClientConfig, files, projectName, projectDocs, options);
299
- // If the final report was generated successfully, use it instead
300
- if (finalReport?.content && finalReport.content.trim() !== '') {
301
- logger_1.default.info('Successfully generated consolidated report with grading');
302
- consolidatedResult = finalReport;
303
- }
304
- else {
305
- // If the final report wasn't generated (returned undefined), log a more detailed warning
306
- logger_1.default.warn('Consolidation function returned empty or undefined result');
307
- logger_1.default.warn('Creating enhanced fallback consolidated report');
308
- // Create an enhanced fallback consolidated report
309
- const passResults = this.extractPassResults(consolidatedResult);
310
- const fallbackContent = await this.consolidationService.generateConsolidatedReport(consolidatedResult, apiClientConfig, {
311
- projectName,
312
- modelName: apiClientConfig.modelName,
313
- totalPasses: consolidatedResult.totalPasses || 1,
314
- passResults,
315
- });
316
- const fallbackReport = {
317
- ...consolidatedResult,
318
- content: fallbackContent,
319
- };
320
- consolidatedResult = fallbackReport;
321
- }
322
- }
323
- catch (error) {
324
- logger_1.default.error(`Failed to generate final consolidated report: ${error instanceof Error ? error.message : String(error)}`);
325
- logger_1.default.error('Error occurred during consolidated report generation. Stack trace:');
326
- if (error instanceof Error && error.stack) {
327
- logger_1.default.error(error.stack);
328
- }
329
- logger_1.default.warn('Creating enhanced fallback consolidated report');
330
- // Create an enhanced fallback consolidated report even in the case of an exception
331
- const passResults = this.extractPassResults(consolidatedResult);
332
- const fallbackContent = await this.consolidationService.generateConsolidatedReport(consolidatedResult, apiClientConfig, {
333
- projectName,
334
- modelName: apiClientConfig.modelName,
335
- totalPasses: consolidatedResult.totalPasses || 1,
336
- passResults,
337
- });
338
- const fallbackReport = {
339
- ...consolidatedResult,
340
- content: fallbackContent,
341
- };
342
- consolidatedResult = fallbackReport;
343
- }
344
- // Mark the review as complete
345
- newProgressTracker.complete();
346
- return consolidatedResult;
347
- }
348
- /**
349
- * Generate a summary for the multi-pass review
350
- * @param result Consolidated review result
351
- * @param tokenAnalysis Token analysis result
352
- * @param context Review context
353
- * @param files All files in the review
354
- * @param modelName Model name
355
- * @returns Summary string
356
- */
357
- generateMultiPassSummary(result, tokenAnalysis, context, files, modelName) {
358
- const findings = context.getFindings();
359
- const filesCount = files.length;
360
- const totalPassesCount = context.getCurrentPass();
361
- // Get cost info for detailed reporting
362
- const costInfo = result.costInfo;
363
- const costBreakdown = costInfo?.perPassCosts
364
- ? costInfo.perPassCosts
365
- .map((passCost) => `- Pass ${passCost.passNumber}: ${passCost.inputTokens.toLocaleString()} input + ${passCost.outputTokens.toLocaleString()} output = ${passCost.totalTokens.toLocaleString()} tokens ($${passCost.estimatedCost.toFixed(4)} USD)`)
366
- .join('\n')
367
- : 'N/A';
368
- return `# Multi-Pass ${this.reviewType.charAt(0).toUpperCase() + this.reviewType.slice(1)} Review Summary
369
-
370
- This review was conducted in **${totalPassesCount} passes** to analyze **${filesCount} files** (${tokenAnalysis.totalSizeInBytes.toLocaleString()} bytes) due to the large size of the codebase.
371
-
372
- ## Review Statistics
373
- - Files analyzed: ${filesCount}
374
- - Total passes: ${totalPassesCount}
375
- - Model used: ${modelName}
376
- - Key findings identified: ${findings.length}
377
-
378
- ## Token Usage
379
- - Content tokens: ${tokenAnalysis.totalTokens.toLocaleString()}
380
- - Context window size: ${tokenAnalysis.contextWindowSize.toLocaleString()}
381
- - Context utilization: ${((tokenAnalysis.estimatedTotalTokens / tokenAnalysis.contextWindowSize) * 100).toFixed(2)}%
382
- ${costInfo
383
- ? `- Total tokens used: ${costInfo.totalTokens.toLocaleString()} (input: ${costInfo.inputTokens.toLocaleString()}, output: ${costInfo.outputTokens.toLocaleString()})
384
- - Estimated cost: ${costInfo.formattedCost}`
385
- : ''}
386
-
387
- ### Per-Pass Token Usage
388
- ${costBreakdown}
389
-
390
- ## Multi-Pass Methodology
391
- This review used a multi-pass approach with context maintenance between passes to ensure a cohesive analysis despite the large codebase size. Each pass analyzed a subset of files while maintaining awareness of findings and relationships from previous passes.
392
-
393
- `;
394
- }
395
- /**
396
- * Update the review context with findings from a review result
397
- * @param context Review context to update
398
- * @param result Review result to extract findings from
399
- * @param files Files included in this pass
400
- */
401
- updateContextFromReviewResult(context, result, files) {
402
- // Add file summaries
403
- files.forEach((file) => {
404
- context.addFileSummary({
405
- path: file.path,
406
- type: file.path.split('.').pop() || 'unknown',
407
- description: `File containing ${file.content.length} bytes of code`,
408
- keyElements: [],
409
- passNumber: context.getCurrentPass(),
410
- });
411
- });
412
- // In a real implementation, we would parse the review result to extract:
413
- // - Code elements (functions, classes, etc.)
414
- // - Findings (bugs, suggestions, etc.)
415
- // - Relationships between files
416
- // For now, add a general note about the pass
417
- context.addGeneralNote(`Pass ${context.getCurrentPass()} analyzed ${files.length} files and generated a ${result.content.length} character review.`);
418
- }
419
- /**
420
- * Generate a consolidated report from the multi-pass review results
421
- * @param multiPassResult Combined result from all passes
422
- * @param apiClientConfig API client configuration
423
- * @param files All files included in the review
424
- * @param projectName Name of the project
425
- * @param projectDocs Project documentation
426
- * @param options Review options
427
- * @returns Promise resolving to a consolidated review result, or undefined if consolidation fails
428
- */
429
- async generateConsolidatedReport(multiPassResult, apiClientConfig, files, projectName, projectDocs, options) {
430
- try {
431
- // Validate API client configuration for consolidation
432
- if (!apiClientConfig.modelName) {
433
- throw new Error('API client configuration is missing a model name for consolidation');
434
- }
435
- // Set the project name in the result for use in consolidation
436
- multiPassResult.projectName = projectName;
437
- // Extract pass results for consolidation
438
- const passResults = this.extractPassResults(multiPassResult);
439
- // Use the ConsolidationService to generate the final report
440
- const consolidatedContent = await this.consolidationService.generateConsolidatedReport(multiPassResult, apiClientConfig, {
441
- projectName,
442
- modelName: apiClientConfig.modelName,
443
- totalPasses: multiPassResult.totalPasses || 1,
444
- passResults,
445
- });
446
- // If the consolidation failed (empty content), return undefined
447
- if (!consolidatedContent || consolidatedContent.trim() === '') {
448
- logger_1.default.warn('Received empty consolidated content');
449
- return undefined;
450
- }
451
- logger_1.default.info('Successfully generated consolidated report with grading!');
452
- // Create a new result with the consolidated content
453
- const consolidatedResult = {
454
- ...multiPassResult,
455
- content: consolidatedContent,
456
- timestamp: new Date().toISOString(),
457
- totalPasses: (multiPassResult.totalPasses || 0) + 1,
458
- };
459
- // Return the consolidated result
460
- return consolidatedResult;
461
- }
462
- catch (error) {
463
- logger_1.default.error(`Error generating consolidated report: ${error instanceof Error ? error.message : String(error)}`);
464
- return undefined;
465
- }
466
- }
467
- /**
468
- * Extract individual pass results from the consolidated multi-pass result
469
- * @param multiPassResult The consolidated result containing all passes
470
- * @returns Array of individual pass results
471
- */
472
- extractPassResults(multiPassResult) {
473
- const passResults = [];
474
- const content = multiPassResult.content || '';
475
- // Split content by pass markers
476
- const passSections = content.split(/## Pass \d+:/);
477
- for (let i = 1; i < passSections.length; i++) {
478
- const passContent = passSections[i].trim();
479
- if (passContent) {
480
- passResults.push({
481
- content: passContent,
482
- filePath: `pass-${i}`,
483
- reviewType: multiPassResult.reviewType,
484
- timestamp: multiPassResult.timestamp,
485
- files: multiPassResult.files,
486
- });
487
- }
488
- }
489
- // If no passes were found, return the original result as a single pass
490
- if (passResults.length === 0) {
491
- passResults.push(multiPassResult);
492
- }
493
- return passResults;
494
- }
495
- /**
496
- * Extract findings from valid passes using the FindingsExtractor service
497
- */
498
- extractFindingsFromPasses(validPasses) {
499
- return this.findingsExtractor.extractFindingsFromPasses(validPasses);
500
- }
501
- /**
502
- * Calculate overall grade using the FindingsExtractor service
503
- */
504
- calculateOverallGrade(findings) {
505
- return this.findingsExtractor.calculateOverallGrade(findings);
506
- }
507
- /**
508
- * Generate recommendations based on findings using the FindingsExtractor service
509
- */
510
- generateRecommendations(findings, hasErrors) {
511
- return this.findingsExtractor.generateRecommendations(findings, hasErrors);
512
- }
513
- /**
514
- * Update the review context with findings from multiple review results
515
- * @param context Review context to update
516
- * @param result Review result to extract findings from
517
- * @param files Files included in this pass
518
- */
519
- updateContextFromReviewResults(context, result, files) {
520
- // Add file summaries for all files in this pass
521
- files.forEach((file) => {
522
- if (!file.path)
523
- return;
524
- // Extract the file extension
525
- const fileExtension = file.path.split('.').pop() || 'unknown';
526
- // Create a basic file summary
527
- context.addFileSummary({
528
- path: file.path,
529
- type: fileExtension,
530
- description: `${fileExtension.toUpperCase()} file with ${file.content.length} bytes`,
531
- keyElements: [],
532
- passNumber: context.getCurrentPass(),
533
- });
534
- });
535
- // Simple heuristic to extract findings from the review content
536
- // In a real implementation, we would have a more structured approach to extract findings
537
- const findingPatterns = [
538
- { type: 'bug', regex: /bug|issue|error|fix needed|incorrect/gi, severity: 8 },
539
- {
540
- type: 'security',
541
- regex: /security|vulnerability|exploit|injection|xss|csrf/gi,
542
- severity: 9,
543
- },
544
- {
545
- type: 'performance',
546
- regex: /performance|slow|optimize|efficiency|bottleneck/gi,
547
- severity: 7,
548
- },
549
- {
550
- type: 'maintainability',
551
- regex: /maintainability|hard to read|complex|refactor/gi,
552
- severity: 6,
553
- },
554
- ];
555
- // Split the review content into paragraphs
556
- const paragraphs = result.content.split('\n\n');
557
- // Examine each paragraph for potential findings
558
- paragraphs.forEach((paragraph) => {
559
- findingPatterns.forEach((pattern) => {
560
- if (pattern.regex.test(paragraph)) {
561
- // Extract a short description from the paragraph
562
- let description = paragraph.substring(0, 100);
563
- if (description.length === 100) {
564
- description += '...';
565
- }
566
- // Determine which file this finding is about (if mentioned)
567
- let file;
568
- files.forEach((f) => {
569
- if (f.path &&
570
- (paragraph.includes(f.path) || (f.relativePath && paragraph.includes(f.relativePath)))) {
571
- file = f.path;
572
- }
573
- });
574
- // Add the finding to the context
575
- context.addFinding({
576
- type: pattern.type,
577
- description,
578
- file,
579
- severity: pattern.severity,
580
- passNumber: context.getCurrentPass(),
581
- });
582
- }
583
- });
584
- });
585
- // Add a general note about this pass
586
- context.addGeneralNote(`Pass ${context.getCurrentPass()} reviewed ${files.length} files and identified approximate findings based on text heuristics.`);
587
- }
588
- }
589
- exports.MultiPassReviewStrategy = MultiPassReviewStrategy;
590
- //# sourceMappingURL=MultiPassReviewStrategy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MultiPassReviewStrategy.js","sourceRoot":"","sources":["../../src/strategies/MultiPassReviewStrategy.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;AAEH,iDAAoD;AACpD,qEAAkE;AAClE,+CAAkG;AAGlG,uEAAoE;AACpE,6DAAyD;AAEzD,6DAAqC;AAErC,4CAA2D;AAC3D,qDAAsD;AAEtD,4EAA4E;AAC5E,gEAAgE;AAChE,+BAA+B;AAC/B,KAAK;AAEL;;GAEG;AACH,MAAa,uBAAwB,SAAQ,mCAAkB;IAC5C,oBAAoB,CAAuB;IAC3C,iBAAiB,CAAoB;IAEtD;;;OAGG;IACH,YAAY,UAAsB;QAChC,KAAK,CAAC,UAAU,CAAC,CAAC;QAClB,IAAI,CAAC,oBAAoB,GAAG,IAAI,2CAAoB,EAAE,CAAC;QACvD,IAAI,CAAC,iBAAiB,GAAG,IAAI,qCAAiB,EAAE,CAAC;QACjD,gBAAM,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACpE,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,OAAO,CACX,KAAiB,EACjB,WAAmB,EACnB,WAA+B,EAC/B,OAAsB,EACtB,eAAgC;QAEhC,gBAAM,CAAC,IAAI,CAAC,wBAAwB,IAAI,CAAC,UAAU,qBAAqB,CAAC,CAAC;QAE1E,sCAAsC;QACtC,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QAED,4BAA4B;QAC5B,MAAM,eAAe,GAAG,IAAI,iCAAwB,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE;YACpE,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC,CAAC;QAEH,4BAA4B;QAC5B,eAAe,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAEtC,qDAAqD;QACrD,MAAM,oBAAoB,GAAG;YAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,SAAS,EAAE,eAAe,CAAC,SAAS;YACpC,eAAe,EAAE,OAAO,CAAC,eAAe;SACzC,CAAC;QAEF,MAAM,aAAa,GAAG,sBAAa,CAAC,YAAY,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;QAE9E,6BAA6B;QAC7B,gBAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACzC,gBAAM,CAAC,IAAI,CAAC,IAAA,4BAAmB,EAAC,aAAa,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC;QAE3E,mCAAmC;QACnC,MAAM,aAAa,GAAG,IAAI,uBAAa,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAE7E,uCAAuC;QACvC,IAAI,CAAC,aAAa,CAAC,sBAAsB,CAAC,mBAAmB,EAAE,CAAC;YAC9D,gBAAM,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;YACzE,eAAe,CAAC,QAAQ,EAAE,CAAC;YAE3B,iEAAiE;YACjE,OAAO,IAAA,gCAAc,EACnB,KAAK,EACL,WAAW,EACX,IAAI,CAAC,UAAU,EACf,WAAW,EACX,OAAO,EACP,eAAe,CAChB,CAAC;QACJ,CAAC;QAED,0BAA0B;QAC1B,gBAAM,CAAC,IAAI,CACT,mCAAmC,aAAa,CAAC,oBAAoB,MAAM,aAAa,CAAC,iBAAiB,4BAA4B,CACvI,CAAC;QACF,gBAAM,CAAC,IAAI,CAAC,aAAa,aAAa,CAAC,qBAAqB,gBAAgB,CAAC,CAAC;QAE9E,iDAAiD;QACjD,MAAM,WAAW,GAAG,aAAa,CAAC,qBAAqB,CAAC;QACxD,eAAe,CAAC,mBAAmB,EAAE,CAAC;QACtC,MAAM,kBAAkB,GAAG,IAAI,iCAAwB,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,EAAE;YACjF,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC,CAAC;QAEH,qDAAqD;QACrD,IAAI,kBAAkB,GAAiB;YACrC,OAAO,EAAE,EAAE;YACX,QAAQ,EAAE,mBAAmB;YAC7B,KAAK,EAAE,KAAK;YACZ,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,QAAQ,EAAE;gBACR,WAAW,EAAE,CAAC;gBACd,YAAY,EAAE,CAAC;gBACf,WAAW,EAAE,CAAC;gBACd,aAAa,EAAE,CAAC;gBAChB,aAAa,EAAE,WAAW;gBAC1B,IAAI,EAAE,CAAC;gBACP,SAAS,EAAE,WAAW;gBACtB,YAAY,EAAE,EAAE;gBAChB,wBAAwB,EAAE,OAAO,CAAC,wBAAwB,IAAI,IAAI;aACnE;YACD,WAAW,EAAE,WAAW;SACzB,CAAC;QAEF,iDAAiD;QACjD,MAAM,MAAM,GAAG,aAAa,CAAC,sBAAsB,CAAC,iBAAiB,CAAC;QAEtE,qBAAqB;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACxB,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC;YACzB,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAErE,0BAA0B;YAC1B,kBAAkB,CAAC,SAAS,CAC1B,UAAU,EACV,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAC9B,CAAC;YAEF,kCAAkC;YAClC,aAAa,CAAC,SAAS,EAAE,CAAC;YAE1B,6BAA6B;YAC7B,MAAM,YAAY,GAAG,aAAa,CAAC,uBAAuB,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAE1F,+CAA+C;YAC/C,IAAI,mBAAmB,GAAG,IAAI,CAAC;YAE/B,IAAI,WAAW,EAAE,CAAC;gBAChB,mBAAmB,GAAG,EAAE,GAAG,WAAW,EAAE,CAAC;YAC3C,CAAC;iBAAM,CAAC;gBACN,mBAAmB,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;YACvC,CAAC;YAED,6CAA6C;YAC7C,mBAAmB,CAAC,MAAM,GAAG;gBAC3B,GAAG,CAAC,mBAAmB,CAAC,MAAM,IAAI,EAAE,CAAC;gBACrC,mBAAmB,EAAE,YAAY;aAClC,CAAC;YAEF,8EAA8E;YAC9E,MAAM,YAAY,GAAG;gBACnB,GAAG,OAAO;gBACV,SAAS,EAAE,IAAI;gBACf,UAAU;gBACV,WAAW,EAAE,MAAM,CAAC,MAAM;aAC3B,CAAC;YAEF,qDAAqD;YACrD,IAAI,WAAqC,CAAC;YAC1C,IAAI,eAAe,GAAG,CAAC,CAAC;YACxB,MAAM,eAAe,GAAG,CAAC,CAAC;YAE1B,OAAO,eAAe,IAAI,eAAe,EAAE,CAAC;gBAC1C,IAAI,CAAC;oBACH,mCAAmC;oBACnC,gBAAM,CAAC,KAAK,CACV,0CAA0C,UAAU,aAAa,eAAe,GAAG,CAAC,IAAI,eAAe,GAAG,CAAC,EAAE,CAC9G,CAAC;oBACF,gBAAM,CAAC,KAAK,CAAC,qBAAqB,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;oBACvD,gBAAM,CAAC,KAAK,CAAC,iBAAiB,eAAe,CAAC,UAAU,IAAI,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;oBACzF,gBAAM,CAAC,KAAK,CAAC,kBAAkB,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;oBAElD,WAAW,GAAG,MAAM,IAAA,gCAAc,EAChC,UAAU,EACV,WAAW,EACX,IAAI,CAAC,UAAU,EACf,mBAAmB,EACnB,YAAY,EACZ,eAAe,CAChB,CAAC;oBAEF,gDAAgD;oBAChD,gBAAM,CAAC,KAAK,CAAC,+BAA+B,UAAU,aAAa,eAAe,GAAG,CAAC,EAAE,CAAC,CAAC;oBAC1F,gBAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;oBAClD,gBAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,WAAW,IAAI,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBAC5E,gBAAM,CAAC,KAAK,CACV,qBAAqB,WAAW,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAC/F,CAAC;oBACF,gBAAM,CAAC,KAAK,CACV,iBAAiB,WAAW,IAAI,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,CACxF,CAAC;oBAEF,qCAAqC;oBACrC,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;wBAC9E,uCAAuC;wBACvC,gBAAM,CAAC,KAAK,CAAC,0CAA0C,UAAU,GAAG,CAAC,CAAC;wBACtE,gBAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;wBACvD,gBAAM,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC,WAAW,IAAI,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;wBACxF,gBAAM,CAAC,KAAK,CACV,iCAAiC,WAAW,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAC3G,CAAC;wBACF,gBAAM,CAAC,KAAK,CACV,4BAA4B,WAAW,IAAI,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,CACnG,CAAC;wBACF,gBAAM,CAAC,KAAK,CAAC,uBAAuB,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;wBACzD,gBAAM,CAAC,KAAK,CAAC,uBAAuB,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;wBAChF,gBAAM,CAAC,KAAK,CAAC,sBAAsB,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;wBAEtE,0DAA0D;wBAC1D,IAAI,WAAW,EAAE,CAAC;4BAChB,MAAM,gBAAgB,GAAG;gCACvB,GAAG,WAAW;gCACd,OAAO,EAAE,WAAW,CAAC,OAAO;oCAC1B,CAAC,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,MAAM,YAAY,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK;oCACtF,CAAC,CAAC,gBAAgB;6BACrB,CAAC;4BACF,gBAAM,CAAC,KAAK,CAAC,uBAAuB,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;wBACnF,CAAC;wBAED,MAAM,IAAI,KAAK,CAAC,0CAA0C,UAAU,EAAE,CAAC,CAAC;oBAC1E,CAAC;oBAED,oCAAoC;oBACpC,MAAM;gBACR,CAAC;gBAAC,OAAO,UAAU,EAAE,CAAC;oBACpB,eAAe,EAAE,CAAC;oBAClB,gBAAM,CAAC,KAAK,CACV,oCAAoC,UAAU,aAAa,eAAe,IAAI,eAAe,GAAG,CAAC,MAC/F,UAAU,YAAY,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CACtE,EAAE,CACH,CAAC;oBAEF,IAAI,eAAe,GAAG,eAAe,EAAE,CAAC;wBACtC,0CAA0C;wBAC1C,gBAAM,CAAC,IAAI,CACT,qCAAqC,UAAU,UAAU,eAAe,GAAG,CAAC,WAAW,CACxF,CAAC;wBACF,WAAW,GAAG;4BACZ,OAAO,EAAE,oBAAoB,UAAU,qCAAqC,UAAU,CAAC,MAAM,gBAAgB,eAAe,GAAG,CAAC,mCAAmC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,UAAU,YAAY,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;4BACvS,QAAQ,EAAE,YAAY;4BACtB,KAAK,EAAE,UAAU;4BACjB,UAAU,EAAE,IAAI,CAAC,UAAU;4BAC3B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;4BACnC,QAAQ,EAAE;gCACR,WAAW,EAAE,CAAC;gCACd,YAAY,EAAE,CAAC;gCACf,WAAW,EAAE,CAAC;gCACd,aAAa,EAAE,CAAC;gCAChB,aAAa,EAAE,WAAW;gCAC1B,IAAI,EAAE,CAAC;6BACR;yBACF,CAAC;wBACF,MAAM;oBACR,CAAC;oBAED,uBAAuB;oBACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;oBACnE,gBAAM,CAAC,IAAI,CACT,WAAW,QAAQ,mBAAmB,eAAe,GAAG,CAAC,IAAI,eAAe,GAAG,CAAC,aAAa,UAAU,EAAE,CAC1G,CAAC;oBACF,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;gBAChE,CAAC;YACH,CAAC;YAED,gCAAgC;YAChC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,0DAA0D;gBAC1D,gBAAM,CAAC,KAAK,CACV,sCAAsC,UAAU,gCAAgC,CACjF,CAAC;gBACF,WAAW,GAAG;oBACZ,OAAO,EAAE,oBAAoB,UAAU,+BAA+B,UAAU,CAAC,MAAM,gCAAgC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,gCAAgC;oBACtM,QAAQ,EAAE,oBAAoB;oBAC9B,KAAK,EAAE,UAAU;oBACjB,UAAU,EAAE,IAAI,CAAC,UAAU;oBAC3B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACnC,QAAQ,EAAE;wBACR,WAAW,EAAE,CAAC;wBACd,YAAY,EAAE,CAAC;wBACf,WAAW,EAAE,CAAC;wBACd,aAAa,EAAE,CAAC;wBAChB,aAAa,EAAE,WAAW;wBAC1B,IAAI,EAAE,CAAC;qBACR;iBACF,CAAC;YACJ,CAAC;YAED,yDAAyD;YACzD,IAAI,CAAC,8BAA8B,CAAC,aAAa,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;YAE5E,mBAAmB;YACnB,IAAI,kBAAkB,CAAC,QAAQ,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;gBACxD,kBAAkB,CAAC,QAAQ,CAAC,WAAW,IAAI,WAAW,CAAC,QAAQ,CAAC,WAAW,IAAI,CAAC,CAAC;gBACjF,kBAAkB,CAAC,QAAQ,CAAC,YAAY,IAAI,WAAW,CAAC,QAAQ,CAAC,YAAY,IAAI,CAAC,CAAC;gBACnF,kBAAkB,CAAC,QAAQ,CAAC,WAAW,IAAI,WAAW,CAAC,QAAQ,CAAC,WAAW,IAAI,CAAC,CAAC;gBACjF,kBAAkB,CAAC,QAAQ,CAAC,aAAa,IAAI,WAAW,CAAC,QAAQ,CAAC,aAAa,IAAI,CAAC,CAAC;gBAErF,wBAAwB;gBACxB,kBAAkB,CAAC,QAAQ,CAAC,aAAa,GAAG,IAAI,kBAAkB,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;gBAE3G,gCAAgC;gBAChC,IACE,kBAAkB,CAAC,QAAQ,CAAC,YAAY;oBACxC,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,QAAQ,CAAC,YAAY,CAAC,EACvD,CAAC;oBACD,kBAAkB,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC;wBAC5C,UAAU,EAAE,UAAU;wBACtB,WAAW,EAAE,WAAW,CAAC,QAAQ,CAAC,WAAW,IAAI,CAAC;wBAClD,YAAY,EAAE,WAAW,CAAC,QAAQ,CAAC,YAAY,IAAI,CAAC;wBACpD,WAAW,EAAE,WAAW,CAAC,QAAQ,CAAC,WAAW,IAAI,CAAC;wBAClD,aAAa,EAAE,WAAW,CAAC,QAAQ,CAAC,aAAa,IAAI,CAAC;qBACvD,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,2CAA2C;YAC3C,kBAAkB,CAAC,OAAO,IAAI,aAAa,UAAU,eAAe,UAAU,CAAC,MAAM,YAAY,CAAC;YAClG,kBAAkB,CAAC,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC;YAClD,kBAAkB,CAAC,OAAO,IAAI,MAAM,CAAC;YAErC,4BAA4B;YAC5B,kBAAkB,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QAC9C,CAAC;QAED,mCAAmC;QACnC,kBAAkB,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAE1C,gDAAgD;QAChD,MAAM,cAAc,GAAG,IAAI,CAAC,wBAAwB,CAClD,kBAAkB,EAClB,aAAa,EACb,aAAa,EACb,KAAK,EACL,eAAe,CAAC,SAAS,CAC1B,CAAC;QAEF,qDAAqD;QACrD,kBAAkB,CAAC,OAAO,GAAG,cAAc,GAAG,kBAAkB,CAAC,OAAO,CAAC;QAEzE,wDAAwD;QACxD,kBAAkB,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;QAE7C,2EAA2E;QAC3E,gBAAM,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;QAE3E,uDAAuD;QACvD,MAAM,cAAc,GAAG,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QAC9E,MAAM,cAAc,GAAG,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QAEvF,IAAI,cAAc,KAAK,CAAC,EAAE,CAAC;YACzB,gBAAM,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;YACnE,kBAAkB,GAAG;gBACnB,GAAG,kBAAkB;gBACrB,OAAO,EAAE,0BAA0B,WAAW,mFAAmF,kBAAkB,CAAC,OAAO,EAAE;aAC9J,CAAC;QACJ,CAAC;aAAM,IAAI,cAAc,GAAG,cAAc,GAAG,GAAG,EAAE,CAAC;YACjD,gBAAM,CAAC,IAAI,CAAC,oBAAoB,cAAc,IAAI,WAAW,gBAAgB,CAAC,CAAC;QACjF,CAAC;QAED,IAAI,CAAC;YACH,gBAAM,CAAC,KAAK,CACV,oDAAoD;gBAClD,eAAe,CAAC,QAAQ;gBACxB,WAAW;gBACX,eAAe,CAAC,SAAS,CAC5B,CAAC;YAEF,gEAAgE;YAChE,uDAAuD;YACvD,uHAAuH;YACvH,kBAAkB,CAAC,SAAS,GAAG,eAAe,CAAC,SAAS,CAAC;YAEzD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,0BAA0B,CACvD,kBAAkB,EAClB,eAAe,EACf,KAAK,EACL,WAAW,EACX,WAAW,EACX,OAAO,CACR,CAAC;YAEF,iEAAiE;YACjE,IAAI,WAAW,EAAE,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBAC9D,gBAAM,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;gBACvE,kBAAkB,GAAG,WAAW,CAAC;YACnC,CAAC;iBAAM,CAAC;gBACN,yFAAyF;gBACzF,gBAAM,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;gBACzE,gBAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;gBAE9D,kDAAkD;gBAClD,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,CAAC;gBAChE,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,0BAA0B,CAChF,kBAAkB,EAClB,eAAe,EACf;oBACE,WAAW;oBACX,SAAS,EAAE,eAAe,CAAC,SAAS;oBACpC,WAAW,EAAE,kBAAkB,CAAC,WAAW,IAAI,CAAC;oBAChD,WAAW;iBACZ,CACF,CAAC;gBACF,MAAM,cAAc,GAAG;oBACrB,GAAG,kBAAkB;oBACrB,OAAO,EAAE,eAAe;iBACzB,CAAC;gBACF,kBAAkB,GAAG,cAAc,CAAC;YACtC,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,gBAAM,CAAC,KAAK,CACV,iDAAiD,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC1G,CAAC;YACF,gBAAM,CAAC,KAAK,CAAC,oEAAoE,CAAC,CAAC;YACnF,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAC1C,gBAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC5B,CAAC;YACD,gBAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;YAE9D,mFAAmF;YACnF,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,CAAC;YAChE,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,0BAA0B,CAChF,kBAAkB,EAClB,eAAe,EACf;gBACE,WAAW;gBACX,SAAS,EAAE,eAAe,CAAC,SAAS;gBACpC,WAAW,EAAE,kBAAkB,CAAC,WAAW,IAAI,CAAC;gBAChD,WAAW;aACZ,CACF,CAAC;YACF,MAAM,cAAc,GAAG;gBACrB,GAAG,kBAAkB;gBACrB,OAAO,EAAE,eAAe;aACzB,CAAC;YACF,kBAAkB,GAAG,cAAc,CAAC;QACtC,CAAC;QAED,8BAA8B;QAC9B,kBAAkB,CAAC,QAAQ,EAAE,CAAC;QAE9B,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED;;;;;;;;OAQG;IACK,wBAAwB,CAC9B,MAAoB,EACpB,aAAkC,EAClC,OAAsB,EACtB,KAAiB,EACjB,SAAiB;QAEjB,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC;QAChC,MAAM,gBAAgB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;QAElD,uCAAuC;QACvC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QACjC,MAAM,aAAa,GAAG,QAAQ,EAAE,YAAY;YAC1C,CAAC,CAAC,QAAQ,CAAC,YAAY;iBAClB,GAAG,CACF,CAAC,QAAsB,EAAE,EAAE,CACzB,UAAU,QAAQ,CAAC,UAAU,KAAK,QAAQ,CAAC,WAAW,CAAC,cAAc,EAAE,YAAY,QAAQ,CAAC,YAAY,CAAC,cAAc,EAAE,aAAa,QAAQ,CAAC,WAAW,CAAC,cAAc,EAAE,aAAa,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CACnO;iBACA,IAAI,CAAC,IAAI,CAAC;YACf,CAAC,CAAC,KAAK,CAAC;QAEV,OAAO,gBAAgB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;;iCAE5D,gBAAgB,0BAA0B,UAAU,aAAa,aAAa,CAAC,gBAAgB,CAAC,cAAc,EAAE;;;oBAG7H,UAAU;kBACZ,gBAAgB;gBAClB,SAAS;6BACI,QAAQ,CAAC,MAAM;;;oBAGxB,aAAa,CAAC,WAAW,CAAC,cAAc,EAAE;yBACrC,aAAa,CAAC,iBAAiB,CAAC,cAAc,EAAE;yBAChD,CAAC,CAAC,aAAa,CAAC,oBAAoB,GAAG,aAAa,CAAC,iBAAiB,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;EAEhH,QAAQ;YACN,CAAC,CAAC,wBAAwB,QAAQ,CAAC,WAAW,CAAC,cAAc,EAAE,YAAY,QAAQ,CAAC,WAAW,CAAC,cAAc,EAAE,aAAa,QAAQ,CAAC,YAAY,CAAC,cAAc,EAAE;oBACnJ,QAAQ,CAAC,aAAa,EAAE;YACxC,CAAC,CAAC,EACN;;;EAGE,aAAa;;;;;CAKd,CAAC;IACA,CAAC;IAED;;;;;OAKG;IACK,6BAA6B,CACnC,OAAsB,EACtB,MAAoB,EACpB,KAAiB;QAEjB,qBAAqB;QACrB,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACrB,OAAO,CAAC,cAAc,CAAC;gBACrB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,SAAS;gBAC7C,WAAW,EAAE,mBAAmB,IAAI,CAAC,OAAO,CAAC,MAAM,gBAAgB;gBACnE,WAAW,EAAE,EAAE;gBACf,UAAU,EAAE,OAAO,CAAC,cAAc,EAAE;aACrC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,yEAAyE;QACzE,6CAA6C;QAC7C,uCAAuC;QACvC,gCAAgC;QAEhC,6CAA6C;QAC7C,OAAO,CAAC,cAAc,CACpB,QAAQ,OAAO,CAAC,cAAc,EAAE,aAAa,KAAK,CAAC,MAAM,0BAA0B,MAAM,CAAC,OAAO,CAAC,MAAM,oBAAoB,CAC7H,CAAC;IACJ,CAAC;IAED;;;;;;;;;OASG;IACK,KAAK,CAAC,0BAA0B,CACtC,eAA6B,EAC7B,eAAgC,EAChC,KAAiB,EACjB,WAAmB,EACnB,WAA+B,EAC/B,OAAsB;QAEtB,IAAI,CAAC;YACH,sDAAsD;YACtD,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;gBAC/B,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;YACxF,CAAC;YAED,8DAA8D;YAC9D,eAAe,CAAC,WAAW,GAAG,WAAW,CAAC;YAE1C,yCAAyC;YACzC,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;YAE7D,4DAA4D;YAC5D,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,0BAA0B,CACpF,eAAe,EACf,eAAe,EACf;gBACE,WAAW;gBACX,SAAS,EAAE,eAAe,CAAC,SAAS;gBACpC,WAAW,EAAE,eAAe,CAAC,WAAW,IAAI,CAAC;gBAC7C,WAAW;aACZ,CACF,CAAC;YAEF,gEAAgE;YAChE,IAAI,CAAC,mBAAmB,IAAI,mBAAmB,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBAC9D,gBAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;gBACnD,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,gBAAM,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;YAExE,oDAAoD;YACpD,MAAM,kBAAkB,GAAiB;gBACvC,GAAG,eAAe;gBAClB,OAAO,EAAE,mBAAmB;gBAC5B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,WAAW,EAAE,CAAC,eAAe,CAAC,WAAW,IAAI,CAAC,CAAC,GAAG,CAAC;aACpD,CAAC;YAEF,iCAAiC;YACjC,OAAO,kBAAkB,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,gBAAM,CAAC,KAAK,CACV,yCAAyC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAClG,CAAC;YACF,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED;;;;OAIG;IACK,kBAAkB,CAAC,eAA6B;QACtD,MAAM,WAAW,GAAmB,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,IAAI,EAAE,CAAC;QAE9C,gCAAgC;QAChC,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAEnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC3C,IAAI,WAAW,EAAE,CAAC;gBAChB,WAAW,CAAC,IAAI,CAAC;oBACf,OAAO,EAAE,WAAW;oBACpB,QAAQ,EAAE,QAAQ,CAAC,EAAE;oBACrB,UAAU,EAAE,eAAe,CAAC,UAAU;oBACtC,SAAS,EAAE,eAAe,CAAC,SAAS;oBACpC,KAAK,EAAE,eAAe,CAAC,KAAK;iBAC7B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,uEAAuE;QACvE,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACpC,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAED;;OAEG;IACK,yBAAyB,CAAC,WAAuC;QACvE,OAAO,IAAI,CAAC,iBAAiB,CAAC,yBAAyB,CAAC,WAAW,CAAC,CAAC;IACvE,CAAC;IAED;;OAEG;IACK,qBAAqB,CAAC,QAI7B;QACC,OAAO,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAChE,CAAC;IAED;;OAEG;IACK,uBAAuB,CAC7B,QAAsE,EACtE,SAAkB;QAElB,OAAO,IAAI,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC7E,CAAC;IAED;;;;;OAKG;IACK,8BAA8B,CACpC,OAAsB,EACtB,MAAoB,EACpB,KAAiB;QAEjB,gDAAgD;QAChD,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACrB,IAAI,CAAC,IAAI,CAAC,IAAI;gBAAE,OAAO;YAEvB,6BAA6B;YAC7B,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,SAAS,CAAC;YAE9D,8BAA8B;YAC9B,OAAO,CAAC,cAAc,CAAC;gBACrB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,aAAa;gBACnB,WAAW,EAAE,GAAG,aAAa,CAAC,WAAW,EAAE,cAAc,IAAI,CAAC,OAAO,CAAC,MAAM,QAAQ;gBACpF,WAAW,EAAE,EAAE;gBACf,UAAU,EAAE,OAAO,CAAC,cAAc,EAAE;aACrC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,+DAA+D;QAC/D,yFAAyF;QACzF,MAAM,eAAe,GAAG;YACtB,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,wCAAwC,EAAE,QAAQ,EAAE,CAAC,EAAE;YAC7E;gBACE,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,qDAAqD;gBAC5D,QAAQ,EAAE,CAAC;aACZ;YACD;gBACE,IAAI,EAAE,aAAa;gBACnB,KAAK,EAAE,mDAAmD;gBAC1D,QAAQ,EAAE,CAAC;aACZ;YACD;gBACE,IAAI,EAAE,iBAAiB;gBACvB,KAAK,EAAE,iDAAiD;gBACxD,QAAQ,EAAE,CAAC;aACZ;SACF,CAAC;QAEF,2CAA2C;QAC3C,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEhD,gDAAgD;QAChD,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;YAC/B,eAAe,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAClC,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;oBAClC,iDAAiD;oBACjD,IAAI,WAAW,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;oBAC9C,IAAI,WAAW,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;wBAC/B,WAAW,IAAI,KAAK,CAAC;oBACvB,CAAC;oBAED,4DAA4D;oBAC5D,IAAI,IAAwB,CAAC;oBAC7B,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;wBAClB,IACE,CAAC,CAAC,IAAI;4BACN,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EACtF,CAAC;4BACD,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;wBAChB,CAAC;oBACH,CAAC,CAAC,CAAC;oBAEH,iCAAiC;oBACjC,OAAO,CAAC,UAAU,CAAC;wBACjB,IAAI,EAAE,OAAO,CAAC,IAAI;wBAClB,WAAW;wBACX,IAAI;wBACJ,QAAQ,EAAE,OAAO,CAAC,QAAQ;wBAC1B,UAAU,EAAE,OAAO,CAAC,cAAc,EAAE;qBACrC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,qCAAqC;QACrC,OAAO,CAAC,cAAc,CACpB,QAAQ,OAAO,CAAC,cAAc,EAAE,aAAa,KAAK,CAAC,MAAM,sEAAsE,CAChI,CAAC;IACJ,CAAC;CACF;AAnvBD,0DAmvBC"}