codereview-aia 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/.cr-aia.yml +23 -0
  2. package/.crignore +0 -0
  3. package/dist/index.js +27 -0
  4. package/package.json +85 -0
  5. package/src/analysis/FindingsExtractor.ts +431 -0
  6. package/src/analysis/ai-detection/analyzers/BaseAnalyzer.ts +267 -0
  7. package/src/analysis/ai-detection/analyzers/DocumentationAnalyzer.ts +622 -0
  8. package/src/analysis/ai-detection/analyzers/GitHistoryAnalyzer.ts +430 -0
  9. package/src/analysis/ai-detection/core/AIDetectionEngine.ts +467 -0
  10. package/src/analysis/ai-detection/types/DetectionTypes.ts +406 -0
  11. package/src/analysis/ai-detection/utils/SubmissionConverter.ts +390 -0
  12. package/src/analysis/context/ReviewContext.ts +378 -0
  13. package/src/analysis/context/index.ts +7 -0
  14. package/src/analysis/index.ts +8 -0
  15. package/src/analysis/tokens/TokenAnalysisFormatter.ts +154 -0
  16. package/src/analysis/tokens/TokenAnalyzer.ts +747 -0
  17. package/src/analysis/tokens/index.ts +8 -0
  18. package/src/clients/base/abstractClient.ts +190 -0
  19. package/src/clients/base/httpClient.ts +160 -0
  20. package/src/clients/base/index.ts +12 -0
  21. package/src/clients/base/modelDetection.ts +107 -0
  22. package/src/clients/base/responseProcessor.ts +586 -0
  23. package/src/clients/factory/clientFactory.ts +55 -0
  24. package/src/clients/factory/index.ts +8 -0
  25. package/src/clients/implementations/index.ts +8 -0
  26. package/src/clients/implementations/openRouterClient.ts +411 -0
  27. package/src/clients/openRouterClient.ts +863 -0
  28. package/src/clients/openRouterClientWrapper.ts +44 -0
  29. package/src/clients/utils/directoryStructure.ts +52 -0
  30. package/src/clients/utils/index.ts +11 -0
  31. package/src/clients/utils/languageDetection.ts +44 -0
  32. package/src/clients/utils/promptFormatter.ts +105 -0
  33. package/src/clients/utils/promptLoader.ts +53 -0
  34. package/src/clients/utils/tokenCounter.ts +297 -0
  35. package/src/core/ApiClientSelector.ts +37 -0
  36. package/src/core/ConfigurationService.ts +591 -0
  37. package/src/core/ConsolidationService.ts +423 -0
  38. package/src/core/InteractiveDisplayManager.ts +81 -0
  39. package/src/core/OutputManager.ts +275 -0
  40. package/src/core/ReviewGenerator.ts +140 -0
  41. package/src/core/fileDiscovery.ts +237 -0
  42. package/src/core/handlers/EstimationHandler.ts +104 -0
  43. package/src/core/handlers/FileProcessingHandler.ts +204 -0
  44. package/src/core/handlers/OutputHandler.ts +125 -0
  45. package/src/core/handlers/ReviewExecutor.ts +104 -0
  46. package/src/core/reviewOrchestrator.ts +333 -0
  47. package/src/core/utils/ModelInfoUtils.ts +56 -0
  48. package/src/formatters/outputFormatter.ts +62 -0
  49. package/src/formatters/utils/IssueFormatters.ts +83 -0
  50. package/src/formatters/utils/JsonFormatter.ts +77 -0
  51. package/src/formatters/utils/MarkdownFormatters.ts +609 -0
  52. package/src/formatters/utils/MetadataFormatter.ts +269 -0
  53. package/src/formatters/utils/ModelInfoExtractor.ts +115 -0
  54. package/src/index.ts +27 -0
  55. package/src/plugins/PluginInterface.ts +50 -0
  56. package/src/plugins/PluginManager.ts +126 -0
  57. package/src/prompts/PromptManager.ts +69 -0
  58. package/src/prompts/cache/PromptCache.ts +50 -0
  59. package/src/prompts/promptText/common/variables/css-frameworks.json +33 -0
  60. package/src/prompts/promptText/common/variables/framework-versions.json +45 -0
  61. package/src/prompts/promptText/frameworks/react/comprehensive.hbs +19 -0
  62. package/src/prompts/promptText/languages/css/comprehensive.hbs +18 -0
  63. package/src/prompts/promptText/languages/generic/comprehensive.hbs +20 -0
  64. package/src/prompts/promptText/languages/html/comprehensive.hbs +18 -0
  65. package/src/prompts/promptText/languages/javascript/comprehensive.hbs +18 -0
  66. package/src/prompts/promptText/languages/python/comprehensive.hbs +18 -0
  67. package/src/prompts/promptText/languages/typescript/comprehensive.hbs +18 -0
  68. package/src/runtime/auth/service.ts +58 -0
  69. package/src/runtime/auth/session.ts +103 -0
  70. package/src/runtime/auth/types.ts +11 -0
  71. package/src/runtime/cliEntry.ts +196 -0
  72. package/src/runtime/errors.ts +13 -0
  73. package/src/runtime/fileCollector.ts +188 -0
  74. package/src/runtime/manifest.ts +64 -0
  75. package/src/runtime/openrouterProxy.ts +45 -0
  76. package/src/runtime/proxyConfig.ts +94 -0
  77. package/src/runtime/proxyEnvironment.ts +71 -0
  78. package/src/runtime/reportMerge.ts +102 -0
  79. package/src/runtime/reporting/markdownReportBuilder.ts +138 -0
  80. package/src/runtime/reporting/reportDataCollector.ts +234 -0
  81. package/src/runtime/reporting/summaryGenerator.ts +86 -0
  82. package/src/runtime/reviewPipeline.ts +155 -0
  83. package/src/runtime/runAiCodeReview.ts +153 -0
  84. package/src/runtime/runtimeConfig.ts +5 -0
  85. package/src/runtime/ui/Layout.tsx +57 -0
  86. package/src/runtime/ui/RuntimeApp.tsx +150 -0
  87. package/src/runtime/ui/inkModules.ts +73 -0
  88. package/src/runtime/ui/screens/AuthScreen.tsx +128 -0
  89. package/src/runtime/ui/screens/ModeSelection.tsx +52 -0
  90. package/src/runtime/ui/screens/ProgressScreen.tsx +55 -0
  91. package/src/runtime/ui/screens/ResultsScreen.tsx +76 -0
  92. package/src/strategies/ArchitecturalReviewStrategy.ts +54 -0
  93. package/src/strategies/CodingTestReviewStrategy.ts +920 -0
  94. package/src/strategies/ConsolidatedReviewStrategy.ts +59 -0
  95. package/src/strategies/ExtractPatternsReviewStrategy.ts +64 -0
  96. package/src/strategies/MultiPassReviewStrategy.ts +785 -0
  97. package/src/strategies/ReviewStrategy.ts +64 -0
  98. package/src/strategies/StrategyFactory.ts +79 -0
  99. package/src/strategies/index.ts +14 -0
  100. package/src/tokenizers/baseTokenizer.ts +61 -0
  101. package/src/tokenizers/gptTokenizer.ts +27 -0
  102. package/src/tokenizers/index.ts +8 -0
  103. package/src/types/apiResponses.ts +40 -0
  104. package/src/types/cli.ts +24 -0
  105. package/src/types/common.ts +39 -0
  106. package/src/types/configuration.ts +201 -0
  107. package/src/types/handlebars.d.ts +5 -0
  108. package/src/types/patch.d.ts +25 -0
  109. package/src/types/review.ts +294 -0
  110. package/src/types/reviewContext.d.ts +65 -0
  111. package/src/types/reviewSchema.ts +181 -0
  112. package/src/types/structuredReview.ts +167 -0
  113. package/src/types/tokenAnalysis.ts +56 -0
  114. package/src/utils/FileReader.ts +93 -0
  115. package/src/utils/FileWriter.ts +76 -0
  116. package/src/utils/PathGenerator.ts +97 -0
  117. package/src/utils/api/apiUtils.ts +14 -0
  118. package/src/utils/api/index.ts +1 -0
  119. package/src/utils/apiErrorHandler.ts +287 -0
  120. package/src/utils/ciDataCollector.ts +252 -0
  121. package/src/utils/codingTestConfigLoader.ts +466 -0
  122. package/src/utils/dependencies/aiDependencyAnalyzer.ts +454 -0
  123. package/src/utils/detection/frameworkDetector.ts +879 -0
  124. package/src/utils/detection/index.ts +10 -0
  125. package/src/utils/detection/projectTypeDetector.ts +518 -0
  126. package/src/utils/diagramGenerator.ts +206 -0
  127. package/src/utils/errorLogger.ts +60 -0
  128. package/src/utils/estimationUtils.ts +407 -0
  129. package/src/utils/fileFilters.ts +373 -0
  130. package/src/utils/fileSystem.ts +57 -0
  131. package/src/utils/index.ts +36 -0
  132. package/src/utils/logger.ts +240 -0
  133. package/src/utils/pathValidator.ts +98 -0
  134. package/src/utils/priorityFilter.ts +59 -0
  135. package/src/utils/projectDocs.ts +189 -0
  136. package/src/utils/promptPaths.ts +29 -0
  137. package/src/utils/promptTemplateManager.ts +157 -0
  138. package/src/utils/review/consolidateReview.ts +553 -0
  139. package/src/utils/review/fixDisplay.ts +100 -0
  140. package/src/utils/review/fixImplementation.ts +61 -0
  141. package/src/utils/review/index.ts +36 -0
  142. package/src/utils/review/interactiveProcessing.ts +294 -0
  143. package/src/utils/review/progressTracker.ts +296 -0
  144. package/src/utils/review/reviewExtraction.ts +382 -0
  145. package/src/utils/review/types.ts +46 -0
  146. package/src/utils/reviewActionHandler.ts +18 -0
  147. package/src/utils/reviewParser.ts +253 -0
  148. package/src/utils/sanitizer.ts +238 -0
  149. package/src/utils/smartFileSelector.ts +255 -0
  150. package/src/utils/templateLoader.ts +514 -0
  151. package/src/utils/treeGenerator.ts +153 -0
  152. package/tsconfig.build.json +14 -0
  153. package/tsconfig.json +59 -0
