codereview-aia 0.1.2 → 0.1.3
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/index.js +0 -2
- package/docs/opt-in-full-context.md +27 -0
- package/package.json +11 -11
- package/reports/cr-cr-aia-17-11-2025-20-13.md +354 -0
- package/src/clients/implementations/openRouterClient.ts +2 -0
- package/src/clients/openRouterClient.ts +8 -1
- package/src/clients/utils/promptFormatter.ts +97 -20
- package/src/core/handlers/FileProcessingHandler.ts +6 -0
- package/src/index.ts +0 -3
- package/src/runtime/cliEntry.ts +21 -3
- package/src/runtime/fileCollector.ts +278 -5
- package/src/runtime/reviewPipeline.ts +46 -7
- package/src/runtime/runAiCodeReview.ts +161 -6
- package/src/runtime/ui/RuntimeApp.tsx +34 -5
- package/src/runtime/ui/screens/ProgressScreen.tsx +49 -1
- package/src/runtime/ui/screens/ResultsScreen.tsx +29 -9
- package/src/types/review.ts +18 -0
- package/dist/analysis/FindingsExtractor.d.ts +0 -105
- package/dist/analysis/FindingsExtractor.js +0 -363
- package/dist/analysis/FindingsExtractor.js.map +0 -1
- package/dist/analysis/ai-detection/analyzers/BaseAnalyzer.d.ts +0 -111
- package/dist/analysis/ai-detection/analyzers/BaseAnalyzer.js +0 -215
- package/dist/analysis/ai-detection/analyzers/BaseAnalyzer.js.map +0 -1
- package/dist/analysis/ai-detection/analyzers/DocumentationAnalyzer.d.ts +0 -142
- package/dist/analysis/ai-detection/analyzers/DocumentationAnalyzer.js +0 -503
- package/dist/analysis/ai-detection/analyzers/DocumentationAnalyzer.js.map +0 -1
- package/dist/analysis/ai-detection/analyzers/GitHistoryAnalyzer.d.ts +0 -88
- package/dist/analysis/ai-detection/analyzers/GitHistoryAnalyzer.js +0 -343
- package/dist/analysis/ai-detection/analyzers/GitHistoryAnalyzer.js.map +0 -1
- package/dist/analysis/ai-detection/core/AIDetectionEngine.d.ts +0 -104
- package/dist/analysis/ai-detection/core/AIDetectionEngine.js +0 -369
- package/dist/analysis/ai-detection/core/AIDetectionEngine.js.map +0 -1
- package/dist/analysis/ai-detection/types/DetectionTypes.d.ts +0 -364
- package/dist/analysis/ai-detection/types/DetectionTypes.js +0 -32
- package/dist/analysis/ai-detection/types/DetectionTypes.js.map +0 -1
- package/dist/analysis/ai-detection/utils/SubmissionConverter.d.ts +0 -97
- package/dist/analysis/ai-detection/utils/SubmissionConverter.js +0 -339
- package/dist/analysis/ai-detection/utils/SubmissionConverter.js.map +0 -1
- package/dist/analysis/context/ReviewContext.d.ts +0 -184
- package/dist/analysis/context/ReviewContext.js +0 -294
- package/dist/analysis/context/ReviewContext.js.map +0 -1
- package/dist/analysis/context/index.d.ts +0 -6
- package/dist/analysis/context/index.js +0 -23
- package/dist/analysis/context/index.js.map +0 -1
- package/dist/analysis/index.d.ts +0 -7
- package/dist/analysis/index.js +0 -24
- package/dist/analysis/index.js.map +0 -1
- package/dist/analysis/tokens/TokenAnalysisFormatter.d.ts +0 -27
- package/dist/analysis/tokens/TokenAnalysisFormatter.js +0 -143
- package/dist/analysis/tokens/TokenAnalysisFormatter.js.map +0 -1
- package/dist/analysis/tokens/TokenAnalyzer.d.ts +0 -155
- package/dist/analysis/tokens/TokenAnalyzer.js +0 -502
- package/dist/analysis/tokens/TokenAnalyzer.js.map +0 -1
- package/dist/analysis/tokens/index.d.ts +0 -7
- package/dist/analysis/tokens/index.js +0 -24
- package/dist/analysis/tokens/index.js.map +0 -1
- package/dist/clients/base/abstractClient.d.ts +0 -99
- package/dist/clients/base/abstractClient.js +0 -98
- package/dist/clients/base/abstractClient.js.map +0 -1
- package/dist/clients/base/httpClient.d.ts +0 -24
- package/dist/clients/base/httpClient.js +0 -147
- package/dist/clients/base/httpClient.js.map +0 -1
- package/dist/clients/base/index.d.ts +0 -11
- package/dist/clients/base/index.js +0 -28
- package/dist/clients/base/index.js.map +0 -1
- package/dist/clients/base/modelDetection.d.ts +0 -41
- package/dist/clients/base/modelDetection.js +0 -88
- package/dist/clients/base/modelDetection.js.map +0 -1
- package/dist/clients/base/responseProcessor.d.ts +0 -45
- package/dist/clients/base/responseProcessor.js +0 -495
- package/dist/clients/base/responseProcessor.js.map +0 -1
- package/dist/clients/factory/clientFactory.d.ts +0 -23
- package/dist/clients/factory/clientFactory.js +0 -50
- package/dist/clients/factory/clientFactory.js.map +0 -1
- package/dist/clients/factory/index.d.ts +0 -7
- package/dist/clients/factory/index.js +0 -24
- package/dist/clients/factory/index.js.map +0 -1
- package/dist/clients/implementations/index.d.ts +0 -7
- package/dist/clients/implementations/index.js +0 -24
- package/dist/clients/implementations/index.js.map +0 -1
- package/dist/clients/implementations/openRouterClient.d.ts +0 -69
- package/dist/clients/implementations/openRouterClient.js +0 -294
- package/dist/clients/implementations/openRouterClient.js.map +0 -1
- package/dist/clients/openRouterClient.d.ts +0 -42
- package/dist/clients/openRouterClient.js +0 -738
- package/dist/clients/openRouterClient.js.map +0 -1
- package/dist/clients/openRouterClientWrapper.d.ts +0 -22
- package/dist/clients/openRouterClientWrapper.js +0 -64
- package/dist/clients/openRouterClientWrapper.js.map +0 -1
- package/dist/clients/utils/directoryStructure.d.ts +0 -14
- package/dist/clients/utils/directoryStructure.js +0 -48
- package/dist/clients/utils/directoryStructure.js.map +0 -1
- package/dist/clients/utils/index.d.ts +0 -10
- package/dist/clients/utils/index.js +0 -31
- package/dist/clients/utils/index.js.map +0 -1
- package/dist/clients/utils/languageDetection.d.ts +0 -13
- package/dist/clients/utils/languageDetection.js +0 -46
- package/dist/clients/utils/languageDetection.js.map +0 -1
- package/dist/clients/utils/promptFormatter.d.ts +0 -36
- package/dist/clients/utils/promptFormatter.js +0 -92
- package/dist/clients/utils/promptFormatter.js.map +0 -1
- package/dist/clients/utils/promptLoader.d.ts +0 -27
- package/dist/clients/utils/promptLoader.js +0 -49
- package/dist/clients/utils/promptLoader.js.map +0 -1
- package/dist/clients/utils/tokenCounter.d.ts +0 -81
- package/dist/clients/utils/tokenCounter.js +0 -209
- package/dist/clients/utils/tokenCounter.js.map +0 -1
- package/dist/core/ApiClientSelector.d.ts +0 -8
- package/dist/core/ApiClientSelector.js +0 -29
- package/dist/core/ApiClientSelector.js.map +0 -1
- package/dist/core/ConfigurationService.d.ts +0 -286
- package/dist/core/ConfigurationService.js +0 -477
- package/dist/core/ConfigurationService.js.map +0 -1
- package/dist/core/ConsolidationService.d.ts +0 -99
- package/dist/core/ConsolidationService.js +0 -341
- package/dist/core/ConsolidationService.js.map +0 -1
- package/dist/core/InteractiveDisplayManager.d.ts +0 -22
- package/dist/core/InteractiveDisplayManager.js +0 -70
- package/dist/core/InteractiveDisplayManager.js.map +0 -1
- package/dist/core/OutputManager.d.ts +0 -26
- package/dist/core/OutputManager.js +0 -217
- package/dist/core/OutputManager.js.map +0 -1
- package/dist/core/ReviewGenerator.d.ts +0 -13
- package/dist/core/ReviewGenerator.js +0 -102
- package/dist/core/ReviewGenerator.js.map +0 -1
- package/dist/core/fileDiscovery.d.ts +0 -35
- package/dist/core/fileDiscovery.js +0 -202
- package/dist/core/fileDiscovery.js.map +0 -1
- package/dist/core/handlers/EstimationHandler.d.ts +0 -18
- package/dist/core/handlers/EstimationHandler.js +0 -110
- package/dist/core/handlers/EstimationHandler.js.map +0 -1
- package/dist/core/handlers/FileProcessingHandler.d.ts +0 -31
- package/dist/core/handlers/FileProcessingHandler.js +0 -159
- package/dist/core/handlers/FileProcessingHandler.js.map +0 -1
- package/dist/core/handlers/OutputHandler.d.ts +0 -27
- package/dist/core/handlers/OutputHandler.js +0 -127
- package/dist/core/handlers/OutputHandler.js.map +0 -1
- package/dist/core/handlers/ReviewExecutor.d.ts +0 -32
- package/dist/core/handlers/ReviewExecutor.js +0 -111
- package/dist/core/handlers/ReviewExecutor.js.map +0 -1
- package/dist/core/reviewOrchestrator.d.ts +0 -24
- package/dist/core/reviewOrchestrator.js +0 -294
- package/dist/core/reviewOrchestrator.js.map +0 -1
- package/dist/core/utils/ModelInfoUtils.d.ts +0 -16
- package/dist/core/utils/ModelInfoUtils.js +0 -54
- package/dist/core/utils/ModelInfoUtils.js.map +0 -1
- package/dist/formatters/outputFormatter.d.ts +0 -31
- package/dist/formatters/outputFormatter.js +0 -65
- package/dist/formatters/outputFormatter.js.map +0 -1
- package/dist/formatters/utils/IssueFormatters.d.ts +0 -20
- package/dist/formatters/utils/IssueFormatters.js +0 -67
- package/dist/formatters/utils/IssueFormatters.js.map +0 -1
- package/dist/formatters/utils/JsonFormatter.d.ts +0 -13
- package/dist/formatters/utils/JsonFormatter.js +0 -57
- package/dist/formatters/utils/JsonFormatter.js.map +0 -1
- package/dist/formatters/utils/MarkdownFormatters.d.ts +0 -51
- package/dist/formatters/utils/MarkdownFormatters.js +0 -456
- package/dist/formatters/utils/MarkdownFormatters.js.map +0 -1
- package/dist/formatters/utils/MetadataFormatter.d.ts +0 -65
- package/dist/formatters/utils/MetadataFormatter.js +0 -219
- package/dist/formatters/utils/MetadataFormatter.js.map +0 -1
- package/dist/formatters/utils/ModelInfoExtractor.d.ts +0 -33
- package/dist/formatters/utils/ModelInfoExtractor.js +0 -111
- package/dist/formatters/utils/ModelInfoExtractor.js.map +0 -1
- package/dist/index.d.ts +0 -2
- package/dist/index.js.map +0 -1
- package/dist/plugins/PluginInterface.d.ts +0 -44
- package/dist/plugins/PluginInterface.js +0 -9
- package/dist/plugins/PluginInterface.js.map +0 -1
- package/dist/plugins/PluginManager.d.ts +0 -51
- package/dist/plugins/PluginManager.js +0 -151
- package/dist/plugins/PluginManager.js.map +0 -1
- package/dist/prompts/PromptManager.d.ts +0 -30
- package/dist/prompts/PromptManager.js +0 -62
- package/dist/prompts/PromptManager.js.map +0 -1
- package/dist/prompts/cache/PromptCache.d.ts +0 -32
- package/dist/prompts/cache/PromptCache.js +0 -48
- package/dist/prompts/cache/PromptCache.js.map +0 -1
- package/dist/runtime/auth/service.d.ts +0 -2
- package/dist/runtime/auth/service.js +0 -41
- package/dist/runtime/auth/service.js.map +0 -1
- package/dist/runtime/auth/session.d.ts +0 -5
- package/dist/runtime/auth/session.js +0 -87
- package/dist/runtime/auth/session.js.map +0 -1
- package/dist/runtime/auth/types.d.ts +0 -9
- package/dist/runtime/auth/types.js +0 -3
- package/dist/runtime/auth/types.js.map +0 -1
- package/dist/runtime/cliEntry.d.ts +0 -1
- package/dist/runtime/cliEntry.js +0 -213
- package/dist/runtime/cliEntry.js.map +0 -1
- package/dist/runtime/debug/logManager.d.ts +0 -5
- package/dist/runtime/debug/logManager.js +0 -31
- package/dist/runtime/debug/logManager.js.map +0 -1
- package/dist/runtime/errors.d.ts +0 -5
- package/dist/runtime/errors.js +0 -15
- package/dist/runtime/errors.js.map +0 -1
- package/dist/runtime/fileCollector.d.ts +0 -5
- package/dist/runtime/fileCollector.js +0 -167
- package/dist/runtime/fileCollector.js.map +0 -1
- package/dist/runtime/manifest.d.ts +0 -1
- package/dist/runtime/manifest.js +0 -65
- package/dist/runtime/manifest.js.map +0 -1
- package/dist/runtime/openrouterProxy.d.ts +0 -4
- package/dist/runtime/openrouterProxy.js +0 -43
- package/dist/runtime/openrouterProxy.js.map +0 -1
- package/dist/runtime/preprod/webCheck.d.ts +0 -1
- package/dist/runtime/preprod/webCheck.js +0 -98
- package/dist/runtime/preprod/webCheck.js.map +0 -1
- package/dist/runtime/proxyConfig.d.ts +0 -6
- package/dist/runtime/proxyConfig.js +0 -86
- package/dist/runtime/proxyConfig.js.map +0 -1
- package/dist/runtime/proxyEnvironment.d.ts +0 -3
- package/dist/runtime/proxyEnvironment.js +0 -63
- package/dist/runtime/proxyEnvironment.js.map +0 -1
- package/dist/runtime/reportMerge.d.ts +0 -30
- package/dist/runtime/reportMerge.js +0 -70
- package/dist/runtime/reportMerge.js.map +0 -1
- package/dist/runtime/reporting/markdownReportBuilder.d.ts +0 -15
- package/dist/runtime/reporting/markdownReportBuilder.js +0 -97
- package/dist/runtime/reporting/markdownReportBuilder.js.map +0 -1
- package/dist/runtime/reporting/reportDataCollector.d.ts +0 -31
- package/dist/runtime/reporting/reportDataCollector.js +0 -170
- package/dist/runtime/reporting/reportDataCollector.js.map +0 -1
- package/dist/runtime/reporting/summaryGenerator.d.ts +0 -10
- package/dist/runtime/reporting/summaryGenerator.js +0 -67
- package/dist/runtime/reporting/summaryGenerator.js.map +0 -1
- package/dist/runtime/reviewPipeline.d.ts +0 -28
- package/dist/runtime/reviewPipeline.js +0 -122
- package/dist/runtime/reviewPipeline.js.map +0 -1
- package/dist/runtime/runAiCodeReview.d.ts +0 -10
- package/dist/runtime/runAiCodeReview.js +0 -138
- package/dist/runtime/runAiCodeReview.js.map +0 -1
- package/dist/runtime/runtimeConfig.d.ts +0 -4
- package/dist/runtime/runtimeConfig.js +0 -7
- package/dist/runtime/runtimeConfig.js.map +0 -1
- package/dist/runtime/ui/Layout.d.ts +0 -11
- package/dist/runtime/ui/Layout.js +0 -47
- package/dist/runtime/ui/Layout.js.map +0 -1
- package/dist/runtime/ui/RuntimeApp.d.ts +0 -6
- package/dist/runtime/ui/RuntimeApp.js +0 -161
- package/dist/runtime/ui/RuntimeApp.js.map +0 -1
- package/dist/runtime/ui/inkModules.d.ts +0 -10
- package/dist/runtime/ui/inkModules.js +0 -63
- package/dist/runtime/ui/inkModules.js.map +0 -1
- package/dist/runtime/ui/screens/AuthScreen.d.ts +0 -6
- package/dist/runtime/ui/screens/AuthScreen.js +0 -67
- package/dist/runtime/ui/screens/AuthScreen.js.map +0 -1
- package/dist/runtime/ui/screens/ModeSelection.d.ts +0 -10
- package/dist/runtime/ui/screens/ModeSelection.js +0 -100
- package/dist/runtime/ui/screens/ModeSelection.js.map +0 -1
- package/dist/runtime/ui/screens/ProgressScreen.d.ts +0 -7
- package/dist/runtime/ui/screens/ProgressScreen.js +0 -38
- package/dist/runtime/ui/screens/ProgressScreen.js.map +0 -1
- package/dist/runtime/ui/screens/ResultsScreen.d.ts +0 -7
- package/dist/runtime/ui/screens/ResultsScreen.js +0 -22
- package/dist/runtime/ui/screens/ResultsScreen.js.map +0 -1
- package/dist/strategies/ArchitecturalReviewStrategy.d.ts +0 -29
- package/dist/strategies/ArchitecturalReviewStrategy.js +0 -42
- package/dist/strategies/ArchitecturalReviewStrategy.js.map +0 -1
- package/dist/strategies/CodingTestReviewStrategy.d.ts +0 -194
- package/dist/strategies/CodingTestReviewStrategy.js +0 -681
- package/dist/strategies/CodingTestReviewStrategy.js.map +0 -1
- package/dist/strategies/ConsolidatedReviewStrategy.d.ts +0 -25
- package/dist/strategies/ConsolidatedReviewStrategy.js +0 -45
- package/dist/strategies/ConsolidatedReviewStrategy.js.map +0 -1
- package/dist/strategies/ExtractPatternsReviewStrategy.d.ts +0 -30
- package/dist/strategies/ExtractPatternsReviewStrategy.js +0 -51
- package/dist/strategies/ExtractPatternsReviewStrategy.js.map +0 -1
- package/dist/strategies/MultiPassReviewStrategy.d.ts +0 -86
- package/dist/strategies/MultiPassReviewStrategy.js +0 -590
- package/dist/strategies/MultiPassReviewStrategy.js.map +0 -1
- package/dist/strategies/ReviewStrategy.d.ts +0 -45
- package/dist/strategies/ReviewStrategy.js +0 -24
- package/dist/strategies/ReviewStrategy.js.map +0 -1
- package/dist/strategies/StrategyFactory.d.ts +0 -19
- package/dist/strategies/StrategyFactory.js +0 -72
- package/dist/strategies/StrategyFactory.js.map +0 -1
- package/dist/strategies/index.d.ts +0 -13
- package/dist/strategies/index.js +0 -30
- package/dist/strategies/index.js.map +0 -1
- package/dist/tokenizers/baseTokenizer.d.ts +0 -25
- package/dist/tokenizers/baseTokenizer.js +0 -48
- package/dist/tokenizers/baseTokenizer.js.map +0 -1
- package/dist/tokenizers/gptTokenizer.d.ts +0 -7
- package/dist/tokenizers/gptTokenizer.js +0 -28
- package/dist/tokenizers/gptTokenizer.js.map +0 -1
- package/dist/tokenizers/index.d.ts +0 -7
- package/dist/tokenizers/index.js +0 -24
- package/dist/tokenizers/index.js.map +0 -1
- package/dist/types/apiResponses.d.ts +0 -39
- package/dist/types/apiResponses.js +0 -9
- package/dist/types/apiResponses.js.map +0 -1
- package/dist/types/cli.d.ts +0 -22
- package/dist/types/cli.js +0 -3
- package/dist/types/cli.js.map +0 -1
- package/dist/types/common.d.ts +0 -22
- package/dist/types/common.js +0 -14
- package/dist/types/common.js.map +0 -1
- package/dist/types/configuration.d.ts +0 -682
- package/dist/types/configuration.js +0 -65
- package/dist/types/configuration.js.map +0 -1
- package/dist/types/review.d.ts +0 -258
- package/dist/types/review.js +0 -8
- package/dist/types/review.js.map +0 -1
- package/dist/types/reviewSchema.d.ts +0 -543
- package/dist/types/reviewSchema.js +0 -121
- package/dist/types/reviewSchema.js.map +0 -1
- package/dist/types/structuredReview.d.ts +0 -119
- package/dist/types/structuredReview.js +0 -6
- package/dist/types/structuredReview.js.map +0 -1
- package/dist/types/tokenAnalysis.d.ts +0 -44
- package/dist/types/tokenAnalysis.js +0 -4
- package/dist/types/tokenAnalysis.js.map +0 -1
- package/dist/utils/FileReader.d.ts +0 -33
- package/dist/utils/FileReader.js +0 -88
- package/dist/utils/FileReader.js.map +0 -1
- package/dist/utils/FileWriter.d.ts +0 -26
- package/dist/utils/FileWriter.js +0 -76
- package/dist/utils/FileWriter.js.map +0 -1
- package/dist/utils/PathGenerator.d.ts +0 -30
- package/dist/utils/PathGenerator.js +0 -82
- package/dist/utils/PathGenerator.js.map +0 -1
- package/dist/utils/api/apiUtils.d.ts +0 -3
- package/dist/utils/api/apiUtils.js +0 -20
- package/dist/utils/api/apiUtils.js.map +0 -1
- package/dist/utils/api/index.d.ts +0 -1
- package/dist/utils/api/index.js +0 -18
- package/dist/utils/api/index.js.map +0 -1
- package/dist/utils/apiErrorHandler.d.ts +0 -130
- package/dist/utils/apiErrorHandler.js +0 -256
- package/dist/utils/apiErrorHandler.js.map +0 -1
- package/dist/utils/ciDataCollector.d.ts +0 -51
- package/dist/utils/ciDataCollector.js +0 -197
- package/dist/utils/ciDataCollector.js.map +0 -1
- package/dist/utils/codingTestConfigLoader.d.ts +0 -66
- package/dist/utils/codingTestConfigLoader.js +0 -420
- package/dist/utils/codingTestConfigLoader.js.map +0 -1
- package/dist/utils/dependencies/aiDependencyAnalyzer.d.ts +0 -30
- package/dist/utils/dependencies/aiDependencyAnalyzer.js +0 -343
- package/dist/utils/dependencies/aiDependencyAnalyzer.js.map +0 -1
- package/dist/utils/detection/frameworkDetector.d.ts +0 -43
- package/dist/utils/detection/frameworkDetector.js +0 -795
- package/dist/utils/detection/frameworkDetector.js.map +0 -1
- package/dist/utils/detection/index.d.ts +0 -9
- package/dist/utils/detection/index.js +0 -28
- package/dist/utils/detection/index.js.map +0 -1
- package/dist/utils/detection/projectTypeDetector.d.ts +0 -27
- package/dist/utils/detection/projectTypeDetector.js +0 -469
- package/dist/utils/detection/projectTypeDetector.js.map +0 -1
- package/dist/utils/diagramGenerator.d.ts +0 -49
- package/dist/utils/diagramGenerator.js +0 -218
- package/dist/utils/diagramGenerator.js.map +0 -1
- package/dist/utils/errorLogger.d.ts +0 -24
- package/dist/utils/errorLogger.js +0 -59
- package/dist/utils/errorLogger.js.map +0 -1
- package/dist/utils/estimationUtils.d.ts +0 -139
- package/dist/utils/estimationUtils.js +0 -329
- package/dist/utils/estimationUtils.js.map +0 -1
- package/dist/utils/fileFilters.d.ts +0 -72
- package/dist/utils/fileFilters.js +0 -338
- package/dist/utils/fileFilters.js.map +0 -1
- package/dist/utils/fileSystem.d.ts +0 -22
- package/dist/utils/fileSystem.js +0 -45
- package/dist/utils/fileSystem.js.map +0 -1
- package/dist/utils/index.d.ts +0 -22
- package/dist/utils/index.js +0 -52
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/logger.d.ts +0 -77
- package/dist/utils/logger.js +0 -271
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/pathValidator.d.ts +0 -40
- package/dist/utils/pathValidator.js +0 -98
- package/dist/utils/pathValidator.js.map +0 -1
- package/dist/utils/priorityFilter.d.ts +0 -34
- package/dist/utils/priorityFilter.js +0 -54
- package/dist/utils/priorityFilter.js.map +0 -1
- package/dist/utils/projectDocs.d.ts +0 -47
- package/dist/utils/projectDocs.js +0 -158
- package/dist/utils/projectDocs.js.map +0 -1
- package/dist/utils/promptPaths.d.ts +0 -6
- package/dist/utils/promptPaths.js +0 -33
- package/dist/utils/promptPaths.js.map +0 -1
- package/dist/utils/promptTemplateManager.d.ts +0 -34
- package/dist/utils/promptTemplateManager.js +0 -140
- package/dist/utils/promptTemplateManager.js.map +0 -1
- package/dist/utils/review/consolidateReview.d.ts +0 -15
- package/dist/utils/review/consolidateReview.js +0 -481
- package/dist/utils/review/consolidateReview.js.map +0 -1
- package/dist/utils/review/fixDisplay.d.ts +0 -20
- package/dist/utils/review/fixDisplay.js +0 -84
- package/dist/utils/review/fixDisplay.js.map +0 -1
- package/dist/utils/review/fixImplementation.d.ts +0 -28
- package/dist/utils/review/fixImplementation.js +0 -60
- package/dist/utils/review/fixImplementation.js.map +0 -1
- package/dist/utils/review/index.d.ts +0 -13
- package/dist/utils/review/index.js +0 -50
- package/dist/utils/review/index.js.map +0 -1
- package/dist/utils/review/interactiveProcessing.d.ts +0 -25
- package/dist/utils/review/interactiveProcessing.js +0 -251
- package/dist/utils/review/interactiveProcessing.js.map +0 -1
- package/dist/utils/review/progressTracker.d.ts +0 -106
- package/dist/utils/review/progressTracker.js +0 -227
- package/dist/utils/review/progressTracker.js.map +0 -1
- package/dist/utils/review/reviewExtraction.d.ts +0 -31
- package/dist/utils/review/reviewExtraction.js +0 -324
- package/dist/utils/review/reviewExtraction.js.map +0 -1
- package/dist/utils/review/types.d.ts +0 -45
- package/dist/utils/review/types.js +0 -18
- package/dist/utils/review/types.js.map +0 -1
- package/dist/utils/reviewActionHandler.d.ts +0 -16
- package/dist/utils/reviewActionHandler.js +0 -34
- package/dist/utils/reviewActionHandler.js.map +0 -1
- package/dist/utils/reviewParser.d.ts +0 -34
- package/dist/utils/reviewParser.js +0 -218
- package/dist/utils/reviewParser.js.map +0 -1
- package/dist/utils/sanitizer.d.ts +0 -82
- package/dist/utils/sanitizer.js +0 -239
- package/dist/utils/sanitizer.js.map +0 -1
- package/dist/utils/smartFileSelector.d.ts +0 -50
- package/dist/utils/smartFileSelector.js +0 -261
- package/dist/utils/smartFileSelector.js.map +0 -1
- package/dist/utils/templateLoader.d.ts +0 -44
- package/dist/utils/templateLoader.js +0 -431
- package/dist/utils/templateLoader.js.map +0 -1
- package/dist/utils/treeGenerator.d.ts +0 -12
- package/dist/utils/treeGenerator.js +0 -133
- package/dist/utils/treeGenerator.js.map +0 -1
|
@@ -1,681 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* @fileoverview Coding test review strategy implementation.
|
|
4
|
-
*
|
|
5
|
-
* This module implements the coding test review strategy for evaluating candidate submissions
|
|
6
|
-
* against assignment requirements using configurable scoring criteria and evaluation frameworks.
|
|
7
|
-
*/
|
|
8
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.CodingTestReviewStrategy = void 0;
|
|
13
|
-
const AIDetectionEngine_1 = require("../analysis/ai-detection/core/AIDetectionEngine");
|
|
14
|
-
const SubmissionConverter_1 = require("../analysis/ai-detection/utils/SubmissionConverter");
|
|
15
|
-
const ReviewGenerator_1 = require("../core/ReviewGenerator");
|
|
16
|
-
const ciDataCollector_1 = require("../utils/ciDataCollector");
|
|
17
|
-
const codingTestConfigLoader_1 = require("../utils/codingTestConfigLoader");
|
|
18
|
-
const logger_1 = __importDefault(require("../utils/logger"));
|
|
19
|
-
const ReviewStrategy_1 = require("./ReviewStrategy");
|
|
20
|
-
/**
|
|
21
|
-
* Strategy for coding test assessment and evaluation
|
|
22
|
-
*/
|
|
23
|
-
class CodingTestReviewStrategy extends ReviewStrategy_1.BaseReviewStrategy {
|
|
24
|
-
config;
|
|
25
|
-
aiDetectionEngine;
|
|
26
|
-
/**
|
|
27
|
-
* Create a new coding test review strategy
|
|
28
|
-
* @param config Coding test configuration or options for loading configuration
|
|
29
|
-
*/
|
|
30
|
-
constructor(config = {}) {
|
|
31
|
-
super('coding-test');
|
|
32
|
-
this.config = this.initializeConfig(config);
|
|
33
|
-
// AI detection initialization moved to execute() method after config merge
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Execute the coding test review strategy
|
|
37
|
-
* @param files Files to review
|
|
38
|
-
* @param projectName Project name
|
|
39
|
-
* @param projectDocs Project documentation
|
|
40
|
-
* @param options Review options
|
|
41
|
-
* @param apiClientConfig API client configuration
|
|
42
|
-
* @returns Promise resolving to the review result
|
|
43
|
-
*/
|
|
44
|
-
async execute(files, projectName, projectDocs, options, apiClientConfig) {
|
|
45
|
-
logger_1.default.info(`Executing coding test review strategy for ${projectName}...`);
|
|
46
|
-
// Merge configuration from options
|
|
47
|
-
const effectiveConfig = this.mergeOptionsWithConfig(options);
|
|
48
|
-
// Initialize AI detection engine with merged configuration
|
|
49
|
-
this.initializeAIDetectionWithConfig(effectiveConfig);
|
|
50
|
-
// Collect CI data if applicable
|
|
51
|
-
let ciData;
|
|
52
|
-
if (this.shouldCollectCIData(files, options)) {
|
|
53
|
-
logger_1.default.info('Collecting CI data for coding test evaluation...');
|
|
54
|
-
ciData = await (0, ciDataCollector_1.collectCIData)(process.cwd());
|
|
55
|
-
options.ciData = ciData;
|
|
56
|
-
}
|
|
57
|
-
// Run AI detection if enabled
|
|
58
|
-
let aiDetectionResult = null;
|
|
59
|
-
if (effectiveConfig.aiDetection?.enabled && this.aiDetectionEngine) {
|
|
60
|
-
logger_1.default.info('🔍 Starting AI detection analysis...');
|
|
61
|
-
logger_1.default.debug(`AI detection configuration: threshold=${effectiveConfig.aiDetection.threshold}, analyzers=${effectiveConfig.aiDetection.analyzers?.join(',')}`);
|
|
62
|
-
const startTime = Date.now();
|
|
63
|
-
try {
|
|
64
|
-
logger_1.default.debug('Converting submission data for AI analysis...');
|
|
65
|
-
const submission = await SubmissionConverter_1.SubmissionConverter.convert(files, projectName, projectDocs);
|
|
66
|
-
logger_1.default.debug(`Submission conversion completed. Files: ${submission.codebase.files.length}, Commits: ${submission.repository.commits.length}`);
|
|
67
|
-
logger_1.default.debug('Running AI detection engine analysis...');
|
|
68
|
-
aiDetectionResult = await this.aiDetectionEngine.analyze(submission);
|
|
69
|
-
const analysisTime = Date.now() - startTime;
|
|
70
|
-
logger_1.default.info(`✅ AI detection completed in ${analysisTime}ms`);
|
|
71
|
-
logger_1.default.info(`📊 Results: Confidence=${aiDetectionResult.confidenceScore.toFixed(3)}, AI Generated=${aiDetectionResult.isAIGenerated}, Patterns=${aiDetectionResult.detectedPatterns.length}`);
|
|
72
|
-
if (aiDetectionResult.isAIGenerated) {
|
|
73
|
-
const riskLevel = this.calculateRiskLevel(aiDetectionResult.confidenceScore);
|
|
74
|
-
logger_1.default.warn(`🚨 AI-generated content detected! Risk Level: ${riskLevel}`);
|
|
75
|
-
// Log detected patterns for debugging
|
|
76
|
-
if (aiDetectionResult.detectedPatterns.length > 0) {
|
|
77
|
-
logger_1.default.debug('Detected patterns:');
|
|
78
|
-
aiDetectionResult.detectedPatterns.forEach((pattern) => {
|
|
79
|
-
logger_1.default.debug(` - ${pattern.name} (${pattern.id}): confidence=${pattern.confidence}, score=${pattern.score}`);
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
// Log recommendations
|
|
83
|
-
if (aiDetectionResult.recommendations.length > 0) {
|
|
84
|
-
logger_1.default.info('AI detection recommendations:');
|
|
85
|
-
aiDetectionResult.recommendations.forEach((rec) => {
|
|
86
|
-
logger_1.default.info(` ${rec}`);
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
else {
|
|
91
|
-
logger_1.default.info('✅ No significant AI-generated patterns detected');
|
|
92
|
-
}
|
|
93
|
-
// Log analyzer performance
|
|
94
|
-
if (aiDetectionResult.metadata.warnings.length > 0) {
|
|
95
|
-
logger_1.default.warn('AI detection warnings:');
|
|
96
|
-
aiDetectionResult.metadata.warnings.forEach((warning) => {
|
|
97
|
-
logger_1.default.warn(` ⚠️ ${warning}`);
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
catch (error) {
|
|
102
|
-
const analysisTime = Date.now() - startTime;
|
|
103
|
-
logger_1.default.error(`❌ AI detection failed after ${analysisTime}ms: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
104
|
-
if (error instanceof Error && error.stack) {
|
|
105
|
-
logger_1.default.debug('AI detection error stack:', error.stack);
|
|
106
|
-
}
|
|
107
|
-
// Log troubleshooting information
|
|
108
|
-
logger_1.default.info('🔧 AI detection troubleshooting:');
|
|
109
|
-
logger_1.default.info(' 1. Ensure the target directory contains a git repository with commit history');
|
|
110
|
-
logger_1.default.info(' 2. Check that the project has documentation files (README, comments)');
|
|
111
|
-
logger_1.default.info(' 3. Verify sufficient disk space and memory availability');
|
|
112
|
-
logger_1.default.info(' 4. Try running with --debug flag for detailed logs');
|
|
113
|
-
logger_1.default.info(' 5. Consider using fewer analyzers (--ai-detection-analyzers git)');
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
else if (effectiveConfig.aiDetection?.enabled && !this.aiDetectionEngine) {
|
|
117
|
-
logger_1.default.warn('⚠️ AI detection enabled but engine not initialized. Check configuration.');
|
|
118
|
-
}
|
|
119
|
-
else {
|
|
120
|
-
logger_1.default.debug('AI detection disabled or not configured');
|
|
121
|
-
}
|
|
122
|
-
// Prepare enhanced options with coding test context and AI detection results
|
|
123
|
-
const enhancedOptions = this.enhanceOptionsWithCodingTestContext(options, effectiveConfig, aiDetectionResult);
|
|
124
|
-
// Generate the review using the selected API client
|
|
125
|
-
const result = await (0, ReviewGenerator_1.generateReview)(files, projectName, this.reviewType, projectDocs, enhancedOptions, apiClientConfig);
|
|
126
|
-
// Enhance result with coding test metadata and AI detection
|
|
127
|
-
return this.enhanceResultWithCodingTestMetadata(result, effectiveConfig, aiDetectionResult);
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* Initialize configuration from various sources
|
|
131
|
-
* @param config Configuration or loading options
|
|
132
|
-
* @returns Initialized configuration
|
|
133
|
-
*/
|
|
134
|
-
initializeConfig(config) {
|
|
135
|
-
// Check if it's a loading configuration
|
|
136
|
-
if ('fromFile' in config || 'fromUrl' in config) {
|
|
137
|
-
if (config.fromFile) {
|
|
138
|
-
logger_1.default.info(`Loading coding test configuration from file: ${config.fromFile}`);
|
|
139
|
-
const extendedConfig = (0, codingTestConfigLoader_1.loadCodingTestConfig)(config.fromFile);
|
|
140
|
-
return this.normalizeConfig((0, codingTestConfigLoader_1.convertToCodingTestConfig)(extendedConfig));
|
|
141
|
-
}
|
|
142
|
-
if (config.fromUrl) {
|
|
143
|
-
logger_1.default.info(`Loading coding test configuration from URL: ${config.fromUrl}`);
|
|
144
|
-
// Note: This would need to be handled asynchronously in a real implementation
|
|
145
|
-
// For now, we'll fall back to default configuration
|
|
146
|
-
logger_1.default.warn('URL-based configuration loading not implemented in constructor. Using default configuration.');
|
|
147
|
-
return this.normalizeConfig((0, codingTestConfigLoader_1.createDefaultCodingTestConfig)());
|
|
148
|
-
}
|
|
149
|
-
// No valid loading option provided, use default
|
|
150
|
-
return this.normalizeConfig((0, codingTestConfigLoader_1.createDefaultCodingTestConfig)());
|
|
151
|
-
}
|
|
152
|
-
// It's a direct configuration object
|
|
153
|
-
return this.normalizeConfig(config);
|
|
154
|
-
}
|
|
155
|
-
/**
|
|
156
|
-
* Normalize and validate configuration
|
|
157
|
-
* @param config Input configuration
|
|
158
|
-
* @returns Normalized configuration
|
|
159
|
-
*/
|
|
160
|
-
normalizeConfig(config) {
|
|
161
|
-
const normalized = {
|
|
162
|
-
assignment: {
|
|
163
|
-
difficulty: 'mid',
|
|
164
|
-
type: 'coding-challenge',
|
|
165
|
-
timeLimit: 120,
|
|
166
|
-
...config.assignment,
|
|
167
|
-
},
|
|
168
|
-
criteria: {
|
|
169
|
-
correctness: 30,
|
|
170
|
-
codeQuality: 25,
|
|
171
|
-
architecture: 20,
|
|
172
|
-
performance: 15,
|
|
173
|
-
testing: 10,
|
|
174
|
-
...config.criteria,
|
|
175
|
-
},
|
|
176
|
-
scoring: {
|
|
177
|
-
system: 'numeric',
|
|
178
|
-
maxScore: 100,
|
|
179
|
-
passingThreshold: 70,
|
|
180
|
-
breakdown: true,
|
|
181
|
-
...config.scoring,
|
|
182
|
-
},
|
|
183
|
-
feedback: {
|
|
184
|
-
level: 'detailed',
|
|
185
|
-
includeExamples: true,
|
|
186
|
-
includeSuggestions: true,
|
|
187
|
-
includeResources: false,
|
|
188
|
-
...config.feedback,
|
|
189
|
-
},
|
|
190
|
-
constraints: {
|
|
191
|
-
...config.constraints,
|
|
192
|
-
},
|
|
193
|
-
aiDetection: {
|
|
194
|
-
enabled: false,
|
|
195
|
-
threshold: 0.7,
|
|
196
|
-
analyzers: ['git', 'documentation'],
|
|
197
|
-
includeInReport: true,
|
|
198
|
-
failOnDetection: false,
|
|
199
|
-
...config.aiDetection,
|
|
200
|
-
},
|
|
201
|
-
};
|
|
202
|
-
// Validate criteria weights sum to 100
|
|
203
|
-
this.validateCriteriaWeights(normalized.criteria);
|
|
204
|
-
return normalized;
|
|
205
|
-
}
|
|
206
|
-
/**
|
|
207
|
-
* Validate that criteria weights sum to 100
|
|
208
|
-
* @param criteria Criteria configuration
|
|
209
|
-
*/
|
|
210
|
-
validateCriteriaWeights(criteria) {
|
|
211
|
-
const total = Object.values(criteria).reduce((sum, weight) => sum + weight, 0);
|
|
212
|
-
if (Math.abs(total - 100) > 0.1) {
|
|
213
|
-
logger_1.default.warn(`Criteria weights sum to ${total}, expected 100. Normalizing...`);
|
|
214
|
-
// Normalize weights to sum to 100
|
|
215
|
-
const normalizationFactor = 100 / total;
|
|
216
|
-
Object.keys(criteria).forEach((key) => {
|
|
217
|
-
criteria[key] = Math.round(criteria[key] * normalizationFactor);
|
|
218
|
-
});
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
/**
|
|
222
|
-
* Merge CLI options with configuration
|
|
223
|
-
* @param options Review options
|
|
224
|
-
* @returns Merged configuration
|
|
225
|
-
*/
|
|
226
|
-
mergeOptionsWithConfig(options) {
|
|
227
|
-
const merged = { ...this.config };
|
|
228
|
-
// Merge assignment configuration
|
|
229
|
-
if (options.assignmentFile || options.assignmentText || options.assignmentUrl) {
|
|
230
|
-
merged.assignment = {
|
|
231
|
-
...merged.assignment,
|
|
232
|
-
};
|
|
233
|
-
// Handle assignment text parsing
|
|
234
|
-
if (options.assignmentText) {
|
|
235
|
-
const parsedAssignment = (0, codingTestConfigLoader_1.parseAssignmentText)(options.assignmentText);
|
|
236
|
-
merged.assignment = {
|
|
237
|
-
...merged.assignment,
|
|
238
|
-
...parsedAssignment,
|
|
239
|
-
};
|
|
240
|
-
}
|
|
241
|
-
// Handle assignment file loading
|
|
242
|
-
if (options.assignmentFile) {
|
|
243
|
-
try {
|
|
244
|
-
const fs = require('node:fs');
|
|
245
|
-
const assignmentContent = fs.readFileSync(options.assignmentFile, 'utf8');
|
|
246
|
-
const parsedAssignment = (0, codingTestConfigLoader_1.parseAssignmentText)(assignmentContent);
|
|
247
|
-
merged.assignment = {
|
|
248
|
-
...merged.assignment,
|
|
249
|
-
...parsedAssignment,
|
|
250
|
-
};
|
|
251
|
-
}
|
|
252
|
-
catch (error) {
|
|
253
|
-
logger_1.default.warn(`Failed to load assignment file ${options.assignmentFile}:`, error);
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
if (options.assessmentType) {
|
|
258
|
-
merged.assignment.type = options.assessmentType;
|
|
259
|
-
}
|
|
260
|
-
if (options.difficultyLevel) {
|
|
261
|
-
merged.assignment.difficulty = options.difficultyLevel;
|
|
262
|
-
}
|
|
263
|
-
if (options.timeLimit) {
|
|
264
|
-
merged.assignment.timeLimit = options.timeLimit;
|
|
265
|
-
}
|
|
266
|
-
// Merge criteria weights
|
|
267
|
-
const criteriaUpdates = {};
|
|
268
|
-
if (options.weightCorrectness !== undefined)
|
|
269
|
-
criteriaUpdates.correctness = options.weightCorrectness;
|
|
270
|
-
if (options.weightCodeQuality !== undefined)
|
|
271
|
-
criteriaUpdates.codeQuality = options.weightCodeQuality;
|
|
272
|
-
if (options.weightArchitecture !== undefined)
|
|
273
|
-
criteriaUpdates.architecture = options.weightArchitecture;
|
|
274
|
-
if (options.weightPerformance !== undefined)
|
|
275
|
-
criteriaUpdates.performance = options.weightPerformance;
|
|
276
|
-
if (options.weightTesting !== undefined)
|
|
277
|
-
criteriaUpdates.testing = options.weightTesting;
|
|
278
|
-
if (Object.keys(criteriaUpdates).length > 0) {
|
|
279
|
-
merged.criteria = { ...merged.criteria, ...criteriaUpdates };
|
|
280
|
-
this.validateCriteriaWeights(merged.criteria);
|
|
281
|
-
}
|
|
282
|
-
// Merge scoring configuration
|
|
283
|
-
if (options.scoringSystem) {
|
|
284
|
-
merged.scoring.system = options.scoringSystem;
|
|
285
|
-
}
|
|
286
|
-
if (options.maxScore !== undefined) {
|
|
287
|
-
merged.scoring.maxScore = options.maxScore;
|
|
288
|
-
}
|
|
289
|
-
if (options.passingThreshold !== undefined) {
|
|
290
|
-
merged.scoring.passingThreshold = options.passingThreshold;
|
|
291
|
-
}
|
|
292
|
-
if (options.scoreBreakdown !== undefined) {
|
|
293
|
-
merged.scoring.breakdown = options.scoreBreakdown;
|
|
294
|
-
}
|
|
295
|
-
// Merge feedback configuration
|
|
296
|
-
if (options.feedbackLevel) {
|
|
297
|
-
merged.feedback.level = options.feedbackLevel;
|
|
298
|
-
}
|
|
299
|
-
if (options.includeExamples !== undefined) {
|
|
300
|
-
merged.feedback.includeExamples = options.includeExamples;
|
|
301
|
-
}
|
|
302
|
-
if (options.includeSuggestions !== undefined) {
|
|
303
|
-
merged.feedback.includeSuggestions = options.includeSuggestions;
|
|
304
|
-
}
|
|
305
|
-
if (options.includeResources !== undefined) {
|
|
306
|
-
merged.feedback.includeResources = options.includeResources;
|
|
307
|
-
}
|
|
308
|
-
// Merge constraints
|
|
309
|
-
if (options.allowedLibraries) {
|
|
310
|
-
merged.constraints.allowedLibraries = options.allowedLibraries;
|
|
311
|
-
}
|
|
312
|
-
if (options.forbiddenPatterns) {
|
|
313
|
-
merged.constraints.forbiddenPatterns = options.forbiddenPatterns;
|
|
314
|
-
}
|
|
315
|
-
if (options.language) {
|
|
316
|
-
merged.constraints.targetLanguage = options.language;
|
|
317
|
-
}
|
|
318
|
-
if (options.framework) {
|
|
319
|
-
merged.constraints.framework = options.framework;
|
|
320
|
-
}
|
|
321
|
-
// Merge AI detection configuration from CLI options
|
|
322
|
-
if (options.enableAiDetection !== undefined) {
|
|
323
|
-
merged.aiDetection.enabled = options.enableAiDetection;
|
|
324
|
-
}
|
|
325
|
-
if (options.aiDetectionThreshold !== undefined) {
|
|
326
|
-
merged.aiDetection.threshold = options.aiDetectionThreshold;
|
|
327
|
-
}
|
|
328
|
-
if (options.aiDetectionAnalyzers) {
|
|
329
|
-
const analyzers = options.aiDetectionAnalyzers.split(',').map((a) => a.trim());
|
|
330
|
-
merged.aiDetection.analyzers = analyzers;
|
|
331
|
-
}
|
|
332
|
-
if (options.aiDetectionIncludeInReport !== undefined) {
|
|
333
|
-
merged.aiDetection.includeInReport = options.aiDetectionIncludeInReport;
|
|
334
|
-
}
|
|
335
|
-
if (options.aiDetectionFailOnDetection !== undefined) {
|
|
336
|
-
merged.aiDetection.failOnDetection = options.aiDetectionFailOnDetection;
|
|
337
|
-
}
|
|
338
|
-
return merged;
|
|
339
|
-
}
|
|
340
|
-
/**
|
|
341
|
-
* Determine if CI data should be collected
|
|
342
|
-
* @param files Files being reviewed
|
|
343
|
-
* @param options Review options
|
|
344
|
-
* @returns True if CI data should be collected
|
|
345
|
-
*/
|
|
346
|
-
shouldCollectCIData(files, options) {
|
|
347
|
-
return (options.language === 'typescript' ||
|
|
348
|
-
files.some((f) => f.path.endsWith('.ts') || f.path.endsWith('.tsx')));
|
|
349
|
-
}
|
|
350
|
-
/**
|
|
351
|
-
* Enhance options with coding test context
|
|
352
|
-
* @param options Original options
|
|
353
|
-
* @param config Effective configuration
|
|
354
|
-
* @returns Enhanced options
|
|
355
|
-
*/
|
|
356
|
-
enhanceOptionsWithCodingTestContext(options, config, aiDetectionResult) {
|
|
357
|
-
const enhanced = { ...options };
|
|
358
|
-
// Add coding test metadata to options
|
|
359
|
-
enhanced.codingTestConfig = config;
|
|
360
|
-
// Add prompt fragments for assignment context
|
|
361
|
-
if (!enhanced.promptFragments) {
|
|
362
|
-
enhanced.promptFragments = [];
|
|
363
|
-
}
|
|
364
|
-
// Add assignment context
|
|
365
|
-
if (config.assignment) {
|
|
366
|
-
enhanced.promptFragments.push({
|
|
367
|
-
content: this.buildAssignmentContextPrompt(config.assignment),
|
|
368
|
-
position: 'start',
|
|
369
|
-
priority: 1,
|
|
370
|
-
});
|
|
371
|
-
}
|
|
372
|
-
// Add evaluation criteria context
|
|
373
|
-
if (config.criteria) {
|
|
374
|
-
enhanced.promptFragments.push({
|
|
375
|
-
content: this.buildCriteriaContextPrompt(config.criteria),
|
|
376
|
-
position: 'start',
|
|
377
|
-
priority: 2,
|
|
378
|
-
});
|
|
379
|
-
}
|
|
380
|
-
// Add scoring context
|
|
381
|
-
if (config.scoring) {
|
|
382
|
-
enhanced.promptFragments.push({
|
|
383
|
-
content: this.buildScoringContextPrompt(config.scoring),
|
|
384
|
-
position: 'start',
|
|
385
|
-
priority: 3,
|
|
386
|
-
});
|
|
387
|
-
}
|
|
388
|
-
// Add feedback instructions
|
|
389
|
-
if (config.feedback) {
|
|
390
|
-
enhanced.promptFragments.push({
|
|
391
|
-
content: this.buildFeedbackInstructionsPrompt(config.feedback),
|
|
392
|
-
position: 'middle',
|
|
393
|
-
priority: 1,
|
|
394
|
-
});
|
|
395
|
-
}
|
|
396
|
-
// Add constraints context
|
|
397
|
-
if (config.constraints) {
|
|
398
|
-
enhanced.promptFragments.push({
|
|
399
|
-
content: this.buildConstraintsContextPrompt(config.constraints),
|
|
400
|
-
position: 'middle',
|
|
401
|
-
priority: 2,
|
|
402
|
-
});
|
|
403
|
-
}
|
|
404
|
-
// Add AI detection context if available
|
|
405
|
-
if (aiDetectionResult && config.aiDetection?.includeInReport) {
|
|
406
|
-
enhanced.promptFragments.push({
|
|
407
|
-
content: this.buildAIDetectionContextPrompt(aiDetectionResult, config.aiDetection),
|
|
408
|
-
position: 'middle',
|
|
409
|
-
priority: 0, // High priority for AI detection results
|
|
410
|
-
});
|
|
411
|
-
// Add AI detection data for template rendering
|
|
412
|
-
if (!enhanced.metadata) {
|
|
413
|
-
enhanced.metadata = {};
|
|
414
|
-
}
|
|
415
|
-
enhanced.metadata.aiDetection = {
|
|
416
|
-
isAIGenerated: aiDetectionResult.isAIGenerated,
|
|
417
|
-
confidenceScore: aiDetectionResult.confidenceScore,
|
|
418
|
-
patternsDetected: aiDetectionResult.detectedPatterns.length,
|
|
419
|
-
highConfidencePatterns: aiDetectionResult.detectedPatterns.filter((p) => p.confidence === 'high').length,
|
|
420
|
-
analysisTime: aiDetectionResult.metadata.totalAnalysisTime,
|
|
421
|
-
analyzersUsed: aiDetectionResult.metadata.enabledAnalyzers,
|
|
422
|
-
};
|
|
423
|
-
}
|
|
424
|
-
return enhanced;
|
|
425
|
-
}
|
|
426
|
-
/**
|
|
427
|
-
* Build assignment context prompt
|
|
428
|
-
* @param assignment Assignment configuration
|
|
429
|
-
* @returns Assignment context prompt
|
|
430
|
-
*/
|
|
431
|
-
buildAssignmentContextPrompt(assignment) {
|
|
432
|
-
let prompt = '## Assignment Context\n\n';
|
|
433
|
-
if (assignment.title) {
|
|
434
|
-
prompt += `**Assignment Title:** ${assignment.title}\n\n`;
|
|
435
|
-
}
|
|
436
|
-
if (assignment.description) {
|
|
437
|
-
prompt += `**Assignment Description:**\n${assignment.description}\n\n`;
|
|
438
|
-
}
|
|
439
|
-
if (assignment.requirements && assignment.requirements.length > 0) {
|
|
440
|
-
prompt += `**Requirements:**\n`;
|
|
441
|
-
assignment.requirements.forEach((req) => {
|
|
442
|
-
prompt += `- ${req}\n`;
|
|
443
|
-
});
|
|
444
|
-
prompt += '\n';
|
|
445
|
-
}
|
|
446
|
-
prompt += `**Assessment Type:** ${assignment.type}\n`;
|
|
447
|
-
prompt += `**Difficulty Level:** ${assignment.difficulty}\n`;
|
|
448
|
-
if (assignment.timeLimit) {
|
|
449
|
-
prompt += `**Time Limit:** ${assignment.timeLimit} minutes\n`;
|
|
450
|
-
}
|
|
451
|
-
return prompt;
|
|
452
|
-
}
|
|
453
|
-
/**
|
|
454
|
-
* Build criteria context prompt
|
|
455
|
-
* @param criteria Criteria configuration
|
|
456
|
-
* @returns Criteria context prompt
|
|
457
|
-
*/
|
|
458
|
-
buildCriteriaContextPrompt(criteria) {
|
|
459
|
-
let prompt = '## Evaluation Criteria\n\n';
|
|
460
|
-
prompt += 'Evaluate the code based on the following weighted criteria:\n\n';
|
|
461
|
-
Object.entries(criteria).forEach(([criterion, weight]) => {
|
|
462
|
-
prompt += `- **${this.formatCriterionName(criterion)}:** ${weight}% weight\n`;
|
|
463
|
-
});
|
|
464
|
-
return `${prompt}\n`;
|
|
465
|
-
}
|
|
466
|
-
/**
|
|
467
|
-
* Build scoring context prompt
|
|
468
|
-
* @param scoring Scoring configuration
|
|
469
|
-
* @returns Scoring context prompt
|
|
470
|
-
*/
|
|
471
|
-
buildScoringContextPrompt(scoring) {
|
|
472
|
-
let prompt = '## Scoring System\n\n';
|
|
473
|
-
prompt += `**System:** ${scoring.system}\n`;
|
|
474
|
-
prompt += `**Maximum Score:** ${scoring.maxScore}\n`;
|
|
475
|
-
prompt += `**Passing Threshold:** ${scoring.passingThreshold}\n`;
|
|
476
|
-
if (scoring.breakdown) {
|
|
477
|
-
prompt += '**Score Breakdown:** Required for each criterion\n';
|
|
478
|
-
}
|
|
479
|
-
return `${prompt}\n`;
|
|
480
|
-
}
|
|
481
|
-
/**
|
|
482
|
-
* Build feedback instructions prompt
|
|
483
|
-
* @param feedback Feedback configuration
|
|
484
|
-
* @returns Feedback instructions prompt
|
|
485
|
-
*/
|
|
486
|
-
buildFeedbackInstructionsPrompt(feedback) {
|
|
487
|
-
let prompt = '## Feedback Instructions\n\n';
|
|
488
|
-
prompt += `**Detail Level:** ${feedback.level}\n`;
|
|
489
|
-
if (feedback.includeExamples) {
|
|
490
|
-
prompt += '- Include specific code examples in feedback\n';
|
|
491
|
-
}
|
|
492
|
-
if (feedback.includeSuggestions) {
|
|
493
|
-
prompt += '- Provide concrete improvement suggestions\n';
|
|
494
|
-
}
|
|
495
|
-
if (feedback.includeResources) {
|
|
496
|
-
prompt += '- Include relevant learning resources\n';
|
|
497
|
-
}
|
|
498
|
-
return `${prompt}\n`;
|
|
499
|
-
}
|
|
500
|
-
/**
|
|
501
|
-
* Build constraints context prompt
|
|
502
|
-
* @param constraints Constraints configuration
|
|
503
|
-
* @returns Constraints context prompt
|
|
504
|
-
*/
|
|
505
|
-
buildConstraintsContextPrompt(constraints) {
|
|
506
|
-
let prompt = '## Technical Constraints\n\n';
|
|
507
|
-
if (constraints.allowedLibraries && constraints.allowedLibraries.length > 0) {
|
|
508
|
-
prompt += `**Allowed Libraries:** ${constraints.allowedLibraries.join(', ')}\n`;
|
|
509
|
-
}
|
|
510
|
-
if (constraints.forbiddenPatterns && constraints.forbiddenPatterns.length > 0) {
|
|
511
|
-
prompt += `**Forbidden Patterns:** ${constraints.forbiddenPatterns.join(', ')}\n`;
|
|
512
|
-
}
|
|
513
|
-
if (constraints.targetLanguage) {
|
|
514
|
-
prompt += `**Target Language:** ${constraints.targetLanguage}\n`;
|
|
515
|
-
}
|
|
516
|
-
if (constraints.framework) {
|
|
517
|
-
prompt += `**Framework:** ${constraints.framework}\n`;
|
|
518
|
-
}
|
|
519
|
-
if (constraints.nodeVersion) {
|
|
520
|
-
prompt += `**Node.js Version:** ${constraints.nodeVersion}\n`;
|
|
521
|
-
}
|
|
522
|
-
if (constraints.memoryLimit) {
|
|
523
|
-
prompt += `**Memory Limit:** ${constraints.memoryLimit} MB\n`;
|
|
524
|
-
}
|
|
525
|
-
if (constraints.executionTimeout) {
|
|
526
|
-
prompt += `**Execution Timeout:** ${constraints.executionTimeout} seconds\n`;
|
|
527
|
-
}
|
|
528
|
-
return `${prompt}\n`;
|
|
529
|
-
}
|
|
530
|
-
/**
|
|
531
|
-
* Format criterion name for display
|
|
532
|
-
* @param criterion Criterion key
|
|
533
|
-
* @returns Formatted criterion name
|
|
534
|
-
*/
|
|
535
|
-
formatCriterionName(criterion) {
|
|
536
|
-
return criterion
|
|
537
|
-
.replace(/([A-Z])/g, ' $1')
|
|
538
|
-
.replace(/^./, (str) => str.toUpperCase())
|
|
539
|
-
.trim();
|
|
540
|
-
}
|
|
541
|
-
/**
|
|
542
|
-
* Enhance result with coding test metadata
|
|
543
|
-
* @param result Original result
|
|
544
|
-
* @param config Configuration used
|
|
545
|
-
* @returns Enhanced result
|
|
546
|
-
*/
|
|
547
|
-
enhanceResultWithCodingTestMetadata(result, config, aiDetectionResult) {
|
|
548
|
-
const enhanced = {
|
|
549
|
-
...result,
|
|
550
|
-
metadata: {
|
|
551
|
-
...result.metadata,
|
|
552
|
-
codingTestConfig: config,
|
|
553
|
-
assessmentType: config.assignment?.type || 'coding-challenge',
|
|
554
|
-
difficultyLevel: config.assignment?.difficulty || 'mid',
|
|
555
|
-
criteriaWeights: config.criteria,
|
|
556
|
-
scoringSystem: config.scoring?.system || 'numeric',
|
|
557
|
-
maxScore: config.scoring?.maxScore || 100,
|
|
558
|
-
passingThreshold: config.scoring?.passingThreshold || 70,
|
|
559
|
-
},
|
|
560
|
-
};
|
|
561
|
-
// Add AI detection results to metadata if available
|
|
562
|
-
if (aiDetectionResult) {
|
|
563
|
-
enhanced.metadata.aiDetection = {
|
|
564
|
-
isAIGenerated: aiDetectionResult.isAIGenerated,
|
|
565
|
-
confidenceScore: aiDetectionResult.confidenceScore,
|
|
566
|
-
patternsDetected: aiDetectionResult.detectedPatterns.length,
|
|
567
|
-
highConfidencePatterns: aiDetectionResult.detectedPatterns.filter((p) => p.confidence === 'high').length,
|
|
568
|
-
analysisTime: aiDetectionResult.metadata.totalAnalysisTime,
|
|
569
|
-
analyzersUsed: aiDetectionResult.metadata.enabledAnalyzers,
|
|
570
|
-
};
|
|
571
|
-
}
|
|
572
|
-
return enhanced;
|
|
573
|
-
}
|
|
574
|
-
/**
|
|
575
|
-
* Initialize AI detection engine with merged configuration
|
|
576
|
-
* @param config Effective configuration after merging options
|
|
577
|
-
*/
|
|
578
|
-
initializeAIDetectionWithConfig(config) {
|
|
579
|
-
if (config.aiDetection?.enabled) {
|
|
580
|
-
const detectionConfig = {
|
|
581
|
-
detectionThreshold: config.aiDetection.threshold || 0.7,
|
|
582
|
-
enabledAnalyzers: config.aiDetection.analyzers || ['git', 'documentation'],
|
|
583
|
-
enableCaching: true,
|
|
584
|
-
includeEvidence: true,
|
|
585
|
-
generateRecommendations: true,
|
|
586
|
-
};
|
|
587
|
-
this.aiDetectionEngine = new AIDetectionEngine_1.AIDetectionEngine(detectionConfig);
|
|
588
|
-
logger_1.default.info('AI detection engine initialized with analyzers:', detectionConfig.enabledAnalyzers);
|
|
589
|
-
}
|
|
590
|
-
else {
|
|
591
|
-
logger_1.default.info('AI detection disabled or not configured');
|
|
592
|
-
}
|
|
593
|
-
}
|
|
594
|
-
/**
|
|
595
|
-
* Initialize AI detection engine if enabled (legacy method - kept for compatibility)
|
|
596
|
-
*/
|
|
597
|
-
initializeAIDetection() {
|
|
598
|
-
if (this.config.aiDetection?.enabled) {
|
|
599
|
-
const detectionConfig = {
|
|
600
|
-
detectionThreshold: this.config.aiDetection.threshold || 0.7,
|
|
601
|
-
enabledAnalyzers: this.config.aiDetection.analyzers || ['git', 'documentation'],
|
|
602
|
-
enableCaching: true,
|
|
603
|
-
includeEvidence: true,
|
|
604
|
-
generateRecommendations: true,
|
|
605
|
-
};
|
|
606
|
-
this.aiDetectionEngine = new AIDetectionEngine_1.AIDetectionEngine(detectionConfig);
|
|
607
|
-
logger_1.default.info('AI detection engine initialized with analyzers:', detectionConfig.enabledAnalyzers);
|
|
608
|
-
}
|
|
609
|
-
}
|
|
610
|
-
/**
|
|
611
|
-
* Build AI detection context prompt
|
|
612
|
-
* @param aiDetectionResult AI detection analysis result
|
|
613
|
-
* @param config AI detection configuration
|
|
614
|
-
* @returns AI detection context prompt
|
|
615
|
-
*/
|
|
616
|
-
buildAIDetectionContextPrompt(aiDetectionResult, config) {
|
|
617
|
-
let prompt = '## AI-Generated Code Detection Results\n\n';
|
|
618
|
-
if (aiDetectionResult.isAIGenerated) {
|
|
619
|
-
prompt += `🚨 **ALERT: AI-Generated Content Detected**\n\n`;
|
|
620
|
-
prompt += `**Confidence Score:** ${(aiDetectionResult.confidenceScore * 100).toFixed(1)}%\n`;
|
|
621
|
-
prompt += `**Risk Level:** ${this.calculateRiskLevel(aiDetectionResult.confidenceScore)}\n\n`;
|
|
622
|
-
}
|
|
623
|
-
else {
|
|
624
|
-
prompt += `✅ **Human-Authored Code Detected**\n\n`;
|
|
625
|
-
prompt += `**Confidence Score:** ${(aiDetectionResult.confidenceScore * 100).toFixed(1)}%\n\n`;
|
|
626
|
-
}
|
|
627
|
-
if (aiDetectionResult.detectedPatterns.length > 0) {
|
|
628
|
-
prompt += `**Detected Patterns (${aiDetectionResult.detectedPatterns.length}):**\n`;
|
|
629
|
-
const highConfidencePatterns = aiDetectionResult.detectedPatterns.filter((p) => p.confidence === 'high');
|
|
630
|
-
if (highConfidencePatterns.length > 0) {
|
|
631
|
-
prompt += `\n*High Confidence Patterns:*\n`;
|
|
632
|
-
highConfidencePatterns.forEach((pattern) => {
|
|
633
|
-
prompt += `- **${pattern.name}** (${pattern.id}): ${pattern.description}\n`;
|
|
634
|
-
});
|
|
635
|
-
}
|
|
636
|
-
const mediumConfidencePatterns = aiDetectionResult.detectedPatterns.filter((p) => p.confidence === 'medium');
|
|
637
|
-
if (mediumConfidencePatterns.length > 0) {
|
|
638
|
-
prompt += `\n*Medium Confidence Patterns:*\n`;
|
|
639
|
-
mediumConfidencePatterns.forEach((pattern) => {
|
|
640
|
-
prompt += `- **${pattern.name}** (${pattern.id}): ${pattern.description}\n`;
|
|
641
|
-
});
|
|
642
|
-
}
|
|
643
|
-
}
|
|
644
|
-
if (aiDetectionResult.recommendations.length > 0) {
|
|
645
|
-
prompt += `\n**Evaluation Recommendations:**\n`;
|
|
646
|
-
aiDetectionResult.recommendations.forEach((rec) => {
|
|
647
|
-
prompt += `- ${rec}\n`;
|
|
648
|
-
});
|
|
649
|
-
}
|
|
650
|
-
prompt += `\n**Instructions for Evaluation:**\n`;
|
|
651
|
-
if (aiDetectionResult.isAIGenerated) {
|
|
652
|
-
prompt += `- This submission requires additional verification due to AI detection\n`;
|
|
653
|
-
prompt += `- Focus evaluation on candidate's understanding rather than just code functionality\n`;
|
|
654
|
-
prompt += `- Consider the specific patterns detected when assessing authenticity\n`;
|
|
655
|
-
if (config.failOnDetection) {
|
|
656
|
-
prompt += `- **IMPORTANT:** Configuration indicates this submission should fail if AI-generated\n`;
|
|
657
|
-
}
|
|
658
|
-
}
|
|
659
|
-
else {
|
|
660
|
-
prompt += `- Proceed with standard evaluation criteria\n`;
|
|
661
|
-
prompt += `- AI detection indicates likely human authorship\n`;
|
|
662
|
-
}
|
|
663
|
-
return `${prompt}\n`;
|
|
664
|
-
}
|
|
665
|
-
/**
|
|
666
|
-
* Calculate risk level based on confidence score
|
|
667
|
-
* @param confidenceScore Confidence score from 0.0 to 1.0
|
|
668
|
-
* @returns Risk level
|
|
669
|
-
*/
|
|
670
|
-
calculateRiskLevel(confidenceScore) {
|
|
671
|
-
if (confidenceScore >= 0.9)
|
|
672
|
-
return 'CRITICAL';
|
|
673
|
-
if (confidenceScore >= 0.8)
|
|
674
|
-
return 'HIGH';
|
|
675
|
-
if (confidenceScore >= 0.6)
|
|
676
|
-
return 'MEDIUM';
|
|
677
|
-
return 'LOW';
|
|
678
|
-
}
|
|
679
|
-
}
|
|
680
|
-
exports.CodingTestReviewStrategy = CodingTestReviewStrategy;
|
|
681
|
-
//# sourceMappingURL=CodingTestReviewStrategy.js.map
|