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.
- package/dist/analysis/FindingsExtractor.d.ts +105 -0
- package/dist/analysis/FindingsExtractor.js +363 -0
- package/dist/analysis/FindingsExtractor.js.map +1 -0
- package/dist/analysis/ai-detection/analyzers/BaseAnalyzer.d.ts +111 -0
- package/dist/analysis/ai-detection/analyzers/BaseAnalyzer.js +215 -0
- package/dist/analysis/ai-detection/analyzers/BaseAnalyzer.js.map +1 -0
- package/dist/analysis/ai-detection/analyzers/DocumentationAnalyzer.d.ts +142 -0
- package/dist/analysis/ai-detection/analyzers/DocumentationAnalyzer.js +503 -0
- package/dist/analysis/ai-detection/analyzers/DocumentationAnalyzer.js.map +1 -0
- package/dist/analysis/ai-detection/analyzers/GitHistoryAnalyzer.d.ts +88 -0
- package/dist/analysis/ai-detection/analyzers/GitHistoryAnalyzer.js +343 -0
- package/dist/analysis/ai-detection/analyzers/GitHistoryAnalyzer.js.map +1 -0
- package/dist/analysis/ai-detection/core/AIDetectionEngine.d.ts +104 -0
- package/dist/analysis/ai-detection/core/AIDetectionEngine.js +369 -0
- package/dist/analysis/ai-detection/core/AIDetectionEngine.js.map +1 -0
- package/dist/analysis/ai-detection/types/DetectionTypes.d.ts +364 -0
- package/dist/analysis/ai-detection/types/DetectionTypes.js +32 -0
- package/dist/analysis/ai-detection/types/DetectionTypes.js.map +1 -0
- package/dist/analysis/ai-detection/utils/SubmissionConverter.d.ts +97 -0
- package/dist/analysis/ai-detection/utils/SubmissionConverter.js +339 -0
- package/dist/analysis/ai-detection/utils/SubmissionConverter.js.map +1 -0
- package/dist/analysis/context/ReviewContext.d.ts +184 -0
- package/dist/analysis/context/ReviewContext.js +294 -0
- package/dist/analysis/context/ReviewContext.js.map +1 -0
- package/{src/analysis/context/index.ts → dist/analysis/context/index.d.ts} +0 -1
- package/dist/analysis/context/index.js +23 -0
- package/dist/analysis/context/index.js.map +1 -0
- package/{src/analysis/index.ts → dist/analysis/index.d.ts} +0 -1
- package/dist/analysis/index.js +24 -0
- package/dist/analysis/index.js.map +1 -0
- package/dist/analysis/static/wpPhpcsRunner.d.ts +11 -0
- package/dist/analysis/static/wpPhpcsRunner.js +219 -0
- package/dist/analysis/static/wpPhpcsRunner.js.map +1 -0
- package/dist/analysis/tokens/TokenAnalysisFormatter.d.ts +27 -0
- package/{src/analysis/tokens/TokenAnalysisFormatter.ts → dist/analysis/tokens/TokenAnalysisFormatter.js} +64 -75
- package/dist/analysis/tokens/TokenAnalysisFormatter.js.map +1 -0
- package/dist/analysis/tokens/TokenAnalyzer.d.ts +155 -0
- package/dist/analysis/tokens/TokenAnalyzer.js +502 -0
- package/dist/analysis/tokens/TokenAnalyzer.js.map +1 -0
- package/{src/analysis/tokens/index.ts → dist/analysis/tokens/index.d.ts} +0 -1
- package/dist/analysis/tokens/index.js +24 -0
- package/dist/analysis/tokens/index.js.map +1 -0
- package/dist/clients/base/abstractClient.d.ts +99 -0
- package/dist/clients/base/abstractClient.js +98 -0
- package/dist/clients/base/abstractClient.js.map +1 -0
- package/dist/clients/base/httpClient.d.ts +24 -0
- package/dist/clients/base/httpClient.js +147 -0
- package/dist/clients/base/httpClient.js.map +1 -0
- package/{src/clients/base/index.ts → dist/clients/base/index.d.ts} +0 -1
- package/dist/clients/base/index.js +28 -0
- package/dist/clients/base/index.js.map +1 -0
- package/dist/clients/base/modelDetection.d.ts +41 -0
- package/dist/clients/base/modelDetection.js +88 -0
- package/dist/clients/base/modelDetection.js.map +1 -0
- package/dist/clients/base/responseProcessor.d.ts +45 -0
- package/dist/clients/base/responseProcessor.js +495 -0
- package/dist/clients/base/responseProcessor.js.map +1 -0
- package/dist/clients/factory/clientFactory.d.ts +23 -0
- package/dist/clients/factory/clientFactory.js +50 -0
- package/dist/clients/factory/clientFactory.js.map +1 -0
- package/{src/clients/factory/index.ts → dist/clients/factory/index.d.ts} +0 -1
- package/dist/clients/factory/index.js +24 -0
- package/dist/clients/factory/index.js.map +1 -0
- package/{src/clients/implementations/index.ts → dist/clients/implementations/index.d.ts} +0 -1
- package/dist/clients/implementations/index.js +24 -0
- package/dist/clients/implementations/index.js.map +1 -0
- package/dist/clients/implementations/openRouterClient.d.ts +69 -0
- package/dist/clients/implementations/openRouterClient.js +294 -0
- package/dist/clients/implementations/openRouterClient.js.map +1 -0
- package/dist/clients/openRouterClient.d.ts +42 -0
- package/dist/clients/openRouterClient.js +738 -0
- package/dist/clients/openRouterClient.js.map +1 -0
- package/{src/clients/openRouterClientWrapper.ts → dist/clients/openRouterClientWrapper.d.ts} +2 -24
- package/dist/clients/openRouterClientWrapper.js +64 -0
- package/dist/clients/openRouterClientWrapper.js.map +1 -0
- package/dist/clients/utils/directoryStructure.d.ts +14 -0
- package/dist/clients/utils/directoryStructure.js +48 -0
- package/dist/clients/utils/directoryStructure.js.map +1 -0
- package/{src/clients/utils/index.ts → dist/clients/utils/index.d.ts} +0 -1
- package/dist/clients/utils/index.js +31 -0
- package/dist/clients/utils/index.js.map +1 -0
- package/dist/clients/utils/languageDetection.d.ts +13 -0
- package/dist/clients/utils/languageDetection.js +46 -0
- package/dist/clients/utils/languageDetection.js.map +1 -0
- package/dist/clients/utils/promptFormatter.d.ts +37 -0
- package/dist/clients/utils/promptFormatter.js +150 -0
- package/dist/clients/utils/promptFormatter.js.map +1 -0
- package/{src/clients/utils/promptLoader.ts → dist/clients/utils/promptLoader.d.ts} +1 -27
- package/dist/clients/utils/promptLoader.js +49 -0
- package/dist/clients/utils/promptLoader.js.map +1 -0
- package/dist/clients/utils/tokenCounter.d.ts +81 -0
- package/dist/clients/utils/tokenCounter.js +209 -0
- package/dist/clients/utils/tokenCounter.js.map +1 -0
- package/dist/core/ApiClientSelector.d.ts +8 -0
- package/dist/core/ApiClientSelector.js +29 -0
- package/dist/core/ApiClientSelector.js.map +1 -0
- package/dist/core/ConfigurationService.d.ts +307 -0
- package/dist/core/ConfigurationService.js +516 -0
- package/dist/core/ConfigurationService.js.map +1 -0
- package/dist/core/ConsolidationService.d.ts +99 -0
- package/dist/core/ConsolidationService.js +341 -0
- package/dist/core/ConsolidationService.js.map +1 -0
- package/dist/core/InteractiveDisplayManager.d.ts +22 -0
- package/dist/core/InteractiveDisplayManager.js +70 -0
- package/dist/core/InteractiveDisplayManager.js.map +1 -0
- package/dist/core/OutputManager.d.ts +26 -0
- package/dist/core/OutputManager.js +217 -0
- package/dist/core/OutputManager.js.map +1 -0
- package/dist/core/ReviewGenerator.d.ts +13 -0
- package/dist/core/ReviewGenerator.js +102 -0
- package/dist/core/ReviewGenerator.js.map +1 -0
- package/dist/core/fileDiscovery.d.ts +35 -0
- package/dist/core/fileDiscovery.js +202 -0
- package/dist/core/fileDiscovery.js.map +1 -0
- package/dist/core/handlers/EstimationHandler.d.ts +18 -0
- package/dist/core/handlers/EstimationHandler.js +110 -0
- package/dist/core/handlers/EstimationHandler.js.map +1 -0
- package/dist/core/handlers/FileProcessingHandler.d.ts +31 -0
- package/dist/core/handlers/FileProcessingHandler.js +164 -0
- package/dist/core/handlers/FileProcessingHandler.js.map +1 -0
- package/dist/core/handlers/OutputHandler.d.ts +27 -0
- package/dist/core/handlers/OutputHandler.js +127 -0
- package/dist/core/handlers/OutputHandler.js.map +1 -0
- package/dist/core/handlers/ReviewExecutor.d.ts +32 -0
- package/dist/core/handlers/ReviewExecutor.js +111 -0
- package/dist/core/handlers/ReviewExecutor.js.map +1 -0
- package/dist/core/reviewOrchestrator.d.ts +24 -0
- package/dist/core/reviewOrchestrator.js +354 -0
- package/dist/core/reviewOrchestrator.js.map +1 -0
- package/dist/core/utils/ModelInfoUtils.d.ts +16 -0
- package/dist/core/utils/ModelInfoUtils.js +54 -0
- package/dist/core/utils/ModelInfoUtils.js.map +1 -0
- package/{src/formatters/outputFormatter.ts → dist/formatters/outputFormatter.d.ts} +2 -33
- package/dist/formatters/outputFormatter.js +65 -0
- package/dist/formatters/outputFormatter.js.map +1 -0
- package/dist/formatters/utils/IssueFormatters.d.ts +20 -0
- package/dist/formatters/utils/IssueFormatters.js +67 -0
- package/dist/formatters/utils/IssueFormatters.js.map +1 -0
- package/dist/formatters/utils/JsonFormatter.d.ts +13 -0
- package/dist/formatters/utils/JsonFormatter.js +57 -0
- package/dist/formatters/utils/JsonFormatter.js.map +1 -0
- package/dist/formatters/utils/MarkdownFormatters.d.ts +51 -0
- package/dist/formatters/utils/MarkdownFormatters.js +456 -0
- package/dist/formatters/utils/MarkdownFormatters.js.map +1 -0
- package/dist/formatters/utils/MetadataFormatter.d.ts +65 -0
- package/dist/formatters/utils/MetadataFormatter.js +219 -0
- package/dist/formatters/utils/MetadataFormatter.js.map +1 -0
- package/dist/formatters/utils/ModelInfoExtractor.d.ts +33 -0
- package/dist/formatters/utils/ModelInfoExtractor.js +111 -0
- package/dist/formatters/utils/ModelInfoExtractor.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js.map +1 -0
- package/dist/plugins/PluginInterface.d.ts +44 -0
- package/dist/plugins/PluginInterface.js +9 -0
- package/dist/plugins/PluginInterface.js.map +1 -0
- package/dist/plugins/PluginManager.d.ts +51 -0
- package/dist/plugins/PluginManager.js +151 -0
- package/dist/plugins/PluginManager.js.map +1 -0
- package/dist/prompts/PromptManager.d.ts +30 -0
- package/dist/prompts/PromptManager.js +62 -0
- package/dist/prompts/PromptManager.js.map +1 -0
- package/dist/prompts/cache/PromptCache.d.ts +32 -0
- package/dist/prompts/cache/PromptCache.js +48 -0
- package/dist/prompts/cache/PromptCache.js.map +1 -0
- package/dist/runtime/auth/service.d.ts +2 -0
- package/dist/runtime/auth/service.js +41 -0
- package/dist/runtime/auth/service.js.map +1 -0
- package/dist/runtime/auth/session.d.ts +5 -0
- package/dist/runtime/auth/session.js +87 -0
- package/dist/runtime/auth/session.js.map +1 -0
- package/dist/runtime/auth/types.d.ts +9 -0
- package/dist/runtime/auth/types.js +3 -0
- package/dist/runtime/auth/types.js.map +1 -0
- package/dist/runtime/cliEntry.d.ts +1 -0
- package/dist/runtime/cliEntry.js +266 -0
- package/dist/runtime/cliEntry.js.map +1 -0
- package/dist/runtime/debug/logManager.d.ts +5 -0
- package/dist/runtime/debug/logManager.js +31 -0
- package/dist/runtime/debug/logManager.js.map +1 -0
- package/dist/runtime/errors.d.ts +5 -0
- package/dist/runtime/errors.js +15 -0
- package/dist/runtime/errors.js.map +1 -0
- package/dist/runtime/fileCollector.d.ts +14 -0
- package/dist/runtime/fileCollector.js +382 -0
- package/dist/runtime/fileCollector.js.map +1 -0
- package/dist/runtime/manifest.d.ts +1 -0
- package/dist/runtime/manifest.js +65 -0
- package/dist/runtime/manifest.js.map +1 -0
- package/dist/runtime/openrouterProxy.d.ts +4 -0
- package/dist/runtime/openrouterProxy.js +43 -0
- package/dist/runtime/openrouterProxy.js.map +1 -0
- package/dist/runtime/preprod/webCheck.d.ts +1 -0
- package/dist/runtime/preprod/webCheck.js +98 -0
- package/dist/runtime/preprod/webCheck.js.map +1 -0
- package/dist/runtime/proxyConfig.d.ts +6 -0
- package/dist/runtime/proxyConfig.js +86 -0
- package/dist/runtime/proxyConfig.js.map +1 -0
- package/dist/runtime/proxyEnvironment.d.ts +3 -0
- package/dist/runtime/proxyEnvironment.js +63 -0
- package/dist/runtime/proxyEnvironment.js.map +1 -0
- package/dist/runtime/reportMerge.d.ts +30 -0
- package/dist/runtime/reportMerge.js +70 -0
- package/dist/runtime/reportMerge.js.map +1 -0
- package/dist/runtime/reporting/markdownReportBuilder.d.ts +17 -0
- package/dist/runtime/reporting/markdownReportBuilder.js +154 -0
- package/dist/runtime/reporting/markdownReportBuilder.js.map +1 -0
- package/dist/runtime/reporting/reportDataCollector.d.ts +31 -0
- package/dist/runtime/reporting/reportDataCollector.js +170 -0
- package/dist/runtime/reporting/reportDataCollector.js.map +1 -0
- package/dist/runtime/reporting/summaryGenerator.d.ts +10 -0
- package/dist/runtime/reporting/summaryGenerator.js +67 -0
- package/dist/runtime/reporting/summaryGenerator.js.map +1 -0
- package/dist/runtime/reviewPipeline.d.ts +47 -0
- package/dist/runtime/reviewPipeline.js +161 -0
- package/dist/runtime/reviewPipeline.js.map +1 -0
- package/dist/runtime/runAiCodeReview.d.ts +28 -0
- package/dist/runtime/runAiCodeReview.js +373 -0
- package/dist/runtime/runAiCodeReview.js.map +1 -0
- package/dist/runtime/runtimeConfig.d.ts +4 -0
- package/dist/runtime/runtimeConfig.js +7 -0
- package/dist/runtime/runtimeConfig.js.map +1 -0
- package/dist/runtime/ui/Layout.d.ts +11 -0
- package/dist/runtime/ui/Layout.js +47 -0
- package/dist/runtime/ui/Layout.js.map +1 -0
- package/dist/runtime/ui/RuntimeApp.d.ts +6 -0
- package/dist/runtime/ui/RuntimeApp.js +172 -0
- package/dist/runtime/ui/RuntimeApp.js.map +1 -0
- package/dist/runtime/ui/inkModules.d.ts +10 -0
- package/dist/runtime/ui/inkModules.js +63 -0
- package/dist/runtime/ui/inkModules.js.map +1 -0
- package/dist/runtime/ui/screens/AuthScreen.d.ts +6 -0
- package/dist/runtime/ui/screens/AuthScreen.js +67 -0
- package/dist/runtime/ui/screens/AuthScreen.js.map +1 -0
- package/dist/runtime/ui/screens/ModeSelection.d.ts +10 -0
- package/dist/runtime/ui/screens/ModeSelection.js +100 -0
- package/dist/runtime/ui/screens/ModeSelection.js.map +1 -0
- package/dist/runtime/ui/screens/ProgressScreen.d.ts +12 -0
- package/dist/runtime/ui/screens/ProgressScreen.js +64 -0
- package/dist/runtime/ui/screens/ProgressScreen.js.map +1 -0
- package/dist/runtime/ui/screens/ResultsScreen.d.ts +7 -0
- package/dist/runtime/ui/screens/ResultsScreen.js +29 -0
- package/dist/runtime/ui/screens/ResultsScreen.js.map +1 -0
- package/dist/strategies/ArchitecturalReviewStrategy.d.ts +29 -0
- package/dist/strategies/ArchitecturalReviewStrategy.js +42 -0
- package/dist/strategies/ArchitecturalReviewStrategy.js.map +1 -0
- package/dist/strategies/CodingTestReviewStrategy.d.ts +194 -0
- package/dist/strategies/CodingTestReviewStrategy.js +681 -0
- package/dist/strategies/CodingTestReviewStrategy.js.map +1 -0
- package/dist/strategies/ConsolidatedReviewStrategy.d.ts +25 -0
- package/dist/strategies/ConsolidatedReviewStrategy.js +45 -0
- package/dist/strategies/ConsolidatedReviewStrategy.js.map +1 -0
- package/dist/strategies/ExtractPatternsReviewStrategy.d.ts +30 -0
- package/dist/strategies/ExtractPatternsReviewStrategy.js +51 -0
- package/dist/strategies/ExtractPatternsReviewStrategy.js.map +1 -0
- package/dist/strategies/MultiPassReviewStrategy.d.ts +86 -0
- package/dist/strategies/MultiPassReviewStrategy.js +590 -0
- package/dist/strategies/MultiPassReviewStrategy.js.map +1 -0
- package/dist/strategies/ReviewStrategy.d.ts +45 -0
- package/dist/strategies/ReviewStrategy.js +24 -0
- package/dist/strategies/ReviewStrategy.js.map +1 -0
- package/dist/strategies/StrategyFactory.d.ts +19 -0
- package/dist/strategies/StrategyFactory.js +72 -0
- package/dist/strategies/StrategyFactory.js.map +1 -0
- package/{src/strategies/index.ts → dist/strategies/index.d.ts} +0 -1
- package/dist/strategies/index.js +30 -0
- package/dist/strategies/index.js.map +1 -0
- package/dist/tokenizers/baseTokenizer.d.ts +25 -0
- package/dist/tokenizers/baseTokenizer.js +48 -0
- package/dist/tokenizers/baseTokenizer.js.map +1 -0
- package/dist/tokenizers/gptTokenizer.d.ts +7 -0
- package/dist/tokenizers/gptTokenizer.js +28 -0
- package/dist/tokenizers/gptTokenizer.js.map +1 -0
- package/{src/tokenizers/index.ts → dist/tokenizers/index.d.ts} +0 -1
- package/dist/tokenizers/index.js +24 -0
- package/dist/tokenizers/index.js.map +1 -0
- package/dist/types/apiResponses.d.ts +39 -0
- package/dist/types/apiResponses.js +9 -0
- package/dist/types/apiResponses.js.map +1 -0
- package/dist/types/cli.d.ts +22 -0
- package/dist/types/cli.js +3 -0
- package/dist/types/cli.js.map +1 -0
- package/{src/types/common.ts → dist/types/common.d.ts} +2 -19
- package/dist/types/common.js +14 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/configuration.d.ts +682 -0
- package/dist/types/configuration.js +65 -0
- package/dist/types/configuration.js.map +1 -0
- package/dist/types/review.d.ts +318 -0
- package/dist/types/review.js +8 -0
- package/dist/types/review.js.map +1 -0
- package/dist/types/reviewSchema.d.ts +543 -0
- package/{src/types/reviewSchema.ts → dist/types/reviewSchema.js} +44 -104
- package/dist/types/reviewSchema.js.map +1 -0
- package/dist/types/structuredReview.d.ts +119 -0
- package/dist/types/structuredReview.js +6 -0
- package/dist/types/structuredReview.js.map +1 -0
- package/dist/types/tokenAnalysis.d.ts +44 -0
- package/dist/types/tokenAnalysis.js +4 -0
- package/dist/types/tokenAnalysis.js.map +1 -0
- package/dist/utils/FileReader.d.ts +33 -0
- package/dist/utils/FileReader.js +88 -0
- package/dist/utils/FileReader.js.map +1 -0
- package/dist/utils/FileWriter.d.ts +26 -0
- package/dist/utils/FileWriter.js +76 -0
- package/dist/utils/FileWriter.js.map +1 -0
- package/dist/utils/PathGenerator.d.ts +30 -0
- package/dist/utils/PathGenerator.js +82 -0
- package/dist/utils/PathGenerator.js.map +1 -0
- package/dist/utils/api/apiUtils.d.ts +3 -0
- package/dist/utils/api/apiUtils.js +20 -0
- package/dist/utils/api/apiUtils.js.map +1 -0
- package/dist/utils/api/index.js +18 -0
- package/dist/utils/api/index.js.map +1 -0
- package/dist/utils/apiErrorHandler.d.ts +130 -0
- package/dist/utils/apiErrorHandler.js +256 -0
- package/dist/utils/apiErrorHandler.js.map +1 -0
- package/dist/utils/ciDataCollector.d.ts +51 -0
- package/dist/utils/ciDataCollector.js +197 -0
- package/dist/utils/ciDataCollector.js.map +1 -0
- package/dist/utils/codingTestConfigLoader.d.ts +66 -0
- package/dist/utils/codingTestConfigLoader.js +420 -0
- package/dist/utils/codingTestConfigLoader.js.map +1 -0
- package/dist/utils/dependencies/aiDependencyAnalyzer.d.ts +30 -0
- package/dist/utils/dependencies/aiDependencyAnalyzer.js +343 -0
- package/dist/utils/dependencies/aiDependencyAnalyzer.js.map +1 -0
- package/dist/utils/detection/frameworkDetector.d.ts +43 -0
- package/dist/utils/detection/frameworkDetector.js +850 -0
- package/dist/utils/detection/frameworkDetector.js.map +1 -0
- package/{src/utils/detection/index.ts → dist/utils/detection/index.d.ts} +0 -1
- package/dist/utils/detection/index.js +28 -0
- package/dist/utils/detection/index.js.map +1 -0
- package/dist/utils/detection/projectTypeDetector.d.ts +27 -0
- package/dist/utils/detection/projectTypeDetector.js +469 -0
- package/dist/utils/detection/projectTypeDetector.js.map +1 -0
- package/dist/utils/diagramGenerator.d.ts +49 -0
- package/dist/utils/diagramGenerator.js +218 -0
- package/dist/utils/diagramGenerator.js.map +1 -0
- package/dist/utils/errorLogger.d.ts +24 -0
- package/dist/utils/errorLogger.js +59 -0
- package/dist/utils/errorLogger.js.map +1 -0
- package/dist/utils/estimationUtils.d.ts +139 -0
- package/dist/utils/estimationUtils.js +329 -0
- package/dist/utils/estimationUtils.js.map +1 -0
- package/dist/utils/fileFilters.d.ts +72 -0
- package/dist/utils/fileFilters.js +338 -0
- package/dist/utils/fileFilters.js.map +1 -0
- package/dist/utils/fileSystem.d.ts +22 -0
- package/dist/utils/fileSystem.js +45 -0
- package/dist/utils/fileSystem.js.map +1 -0
- package/{src/utils/index.ts → dist/utils/index.d.ts} +0 -14
- package/dist/utils/index.js +52 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +77 -0
- package/dist/utils/logger.js +271 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/pathValidator.d.ts +40 -0
- package/dist/utils/pathValidator.js +98 -0
- package/dist/utils/pathValidator.js.map +1 -0
- package/{src/utils/priorityFilter.ts → dist/utils/priorityFilter.d.ts} +1 -26
- package/dist/utils/priorityFilter.js +54 -0
- package/dist/utils/priorityFilter.js.map +1 -0
- package/dist/utils/projectDocs.d.ts +47 -0
- package/dist/utils/projectDocs.js +158 -0
- package/dist/utils/projectDocs.js.map +1 -0
- package/dist/utils/promptPaths.d.ts +6 -0
- package/dist/utils/promptPaths.js +33 -0
- package/dist/utils/promptPaths.js.map +1 -0
- package/dist/utils/promptTemplateManager.d.ts +34 -0
- package/dist/utils/promptTemplateManager.js +141 -0
- package/dist/utils/promptTemplateManager.js.map +1 -0
- package/dist/utils/review/consolidateReview.d.ts +15 -0
- package/dist/utils/review/consolidateReview.js +481 -0
- package/dist/utils/review/consolidateReview.js.map +1 -0
- package/dist/utils/review/fixDisplay.d.ts +20 -0
- package/dist/utils/review/fixDisplay.js +84 -0
- package/dist/utils/review/fixDisplay.js.map +1 -0
- package/dist/utils/review/fixImplementation.d.ts +28 -0
- package/dist/utils/review/fixImplementation.js +60 -0
- package/dist/utils/review/fixImplementation.js.map +1 -0
- package/dist/utils/review/index.d.ts +13 -0
- package/dist/utils/review/index.js +50 -0
- package/dist/utils/review/index.js.map +1 -0
- package/dist/utils/review/interactiveProcessing.d.ts +25 -0
- package/dist/utils/review/interactiveProcessing.js +251 -0
- package/dist/utils/review/interactiveProcessing.js.map +1 -0
- package/dist/utils/review/progressTracker.d.ts +106 -0
- package/dist/utils/review/progressTracker.js +227 -0
- package/dist/utils/review/progressTracker.js.map +1 -0
- package/dist/utils/review/reviewExtraction.d.ts +31 -0
- package/dist/utils/review/reviewExtraction.js +324 -0
- package/dist/utils/review/reviewExtraction.js.map +1 -0
- package/dist/utils/review/types.d.ts +45 -0
- package/dist/utils/review/types.js +18 -0
- package/dist/utils/review/types.js.map +1 -0
- package/{src/utils/reviewActionHandler.ts → dist/utils/reviewActionHandler.d.ts} +0 -2
- package/dist/utils/reviewActionHandler.js +34 -0
- package/dist/utils/reviewActionHandler.js.map +1 -0
- package/dist/utils/reviewParser.d.ts +34 -0
- package/dist/utils/reviewParser.js +218 -0
- package/dist/utils/reviewParser.js.map +1 -0
- package/dist/utils/sanitizer.d.ts +82 -0
- package/dist/utils/sanitizer.js +239 -0
- package/dist/utils/sanitizer.js.map +1 -0
- package/dist/utils/smartFileSelector.d.ts +50 -0
- package/dist/utils/smartFileSelector.js +261 -0
- package/dist/utils/smartFileSelector.js.map +1 -0
- package/dist/utils/templateLoader.d.ts +44 -0
- package/dist/utils/templateLoader.js +431 -0
- package/dist/utils/templateLoader.js.map +1 -0
- package/dist/utils/treeGenerator.d.ts +12 -0
- package/dist/utils/treeGenerator.js +133 -0
- package/dist/utils/treeGenerator.js.map +1 -0
- package/package.json +5 -2
- package/.cr-aia.yml +0 -23
- package/.crignore +0 -0
- package/docs/opt-in-full-context.md +0 -27
- package/reports/cr-cr-aia-17-11-2025-20-13.md +0 -354
- package/src/analysis/FindingsExtractor.ts +0 -431
- package/src/analysis/ai-detection/analyzers/BaseAnalyzer.ts +0 -267
- package/src/analysis/ai-detection/analyzers/DocumentationAnalyzer.ts +0 -622
- package/src/analysis/ai-detection/analyzers/GitHistoryAnalyzer.ts +0 -430
- package/src/analysis/ai-detection/core/AIDetectionEngine.ts +0 -467
- package/src/analysis/ai-detection/types/DetectionTypes.ts +0 -406
- package/src/analysis/ai-detection/utils/SubmissionConverter.ts +0 -390
- package/src/analysis/context/ReviewContext.ts +0 -378
- package/src/analysis/tokens/TokenAnalyzer.ts +0 -747
- package/src/clients/base/abstractClient.ts +0 -190
- package/src/clients/base/httpClient.ts +0 -160
- package/src/clients/base/modelDetection.ts +0 -107
- package/src/clients/base/responseProcessor.ts +0 -586
- package/src/clients/factory/clientFactory.ts +0 -55
- package/src/clients/implementations/openRouterClient.ts +0 -413
- package/src/clients/openRouterClient.ts +0 -870
- package/src/clients/utils/directoryStructure.ts +0 -52
- package/src/clients/utils/languageDetection.ts +0 -44
- package/src/clients/utils/promptFormatter.ts +0 -182
- package/src/clients/utils/tokenCounter.ts +0 -297
- package/src/core/ApiClientSelector.ts +0 -37
- package/src/core/ConfigurationService.ts +0 -591
- package/src/core/ConsolidationService.ts +0 -423
- package/src/core/InteractiveDisplayManager.ts +0 -81
- package/src/core/OutputManager.ts +0 -275
- package/src/core/ReviewGenerator.ts +0 -140
- package/src/core/fileDiscovery.ts +0 -237
- package/src/core/handlers/EstimationHandler.ts +0 -104
- package/src/core/handlers/FileProcessingHandler.ts +0 -210
- package/src/core/handlers/OutputHandler.ts +0 -125
- package/src/core/handlers/ReviewExecutor.ts +0 -104
- package/src/core/reviewOrchestrator.ts +0 -333
- package/src/core/utils/ModelInfoUtils.ts +0 -56
- package/src/formatters/utils/IssueFormatters.ts +0 -83
- package/src/formatters/utils/JsonFormatter.ts +0 -77
- package/src/formatters/utils/MarkdownFormatters.ts +0 -609
- package/src/formatters/utils/MetadataFormatter.ts +0 -269
- package/src/formatters/utils/ModelInfoExtractor.ts +0 -115
- package/src/index.ts +0 -25
- package/src/plugins/PluginInterface.ts +0 -50
- package/src/plugins/PluginManager.ts +0 -126
- package/src/prompts/PromptManager.ts +0 -69
- package/src/prompts/cache/PromptCache.ts +0 -50
- package/src/prompts/promptText/common/variables/css-frameworks.json +0 -33
- package/src/prompts/promptText/common/variables/framework-versions.json +0 -45
- package/src/prompts/promptText/frameworks/react/comprehensive.hbs +0 -19
- package/src/prompts/promptText/languages/css/comprehensive.hbs +0 -18
- package/src/prompts/promptText/languages/generic/comprehensive.hbs +0 -20
- package/src/prompts/promptText/languages/html/comprehensive.hbs +0 -18
- package/src/prompts/promptText/languages/javascript/comprehensive.hbs +0 -18
- package/src/prompts/promptText/languages/python/comprehensive.hbs +0 -18
- package/src/prompts/promptText/languages/typescript/comprehensive.hbs +0 -18
- package/src/runtime/auth/service.ts +0 -58
- package/src/runtime/auth/session.ts +0 -103
- package/src/runtime/auth/types.ts +0 -11
- package/src/runtime/cliEntry.ts +0 -214
- package/src/runtime/debug/logManager.ts +0 -37
- package/src/runtime/errors.ts +0 -13
- package/src/runtime/fileCollector.ts +0 -495
- package/src/runtime/manifest.ts +0 -64
- package/src/runtime/openrouterProxy.ts +0 -45
- package/src/runtime/preprod/webCheck.ts +0 -104
- package/src/runtime/proxyConfig.ts +0 -94
- package/src/runtime/proxyEnvironment.ts +0 -71
- package/src/runtime/reportMerge.ts +0 -102
- package/src/runtime/reporting/markdownReportBuilder.ts +0 -138
- package/src/runtime/reporting/reportDataCollector.ts +0 -234
- package/src/runtime/reporting/summaryGenerator.ts +0 -86
- package/src/runtime/reviewPipeline.ts +0 -200
- package/src/runtime/runAiCodeReview.ts +0 -308
- package/src/runtime/runtimeConfig.ts +0 -5
- package/src/runtime/ui/Layout.tsx +0 -57
- package/src/runtime/ui/RuntimeApp.tsx +0 -262
- package/src/runtime/ui/inkModules.ts +0 -73
- package/src/runtime/ui/screens/AuthScreen.tsx +0 -128
- package/src/runtime/ui/screens/ModeSelection.tsx +0 -185
- package/src/runtime/ui/screens/ProgressScreen.tsx +0 -110
- package/src/runtime/ui/screens/ResultsScreen.tsx +0 -103
- package/src/strategies/ArchitecturalReviewStrategy.ts +0 -54
- package/src/strategies/CodingTestReviewStrategy.ts +0 -920
- package/src/strategies/ConsolidatedReviewStrategy.ts +0 -59
- package/src/strategies/ExtractPatternsReviewStrategy.ts +0 -64
- package/src/strategies/MultiPassReviewStrategy.ts +0 -785
- package/src/strategies/ReviewStrategy.ts +0 -64
- package/src/strategies/StrategyFactory.ts +0 -79
- package/src/tokenizers/baseTokenizer.ts +0 -61
- package/src/tokenizers/gptTokenizer.ts +0 -27
- package/src/types/apiResponses.ts +0 -40
- package/src/types/cli.ts +0 -24
- package/src/types/configuration.ts +0 -201
- package/src/types/handlebars.d.ts +0 -5
- package/src/types/patch.d.ts +0 -25
- package/src/types/review.ts +0 -312
- package/src/types/reviewContext.d.ts +0 -65
- package/src/types/structuredReview.ts +0 -167
- package/src/types/tokenAnalysis.ts +0 -56
- package/src/utils/FileReader.ts +0 -93
- package/src/utils/FileWriter.ts +0 -76
- package/src/utils/PathGenerator.ts +0 -97
- package/src/utils/api/apiUtils.ts +0 -14
- package/src/utils/apiErrorHandler.ts +0 -287
- package/src/utils/ciDataCollector.ts +0 -252
- package/src/utils/codingTestConfigLoader.ts +0 -466
- package/src/utils/dependencies/aiDependencyAnalyzer.ts +0 -454
- package/src/utils/detection/frameworkDetector.ts +0 -879
- package/src/utils/detection/projectTypeDetector.ts +0 -518
- package/src/utils/diagramGenerator.ts +0 -206
- package/src/utils/errorLogger.ts +0 -60
- package/src/utils/estimationUtils.ts +0 -407
- package/src/utils/fileFilters.ts +0 -373
- package/src/utils/fileSystem.ts +0 -57
- package/src/utils/logger.ts +0 -290
- package/src/utils/pathValidator.ts +0 -98
- package/src/utils/projectDocs.ts +0 -189
- package/src/utils/promptPaths.ts +0 -29
- package/src/utils/promptTemplateManager.ts +0 -157
- package/src/utils/review/consolidateReview.ts +0 -553
- package/src/utils/review/fixDisplay.ts +0 -100
- package/src/utils/review/fixImplementation.ts +0 -61
- package/src/utils/review/index.ts +0 -36
- package/src/utils/review/interactiveProcessing.ts +0 -294
- package/src/utils/review/progressTracker.ts +0 -296
- package/src/utils/review/reviewExtraction.ts +0 -382
- package/src/utils/review/types.ts +0 -46
- package/src/utils/reviewParser.ts +0 -253
- package/src/utils/sanitizer.ts +0 -238
- package/src/utils/smartFileSelector.ts +0 -255
- package/src/utils/templateLoader.ts +0 -514
- package/src/utils/treeGenerator.ts +0 -153
- package/tsconfig.build.json +0 -14
- package/tsconfig.json +0 -59
- /package/{src/utils/api/index.ts → dist/utils/api/index.d.ts} +0 -0
|
@@ -1,382 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Utilities for extracting and parsing code review results.
|
|
3
|
-
*
|
|
4
|
-
* This module provides functions for extracting actionable items from code review results,
|
|
5
|
-
* including parsing sections by priority, identifying file locations, and extracting code snippets.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import path from 'node:path';
|
|
9
|
-
import logger from '../logger';
|
|
10
|
-
import { FixPriority, type FixSuggestion } from './types';
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Extract fix suggestions from review content
|
|
14
|
-
* @param reviewContent The content of the review
|
|
15
|
-
* @param projectPath Base path of the project
|
|
16
|
-
* @param priorityLevel Optional priority level to extract (if not provided, extracts all)
|
|
17
|
-
* @returns Array of fix suggestions
|
|
18
|
-
*/
|
|
19
|
-
export async function extractFixSuggestions(
|
|
20
|
-
reviewContent: string,
|
|
21
|
-
projectPath: string,
|
|
22
|
-
priorityLevel?: FixPriority,
|
|
23
|
-
): Promise<FixSuggestion[]> {
|
|
24
|
-
const suggestions: FixSuggestion[] = [];
|
|
25
|
-
|
|
26
|
-
// If a specific priority level is requested, only extract that level
|
|
27
|
-
if (priorityLevel) {
|
|
28
|
-
let section: string | null = null;
|
|
29
|
-
|
|
30
|
-
switch (priorityLevel) {
|
|
31
|
-
case FixPriority.HIGH:
|
|
32
|
-
section = extractSection(reviewContent, '### 🟥 High Priority', '### 🟧 Medium Priority');
|
|
33
|
-
break;
|
|
34
|
-
case FixPriority.MEDIUM:
|
|
35
|
-
section = extractSection(reviewContent, '### 🟧 Medium Priority', '### 🟩 Low Priority');
|
|
36
|
-
break;
|
|
37
|
-
case FixPriority.LOW:
|
|
38
|
-
section = extractSection(reviewContent, '### 🟩 Low Priority', '---');
|
|
39
|
-
break;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
if (section) {
|
|
43
|
-
const prioritySuggestions = await parseSuggestions(section, priorityLevel, projectPath);
|
|
44
|
-
suggestions.push(...prioritySuggestions);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
return suggestions;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
// Otherwise, extract all priority levels
|
|
51
|
-
// Extract high priority issues
|
|
52
|
-
const highPrioritySection = extractSection(
|
|
53
|
-
reviewContent,
|
|
54
|
-
'### 🟥 High Priority',
|
|
55
|
-
'### 🟧 Medium Priority',
|
|
56
|
-
);
|
|
57
|
-
if (highPrioritySection) {
|
|
58
|
-
const highPrioritySuggestions = await parseSuggestions(
|
|
59
|
-
highPrioritySection,
|
|
60
|
-
FixPriority.HIGH,
|
|
61
|
-
projectPath,
|
|
62
|
-
);
|
|
63
|
-
suggestions.push(...highPrioritySuggestions);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
// Extract medium priority issues
|
|
67
|
-
const mediumPrioritySection = extractSection(
|
|
68
|
-
reviewContent,
|
|
69
|
-
'### 🟧 Medium Priority',
|
|
70
|
-
'### 🟩 Low Priority',
|
|
71
|
-
);
|
|
72
|
-
if (mediumPrioritySection) {
|
|
73
|
-
const mediumPrioritySuggestions = await parseSuggestions(
|
|
74
|
-
mediumPrioritySection,
|
|
75
|
-
FixPriority.MEDIUM,
|
|
76
|
-
projectPath,
|
|
77
|
-
);
|
|
78
|
-
suggestions.push(...mediumPrioritySuggestions);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
// Extract low priority issues
|
|
82
|
-
const lowPrioritySection = extractSection(reviewContent, '### 🟩 Low Priority', '---');
|
|
83
|
-
if (lowPrioritySection) {
|
|
84
|
-
const lowPrioritySuggestions = await parseSuggestions(
|
|
85
|
-
lowPrioritySection,
|
|
86
|
-
FixPriority.LOW,
|
|
87
|
-
projectPath,
|
|
88
|
-
);
|
|
89
|
-
suggestions.push(...lowPrioritySuggestions);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
return suggestions;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* Extract a section from the review content
|
|
97
|
-
* @param content Full review content
|
|
98
|
-
* @param startMarker Start marker for the section
|
|
99
|
-
* @param endMarker End marker for the section
|
|
100
|
-
* @returns The extracted section or null if not found
|
|
101
|
-
*/
|
|
102
|
-
export function extractSection(
|
|
103
|
-
content: string,
|
|
104
|
-
startMarker: string,
|
|
105
|
-
endMarker: string,
|
|
106
|
-
): string | null {
|
|
107
|
-
// Try exact match first
|
|
108
|
-
let startIndex = content.indexOf(startMarker);
|
|
109
|
-
|
|
110
|
-
// If exact match fails, try more flexible matching
|
|
111
|
-
if (startIndex === -1) {
|
|
112
|
-
// Try without emoji
|
|
113
|
-
const startMarkerNoEmoji = startMarker.replace(/🟥|🟧|🟩/g, '').trim();
|
|
114
|
-
startIndex = content.indexOf(startMarkerNoEmoji);
|
|
115
|
-
|
|
116
|
-
// Try with different heading levels (## or # instead of ###)
|
|
117
|
-
if (startIndex === -1) {
|
|
118
|
-
const startMarkerAltHeading = startMarker.replace('###', '##');
|
|
119
|
-
startIndex = content.indexOf(startMarkerAltHeading);
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
if (startIndex === -1) {
|
|
123
|
-
const startMarkerAltHeading2 = startMarker.replace('###', '#');
|
|
124
|
-
startIndex = content.indexOf(startMarkerAltHeading2);
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
// Try with case-insensitive match for priority level
|
|
128
|
-
if (startIndex === -1) {
|
|
129
|
-
const priorityLevel = startMarker.includes('High')
|
|
130
|
-
? 'high'
|
|
131
|
-
: startMarker.includes('Medium')
|
|
132
|
-
? 'medium'
|
|
133
|
-
: startMarker.includes('Low')
|
|
134
|
-
? 'low'
|
|
135
|
-
: '';
|
|
136
|
-
|
|
137
|
-
if (priorityLevel) {
|
|
138
|
-
const regex = new RegExp(`[#]{1,3}\\s*(?:🟥|🟧|🟩)?\\s*${priorityLevel}\\s*priority`, 'i');
|
|
139
|
-
const match = content.match(regex);
|
|
140
|
-
if (match && match.index !== undefined) {
|
|
141
|
-
startIndex = match.index;
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
if (startIndex === -1) return null;
|
|
148
|
-
|
|
149
|
-
// Try exact match for end marker
|
|
150
|
-
let endIndex = content.indexOf(endMarker, startIndex);
|
|
151
|
-
|
|
152
|
-
// If exact match fails, try more flexible matching for end marker
|
|
153
|
-
if (endIndex === -1) {
|
|
154
|
-
// Try without emoji
|
|
155
|
-
const endMarkerNoEmoji = endMarker.replace(/🟥|🟧|🟩/g, '').trim();
|
|
156
|
-
endIndex = content.indexOf(endMarkerNoEmoji, startIndex);
|
|
157
|
-
|
|
158
|
-
// Try with different heading levels
|
|
159
|
-
if (endIndex === -1) {
|
|
160
|
-
const endMarkerAltHeading = endMarker.replace('###', '##');
|
|
161
|
-
endIndex = content.indexOf(endMarkerAltHeading, startIndex);
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
if (endIndex === -1) {
|
|
165
|
-
const endMarkerAltHeading2 = endMarker.replace('###', '#');
|
|
166
|
-
endIndex = content.indexOf(endMarkerAltHeading2, startIndex);
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
// If we still can't find the end marker, look for the next heading
|
|
170
|
-
if (endIndex === -1) {
|
|
171
|
-
const nextHeadingMatch = content.substring(startIndex).match(/\n[#]{1,3}\s/);
|
|
172
|
-
if (nextHeadingMatch && nextHeadingMatch.index !== undefined) {
|
|
173
|
-
endIndex = startIndex + nextHeadingMatch.index;
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
if (endIndex === -1) return content.substring(startIndex);
|
|
179
|
-
|
|
180
|
-
return content.substring(startIndex, endIndex);
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
/**
|
|
184
|
-
* Parse suggestions from a section of the review
|
|
185
|
-
* @param sectionContent Content of the section
|
|
186
|
-
* @param priority Priority level of the suggestions
|
|
187
|
-
* @param projectPath Base path of the project
|
|
188
|
-
* @returns Array of fix suggestions
|
|
189
|
-
*/
|
|
190
|
-
export async function parseSuggestions(
|
|
191
|
-
sectionContent: string,
|
|
192
|
-
priority: FixPriority,
|
|
193
|
-
projectPath: string,
|
|
194
|
-
): Promise<FixSuggestion[]> {
|
|
195
|
-
const suggestions: FixSuggestion[] = [];
|
|
196
|
-
|
|
197
|
-
// Split the section into individual issues to reduce memory usage
|
|
198
|
-
// Try different patterns to match issue blocks
|
|
199
|
-
let issueBlocks: string[] = [];
|
|
200
|
-
|
|
201
|
-
// Pattern 1: **Issue**: format
|
|
202
|
-
const pattern1Blocks = sectionContent
|
|
203
|
-
.split(/(?=\*\*Issue\*\*:)/)
|
|
204
|
-
.filter((block) => block.trim().startsWith('**Issue**:'));
|
|
205
|
-
if (pattern1Blocks.length > 0) {
|
|
206
|
-
issueBlocks = pattern1Blocks;
|
|
207
|
-
} else {
|
|
208
|
-
// Pattern 2: 1. **Issue**: format (numbered list)
|
|
209
|
-
const pattern2Blocks = sectionContent
|
|
210
|
-
.split(/(?=\d+\.\s*\*\*Issue\*\*:)/)
|
|
211
|
-
.filter((block) => block.trim().match(/^\d+\.\s*\*\*Issue\*\*/));
|
|
212
|
-
if (pattern2Blocks.length > 0) {
|
|
213
|
-
issueBlocks = pattern2Blocks;
|
|
214
|
-
} else {
|
|
215
|
-
// Pattern 3: ### Issue: format (heading)
|
|
216
|
-
const pattern3Blocks = sectionContent
|
|
217
|
-
.split(/(?=[#]{1,3}\s+Issue:)/)
|
|
218
|
-
.filter((block) => block.trim().match(/^[#]{1,3}\s+Issue:/));
|
|
219
|
-
if (pattern3Blocks.length > 0) {
|
|
220
|
-
issueBlocks = pattern3Blocks;
|
|
221
|
-
} else {
|
|
222
|
-
// Pattern 4: **Finding**: format (security reviews)
|
|
223
|
-
const pattern4Blocks = sectionContent
|
|
224
|
-
.split(/(?=\*\*Finding\*\*:)/)
|
|
225
|
-
.filter((block) => block.trim().startsWith('**Finding**:'));
|
|
226
|
-
if (pattern4Blocks.length > 0) {
|
|
227
|
-
issueBlocks = pattern4Blocks;
|
|
228
|
-
} else {
|
|
229
|
-
// Pattern 5: **Performance Issue**: format (performance reviews)
|
|
230
|
-
const pattern5Blocks = sectionContent
|
|
231
|
-
.split(/(?=\*\*Performance Issue\*\*:)/)
|
|
232
|
-
.filter((block) => block.trim().startsWith('**Performance Issue**:'));
|
|
233
|
-
if (pattern5Blocks.length > 0) {
|
|
234
|
-
issueBlocks = pattern5Blocks;
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
for (const issueBlock of issueBlocks) {
|
|
242
|
-
try {
|
|
243
|
-
// Extract issue description using multiple patterns
|
|
244
|
-
let issueDescription = '';
|
|
245
|
-
let issueMatch = issueBlock.match(/\*\*Issue\*\*:([^*]+)/);
|
|
246
|
-
if (!issueMatch) {
|
|
247
|
-
// Try alternative patterns
|
|
248
|
-
issueMatch = issueBlock.match(/\d+\.\s*\*\*Issue\*\*:([^*]+)/);
|
|
249
|
-
}
|
|
250
|
-
if (!issueMatch) {
|
|
251
|
-
issueMatch = issueBlock.match(/[#]{1,3}\s+Issue:([^\n]+)/);
|
|
252
|
-
}
|
|
253
|
-
if (!issueMatch) {
|
|
254
|
-
issueMatch = issueBlock.match(/\*\*Finding\*\*:([^*]+)/);
|
|
255
|
-
}
|
|
256
|
-
if (!issueMatch) {
|
|
257
|
-
issueMatch = issueBlock.match(/\*\*Performance Issue\*\*:([^*]+)/);
|
|
258
|
-
}
|
|
259
|
-
if (!issueMatch) continue;
|
|
260
|
-
issueDescription = issueMatch[1].trim();
|
|
261
|
-
|
|
262
|
-
// Extract file path using multiple patterns
|
|
263
|
-
let filePath = '';
|
|
264
|
-
let fileMatch = issueBlock.match(/\*\*File\*\*:([^*]+)/);
|
|
265
|
-
if (!fileMatch) {
|
|
266
|
-
fileMatch = issueBlock.match(/\*\*Location\*\*:([^*]+)/);
|
|
267
|
-
}
|
|
268
|
-
if (!fileMatch) {
|
|
269
|
-
fileMatch = issueBlock.match(/File:([^\n]+)/);
|
|
270
|
-
}
|
|
271
|
-
if (!fileMatch) {
|
|
272
|
-
fileMatch = issueBlock.match(/Path:([^\n]+)/);
|
|
273
|
-
}
|
|
274
|
-
if (!fileMatch) {
|
|
275
|
-
// Try to find any path-like string in the issue block
|
|
276
|
-
const pathMatch = issueBlock.match(
|
|
277
|
-
/(?:src|lib|test|app|components|utils|helpers|services|models|controllers|views|pages|api|config|public|assets|styles|css|js|ts|tsx|jsx)\/[\w\-./_]+\.(ts|js|tsx|jsx|json|css|scss|html|md)/,
|
|
278
|
-
);
|
|
279
|
-
if (pathMatch) {
|
|
280
|
-
filePath = pathMatch[0].trim();
|
|
281
|
-
} else {
|
|
282
|
-
continue; // Skip if we can't find a file path
|
|
283
|
-
}
|
|
284
|
-
} else {
|
|
285
|
-
filePath = fileMatch[1].trim();
|
|
286
|
-
}
|
|
287
|
-
// Remove any markdown formatting from the file path
|
|
288
|
-
let cleanFilePath = filePath.replace(/`/g, '').replace(/\*/g, '').trim();
|
|
289
|
-
|
|
290
|
-
// Extract the actual file path from common patterns
|
|
291
|
-
const filePathMatch = cleanFilePath.match(/(?:src|\/)\S+\.(ts|js|tsx|jsx|json)/);
|
|
292
|
-
if (filePathMatch) {
|
|
293
|
-
cleanFilePath = filePathMatch[0];
|
|
294
|
-
} else {
|
|
295
|
-
// If we can't extract a clear file path, try to find the most likely path
|
|
296
|
-
const possiblePaths = cleanFilePath
|
|
297
|
-
.split(/[\s,()]/)
|
|
298
|
-
.filter((part) => part.includes('/') || part.includes('.ts') || part.includes('.js'));
|
|
299
|
-
|
|
300
|
-
if (possiblePaths.length > 0) {
|
|
301
|
-
cleanFilePath = possiblePaths[0];
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
// Resolve the full file path
|
|
306
|
-
const fullFilePath = path.resolve(projectPath, cleanFilePath);
|
|
307
|
-
|
|
308
|
-
// Extract location
|
|
309
|
-
const locationMatch = issueBlock.match(/\*\*Location\*\*:([^*]+)/);
|
|
310
|
-
const location = locationMatch ? locationMatch[1].trim() : '';
|
|
311
|
-
|
|
312
|
-
// Extract code blocks with more flexible pattern matching
|
|
313
|
-
// Match code blocks with or without language specifier
|
|
314
|
-
const codeBlockMatches = issueBlock.match(/```(?:[a-zA-Z0-9_-]*)?\s*([\s\S]*?)```/g) || [];
|
|
315
|
-
|
|
316
|
-
// If no code blocks found with triple backticks, try alternative formats
|
|
317
|
-
let codeBlocks: string[] = [];
|
|
318
|
-
|
|
319
|
-
if (codeBlockMatches.length > 0) {
|
|
320
|
-
codeBlocks = codeBlockMatches.map((block: string) => {
|
|
321
|
-
// Extract the content inside the code block
|
|
322
|
-
const content = block.replace(/```(?:[a-zA-Z0-9_-]*)?\s*|```$/g, '');
|
|
323
|
-
return content.trim();
|
|
324
|
-
});
|
|
325
|
-
} else {
|
|
326
|
-
// Try to find code blocks with indentation (4 spaces or tab)
|
|
327
|
-
const indentedCodeBlockMatch = issueBlock.match(
|
|
328
|
-
/(?:^|\n)(?: {4}|\t)([^\n]+(?:\n(?: {4}|\t)[^\n]+)*)/g,
|
|
329
|
-
);
|
|
330
|
-
if (indentedCodeBlockMatch) {
|
|
331
|
-
codeBlocks = indentedCodeBlockMatch.map((block: string) => {
|
|
332
|
-
// Remove the indentation
|
|
333
|
-
return block.replace(/(?:^|\n)(?: {4}|\t)/g, '\n').trim();
|
|
334
|
-
});
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
// Try to find code blocks with 'Current code:' and 'Suggested code:' markers
|
|
338
|
-
const currentCodeMatch = issueBlock.match(/Current code:([\s\S]*?)(?:Suggested code:|$)/i);
|
|
339
|
-
const suggestedCodeMatch = issueBlock.match(/Suggested code:([\s\S]*?)(?:Impact:|$)/i);
|
|
340
|
-
|
|
341
|
-
if (currentCodeMatch?.[1].trim()) {
|
|
342
|
-
codeBlocks.push(currentCodeMatch[1].trim());
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
if (suggestedCodeMatch?.[1].trim()) {
|
|
346
|
-
codeBlocks.push(suggestedCodeMatch[1].trim());
|
|
347
|
-
}
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
// Create suggestion
|
|
351
|
-
const suggestion: FixSuggestion = {
|
|
352
|
-
priority,
|
|
353
|
-
file: fullFilePath,
|
|
354
|
-
description: issueDescription,
|
|
355
|
-
};
|
|
356
|
-
|
|
357
|
-
// If we have code blocks, assume the first is current code and second is suggested code
|
|
358
|
-
if (codeBlocks.length >= 2) {
|
|
359
|
-
suggestion.currentCode = codeBlocks[0];
|
|
360
|
-
suggestion.suggestedCode = codeBlocks[1];
|
|
361
|
-
} else if (codeBlocks.length === 1) {
|
|
362
|
-
// If only one code block, assume it's the suggested code
|
|
363
|
-
suggestion.suggestedCode = codeBlocks[0];
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
// Try to extract line numbers from location
|
|
367
|
-
const lineNumberMatch = location.match(/lines? (\d+)(?:-(\d+))?/i);
|
|
368
|
-
if (lineNumberMatch) {
|
|
369
|
-
const startLine = parseInt(lineNumberMatch[1], 10);
|
|
370
|
-
const endLine = lineNumberMatch[2] ? parseInt(lineNumberMatch[2], 10) : startLine;
|
|
371
|
-
suggestion.lineNumbers = { start: startLine, end: endLine };
|
|
372
|
-
}
|
|
373
|
-
|
|
374
|
-
suggestions.push(suggestion);
|
|
375
|
-
} catch (error) {
|
|
376
|
-
logger.error('Error parsing suggestion:', error);
|
|
377
|
-
// Continue with the next issue block
|
|
378
|
-
}
|
|
379
|
-
}
|
|
380
|
-
|
|
381
|
-
return suggestions;
|
|
382
|
-
}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Type definitions for review action modules
|
|
3
|
-
*
|
|
4
|
-
* This module provides shared types used across the review action modules.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Priority levels for code review fixes
|
|
9
|
-
*/
|
|
10
|
-
export enum FixPriority {
|
|
11
|
-
HIGH = 'high',
|
|
12
|
-
MEDIUM = 'medium',
|
|
13
|
-
LOW = 'low',
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Structure representing a code fix suggestion
|
|
18
|
-
*/
|
|
19
|
-
export interface FixSuggestion {
|
|
20
|
-
priority: FixPriority;
|
|
21
|
-
file: string;
|
|
22
|
-
description: string;
|
|
23
|
-
currentCode?: string;
|
|
24
|
-
suggestedCode?: string;
|
|
25
|
-
lineNumbers?: { start: number; end: number };
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Summary of fix actions taken
|
|
30
|
-
*/
|
|
31
|
-
export interface FixSummary {
|
|
32
|
-
highPriorityFixed: number;
|
|
33
|
-
mediumPriorityFixed: number;
|
|
34
|
-
lowPriorityFixed: number;
|
|
35
|
-
totalSuggestions: number;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Summary of suggestions found
|
|
40
|
-
*/
|
|
41
|
-
export interface SuggestionSummary {
|
|
42
|
-
highPrioritySuggestions: FixSuggestion[];
|
|
43
|
-
mediumPrioritySuggestions: FixSuggestion[];
|
|
44
|
-
lowPrioritySuggestions: FixSuggestion[];
|
|
45
|
-
totalSuggestions: number;
|
|
46
|
-
}
|
|
@@ -1,253 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Utilities for parsing structured review output.
|
|
3
|
-
*
|
|
4
|
-
* This module provides functions for parsing and processing structured review output
|
|
5
|
-
* in interactive mode. It handles JSON parsing, validation, and extraction of review
|
|
6
|
-
* information from the AI's response.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
// import { z } from 'zod'; // Not currently used
|
|
10
|
-
import {
|
|
11
|
-
IssuePriority,
|
|
12
|
-
type ReviewIssue,
|
|
13
|
-
type ReviewSchema,
|
|
14
|
-
reviewSchema,
|
|
15
|
-
} from '../types/reviewSchema';
|
|
16
|
-
import logger from './logger';
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Parse a JSON string into a ReviewSchema object
|
|
20
|
-
* @param jsonString The JSON string to parse
|
|
21
|
-
* @returns The parsed ReviewSchema object or null if parsing fails
|
|
22
|
-
*/
|
|
23
|
-
export function parseReviewJson(jsonString: string): ReviewSchema | null {
|
|
24
|
-
try {
|
|
25
|
-
// Step 1: First attempt to parse as direct JSON if the string is already properly formatted
|
|
26
|
-
// This should be the fast path for models that correctly return structured JSON
|
|
27
|
-
if (jsonString.trim().startsWith('{') && jsonString.trim().endsWith('}')) {
|
|
28
|
-
try {
|
|
29
|
-
// Try to parse directly first - this is the ideal case and should work with the
|
|
30
|
-
// updated model instructions that request structured JSON
|
|
31
|
-
const directJson = JSON.parse(jsonString);
|
|
32
|
-
|
|
33
|
-
// Validate using Zod schema
|
|
34
|
-
const directValidation = reviewSchema.safeParse(directJson);
|
|
35
|
-
if (directValidation.success) {
|
|
36
|
-
logger.debug('Successfully parsed direct JSON response');
|
|
37
|
-
return directValidation.data;
|
|
38
|
-
}
|
|
39
|
-
if (directJson.review) {
|
|
40
|
-
// Basic validation passed
|
|
41
|
-
logger.debug(
|
|
42
|
-
'Direct JSON has review property but failed schema validation, using fallback',
|
|
43
|
-
);
|
|
44
|
-
return directJson as ReviewSchema;
|
|
45
|
-
}
|
|
46
|
-
} catch (_e) {
|
|
47
|
-
// If direct parsing fails, continue with the extraction approaches
|
|
48
|
-
logger.debug('Direct parsing failed, attempting extraction patterns');
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
// Step 2: If direct parsing fails, try various extraction patterns
|
|
53
|
-
// Try to extract JSON from the response with improved language marker handling
|
|
54
|
-
// Handle various formats:
|
|
55
|
-
// 1. ```json {...}```
|
|
56
|
-
// 2. ```typescript {...}``` or other language markers
|
|
57
|
-
// 3. ```{...}```
|
|
58
|
-
// 4. Plain JSON outside code blocks
|
|
59
|
-
|
|
60
|
-
// First try to find code blocks with JSON content
|
|
61
|
-
const jsonBlockMatch = jsonString.match(/```(?:json)?\s*({[\s\S]*?})\s*```/);
|
|
62
|
-
|
|
63
|
-
// If no JSON block, look for any code block (could have typescript or other language marker)
|
|
64
|
-
const anyCodeBlockMatch = !jsonBlockMatch
|
|
65
|
-
? jsonString.match(/```(?:[\w]*)?[\s\n]*({[\s\S]*?})[\s\n]*```/)
|
|
66
|
-
: null;
|
|
67
|
-
|
|
68
|
-
// Check for code blocks with language markers that aren't proper JSON
|
|
69
|
-
const languageBlockRegex =
|
|
70
|
-
/```(typescript|javascript|js|ts|jsx|tsx|java|python|ruby|go|rust|c|cpp|csharp|php)\s*([\s\S]*?)\s*```/;
|
|
71
|
-
const languageBlockMatch =
|
|
72
|
-
!jsonBlockMatch && !anyCodeBlockMatch ? jsonString.match(languageBlockRegex) : null;
|
|
73
|
-
|
|
74
|
-
if (languageBlockMatch) {
|
|
75
|
-
// Don't treat language-specific code blocks as JSON - log a warning
|
|
76
|
-
const language = languageBlockMatch[1];
|
|
77
|
-
logger.warn(
|
|
78
|
-
`Found ${language} code block but not valid JSON. Skipping JSON parsing attempt for this block.`,
|
|
79
|
-
);
|
|
80
|
-
// Return early with null to avoid trying to parse code as JSON
|
|
81
|
-
return null;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
// If no code block match at all, try other patterns for JSON outside code blocks
|
|
85
|
-
// First look for review patterns - the most likely structure
|
|
86
|
-
const reviewJsonPattern = /({[\s\S]*?"review"[\s\S]*?})/;
|
|
87
|
-
const reviewJsonMatch = jsonString.match(reviewJsonPattern);
|
|
88
|
-
|
|
89
|
-
// Then fall back to any JSON-like patterns
|
|
90
|
-
const anyJsonPattern = /({[\s\S]*?})/;
|
|
91
|
-
const anyJsonMatch = !reviewJsonMatch ? jsonString.match(anyJsonPattern) : null;
|
|
92
|
-
|
|
93
|
-
// Determine which match to use
|
|
94
|
-
let jsonContent = jsonString; // default to full string
|
|
95
|
-
|
|
96
|
-
if (jsonBlockMatch) {
|
|
97
|
-
logger.debug('Found JSON code block, extracting content');
|
|
98
|
-
jsonContent = jsonBlockMatch[1];
|
|
99
|
-
} else if (anyCodeBlockMatch) {
|
|
100
|
-
logger.debug('Found code block with JSON-like content, attempting to parse');
|
|
101
|
-
jsonContent = anyCodeBlockMatch[1];
|
|
102
|
-
} else if (reviewJsonMatch) {
|
|
103
|
-
logger.debug('Found review JSON content outside code blocks');
|
|
104
|
-
jsonContent = reviewJsonMatch[1];
|
|
105
|
-
} else if (anyJsonMatch) {
|
|
106
|
-
logger.debug('Found generic JSON-like content');
|
|
107
|
-
jsonContent = anyJsonMatch[1];
|
|
108
|
-
} else {
|
|
109
|
-
logger.debug('No JSON content patterns found, attempting to parse raw content');
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
// Clean up the content - remove comments that might be in the JSON
|
|
113
|
-
// Remove both single-line and inline comments
|
|
114
|
-
jsonContent = jsonContent
|
|
115
|
-
.replace(/\/\/.*?(?=\n|$)/g, '') // Remove inline comments (// style)
|
|
116
|
-
.replace(/^\s*\/\/.*$/gm, '') // Remove single-line comments
|
|
117
|
-
.replace(/\/\*[\s\S]*?\*\//g, '') // Remove multi-line comments
|
|
118
|
-
.replace(/,\s*}/g, '}') // Fix trailing commas that might appear after removing comments
|
|
119
|
-
.replace(/,\s*]/g, ']'); // Fix trailing commas in arrays
|
|
120
|
-
|
|
121
|
-
// Additional cleanup for specific JSON parsing issues
|
|
122
|
-
jsonContent = jsonContent
|
|
123
|
-
.replace(/([{,])\s*"(\w+)":\s*"([^"]*)",\s*\/\/.*?(?=\n|$)/g, '$1"$2":"$3",') // Clean inline comments after values
|
|
124
|
-
.replace(/([{,])\s*"(\w+)":\s*(\d+),\s*\/\/.*?(?=\n|$)/g, '$1"$2":$3,'); // Clean inline comments after numeric values
|
|
125
|
-
|
|
126
|
-
// Parse the JSON
|
|
127
|
-
const parsedJson = JSON.parse(jsonContent);
|
|
128
|
-
|
|
129
|
-
// Validate using Zod schema
|
|
130
|
-
const validationResult = reviewSchema.safeParse(parsedJson);
|
|
131
|
-
|
|
132
|
-
if (validationResult.success) {
|
|
133
|
-
logger.debug('Successfully validated review JSON with Zod schema');
|
|
134
|
-
return validationResult.data;
|
|
135
|
-
}
|
|
136
|
-
logger.warn('Failed to validate review JSON schema:', validationResult.error.errors);
|
|
137
|
-
|
|
138
|
-
// Fallback to basic validation if the schema doesn't match exactly
|
|
139
|
-
// This helps with backward compatibility
|
|
140
|
-
if (parsedJson.review) {
|
|
141
|
-
logger.warn('Using fallback validation for review JSON');
|
|
142
|
-
return parsedJson as ReviewSchema;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
return null;
|
|
146
|
-
} catch (error) {
|
|
147
|
-
logger.error('Error parsing review JSON:', error);
|
|
148
|
-
return null;
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
/**
|
|
153
|
-
* Extract the review content from a string that might contain JSON
|
|
154
|
-
* @param content The content to extract from
|
|
155
|
-
* @returns The extracted review content
|
|
156
|
-
*/
|
|
157
|
-
export function extractReviewContent(content: string): string {
|
|
158
|
-
// Try to find JSON in the content
|
|
159
|
-
const parsedReview = parseReviewJson(content);
|
|
160
|
-
|
|
161
|
-
if (parsedReview) {
|
|
162
|
-
// If we successfully parsed the JSON, return it formatted
|
|
163
|
-
return JSON.stringify(parsedReview, null, 2);
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
// Otherwise, return the original content
|
|
167
|
-
return content;
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
/**
|
|
171
|
-
* Format an issue for display in the console
|
|
172
|
-
* @param issue The issue to format
|
|
173
|
-
* @param filePath Path to the file containing the issue
|
|
174
|
-
* @param fileIndex Index of the file
|
|
175
|
-
* @param issueIndex Index of the issue
|
|
176
|
-
* @returns Formatted issue string
|
|
177
|
-
*/
|
|
178
|
-
export function formatIssueForDisplay(
|
|
179
|
-
issue: ReviewIssue,
|
|
180
|
-
filePath: string,
|
|
181
|
-
fileIndex: number,
|
|
182
|
-
issueIndex: number,
|
|
183
|
-
): string {
|
|
184
|
-
const priorityColors: Record<IssuePriority, string> = {
|
|
185
|
-
[IssuePriority.HIGH]: '\x1b[31m', // Red
|
|
186
|
-
[IssuePriority.MEDIUM]: '\x1b[33m', // Yellow
|
|
187
|
-
[IssuePriority.LOW]: '\x1b[32m', // Green
|
|
188
|
-
};
|
|
189
|
-
|
|
190
|
-
const priorityColor = priorityColors[issue.priority as IssuePriority] || '\x1b[37m'; // Default to white
|
|
191
|
-
const reset = '\x1b[0m';
|
|
192
|
-
const bold = '\x1b[1m';
|
|
193
|
-
|
|
194
|
-
let output = `\n${bold}Issue ${fileIndex + 1}.${issueIndex + 1}: ${priorityColor}[${issue.priority}]${reset}${bold} ${issue.id}${reset}\n`;
|
|
195
|
-
output += `${bold}Description:${reset} ${issue.description}\n`;
|
|
196
|
-
output += `${bold}File:${reset} ${filePath}\n`;
|
|
197
|
-
output += `${bold}Location:${reset} Lines ${issue.location.startLine}-${issue.location.endLine}\n\n`;
|
|
198
|
-
|
|
199
|
-
output += `${bold}Current Code:${reset}\n`;
|
|
200
|
-
output += '```\n';
|
|
201
|
-
output += issue.currentCode;
|
|
202
|
-
output += '\n```\n\n';
|
|
203
|
-
|
|
204
|
-
output += `${bold}Suggested Code:${reset}\n`;
|
|
205
|
-
output += '```\n';
|
|
206
|
-
output += issue.suggestedCode;
|
|
207
|
-
output += '\n```\n\n';
|
|
208
|
-
|
|
209
|
-
if (issue.explanation) {
|
|
210
|
-
output += `${bold}Explanation:${reset}\n`;
|
|
211
|
-
output += issue.explanation;
|
|
212
|
-
output += '\n\n';
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
return output;
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
/**
|
|
219
|
-
* Display a structured review in the console
|
|
220
|
-
* @param parsedReview The parsed review object
|
|
221
|
-
*/
|
|
222
|
-
export function displayStructuredReview(parsedReview: ReviewSchema): void {
|
|
223
|
-
const { review } = parsedReview;
|
|
224
|
-
|
|
225
|
-
logger.info('\n=== Structured Code Review Results ===\n');
|
|
226
|
-
|
|
227
|
-
// Display files one by one
|
|
228
|
-
review.files.forEach((file, fileIndex) => {
|
|
229
|
-
logger.info(`\n${'-'.repeat(80)}`);
|
|
230
|
-
logger.info(`File ${fileIndex + 1}: ${file.filePath}`);
|
|
231
|
-
logger.info(`${'-'.repeat(80)}`);
|
|
232
|
-
|
|
233
|
-
if (file.issues.length === 0) {
|
|
234
|
-
logger.info('No issues found in this file.');
|
|
235
|
-
return;
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
// Display issues for this file
|
|
239
|
-
file.issues.forEach((issue, issueIndex) => {
|
|
240
|
-
const formattedIssue = formatIssueForDisplay(issue, file.filePath, fileIndex, issueIndex);
|
|
241
|
-
logger.info(formattedIssue);
|
|
242
|
-
});
|
|
243
|
-
});
|
|
244
|
-
|
|
245
|
-
// Display summary
|
|
246
|
-
logger.info(`\n${'-'.repeat(80)}`);
|
|
247
|
-
logger.info('Summary:');
|
|
248
|
-
logger.info(`${'-'.repeat(80)}`);
|
|
249
|
-
logger.info(`High Priority Issues: ${review.summary.highPriorityIssues}`);
|
|
250
|
-
logger.info(`Medium Priority Issues: ${review.summary.mediumPriorityIssues}`);
|
|
251
|
-
logger.info(`Low Priority Issues: ${review.summary.lowPriorityIssues}`);
|
|
252
|
-
logger.info(`Total Issues: ${review.summary.totalIssues}`);
|
|
253
|
-
}
|