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,206 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Diagram generator for creating Mermaid architecture diagrams.
|
|
3
|
-
*
|
|
4
|
-
* This module is responsible for extracting and generating Mermaid diagrams
|
|
5
|
-
* from review content, particularly for architectural reviews.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import * as fs from 'node:fs/promises';
|
|
9
|
-
import * as path from 'node:path';
|
|
10
|
-
import logger from './logger';
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Extract Mermaid diagram blocks from review content
|
|
14
|
-
* @param content Review content that may contain Mermaid diagram blocks
|
|
15
|
-
* @returns Array of Mermaid diagram strings
|
|
16
|
-
*/
|
|
17
|
-
export function extractMermaidDiagrams(content: string): string[] {
|
|
18
|
-
const diagrams: string[] = [];
|
|
19
|
-
|
|
20
|
-
// Match Mermaid code blocks in various formats
|
|
21
|
-
const mermaidBlockRegex = /```mermaid\n([\s\S]*?)```/g;
|
|
22
|
-
let match;
|
|
23
|
-
|
|
24
|
-
while ((match = mermaidBlockRegex.exec(content)) !== null) {
|
|
25
|
-
diagrams.push(match[1].trim());
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
// Also check for inline mermaid notation that might be present
|
|
29
|
-
const inlineMermaidRegex = /graph\s+(TB|TD|BT|RL|LR)[\s\S]*?(?=\n\n|\n##|$)/g;
|
|
30
|
-
|
|
31
|
-
while ((match = inlineMermaidRegex.exec(content)) !== null) {
|
|
32
|
-
// Only add if not already captured in a code block
|
|
33
|
-
const diagram = match[0].trim();
|
|
34
|
-
if (!diagrams.some((d) => d.includes(diagram))) {
|
|
35
|
-
diagrams.push(diagram);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
return diagrams;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Generate a Mermaid diagram prompt for architectural reviews
|
|
44
|
-
* @param projectName Name of the project being reviewed
|
|
45
|
-
* @param framework Framework being used (if detected)
|
|
46
|
-
* @returns Prompt text for generating architecture diagrams
|
|
47
|
-
*/
|
|
48
|
-
export function generateDiagramPrompt(projectName: string, framework?: string): string {
|
|
49
|
-
const frameworkContext = framework ? ` (${framework} framework)` : '';
|
|
50
|
-
|
|
51
|
-
return `
|
|
52
|
-
## Architecture Diagram
|
|
53
|
-
|
|
54
|
-
Please generate a Mermaid diagram that visualizes the architecture of the ${projectName}${frameworkContext} project. Include:
|
|
55
|
-
|
|
56
|
-
1. **Component Diagram**: Show the main components/modules and their relationships
|
|
57
|
-
2. **Data Flow**: Illustrate how data flows through the system
|
|
58
|
-
3. **Key Dependencies**: Show external services, databases, and APIs
|
|
59
|
-
4. **Layer Architecture**: If applicable, show the layered architecture (presentation, business logic, data access)
|
|
60
|
-
|
|
61
|
-
Use the following Mermaid syntax:
|
|
62
|
-
|
|
63
|
-
\`\`\`mermaid
|
|
64
|
-
graph TB
|
|
65
|
-
subgraph "Presentation Layer"
|
|
66
|
-
UI[User Interface]
|
|
67
|
-
API[API Gateway]
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
subgraph "Business Logic"
|
|
71
|
-
Service[Service Layer]
|
|
72
|
-
Domain[Domain Models]
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
subgraph "Data Layer"
|
|
76
|
-
DB[(Database)]
|
|
77
|
-
Cache[(Cache)]
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
UI --> API
|
|
81
|
-
API --> Service
|
|
82
|
-
Service --> Domain
|
|
83
|
-
Service --> DB
|
|
84
|
-
Service --> Cache
|
|
85
|
-
\`\`\`
|
|
86
|
-
|
|
87
|
-
Please provide a comprehensive architecture diagram based on the actual code structure analyzed.
|
|
88
|
-
`;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* Save Mermaid diagrams to separate files
|
|
93
|
-
* @param diagrams Array of Mermaid diagram strings
|
|
94
|
-
* @param outputPath Path to the main review output file
|
|
95
|
-
* @returns Promise resolving to the paths of saved diagram files
|
|
96
|
-
*/
|
|
97
|
-
export async function saveDiagramFiles(diagrams: string[], outputPath: string): Promise<string[]> {
|
|
98
|
-
if (diagrams.length === 0) {
|
|
99
|
-
logger.debug('No diagrams to save');
|
|
100
|
-
return [];
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
const savedPaths: string[] = [];
|
|
104
|
-
const baseDir = path.dirname(outputPath);
|
|
105
|
-
const baseName = path.basename(outputPath, path.extname(outputPath));
|
|
106
|
-
|
|
107
|
-
for (let i = 0; i < diagrams.length; i++) {
|
|
108
|
-
const diagramNumber = diagrams.length > 1 ? `-${i + 1}` : '';
|
|
109
|
-
const diagramPath = path.join(baseDir, `${baseName}-diagram${diagramNumber}.md`);
|
|
110
|
-
|
|
111
|
-
// Create markdown file with the Mermaid diagram
|
|
112
|
-
const diagramContent = `# Architecture Diagram${diagramNumber ? ` ${i + 1}` : ''}
|
|
113
|
-
|
|
114
|
-
Generated from: ${path.basename(outputPath)}
|
|
115
|
-
Date: ${new Date().toISOString()}
|
|
116
|
-
|
|
117
|
-
## Diagram
|
|
118
|
-
|
|
119
|
-
\`\`\`mermaid
|
|
120
|
-
${diagrams[i]}
|
|
121
|
-
\`\`\`
|
|
122
|
-
|
|
123
|
-
## Rendering Instructions
|
|
124
|
-
|
|
125
|
-
To view this diagram:
|
|
126
|
-
1. Use a Markdown viewer that supports Mermaid (GitHub, GitLab, VS Code with Mermaid extension)
|
|
127
|
-
2. Or paste the Mermaid code into https://mermaid.live/
|
|
128
|
-
3. Or use the Mermaid CLI: \`mmdc -i ${path.basename(diagramPath)} -o ${baseName}-diagram${diagramNumber}.svg\`
|
|
129
|
-
|
|
130
|
-
## Notes
|
|
131
|
-
|
|
132
|
-
This diagram was automatically generated as part of an architectural code review.
|
|
133
|
-
For the full review, see: ${path.basename(outputPath)}
|
|
134
|
-
`;
|
|
135
|
-
|
|
136
|
-
try {
|
|
137
|
-
await fs.writeFile(diagramPath, diagramContent, 'utf-8');
|
|
138
|
-
savedPaths.push(diagramPath);
|
|
139
|
-
logger.info(`Saved architecture diagram to: ${diagramPath}`);
|
|
140
|
-
} catch (error) {
|
|
141
|
-
logger.error(`Failed to save diagram file: ${error}`);
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
return savedPaths;
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
/**
|
|
149
|
-
* Process review content to extract and save diagrams
|
|
150
|
-
* @param reviewContent The full review content
|
|
151
|
-
* @param outputPath Path to the main review output file
|
|
152
|
-
* @param options Review options
|
|
153
|
-
* @returns Promise resolving to paths of any saved diagram files
|
|
154
|
-
*/
|
|
155
|
-
export async function processDiagrams(
|
|
156
|
-
reviewContent: string,
|
|
157
|
-
outputPath: string,
|
|
158
|
-
options: { diagram?: boolean; type: string },
|
|
159
|
-
): Promise<string[]> {
|
|
160
|
-
// Only process diagrams if the flag is set and it's an architectural review
|
|
161
|
-
if (!options.diagram || options.type !== 'architectural') {
|
|
162
|
-
return [];
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
logger.info('Processing review content for architecture diagrams...');
|
|
166
|
-
|
|
167
|
-
// Extract any Mermaid diagrams from the review content
|
|
168
|
-
const diagrams = extractMermaidDiagrams(reviewContent);
|
|
169
|
-
|
|
170
|
-
if (diagrams.length === 0) {
|
|
171
|
-
logger.info('No Mermaid diagrams found in review content');
|
|
172
|
-
return [];
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
logger.info(`Found ${diagrams.length} Mermaid diagram(s) in review`);
|
|
176
|
-
|
|
177
|
-
// Save the diagrams to separate files
|
|
178
|
-
return saveDiagramFiles(diagrams, outputPath);
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
/**
|
|
182
|
-
* Enhance review prompt to include diagram generation
|
|
183
|
-
* @param originalPrompt The original review prompt
|
|
184
|
-
* @param options Review options
|
|
185
|
-
* @param projectName Project name
|
|
186
|
-
* @param framework Detected framework (optional)
|
|
187
|
-
* @returns Enhanced prompt with diagram instructions
|
|
188
|
-
*/
|
|
189
|
-
export function enhancePromptForDiagrams(
|
|
190
|
-
originalPrompt: string,
|
|
191
|
-
options: { diagram?: boolean; type: string },
|
|
192
|
-
projectName: string,
|
|
193
|
-
framework?: string,
|
|
194
|
-
): string {
|
|
195
|
-
// Only enhance if diagram flag is set and it's an architectural review
|
|
196
|
-
if (!options.diagram || options.type !== 'architectural') {
|
|
197
|
-
return originalPrompt;
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
const diagramPrompt = generateDiagramPrompt(projectName, framework);
|
|
201
|
-
|
|
202
|
-
// Add the diagram prompt to the original prompt
|
|
203
|
-
return `${originalPrompt}
|
|
204
|
-
|
|
205
|
-
${diagramPrompt}`;
|
|
206
|
-
}
|
package/src/utils/errorLogger.ts
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Error logging utilities for the code review tool.
|
|
3
|
-
*
|
|
4
|
-
* This module provides error logging functionality to capture and persist error
|
|
5
|
-
* information for debugging and troubleshooting. It writes detailed error logs
|
|
6
|
-
* to files with timestamps and contextual information to help diagnose issues.
|
|
7
|
-
*
|
|
8
|
-
* Key responsibilities:
|
|
9
|
-
* - Capturing error details including stack traces
|
|
10
|
-
* - Recording contextual information about the error environment
|
|
11
|
-
* - Writing error logs to timestamped files
|
|
12
|
-
* - Creating error log directories as needed
|
|
13
|
-
* - Providing a consistent error logging interface across the application
|
|
14
|
-
*
|
|
15
|
-
* These utilities help developers diagnose and fix issues by preserving detailed
|
|
16
|
-
* error information that might otherwise be lost in console output.
|
|
17
|
-
*/
|
|
18
|
-
|
|
19
|
-
import fs from 'node:fs/promises';
|
|
20
|
-
import path from 'node:path';
|
|
21
|
-
import { createDirectory } from './fileSystem';
|
|
22
|
-
import logger from './logger';
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Log an error to a file
|
|
26
|
-
* @param error Error to log
|
|
27
|
-
* @param context Additional context information
|
|
28
|
-
* @returns Promise resolving to the path of the error log file
|
|
29
|
-
*/
|
|
30
|
-
export async function logError(
|
|
31
|
-
error: unknown,
|
|
32
|
-
context: Record<string, unknown> = {},
|
|
33
|
-
): Promise<string> {
|
|
34
|
-
try {
|
|
35
|
-
// Create error logs directory
|
|
36
|
-
const errorLogsDir = path.resolve('error-logs');
|
|
37
|
-
await createDirectory(errorLogsDir);
|
|
38
|
-
|
|
39
|
-
// Generate timestamp for the filename
|
|
40
|
-
const timestamp = new Date().toISOString().replace(/:/g, '-');
|
|
41
|
-
const errorLogPath = path.join(errorLogsDir, `error-${timestamp}.json`);
|
|
42
|
-
|
|
43
|
-
// Format error object
|
|
44
|
-
const errorObj = {
|
|
45
|
-
timestamp: new Date().toISOString(),
|
|
46
|
-
message: error instanceof Error ? error.message : 'Unknown error',
|
|
47
|
-
stack: error instanceof Error ? error.stack : undefined,
|
|
48
|
-
context,
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
// Write error to file
|
|
52
|
-
await fs.writeFile(errorLogPath, JSON.stringify(errorObj, null, 2));
|
|
53
|
-
|
|
54
|
-
logger.error(`Error logged to: ${errorLogPath}`);
|
|
55
|
-
return errorLogPath;
|
|
56
|
-
} catch (logError) {
|
|
57
|
-
logger.error('Failed to log error:', logError);
|
|
58
|
-
return '';
|
|
59
|
-
}
|
|
60
|
-
}
|
|
@@ -1,407 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Utilities for estimating token usage and costs for code reviews.
|
|
3
|
-
*
|
|
4
|
-
* This module provides functions for estimating token usage and costs for code reviews
|
|
5
|
-
* based on file content and model selection. It uses the tokenCounter utilities for
|
|
6
|
-
* basic token counting and cost calculation, and adds specialized functions for
|
|
7
|
-
* estimating review-specific token usage patterns.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import fs from 'node:fs/promises';
|
|
11
|
-
import path from 'node:path';
|
|
12
|
-
import { estimateTokenCount, formatCost, getCostInfo } from '../clients/utils/tokenCounter';
|
|
13
|
-
import type { FileInfo } from '../types/review';
|
|
14
|
-
import logger from './logger';
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Ratio of output tokens to input tokens based on empirical observations
|
|
18
|
-
* This is an approximation and may vary based on the specific review type and content
|
|
19
|
-
*/
|
|
20
|
-
const OUTPUT_TO_INPUT_RATIO = {
|
|
21
|
-
architectural: 0.6, // Architectural reviews tend to be more concise
|
|
22
|
-
'quick-fixes': 0.8, // Quick fixes often include code snippets
|
|
23
|
-
security: 0.7, // Security reviews are moderately detailed
|
|
24
|
-
performance: 0.7, // Performance reviews are similar to security
|
|
25
|
-
default: 0.75, // Default ratio if review type is not specified
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Overhead tokens for review context, instructions, and formatting
|
|
30
|
-
* This is added to the total token count to account for the review framework
|
|
31
|
-
*/
|
|
32
|
-
const REVIEW_OVERHEAD_TOKENS = 1500;
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Context maintenance overhead factor for multi-pass reviews
|
|
36
|
-
* This factor is applied to estimate additional tokens needed for maintaining context
|
|
37
|
-
*/
|
|
38
|
-
const MULTI_PASS_CONTEXT_MAINTENANCE_FACTOR = 0.15;
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Additional overhead tokens per pass in multi-pass reviews
|
|
42
|
-
* This accounts for pass management, coordination, and state tracking
|
|
43
|
-
*/
|
|
44
|
-
const MULTI_PASS_OVERHEAD_PER_PASS = 800;
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* Estimate the number of output tokens based on input tokens and review type
|
|
48
|
-
* @param inputTokens Number of input tokens
|
|
49
|
-
* @param reviewType Type of review
|
|
50
|
-
* @returns Estimated number of output tokens
|
|
51
|
-
*/
|
|
52
|
-
export function estimateOutputTokens(inputTokens: number, reviewType: string): number {
|
|
53
|
-
const ratio =
|
|
54
|
-
OUTPUT_TO_INPUT_RATIO[reviewType as keyof typeof OUTPUT_TO_INPUT_RATIO] ||
|
|
55
|
-
OUTPUT_TO_INPUT_RATIO.default;
|
|
56
|
-
return Math.ceil(inputTokens * ratio);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Estimate token usage and cost for a set of files
|
|
61
|
-
*
|
|
62
|
-
* This function calculates the estimated token usage and cost for reviewing a set of files
|
|
63
|
-
* using a specified AI model. It considers:
|
|
64
|
-
* - The content of each file (code, comments, etc.)
|
|
65
|
-
* - The type of review being performed (quick, security, architectural, etc.)
|
|
66
|
-
* - The specific AI model being used and its pricing structure
|
|
67
|
-
*
|
|
68
|
-
* The estimation includes overhead tokens for system prompts and instructions that are
|
|
69
|
-
* included in every review, in addition to the tokens from the file content itself.
|
|
70
|
-
*
|
|
71
|
-
* @param files Array of file information objects containing file content and metadata
|
|
72
|
-
* @param reviewType Type of review (quick, security, architectural, performance)
|
|
73
|
-
* @param modelName Name of the model to use (e.g., 'openrouter:anthropic/claude-3-opus-20240229')
|
|
74
|
-
* @returns Estimated token usage and cost information including:
|
|
75
|
-
* - inputTokens: Number of tokens in the input (files + prompts)
|
|
76
|
-
* - outputTokens: Estimated number of tokens in the AI response
|
|
77
|
-
* - totalTokens: Total token usage (input + output)
|
|
78
|
-
* - estimatedCost: Estimated cost in USD
|
|
79
|
-
* - formattedCost: Cost formatted as a string (e.g., '$0.12 USD')
|
|
80
|
-
* - fileCount: Number of files being reviewed
|
|
81
|
-
* - totalFileSize: Total size of all files in bytes
|
|
82
|
-
*/
|
|
83
|
-
export async function estimateReviewCost(
|
|
84
|
-
files: FileInfo[],
|
|
85
|
-
reviewType: string,
|
|
86
|
-
modelName: string = process.env.AI_CODE_REVIEW_MODEL || 'openrouter:anthropic/claude-3-opus-20240229',
|
|
87
|
-
): Promise<{
|
|
88
|
-
inputTokens: number;
|
|
89
|
-
outputTokens: number;
|
|
90
|
-
totalTokens: number;
|
|
91
|
-
estimatedCost: number;
|
|
92
|
-
formattedCost: string;
|
|
93
|
-
fileCount: number;
|
|
94
|
-
totalFileSize: number;
|
|
95
|
-
}> {
|
|
96
|
-
// Calculate total input tokens from all files
|
|
97
|
-
let totalInputTokens = REVIEW_OVERHEAD_TOKENS; // Start with overhead tokens
|
|
98
|
-
let totalFileSize = 0;
|
|
99
|
-
|
|
100
|
-
for (const file of files) {
|
|
101
|
-
const fileTokens = estimateTokenCount(file.content);
|
|
102
|
-
totalInputTokens += fileTokens;
|
|
103
|
-
totalFileSize += file.content.length;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
// Estimate output tokens based on input tokens and review type
|
|
107
|
-
const estimatedOutputTokens = estimateOutputTokens(totalInputTokens, reviewType);
|
|
108
|
-
|
|
109
|
-
// Calculate cost information
|
|
110
|
-
const costInfo = getCostInfo(totalInputTokens, estimatedOutputTokens, modelName);
|
|
111
|
-
|
|
112
|
-
return {
|
|
113
|
-
...costInfo,
|
|
114
|
-
fileCount: files.length,
|
|
115
|
-
totalFileSize,
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
/**
|
|
120
|
-
* Format estimation results as a human-readable string
|
|
121
|
-
*
|
|
122
|
-
* This function takes the estimation results from estimateReviewCost or estimateFromFilePaths
|
|
123
|
-
* and formats them into a user-friendly string that can be displayed to the user.
|
|
124
|
-
*
|
|
125
|
-
* The formatted string includes:
|
|
126
|
-
* - Number of files being reviewed
|
|
127
|
-
* - Total file size
|
|
128
|
-
* - Input token count
|
|
129
|
-
* - Estimated output token count
|
|
130
|
-
* - Total token usage
|
|
131
|
-
* - Estimated cost in USD
|
|
132
|
-
*
|
|
133
|
-
* @param estimation Estimation results from estimateReviewCost or estimateFromFilePaths
|
|
134
|
-
* @param reviewType Type of review (quick, security, architectural, performance)
|
|
135
|
-
* @param modelName Name of the model being used
|
|
136
|
-
* @returns Formatted estimation string ready for display
|
|
137
|
-
* @example
|
|
138
|
-
* // Example output:
|
|
139
|
-
* // Estimation for 5 files (25.5 KB) using openrouter:anthropic/claude-3-opus-20240229:
|
|
140
|
-
* // - Review type: quick
|
|
141
|
-
* // - Input tokens: 5,000
|
|
142
|
-
* // - Output tokens: 2,500 (estimated)
|
|
143
|
-
* // - Total tokens: 7,500
|
|
144
|
-
* // - Estimated Cost: $0.015 USD
|
|
145
|
-
*/
|
|
146
|
-
export function formatEstimation(
|
|
147
|
-
estimation: ReturnType<typeof estimateReviewCost> extends Promise<infer T> ? T : never,
|
|
148
|
-
reviewType: string,
|
|
149
|
-
modelName: string,
|
|
150
|
-
): string {
|
|
151
|
-
// Extract provider and model if available
|
|
152
|
-
const [provider, model] = modelName.includes(':') ? modelName.split(':') : [undefined, modelName];
|
|
153
|
-
const displayModel = model || modelName;
|
|
154
|
-
const displayProvider = provider
|
|
155
|
-
? `${provider.charAt(0).toUpperCase() + provider.slice(1)}`
|
|
156
|
-
: 'Unknown';
|
|
157
|
-
const fileSizeInKB = (estimation.totalFileSize / 1024).toFixed(2);
|
|
158
|
-
const averageFileSize =
|
|
159
|
-
estimation.fileCount > 0
|
|
160
|
-
? (estimation.totalFileSize / estimation.fileCount / 1024).toFixed(2)
|
|
161
|
-
: '0.00';
|
|
162
|
-
|
|
163
|
-
return `
|
|
164
|
-
=== Token Usage and Cost Estimation ===
|
|
165
|
-
|
|
166
|
-
Review Type: ${reviewType}
|
|
167
|
-
Provider: ${displayProvider}
|
|
168
|
-
Model: ${displayModel}
|
|
169
|
-
Files: ${estimation.fileCount} (${fileSizeInKB} KB total, ${averageFileSize} KB average)
|
|
170
|
-
|
|
171
|
-
Token Usage:
|
|
172
|
-
Input Tokens: ${estimation.inputTokens.toLocaleString()} (includes ${REVIEW_OVERHEAD_TOKENS.toLocaleString()} overhead tokens)
|
|
173
|
-
Estimated Output Tokens: ${estimation.outputTokens.toLocaleString()}
|
|
174
|
-
Total Tokens: ${estimation.totalTokens.toLocaleString()}
|
|
175
|
-
|
|
176
|
-
Estimated Cost: ${estimation.formattedCost}
|
|
177
|
-
|
|
178
|
-
Note: This is an estimate based on approximate token counts and may vary
|
|
179
|
-
based on the actual content and model behavior.
|
|
180
|
-
`;
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
/**
|
|
184
|
-
* Estimate token usage and cost for a set of file paths
|
|
185
|
-
*
|
|
186
|
-
* This function is a convenience wrapper around estimateReviewCost that takes file paths
|
|
187
|
-
* instead of FileInfo objects. It reads the content of each file and then calls
|
|
188
|
-
* estimateReviewCost to calculate the token usage and cost.
|
|
189
|
-
*
|
|
190
|
-
* This is particularly useful for the --estimate command line flag, which needs to
|
|
191
|
-
* estimate costs before actually performing a review.
|
|
192
|
-
*
|
|
193
|
-
* @param filePaths Array of file paths to estimate token usage for
|
|
194
|
-
* @param reviewType Type of review (quick, security, architectural, performance)
|
|
195
|
-
* @param modelName Name of the model to use (e.g., 'openrouter:anthropic/claude-3-opus-20240229')
|
|
196
|
-
* @returns Estimated token usage and cost information (same as estimateReviewCost)
|
|
197
|
-
* @throws Error if any file cannot be read
|
|
198
|
-
* @see estimateReviewCost for details on the return value
|
|
199
|
-
*/
|
|
200
|
-
export async function estimateFromFilePaths(
|
|
201
|
-
filePaths: string[],
|
|
202
|
-
reviewType: string,
|
|
203
|
-
modelName: string = process.env.AI_CODE_REVIEW_MODEL || 'openrouter:anthropic/claude-3-opus-20240229',
|
|
204
|
-
): Promise<ReturnType<typeof estimateReviewCost> extends Promise<infer T> ? T : never> {
|
|
205
|
-
// Read file contents
|
|
206
|
-
const files: FileInfo[] = [];
|
|
207
|
-
|
|
208
|
-
for (const filePath of filePaths) {
|
|
209
|
-
try {
|
|
210
|
-
const content = await fs.readFile(filePath, 'utf-8');
|
|
211
|
-
files.push({
|
|
212
|
-
path: filePath,
|
|
213
|
-
relativePath: path.basename(filePath),
|
|
214
|
-
content,
|
|
215
|
-
});
|
|
216
|
-
} catch (error) {
|
|
217
|
-
logger.error(
|
|
218
|
-
`Error reading file ${filePath}: ${error instanceof Error ? error.message : String(error)}`,
|
|
219
|
-
);
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
// Estimate cost
|
|
224
|
-
return await estimateReviewCost(files, reviewType, modelName);
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
/**
|
|
228
|
-
* Estimate token usage and cost for a multi-pass review
|
|
229
|
-
*
|
|
230
|
-
* This function extends the standard token estimation by accounting for the overhead
|
|
231
|
-
* of multi-pass reviews, including context maintenance between passes and additional
|
|
232
|
-
* overhead for each pass.
|
|
233
|
-
*
|
|
234
|
-
* @param files Array of file information objects containing file content and metadata
|
|
235
|
-
* @param reviewType Type of review (quick, security, architectural, performance)
|
|
236
|
-
* @param modelName Name of the model to use (e.g., 'openrouter:anthropic/claude-3-opus-20240229')
|
|
237
|
-
* @param options Additional estimation options
|
|
238
|
-
* @param options.passCount Number of passes to estimate (if known)
|
|
239
|
-
* @param options.contextMaintenanceFactor Factor for context maintenance overhead (0-1)
|
|
240
|
-
* @returns Estimated token usage and cost information for multi-pass review
|
|
241
|
-
*/
|
|
242
|
-
export async function estimateMultiPassReviewCost(
|
|
243
|
-
files: FileInfo[],
|
|
244
|
-
reviewType: string,
|
|
245
|
-
modelName: string = process.env.AI_CODE_REVIEW_MODEL || 'openrouter:anthropic/claude-3-opus-20240229',
|
|
246
|
-
options: {
|
|
247
|
-
passCount?: number;
|
|
248
|
-
contextMaintenanceFactor?: number;
|
|
249
|
-
} = {},
|
|
250
|
-
): Promise<{
|
|
251
|
-
inputTokens: number;
|
|
252
|
-
outputTokens: number;
|
|
253
|
-
totalTokens: number;
|
|
254
|
-
estimatedCost: number;
|
|
255
|
-
formattedCost: string;
|
|
256
|
-
fileCount: number;
|
|
257
|
-
totalFileSize: number;
|
|
258
|
-
passCount: number;
|
|
259
|
-
perPassCosts: {
|
|
260
|
-
passNumber: number;
|
|
261
|
-
inputTokens: number;
|
|
262
|
-
outputTokens: number;
|
|
263
|
-
totalTokens: number;
|
|
264
|
-
estimatedCost: number;
|
|
265
|
-
}[];
|
|
266
|
-
}> {
|
|
267
|
-
// Calculate total input tokens from all files
|
|
268
|
-
let totalFileTokens = 0;
|
|
269
|
-
let totalFileSize = 0;
|
|
270
|
-
|
|
271
|
-
for (const file of files) {
|
|
272
|
-
const fileTokens = estimateTokenCount(file.content);
|
|
273
|
-
totalFileTokens += fileTokens;
|
|
274
|
-
totalFileSize += file.content.length;
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
// Calculate or determine the number of passes
|
|
278
|
-
const contextMaintenanceFactor =
|
|
279
|
-
options.contextMaintenanceFactor || MULTI_PASS_CONTEXT_MAINTENANCE_FACTOR;
|
|
280
|
-
|
|
281
|
-
// Get a rough estimate of context window size based on the model
|
|
282
|
-
// This is a simplified approach; in production we'd pull this from provider metadata.
|
|
283
|
-
const getContextWindow = (model: string): number => {
|
|
284
|
-
if (model.includes('claude')) return 200000;
|
|
285
|
-
if (model.includes('gpt-4o')) return 128000;
|
|
286
|
-
if (model.includes('gpt-4')) return 128000;
|
|
287
|
-
return 128000; // Default for OpenRouter models
|
|
288
|
-
};
|
|
289
|
-
|
|
290
|
-
const contextWindow = getContextWindow(modelName);
|
|
291
|
-
const effectiveContextSize = Math.floor(contextWindow * (1 - contextMaintenanceFactor));
|
|
292
|
-
|
|
293
|
-
// Determine number of passes if not provided
|
|
294
|
-
const passCount =
|
|
295
|
-
options.passCount || Math.max(1, Math.ceil(totalFileTokens / effectiveContextSize));
|
|
296
|
-
|
|
297
|
-
// Calculate tokens per pass (roughly equal distribution for estimation)
|
|
298
|
-
const tokensPerPass = totalFileTokens / passCount;
|
|
299
|
-
|
|
300
|
-
// Calculate per-pass costs
|
|
301
|
-
const perPassCosts = [];
|
|
302
|
-
let totalInputTokens = 0;
|
|
303
|
-
let totalOutputTokens = 0;
|
|
304
|
-
let totalEstimatedCost = 0;
|
|
305
|
-
|
|
306
|
-
for (let i = 0; i < passCount; i++) {
|
|
307
|
-
// Each pass has standard overhead plus context maintenance overhead
|
|
308
|
-
const passInputTokens = Math.ceil(
|
|
309
|
-
tokensPerPass + REVIEW_OVERHEAD_TOKENS + MULTI_PASS_OVERHEAD_PER_PASS,
|
|
310
|
-
);
|
|
311
|
-
|
|
312
|
-
// For passes after the first, add context from previous passes
|
|
313
|
-
const contextTokens = i > 0 ? Math.ceil(i * MULTI_PASS_OVERHEAD_PER_PASS * 1.5) : 0;
|
|
314
|
-
const totalPassInputTokens = passInputTokens + contextTokens;
|
|
315
|
-
|
|
316
|
-
// Estimate output tokens
|
|
317
|
-
const passOutputTokens = estimateOutputTokens(totalPassInputTokens, reviewType);
|
|
318
|
-
|
|
319
|
-
// Calculate cost for this pass
|
|
320
|
-
const passCostInfo = getCostInfo(totalPassInputTokens, passOutputTokens, modelName);
|
|
321
|
-
|
|
322
|
-
perPassCosts.push({
|
|
323
|
-
passNumber: i + 1,
|
|
324
|
-
inputTokens: totalPassInputTokens,
|
|
325
|
-
outputTokens: passOutputTokens,
|
|
326
|
-
totalTokens: totalPassInputTokens + passOutputTokens,
|
|
327
|
-
estimatedCost: passCostInfo.estimatedCost,
|
|
328
|
-
});
|
|
329
|
-
|
|
330
|
-
// Accumulate totals
|
|
331
|
-
totalInputTokens += totalPassInputTokens;
|
|
332
|
-
totalOutputTokens += passOutputTokens;
|
|
333
|
-
totalEstimatedCost += passCostInfo.estimatedCost;
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
return {
|
|
337
|
-
inputTokens: totalInputTokens,
|
|
338
|
-
outputTokens: totalOutputTokens,
|
|
339
|
-
totalTokens: totalInputTokens + totalOutputTokens,
|
|
340
|
-
estimatedCost: totalEstimatedCost,
|
|
341
|
-
formattedCost: formatCost(totalEstimatedCost),
|
|
342
|
-
fileCount: files.length,
|
|
343
|
-
totalFileSize,
|
|
344
|
-
passCount,
|
|
345
|
-
perPassCosts,
|
|
346
|
-
};
|
|
347
|
-
}
|
|
348
|
-
|
|
349
|
-
/**
|
|
350
|
-
* Format multi-pass estimation results as a human-readable string
|
|
351
|
-
*
|
|
352
|
-
* @param estimation Multi-pass estimation results
|
|
353
|
-
* @param reviewType Type of review
|
|
354
|
-
* @param modelName Name of the model being used
|
|
355
|
-
* @returns Formatted estimation string
|
|
356
|
-
*/
|
|
357
|
-
export function formatMultiPassEstimation(
|
|
358
|
-
estimation: ReturnType<typeof estimateMultiPassReviewCost> extends Promise<infer T> ? T : never,
|
|
359
|
-
reviewType: string,
|
|
360
|
-
modelName: string,
|
|
361
|
-
): string {
|
|
362
|
-
// Extract provider and model if available
|
|
363
|
-
const [provider, model] = modelName.includes(':') ? modelName.split(':') : [undefined, modelName];
|
|
364
|
-
const displayModel = model || modelName;
|
|
365
|
-
const displayProvider = provider
|
|
366
|
-
? `${provider.charAt(0).toUpperCase() + provider.slice(1)}`
|
|
367
|
-
: 'Unknown';
|
|
368
|
-
const fileSizeInKB = (estimation.totalFileSize / 1024).toFixed(2);
|
|
369
|
-
const averageFileSize =
|
|
370
|
-
estimation.fileCount > 0
|
|
371
|
-
? (estimation.totalFileSize / estimation.fileCount / 1024).toFixed(2)
|
|
372
|
-
: '0.00';
|
|
373
|
-
|
|
374
|
-
let output = `
|
|
375
|
-
=== Multi-Pass Token Usage and Cost Estimation ===
|
|
376
|
-
|
|
377
|
-
Review Type: ${reviewType}
|
|
378
|
-
Provider: ${displayProvider}
|
|
379
|
-
Model: ${displayModel}
|
|
380
|
-
Files: ${estimation.fileCount} (${fileSizeInKB} KB total, ${averageFileSize} KB average)
|
|
381
|
-
Passes: ${estimation.passCount}
|
|
382
|
-
|
|
383
|
-
Total Token Usage:
|
|
384
|
-
Input Tokens: ${estimation.inputTokens.toLocaleString()}
|
|
385
|
-
Estimated Output Tokens: ${estimation.outputTokens.toLocaleString()}
|
|
386
|
-
Total Tokens: ${estimation.totalTokens.toLocaleString()}
|
|
387
|
-
|
|
388
|
-
Estimated Total Cost: ${estimation.formattedCost}
|
|
389
|
-
|
|
390
|
-
Per-Pass Breakdown:
|
|
391
|
-
`;
|
|
392
|
-
|
|
393
|
-
estimation.perPassCosts.forEach((passCost) => {
|
|
394
|
-
output += ` Pass ${passCost.passNumber}:
|
|
395
|
-
Input Tokens: ${passCost.inputTokens.toLocaleString()}
|
|
396
|
-
Output Tokens: ${passCost.outputTokens.toLocaleString()}
|
|
397
|
-
Cost: ${formatCost(passCost.estimatedCost)}
|
|
398
|
-
`;
|
|
399
|
-
});
|
|
400
|
-
|
|
401
|
-
output += `
|
|
402
|
-
Note: This is an estimate based on approximate token counts and may vary
|
|
403
|
-
based on the actual content and model behavior.
|
|
404
|
-
`;
|
|
405
|
-
|
|
406
|
-
return output;
|
|
407
|
-
}
|