@@ -0,0 +1,406 @@
1
+ /**
2
+ * @fileoverview Core type definitions for AI-generated code detection.
3
+ *
4
+ * This module defines the interfaces and types used throughout the AI detection engine,
5
+ * providing a consistent type system for pattern detection, analysis results, and configuration.
6
+ */
7
+
8
+ /**
9
+ * Main detection result interface containing analysis outcomes
10
+ */
11
+ export interface DetectionResult {
12
+ /** Whether the code is determined to be AI-generated */
13
+ isAIGenerated: boolean;
14
+ /** Overall confidence score from 0.0 to 1.0 */
15
+ confidenceScore: number;
16
+ /** Array of specific patterns detected */
17
+ detectedPatterns: DetectedPattern[];
18
+ /** Detailed breakdown of each analysis component */
19
+ analysisBreakdown: AnalysisBreakdown;
20
+ /** Actionable recommendations based on findings */
21
+ recommendations: string[];
22
+ /** Additional metadata about the detection process */
23
+ metadata: DetectionMetadata;
24
+ }
25
+
26
+ /**
27
+ * Individual pattern detection result
28
+ */
29
+ export interface DetectedPattern {
30
+ /** Unique pattern identifier (e.g., 'H1.1', 'M5.3') */
31
+ id: string;
32
+ /** Human-readable pattern name */
33
+ name: string;
34
+ /** Confidence level category */
35
+ confidence: 'high' | 'medium' | 'low';
36
+ /** Numerical confidence score from 0.0 to 1.0 */
37
+ score: number;
38
+ /** Supporting evidence for this pattern */
39
+ evidence: PatternEvidence;
40
+ /** Detailed description of what this pattern indicates */
41
+ description: string;
42
+ }
43
+
44
+ /**
45
+ * Evidence supporting a pattern detection
46
+ */
47
+ export interface PatternEvidence {
48
+ /** Type of evidence collected */
49
+ type: 'git' | 'documentation' | 'structural' | 'statistical' | 'linguistic';
50
+ /** Raw data supporting the detection */
51
+ data: Record<string, any>;
52
+ /** Specific locations in code where pattern was found */
53
+ locations?: CodeLocation[];
54
+ /** Additional context for human reviewers */
55
+ context?: string;
56
+ }
57
+
58
+ /**
59
+ * Location reference within codebase
60
+ */
61
+ export interface CodeLocation {
62
+ /** File path relative to project root */
63
+ filePath: string;
64
+ /** Line number (1-indexed) */
65
+ lineNumber?: number;
66
+ /** Column number (1-indexed) */
67
+ columnNumber?: number;
68
+ /** Range of lines if applicable */
69
+ lineRange?: [number, number];
70
+ }
71
+
72
+ /**
73
+ * Comprehensive breakdown of all analysis components
74
+ */
75
+ export interface AnalysisBreakdown {
76
+ /** Git history analysis results */
77
+ gitHistoryAnalysis: GitAnalysisResult;
78
+ /** Documentation structure analysis results */
79
+ documentationAnalysis: DocumentationResult;
80
+ /** Code structure analysis results */
81
+ structuralAnalysis: StructuralResult;
82
+ /** Statistical pattern analysis results */
83
+ statisticalAnalysis: StatisticalResult;
84
+ /** Natural language analysis results */
85
+ linguisticAnalysis: LinguisticResult;
86
+ }
87
+
88
+ /**
89
+ * Git history analysis result
90
+ */
91
+ export interface GitAnalysisResult {
92
+ /** Name of the analyzer */
93
+ analyzer: 'git-history';
94
+ /** Patterns detected by git analysis */
95
+ patterns: DetectedPattern[];
96
+ /** Analysis metadata */
97
+ metadata: {
98
+ /** Total number of commits analyzed */
99
+ totalCommits: number;
100
+ /** Time taken for analysis in milliseconds */
101
+ analysisTime: number;
102
+ /** Whether repository had sufficient history */
103
+ sufficientHistory: boolean;
104
+ };
105
+ }
106
+
107
+ /**
108
+ * Documentation analysis result
109
+ */
110
+ export interface DocumentationResult {
111
+ /** Name of the analyzer */
112
+ analyzer: 'documentation';
113
+ /** Patterns detected by documentation analysis */
114
+ patterns: DetectedPattern[];
115
+ /** Analysis metadata */
116
+ metadata: {
117
+ /** Number of files analyzed */
118
+ filesAnalyzed: number;
119
+ /** Whether README file was present */
120
+ hasReadme: boolean;
121
+ /** Average comment density across files */
122
+ avgCommentDensity: number;
123
+ };
124
+ }
125
+
126
+ /**
127
+ * Structural analysis result
128
+ */
129
+ export interface StructuralResult {
130
+ /** Name of the analyzer */
131
+ analyzer: 'structural';
132
+ /** Patterns detected by structural analysis */
133
+ patterns: DetectedPattern[];
134
+ /** Analysis metadata */
135
+ metadata: {
136
+ /** Number of files analyzed */
137
+ filesAnalyzed: number;
138
+ /** Number of functions analyzed */
139
+ functionsAnalyzed: number;
140
+ /** Average cyclomatic complexity */
141
+ avgComplexity: number;
142
+ };
143
+ }
144
+
145
+ /**
146
+ * Statistical analysis result
147
+ */
148
+ export interface StatisticalResult {
149
+ /** Name of the analyzer */
150
+ analyzer: 'statistical';
151
+ /** Patterns detected by statistical analysis */
152
+ patterns: DetectedPattern[];
153
+ /** Analysis metadata */
154
+ metadata: {
155
+ /** Total tokens processed */
156
+ totalTokens: number;
157
+ /** Unique tokens found */
158
+ uniqueTokens: number;
159
+ /** Shannon entropy score */
160
+ entropy: number;
161
+ };
162
+ }
163
+
164
+ /**
165
+ * Linguistic analysis result
166
+ */
167
+ export interface LinguisticResult {
168
+ /** Name of the analyzer */
169
+ analyzer: 'linguistic';
170
+ /** Patterns detected by linguistic analysis */
171
+ patterns: DetectedPattern[];
172
+ /** Analysis metadata */
173
+ metadata: {
174
+ /** Text blocks analyzed */
175
+ textBlocks: number;
176
+ /** Vocabulary diversity score */
177
+ vocabularyDiversity: number;
178
+ };
179
+ }
180
+
181
+ /**
182
+ * Detection metadata for tracking and debugging
183
+ */
184
+ export interface DetectionMetadata {
185
+ /** When the analysis was performed */
186
+ timestamp: Date;
187
+ /** Version of the detection engine */
188
+ engineVersion: string;
189
+ /** Which analyzers were enabled */
190
+ enabledAnalyzers: string[];
191
+ /** Total time taken for complete analysis */
192
+ totalAnalysisTime: number;
193
+ /** Any warnings or non-fatal errors */
194
+ warnings: string[];
195
+ /** Cache hit/miss information */
196
+ cacheInfo?: {
197
+ hit: boolean;
198
+ key?: string;
199
+ };
200
+ }
201
+
202
+ /**
203
+ * Configuration for detection engine
204
+ */
205
+ export interface DetectionConfig {
206
+ /** Global detection threshold (0.0 - 1.0) */
207
+ detectionThreshold: number;
208
+ /** List of analyzers to enable */
209
+ enabledAnalyzers: ('git' | 'documentation' | 'structural' | 'statistical' | 'linguistic')[];
210
+ /** Weights for different pattern confidence levels */
211
+ patternWeights: PatternWeights;
212
+ /** Confidence thresholds for pattern classification */
213
+ confidenceThresholds: ConfidenceThresholds;
214
+ /** Maximum time allowed for analysis (milliseconds) */
215
+ maxAnalysisTime: number;
216
+ /** Whether to enable result caching */
217
+ enableCaching: boolean;
218
+ /** Output format configuration */
219
+ outputFormat: 'detailed' | 'summary' | 'score-only';
220
+ /** Whether to include evidence in results */
221
+ includeEvidence: boolean;
222
+ /** Whether to generate recommendations */
223
+ generateRecommendations: boolean;
224
+ }
225
+
226
+ /**
227
+ * Weights for different pattern confidence levels
228
+ */
229
+ export interface PatternWeights {
230
+ /** Weight for high confidence patterns */
231
+ highConfidence: number;
232
+ /** Weight for medium confidence patterns */
233
+ mediumConfidence: number;
234
+ /** Weight for low confidence patterns */
235
+ lowConfidence: number;
236
+ }
237
+
238
+ /**
239
+ * Thresholds for pattern confidence classification
240
+ */
241
+ export interface ConfidenceThresholds {
242
+ /** Minimum score for high confidence classification */
243
+ highConfidence: number;
244
+ /** Minimum score for medium confidence classification */
245
+ mediumConfidence: number;
246
+ /** Minimum score for low confidence classification */
247
+ lowConfidence: number;
248
+ }
249
+
250
+ /**
251
+ * Input data for AI detection analysis
252
+ */
253
+ export interface CodeSubmission {
254
+ /** Git repository information */
255
+ repository: GitRepository;
256
+ /** Parsed codebase structure */
257
+ codebase: ParsedCodebase;
258
+ /** Documentation content */
259
+ documentation: DocumentationSet;
260
+ }
261
+
262
+ /**
263
+ * Git repository data
264
+ */
265
+ export interface GitRepository {
266
+ /** List of commits in chronological order */
267
+ commits: GitCommit[];
268
+ /** Repository root path */
269
+ rootPath?: string;
270
+ }
271
+
272
+ /**
273
+ * Individual git commit data
274
+ */
275
+ export interface GitCommit {
276
+ /** Commit hash */
277
+ hash: string;
278
+ /** Commit message */
279
+ message: string;
280
+ /** Files changed in this commit */
281
+ changedFiles: string[];
282
+ /** Timestamp of the commit */
283
+ timestamp: Date;
284
+ /** Author information */
285
+ author?: {
286
+ name: string;
287
+ email: string;
288
+ };
289
+ }
290
+
291
+ /**
292
+ * Parsed codebase structure
293
+ */
294
+ export interface ParsedCodebase {
295
+ /** List of code files */
296
+ files: CodeFile[];
297
+ /** List of parsed functions */
298
+ functions: ParsedFunction[];
299
+ /** Overall project statistics */
300
+ statistics?: {
301
+ totalLines: number;
302
+ totalFiles: number;
303
+ languages: string[];
304
+ };
305
+ }
306
+
307
+ /**
308
+ * Individual code file data
309
+ */
310
+ export interface CodeFile {
311
+ /** File path relative to project root */
312
+ path: string;
313
+ /** File content */
314
+ content: string;
315
+ /** Detected programming language */
316
+ language: string;
317
+ /** File size in bytes */
318
+ size: number;
319
+ /** File modification time */
320
+ lastModified?: Date;
321
+ }
322
+
323
+ /**
324
+ * Parsed function information
325
+ */
326
+ export interface ParsedFunction {
327
+ /** Function name */
328
+ name: string;
329
+ /** File containing the function */
330
+ filePath: string;
331
+ /** Starting line number */
332
+ startLine: number;
333
+ /** Ending line number */
334
+ endLine: number;
335
+ /** Function parameters */
336
+ parameters: string[];
337
+ /** Return type if available */
338
+ returnType?: string;
339
+ /** Number of conditional statements */
340
+ conditionals: any[];
341
+ /** Number of loops */
342
+ loops: any[];
343
+ /** Number of try-catch blocks */
344
+ catches: any[];
345
+ /** Number of logical operators */
346
+ logicalOperators: any[];
347
+ }
348
+
349
+ /**
350
+ * Documentation set for analysis
351
+ */
352
+ export interface DocumentationSet {
353
+ /** README file content */
354
+ readme?: string;
355
+ /** Code files with their documentation */
356
+ codeFiles: CodeFile[];
357
+ /** Other documentation files */
358
+ otherDocs?: DocumentationFile[];
359
+ }
360
+
361
+ /**
362
+ * Documentation file
363
+ */
364
+ export interface DocumentationFile {
365
+ /** File path */
366
+ path: string;
367
+ /** File content */
368
+ content: string;
369
+ /** Type of documentation */
370
+ type: 'readme' | 'changelog' | 'api' | 'guide' | 'other';
371
+ }
372
+
373
+ /**
374
+ * Result from pattern detection analysis
375
+ */
376
+ export interface PatternDetectionResult {
377
+ /** Whether the pattern was detected */
378
+ detected: boolean;
379
+ /** Confidence score for this pattern */
380
+ score: number;
381
+ /** Supporting evidence */
382
+ evidence?: Record<string, any>;
383
+ }
384
+
385
+ /**
386
+ * Default configuration values
387
+ */
388
+ export const DEFAULT_DETECTION_CONFIG: DetectionConfig = {
389
+ detectionThreshold: 0.7,
390
+ enabledAnalyzers: ['git', 'documentation', 'structural'],
391
+ patternWeights: {
392
+ highConfidence: 0.9,
393
+ mediumConfidence: 0.7,
394
+ lowConfidence: 0.5,
395
+ },
396
+ confidenceThresholds: {
397
+ highConfidence: 0.9,
398
+ mediumConfidence: 0.7,
399
+ lowConfidence: 0.5,
400
+ },
401
+ maxAnalysisTime: 30000, // 30 seconds
402
+ enableCaching: true,
403
+ outputFormat: 'detailed',
404
+ includeEvidence: true,
405
+ generateRecommendations: true,
406
+ };