@defai.digital/review-domain 13.4.0 → 13.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/review-service.d.ts +92 -7
- package/dist/review-service.d.ts.map +1 -1
- package/dist/review-service.js +606 -43
- package/dist/review-service.js.map +1 -1
- package/dist/types.d.ts +58 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -3
package/dist/index.d.ts
CHANGED
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
*
|
|
4
4
|
* AI-powered code review with focused analysis modes.
|
|
5
5
|
*/
|
|
6
|
-
export type { FileContent, ReviewContext, ParsedReviewResponse, ReviewServiceConfig, ReviewPromptExecutor, ReviewExecutionOptions, DryRunResult, } from './types.js';
|
|
6
|
+
export type { FileContent, ReviewContext, ParsedReviewResponse, ReviewServiceConfig, ReviewPromptExecutor, ReviewExecutionOptions, DryRunResult, FileBatch, ProviderTimeoutConfig, DependencyNode, PartialReviewResult, } from './types.js';
|
|
7
7
|
export type { ReviewRequest, ReviewResult, ReviewComment, ReviewFocus, ReviewSummary, SarifOutput, } from './types.js';
|
|
8
8
|
export { FOCUS_MODE_PROMPTS, getFocusModePrompt, RESPONSE_FORMAT_INSTRUCTIONS, buildReviewPrompt, FOCUS_MODE_CATEGORIES, isCategoryValidForFocus, } from './focus-modes.js';
|
|
9
9
|
export { parseReviewResponse, filterCommentsByFocus, filterCommentsByConfidence, validateActionableSuggestions, generateCommentId, } from './comment-builder.js';
|
|
10
10
|
export { formatReviewAsMarkdown, formatCompactSummary } from './markdown-formatter.js';
|
|
11
11
|
export { formatReviewAsSarif, formatSarifAsJson, createEmptySarifReport, } from './sarif-formatter.js';
|
|
12
|
-
export { ReviewService, ReviewError, createReviewService, clearReviewCache, getReviewCacheStats, } from './review-service.js';
|
|
12
|
+
export { ReviewService, ReviewError, createReviewService, clearReviewCache, getReviewCacheStats, clearPartialResults, getPartialResultsStats, } from './review-service.js';
|
|
13
13
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EACV,WAAW,EACX,aAAa,EACb,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EACV,WAAW,EACX,aAAa,EACb,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,YAAY,EACZ,SAAS,EACT,qBAAqB,EACrB,cAAc,EACd,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAGpB,YAAY,EACV,aAAa,EACb,YAAY,EACZ,aAAa,EACb,WAAW,EACX,aAAa,EACb,WAAW,GACZ,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,4BAA4B,EAC5B,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,0BAA0B,EAC1B,6BAA6B,EAC7B,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAGvF,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,aAAa,EACb,WAAW,EACX,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,qBAAqB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -12,5 +12,5 @@ export { formatReviewAsMarkdown, formatCompactSummary } from './markdown-formatt
|
|
|
12
12
|
// SARIF Formatter
|
|
13
13
|
export { formatReviewAsSarif, formatSarifAsJson, createEmptySarifReport, } from './sarif-formatter.js';
|
|
14
14
|
// Review Service
|
|
15
|
-
export { ReviewService, ReviewError, createReviewService, clearReviewCache, getReviewCacheStats, } from './review-service.js';
|
|
15
|
+
export { ReviewService, ReviewError, createReviewService, clearReviewCache, getReviewCacheStats, clearPartialResults, getPartialResultsStats, } from './review-service.js';
|
|
16
16
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA2BH,cAAc;AACd,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,4BAA4B,EAC5B,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAE1B,kBAAkB;AAClB,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,0BAA0B,EAC1B,6BAA6B,EAC7B,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAE9B,qBAAqB;AACrB,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAEvF,kBAAkB;AAClB,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAE9B,iBAAiB;AACjB,OAAO,EACL,aAAa,EACb,WAAW,EACX,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,qBAAqB,CAAC"}
|
package/dist/review-service.d.ts
CHANGED
|
@@ -6,14 +6,16 @@
|
|
|
6
6
|
* - INV-REV-OPS-001: Timeout Handling
|
|
7
7
|
* - INV-REV-OPS-002: Provider Fallback
|
|
8
8
|
*
|
|
9
|
-
* Performance optimizations
|
|
10
|
-
* - Async file I/O with fs.promises
|
|
11
|
-
* -
|
|
12
|
-
* - .
|
|
13
|
-
*
|
|
9
|
+
* Performance optimizations:
|
|
10
|
+
* - Tier 1 (v13.4.0): Async file I/O with fs.promises, concurrent file reading with p-limit,
|
|
11
|
+
* .gitignore-aware filtering, content-hash caching for LLM responses
|
|
12
|
+
* - Tier 2 (v13.5.0): Smart batching by focus mode, --since <commit> git filtering,
|
|
13
|
+
* provider-aware timeout configuration
|
|
14
|
+
* - Tier 3 (v13.5.0): Dependency graph construction for file ordering, memory management
|
|
15
|
+
* for large codebases, partial result recovery on failure
|
|
14
16
|
*/
|
|
15
17
|
import { type ReviewRequest, type ReviewResult } from '@defai.digital/contracts';
|
|
16
|
-
import type { ReviewServiceConfig, ReviewPromptExecutor, ReviewExecutionOptions, DryRunResult } from './types.js';
|
|
18
|
+
import type { ReviewServiceConfig, ReviewPromptExecutor, ReviewExecutionOptions, DryRunResult, PartialReviewResult } from './types.js';
|
|
17
19
|
/**
|
|
18
20
|
* Review service for orchestrating AI code review
|
|
19
21
|
*/
|
|
@@ -30,6 +32,14 @@ export declare class ReviewService {
|
|
|
30
32
|
* Execute dry run - show what would be analyzed
|
|
31
33
|
*/
|
|
32
34
|
dryRun(request: ReviewRequest): Promise<DryRunResult>;
|
|
35
|
+
/**
|
|
36
|
+
* Recover partial results from a failed review (Tier 3)
|
|
37
|
+
*/
|
|
38
|
+
getPartialResult(requestId: string): PartialReviewResult | undefined;
|
|
39
|
+
/**
|
|
40
|
+
* Resume a failed review from partial results (Tier 3)
|
|
41
|
+
*/
|
|
42
|
+
resumeFromPartial(requestId: string, request: ReviewRequest, options?: ReviewExecutionOptions): Promise<ReviewResult>;
|
|
33
43
|
/**
|
|
34
44
|
* Format result based on output format
|
|
35
45
|
*/
|
|
@@ -39,10 +49,56 @@ export declare class ReviewService {
|
|
|
39
49
|
*/
|
|
40
50
|
getCompactSummary(result: ReviewResult): string;
|
|
41
51
|
/**
|
|
42
|
-
*
|
|
52
|
+
* Execute with smart batching by focus mode (Tier 2)
|
|
53
|
+
* Groups files by relevance to the focus mode and processes high-priority files first
|
|
54
|
+
*/
|
|
55
|
+
private executeWithSmartBatching;
|
|
56
|
+
/**
|
|
57
|
+
* Create smart batches based on focus mode (Tier 2)
|
|
58
|
+
*/
|
|
59
|
+
private createSmartBatches;
|
|
60
|
+
/**
|
|
61
|
+
* Get the primary category for a focus mode
|
|
62
|
+
*/
|
|
63
|
+
private getFocusCategory;
|
|
64
|
+
/**
|
|
65
|
+
* Merge multiple JSON array responses into one
|
|
66
|
+
*/
|
|
67
|
+
private mergeJsonArrayResponses;
|
|
68
|
+
/**
|
|
69
|
+
* Calculate provider-aware timeout (Tier 2)
|
|
70
|
+
*/
|
|
71
|
+
private calculateProviderTimeout;
|
|
72
|
+
/**
|
|
73
|
+
* Collect files from paths with async I/O, .gitignore filtering, and optional git diff (Tier 2)
|
|
43
74
|
* Performance: Uses p-limit for controlled concurrency
|
|
44
75
|
*/
|
|
45
76
|
private collectFiles;
|
|
77
|
+
/**
|
|
78
|
+
* Collect files changed since a specific git commit (Tier 2)
|
|
79
|
+
*/
|
|
80
|
+
private collectChangedFilesSince;
|
|
81
|
+
/**
|
|
82
|
+
* Order files by dependency graph (Tier 3)
|
|
83
|
+
* Files with more dependents are reviewed first for better context
|
|
84
|
+
*/
|
|
85
|
+
private orderByDependencies;
|
|
86
|
+
/**
|
|
87
|
+
* Build dependency graph from files (Tier 3)
|
|
88
|
+
*/
|
|
89
|
+
private buildDependencyGraph;
|
|
90
|
+
/**
|
|
91
|
+
* Extract import paths from file content
|
|
92
|
+
*/
|
|
93
|
+
private extractImports;
|
|
94
|
+
/**
|
|
95
|
+
* Resolve an import path to an absolute file path
|
|
96
|
+
*/
|
|
97
|
+
private resolveImportPath;
|
|
98
|
+
/**
|
|
99
|
+
* Calculate dependency depths using BFS
|
|
100
|
+
*/
|
|
101
|
+
private calculateDependencyDepths;
|
|
46
102
|
/**
|
|
47
103
|
* Load .gitignore file from directory and its parents
|
|
48
104
|
* Returns an ignore instance with all applicable patterns
|
|
@@ -81,6 +137,22 @@ export declare class ReviewService {
|
|
|
81
137
|
* Remove expired cache entries
|
|
82
138
|
*/
|
|
83
139
|
private cleanupExpiredCache;
|
|
140
|
+
/**
|
|
141
|
+
* Initialize partial result for recovery (Tier 3)
|
|
142
|
+
*/
|
|
143
|
+
private initializePartialResult;
|
|
144
|
+
/**
|
|
145
|
+
* Update partial result after successful batch (Tier 3)
|
|
146
|
+
*/
|
|
147
|
+
private updatePartialResultBatch;
|
|
148
|
+
/**
|
|
149
|
+
* Record a failed batch (Tier 3)
|
|
150
|
+
*/
|
|
151
|
+
private recordFailedBatch;
|
|
152
|
+
/**
|
|
153
|
+
* Update partial result with error (Tier 3)
|
|
154
|
+
*/
|
|
155
|
+
private updatePartialResultError;
|
|
84
156
|
/**
|
|
85
157
|
* Create empty result for dry run
|
|
86
158
|
*/
|
|
@@ -110,4 +182,17 @@ export declare function getReviewCacheStats(): {
|
|
|
110
182
|
size: number;
|
|
111
183
|
ttlMs: number;
|
|
112
184
|
};
|
|
185
|
+
/**
|
|
186
|
+
* Clear partial results store (Tier 3)
|
|
187
|
+
* Useful for testing or cleanup
|
|
188
|
+
*/
|
|
189
|
+
export declare function clearPartialResults(): void;
|
|
190
|
+
/**
|
|
191
|
+
* Get all partial results (Tier 3)
|
|
192
|
+
* Useful for debugging or monitoring
|
|
193
|
+
*/
|
|
194
|
+
export declare function getPartialResultsStats(): {
|
|
195
|
+
count: number;
|
|
196
|
+
requestIds: string[];
|
|
197
|
+
};
|
|
113
198
|
//# sourceMappingURL=review-service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review-service.d.ts","sourceRoot":"","sources":["../src/review-service.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"review-service.d.ts","sourceRoot":"","sources":["../src/review-service.ts"],"names":[],"mappings":"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"}
|
package/dist/review-service.js
CHANGED
|
@@ -6,23 +6,28 @@
|
|
|
6
6
|
* - INV-REV-OPS-001: Timeout Handling
|
|
7
7
|
* - INV-REV-OPS-002: Provider Fallback
|
|
8
8
|
*
|
|
9
|
-
* Performance optimizations
|
|
10
|
-
* - Async file I/O with fs.promises
|
|
11
|
-
* -
|
|
12
|
-
* - .
|
|
13
|
-
*
|
|
9
|
+
* Performance optimizations:
|
|
10
|
+
* - Tier 1 (v13.4.0): Async file I/O with fs.promises, concurrent file reading with p-limit,
|
|
11
|
+
* .gitignore-aware filtering, content-hash caching for LLM responses
|
|
12
|
+
* - Tier 2 (v13.5.0): Smart batching by focus mode, --since <commit> git filtering,
|
|
13
|
+
* provider-aware timeout configuration
|
|
14
|
+
* - Tier 3 (v13.5.0): Dependency graph construction for file ordering, memory management
|
|
15
|
+
* for large codebases, partial result recovery on failure
|
|
14
16
|
*/
|
|
15
17
|
import { v4 as uuidv4 } from 'uuid';
|
|
16
18
|
import * as fs from 'node:fs/promises';
|
|
17
19
|
import * as path from 'node:path';
|
|
18
20
|
import * as crypto from 'node:crypto';
|
|
19
21
|
import { createRequire } from 'node:module';
|
|
22
|
+
import { exec } from 'node:child_process';
|
|
23
|
+
import { promisify } from 'node:util';
|
|
20
24
|
import pLimit from 'p-limit';
|
|
21
25
|
import { createReviewSummary, sortCommentsBySeverity, ReviewErrorCode, TIMEOUT_PROVIDER_DEFAULT, CODE_EXTENSIONS, IGNORE_DIRECTORIES, } from '@defai.digital/contracts';
|
|
22
26
|
import { buildReviewPrompt } from './focus-modes.js';
|
|
23
27
|
import { parseReviewResponse, filterCommentsByConfidence } from './comment-builder.js';
|
|
24
28
|
import { formatReviewAsMarkdown, formatCompactSummary } from './markdown-formatter.js';
|
|
25
29
|
import { formatReviewAsSarif, formatSarifAsJson } from './sarif-formatter.js';
|
|
30
|
+
const execAsync = promisify(exec);
|
|
26
31
|
// Use createRequire for CJS package interop with the 'ignore' package
|
|
27
32
|
const require = createRequire(import.meta.url);
|
|
28
33
|
const ignore = require('ignore');
|
|
@@ -31,12 +36,111 @@ const ignore = require('ignore');
|
|
|
31
36
|
* Balances throughput with system resource usage
|
|
32
37
|
*/
|
|
33
38
|
const FILE_IO_CONCURRENCY = 15;
|
|
39
|
+
/**
|
|
40
|
+
* Maximum files to hold in memory at once for large codebase memory management (Tier 3)
|
|
41
|
+
*/
|
|
42
|
+
const MAX_FILES_IN_MEMORY = 50;
|
|
43
|
+
/**
|
|
44
|
+
* Batch size for smart batching (Tier 2)
|
|
45
|
+
*/
|
|
46
|
+
const SMART_BATCH_SIZE = 10;
|
|
34
47
|
/**
|
|
35
48
|
* In-memory cache for LLM responses, keyed by content hash
|
|
36
49
|
* Cache entries expire after 1 hour
|
|
37
50
|
*/
|
|
38
51
|
const responseCache = new Map();
|
|
39
52
|
const CACHE_TTL_MS = 60 * 60 * 1000; // 1 hour
|
|
53
|
+
/**
|
|
54
|
+
* In-memory store for partial results recovery (Tier 3)
|
|
55
|
+
*/
|
|
56
|
+
const partialResultsStore = new Map();
|
|
57
|
+
/**
|
|
58
|
+
* Provider-aware timeout configuration (Tier 2)
|
|
59
|
+
* Different providers have different performance characteristics
|
|
60
|
+
*/
|
|
61
|
+
const PROVIDER_TIMEOUT_CONFIGS = {
|
|
62
|
+
claude: {
|
|
63
|
+
providerId: 'claude',
|
|
64
|
+
baseTimeoutMs: 60000,
|
|
65
|
+
perFileTimeoutMs: 5000,
|
|
66
|
+
maxTimeoutMs: 300000,
|
|
67
|
+
},
|
|
68
|
+
gemini: {
|
|
69
|
+
providerId: 'gemini',
|
|
70
|
+
baseTimeoutMs: 45000,
|
|
71
|
+
perFileTimeoutMs: 4000,
|
|
72
|
+
maxTimeoutMs: 240000,
|
|
73
|
+
},
|
|
74
|
+
codex: {
|
|
75
|
+
providerId: 'codex',
|
|
76
|
+
baseTimeoutMs: 90000,
|
|
77
|
+
perFileTimeoutMs: 6000,
|
|
78
|
+
maxTimeoutMs: 360000,
|
|
79
|
+
},
|
|
80
|
+
grok: {
|
|
81
|
+
providerId: 'grok',
|
|
82
|
+
baseTimeoutMs: 50000,
|
|
83
|
+
perFileTimeoutMs: 4500,
|
|
84
|
+
maxTimeoutMs: 250000,
|
|
85
|
+
},
|
|
86
|
+
default: {
|
|
87
|
+
providerId: 'default',
|
|
88
|
+
baseTimeoutMs: 60000,
|
|
89
|
+
perFileTimeoutMs: 5000,
|
|
90
|
+
maxTimeoutMs: 300000,
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
/**
|
|
94
|
+
* File patterns relevant for each focus mode (Tier 2 - Smart Batching)
|
|
95
|
+
*/
|
|
96
|
+
const FOCUS_MODE_FILE_PATTERNS = {
|
|
97
|
+
security: {
|
|
98
|
+
high: [
|
|
99
|
+
/auth/i, /login/i, /password/i, /credential/i, /token/i,
|
|
100
|
+
/crypto/i, /encrypt/i, /decrypt/i, /hash/i, /secret/i,
|
|
101
|
+
/sanitize/i, /validate/i, /sql/i, /query/i, /api/i,
|
|
102
|
+
/middleware/i, /session/i, /permission/i, /role/i,
|
|
103
|
+
],
|
|
104
|
+
medium: [/controller/i, /handler/i, /route/i, /service/i, /util/i],
|
|
105
|
+
low: [/test/i, /spec/i, /mock/i, /fixture/i],
|
|
106
|
+
},
|
|
107
|
+
architecture: {
|
|
108
|
+
high: [
|
|
109
|
+
/index\.(ts|js)$/i, /main\.(ts|js)$/i, /app\.(ts|js)$/i,
|
|
110
|
+
/module/i, /interface/i, /contract/i, /factory/i,
|
|
111
|
+
/repository/i, /service/i, /domain/i,
|
|
112
|
+
],
|
|
113
|
+
medium: [/controller/i, /handler/i, /adapter/i, /port/i],
|
|
114
|
+
low: [/test/i, /spec/i, /mock/i, /util/i, /helper/i],
|
|
115
|
+
},
|
|
116
|
+
performance: {
|
|
117
|
+
high: [
|
|
118
|
+
/loop/i, /batch/i, /cache/i, /queue/i, /worker/i,
|
|
119
|
+
/stream/i, /buffer/i, /async/i, /parallel/i,
|
|
120
|
+
/database/i, /query/i, /sql/i, /orm/i,
|
|
121
|
+
],
|
|
122
|
+
medium: [/service/i, /handler/i, /process/i, /transform/i],
|
|
123
|
+
low: [/test/i, /spec/i, /mock/i, /config/i],
|
|
124
|
+
},
|
|
125
|
+
maintainability: {
|
|
126
|
+
high: [/util/i, /helper/i, /common/i, /shared/i, /lib/i],
|
|
127
|
+
medium: [/service/i, /handler/i, /controller/i],
|
|
128
|
+
low: [/test/i, /spec/i, /mock/i],
|
|
129
|
+
},
|
|
130
|
+
correctness: {
|
|
131
|
+
high: [
|
|
132
|
+
/calculator/i, /parser/i, /validator/i, /transform/i,
|
|
133
|
+
/convert/i, /format/i, /process/i,
|
|
134
|
+
],
|
|
135
|
+
medium: [/service/i, /handler/i, /util/i],
|
|
136
|
+
low: [/test/i, /spec/i, /mock/i, /type/i, /interface/i],
|
|
137
|
+
},
|
|
138
|
+
all: {
|
|
139
|
+
high: [],
|
|
140
|
+
medium: [],
|
|
141
|
+
low: [/test/i, /spec/i, /mock/i, /fixture/i],
|
|
142
|
+
},
|
|
143
|
+
};
|
|
40
144
|
/**
|
|
41
145
|
* Default configuration
|
|
42
146
|
*/
|
|
@@ -62,58 +166,83 @@ export class ReviewService {
|
|
|
62
166
|
async review(request, options) {
|
|
63
167
|
const startTime = Date.now();
|
|
64
168
|
const resultId = uuidv4();
|
|
65
|
-
const
|
|
169
|
+
const requestId = request.requestId ?? uuidv4();
|
|
170
|
+
const providerId = options?.providerId ?? request.providerId ?? this.config.defaultProvider;
|
|
66
171
|
// Handle dry run
|
|
67
172
|
if (request.dryRun || options?.dryRun) {
|
|
68
173
|
const dryRun = await this.dryRun(request);
|
|
69
174
|
return this.createEmptyResult(request, resultId, dryRun, startTime);
|
|
70
175
|
}
|
|
71
|
-
//
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
throw new ReviewError(ReviewErrorCode.NO_FILES_FOUND, 'No files found to review');
|
|
176
|
+
// Initialize partial result for recovery (Tier 3)
|
|
177
|
+
if (request.enableRecovery !== false) {
|
|
178
|
+
this.initializePartialResult(requestId);
|
|
75
179
|
}
|
|
76
|
-
// Build prompt
|
|
77
|
-
const prompt = buildReviewPrompt(request.focus, files, request.context);
|
|
78
|
-
// Execute with timeout
|
|
79
|
-
const providerId = options?.providerId ?? request.providerId ?? this.config.defaultProvider;
|
|
80
|
-
let response;
|
|
81
180
|
try {
|
|
82
|
-
|
|
181
|
+
// Collect files to review (with optional git filtering)
|
|
182
|
+
let files = await this.collectFiles(request.paths, request.maxFiles, request.maxLinesPerFile, request.since // Tier 2: --since flag
|
|
183
|
+
);
|
|
184
|
+
if (files.length === 0) {
|
|
185
|
+
throw new ReviewError(ReviewErrorCode.NO_FILES_FOUND, 'No files found to review');
|
|
186
|
+
}
|
|
187
|
+
// Tier 3: Build dependency graph for file ordering
|
|
188
|
+
if (request.dependencyOrdering) {
|
|
189
|
+
files = await this.orderByDependencies(files);
|
|
190
|
+
}
|
|
191
|
+
// Tier 2: Smart batching by focus mode
|
|
192
|
+
let response;
|
|
193
|
+
if (request.smartBatching !== false && files.length > SMART_BATCH_SIZE) {
|
|
194
|
+
response = await this.executeWithSmartBatching(files, request.focus, request.context, providerId, request.timeoutMs, requestId, request.enableRecovery !== false);
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
// Build prompt for all files at once
|
|
198
|
+
const prompt = buildReviewPrompt(request.focus, files, request.context);
|
|
199
|
+
// Calculate provider-aware timeout (Tier 2)
|
|
200
|
+
const timeoutMs = this.calculateProviderTimeout(providerId, files.length, request.timeoutMs);
|
|
201
|
+
// Execute with timeout
|
|
202
|
+
response = await this.executeWithTimeout(prompt, providerId, timeoutMs);
|
|
203
|
+
}
|
|
204
|
+
// Parse response
|
|
205
|
+
const parsed = parseReviewResponse(response.content, request.focus, request.minConfidence);
|
|
206
|
+
// Filter by confidence (INV-REV-002)
|
|
207
|
+
const filteredComments = filterCommentsByConfidence(parsed.comments, request.minConfidence);
|
|
208
|
+
// Sort by severity (INV-REV-OUT-001)
|
|
209
|
+
const sortedComments = sortCommentsBySeverity(filteredComments);
|
|
210
|
+
// Build summary
|
|
211
|
+
const summary = createReviewSummary(sortedComments);
|
|
212
|
+
const result = {
|
|
213
|
+
resultId,
|
|
214
|
+
requestId,
|
|
215
|
+
comments: sortedComments,
|
|
216
|
+
summary,
|
|
217
|
+
filesReviewed: files.map((f) => f.path),
|
|
218
|
+
linesAnalyzed: files.reduce((sum, f) => sum + f.lineCount, 0),
|
|
219
|
+
providerId: response.providerId,
|
|
220
|
+
modelId: response.modelId,
|
|
221
|
+
durationMs: Date.now() - startTime,
|
|
222
|
+
completedAt: new Date().toISOString(),
|
|
223
|
+
};
|
|
224
|
+
// Clean up partial result on success
|
|
225
|
+
if (request.enableRecovery !== false) {
|
|
226
|
+
partialResultsStore.delete(requestId);
|
|
227
|
+
}
|
|
228
|
+
return result;
|
|
83
229
|
}
|
|
84
230
|
catch (error) {
|
|
231
|
+
// Tier 3: Update partial result with error
|
|
232
|
+
if (request.enableRecovery !== false) {
|
|
233
|
+
this.updatePartialResultError(requestId, error instanceof Error ? error.message : 'Unknown error');
|
|
234
|
+
}
|
|
85
235
|
if (error instanceof Error && error.message.includes('timeout')) {
|
|
86
|
-
throw new ReviewError(ReviewErrorCode.TIMEOUT, `Review timed out
|
|
236
|
+
throw new ReviewError(ReviewErrorCode.TIMEOUT, `Review timed out: ${error.message}`);
|
|
87
237
|
}
|
|
88
238
|
throw error;
|
|
89
239
|
}
|
|
90
|
-
// Parse response
|
|
91
|
-
const parsed = parseReviewResponse(response.content, request.focus, request.minConfidence);
|
|
92
|
-
// Filter by confidence (INV-REV-002)
|
|
93
|
-
const filteredComments = filterCommentsByConfidence(parsed.comments, request.minConfidence);
|
|
94
|
-
// Sort by severity (INV-REV-OUT-001)
|
|
95
|
-
const sortedComments = sortCommentsBySeverity(filteredComments);
|
|
96
|
-
// Build summary
|
|
97
|
-
const summary = createReviewSummary(sortedComments);
|
|
98
|
-
const result = {
|
|
99
|
-
resultId,
|
|
100
|
-
requestId: request.requestId ?? uuidv4(),
|
|
101
|
-
comments: sortedComments,
|
|
102
|
-
summary,
|
|
103
|
-
filesReviewed: files.map((f) => f.path),
|
|
104
|
-
linesAnalyzed: files.reduce((sum, f) => sum + f.lineCount, 0),
|
|
105
|
-
providerId: response.providerId,
|
|
106
|
-
modelId: response.modelId,
|
|
107
|
-
durationMs: Date.now() - startTime,
|
|
108
|
-
completedAt: new Date().toISOString(),
|
|
109
|
-
};
|
|
110
|
-
return result;
|
|
111
240
|
}
|
|
112
241
|
/**
|
|
113
242
|
* Execute dry run - show what would be analyzed
|
|
114
243
|
*/
|
|
115
244
|
async dryRun(request) {
|
|
116
|
-
const files = await this.collectFiles(request.paths, request.maxFiles, request.maxLinesPerFile);
|
|
245
|
+
const files = await this.collectFiles(request.paths, request.maxFiles, request.maxLinesPerFile, request.since);
|
|
117
246
|
return {
|
|
118
247
|
files: files.map((f) => f.path),
|
|
119
248
|
totalLines: files.reduce((sum, f) => sum + f.lineCount, 0),
|
|
@@ -121,6 +250,28 @@ export class ReviewService {
|
|
|
121
250
|
estimatedDurationMs: files.length * 5000, // Rough estimate: 5s per file
|
|
122
251
|
};
|
|
123
252
|
}
|
|
253
|
+
/**
|
|
254
|
+
* Recover partial results from a failed review (Tier 3)
|
|
255
|
+
*/
|
|
256
|
+
getPartialResult(requestId) {
|
|
257
|
+
return partialResultsStore.get(requestId);
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Resume a failed review from partial results (Tier 3)
|
|
261
|
+
*/
|
|
262
|
+
async resumeFromPartial(requestId, request, options) {
|
|
263
|
+
const partial = partialResultsStore.get(requestId);
|
|
264
|
+
if (!partial) {
|
|
265
|
+
throw new ReviewError(ReviewErrorCode.INVALID_INPUT, `No partial result found for request ${requestId}`);
|
|
266
|
+
}
|
|
267
|
+
// Continue from where we left off by excluding already reviewed files
|
|
268
|
+
const modifiedRequest = {
|
|
269
|
+
...request,
|
|
270
|
+
requestId,
|
|
271
|
+
};
|
|
272
|
+
// The review will pick up from partial comments in the store
|
|
273
|
+
return this.review(modifiedRequest, options);
|
|
274
|
+
}
|
|
124
275
|
/**
|
|
125
276
|
* Format result based on output format
|
|
126
277
|
*/
|
|
@@ -141,10 +292,159 @@ export class ReviewService {
|
|
|
141
292
|
return formatCompactSummary(result);
|
|
142
293
|
}
|
|
143
294
|
/**
|
|
144
|
-
*
|
|
295
|
+
* Execute with smart batching by focus mode (Tier 2)
|
|
296
|
+
* Groups files by relevance to the focus mode and processes high-priority files first
|
|
297
|
+
*/
|
|
298
|
+
async executeWithSmartBatching(files, focus, context, providerId, baseTimeoutMs, requestId, enableRecovery) {
|
|
299
|
+
// Create batches based on focus mode relevance
|
|
300
|
+
const batches = this.createSmartBatches(files, focus);
|
|
301
|
+
const allResponses = [];
|
|
302
|
+
let lastProviderId = providerId;
|
|
303
|
+
let lastModelId = 'unknown';
|
|
304
|
+
// Process batches in priority order (high priority first)
|
|
305
|
+
for (const batch of batches.sort((a, b) => b.priority - a.priority)) {
|
|
306
|
+
// Skip empty batches
|
|
307
|
+
if (batch.files.length === 0)
|
|
308
|
+
continue;
|
|
309
|
+
const prompt = buildReviewPrompt(focus, batch.files, context);
|
|
310
|
+
const timeoutMs = this.calculateProviderTimeout(providerId, batch.files.length, baseTimeoutMs);
|
|
311
|
+
try {
|
|
312
|
+
const response = await this.executeWithTimeout(prompt, providerId, timeoutMs);
|
|
313
|
+
allResponses.push(response.content);
|
|
314
|
+
lastProviderId = response.providerId;
|
|
315
|
+
lastModelId = response.modelId;
|
|
316
|
+
// Update partial result on batch success (Tier 3)
|
|
317
|
+
if (enableRecovery) {
|
|
318
|
+
this.updatePartialResultBatch(requestId, batch.batchId, batch.files.map((f) => f.path));
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
catch (error) {
|
|
322
|
+
// On batch failure, record it but continue with other batches
|
|
323
|
+
if (enableRecovery) {
|
|
324
|
+
this.recordFailedBatch(requestId, batch.batchId);
|
|
325
|
+
}
|
|
326
|
+
// Re-throw if this is a critical batch (high priority)
|
|
327
|
+
if (batch.priority >= 3) {
|
|
328
|
+
throw error;
|
|
329
|
+
}
|
|
330
|
+
// Continue processing other batches for lower priority failures
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
if (allResponses.length === 0) {
|
|
334
|
+
throw new ReviewError(ReviewErrorCode.REVIEW_FAILED, 'All batches failed');
|
|
335
|
+
}
|
|
336
|
+
// Merge responses from all batches
|
|
337
|
+
const mergedContent = this.mergeJsonArrayResponses(allResponses);
|
|
338
|
+
return {
|
|
339
|
+
content: mergedContent,
|
|
340
|
+
providerId: lastProviderId,
|
|
341
|
+
modelId: lastModelId,
|
|
342
|
+
};
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* Create smart batches based on focus mode (Tier 2)
|
|
346
|
+
*/
|
|
347
|
+
createSmartBatches(files, focus) {
|
|
348
|
+
const patterns = FOCUS_MODE_FILE_PATTERNS[focus];
|
|
349
|
+
const highPriority = [];
|
|
350
|
+
const mediumPriority = [];
|
|
351
|
+
const lowPriority = [];
|
|
352
|
+
const general = [];
|
|
353
|
+
for (const file of files) {
|
|
354
|
+
const filename = path.basename(file.path);
|
|
355
|
+
const filepath = file.path;
|
|
356
|
+
if (patterns.high.some((p) => p.test(filename) || p.test(filepath))) {
|
|
357
|
+
highPriority.push(file);
|
|
358
|
+
}
|
|
359
|
+
else if (patterns.medium.some((p) => p.test(filename) || p.test(filepath))) {
|
|
360
|
+
mediumPriority.push(file);
|
|
361
|
+
}
|
|
362
|
+
else if (patterns.low.some((p) => p.test(filename) || p.test(filepath))) {
|
|
363
|
+
lowPriority.push(file);
|
|
364
|
+
}
|
|
365
|
+
else {
|
|
366
|
+
general.push(file);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
const batches = [];
|
|
370
|
+
// Create batches from each priority level
|
|
371
|
+
const createBatchesFromFiles = (fileList, priority, category) => {
|
|
372
|
+
for (let i = 0; i < fileList.length; i += SMART_BATCH_SIZE) {
|
|
373
|
+
batches.push({
|
|
374
|
+
batchId: uuidv4(),
|
|
375
|
+
files: fileList.slice(i, i + SMART_BATCH_SIZE),
|
|
376
|
+
priority,
|
|
377
|
+
category,
|
|
378
|
+
});
|
|
379
|
+
}
|
|
380
|
+
};
|
|
381
|
+
createBatchesFromFiles(highPriority, 3, this.getFocusCategory(focus));
|
|
382
|
+
createBatchesFromFiles(mediumPriority, 2, 'general');
|
|
383
|
+
createBatchesFromFiles(general, 1, 'general');
|
|
384
|
+
createBatchesFromFiles(lowPriority, 0, 'test');
|
|
385
|
+
return batches;
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* Get the primary category for a focus mode
|
|
389
|
+
*/
|
|
390
|
+
getFocusCategory(focus) {
|
|
391
|
+
switch (focus) {
|
|
392
|
+
case 'security':
|
|
393
|
+
return 'security';
|
|
394
|
+
case 'architecture':
|
|
395
|
+
return 'architecture';
|
|
396
|
+
case 'performance':
|
|
397
|
+
return 'performance';
|
|
398
|
+
default:
|
|
399
|
+
return 'general';
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* Merge multiple JSON array responses into one
|
|
404
|
+
*/
|
|
405
|
+
mergeJsonArrayResponses(responses) {
|
|
406
|
+
const allComments = [];
|
|
407
|
+
for (const response of responses) {
|
|
408
|
+
try {
|
|
409
|
+
// Try to extract JSON array from response
|
|
410
|
+
const jsonMatch = response.match(/\[[\s\S]*\]/);
|
|
411
|
+
if (jsonMatch) {
|
|
412
|
+
const parsed = JSON.parse(jsonMatch[0]);
|
|
413
|
+
if (Array.isArray(parsed)) {
|
|
414
|
+
allComments.push(...parsed);
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
catch {
|
|
419
|
+
// Skip unparseable responses
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
return JSON.stringify(allComments);
|
|
423
|
+
}
|
|
424
|
+
/**
|
|
425
|
+
* Calculate provider-aware timeout (Tier 2)
|
|
426
|
+
*/
|
|
427
|
+
calculateProviderTimeout(providerId, fileCount, requestedTimeoutMs) {
|
|
428
|
+
const config = PROVIDER_TIMEOUT_CONFIGS[providerId] ?? PROVIDER_TIMEOUT_CONFIGS['default'];
|
|
429
|
+
// Default config is guaranteed to exist
|
|
430
|
+
const safeConfig = config;
|
|
431
|
+
// Calculate based on file count
|
|
432
|
+
const calculatedTimeout = safeConfig.baseTimeoutMs + fileCount * safeConfig.perFileTimeoutMs;
|
|
433
|
+
// Use requested timeout if provided, otherwise use calculated
|
|
434
|
+
const timeout = requestedTimeoutMs ?? calculatedTimeout;
|
|
435
|
+
// Clamp to max
|
|
436
|
+
return Math.min(timeout, safeConfig.maxTimeoutMs);
|
|
437
|
+
}
|
|
438
|
+
/**
|
|
439
|
+
* Collect files from paths with async I/O, .gitignore filtering, and optional git diff (Tier 2)
|
|
145
440
|
* Performance: Uses p-limit for controlled concurrency
|
|
146
441
|
*/
|
|
147
|
-
async collectFiles(paths, maxFiles, maxLinesPerFile
|
|
442
|
+
async collectFiles(paths, maxFiles, maxLinesPerFile, since // Tier 2: --since flag
|
|
443
|
+
) {
|
|
444
|
+
// If --since is provided, use git to get changed files
|
|
445
|
+
if (since) {
|
|
446
|
+
return this.collectChangedFilesSince(paths, maxFiles, maxLinesPerFile, since);
|
|
447
|
+
}
|
|
148
448
|
const seen = new Set();
|
|
149
449
|
const filePaths = [];
|
|
150
450
|
// First pass: collect all file paths (fast, low I/O)
|
|
@@ -170,12 +470,217 @@ export class ReviewService {
|
|
|
170
470
|
continue;
|
|
171
471
|
}
|
|
172
472
|
}
|
|
473
|
+
// Tier 3: Memory management - limit files loaded at once
|
|
474
|
+
const filesToRead = filePaths.slice(0, Math.min(maxFiles, MAX_FILES_IN_MEMORY));
|
|
173
475
|
// Second pass: read files concurrently with p-limit
|
|
174
476
|
const limit = pLimit(FILE_IO_CONCURRENCY);
|
|
175
|
-
const readPromises =
|
|
477
|
+
const readPromises = filesToRead.map((filePath) => limit(() => this.readFileAsync(filePath, maxLinesPerFile)));
|
|
176
478
|
const results = await Promise.all(readPromises);
|
|
177
479
|
return results.filter((f) => f !== null);
|
|
178
480
|
}
|
|
481
|
+
/**
|
|
482
|
+
* Collect files changed since a specific git commit (Tier 2)
|
|
483
|
+
*/
|
|
484
|
+
async collectChangedFilesSince(basePaths, maxFiles, maxLinesPerFile, since) {
|
|
485
|
+
// Determine the working directory (use first path's directory or current)
|
|
486
|
+
const firstPath = basePaths[0];
|
|
487
|
+
const workDir = firstPath ? path.dirname(path.resolve(firstPath)) : process.cwd();
|
|
488
|
+
try {
|
|
489
|
+
// Get list of changed files since the commit
|
|
490
|
+
const { stdout } = await execAsync(`git diff --name-only ${since}...HEAD`, {
|
|
491
|
+
cwd: workDir,
|
|
492
|
+
maxBuffer: 10 * 1024 * 1024, // 10MB buffer for large repos
|
|
493
|
+
});
|
|
494
|
+
const changedFiles = stdout
|
|
495
|
+
.split('\n')
|
|
496
|
+
.map((f) => f.trim())
|
|
497
|
+
.filter((f) => f.length > 0)
|
|
498
|
+
.map((f) => path.resolve(workDir, f));
|
|
499
|
+
// Filter to only include files that match base paths
|
|
500
|
+
const relevantFiles = [];
|
|
501
|
+
for (const file of changedFiles) {
|
|
502
|
+
for (const basePath of basePaths) {
|
|
503
|
+
const resolved = path.resolve(basePath);
|
|
504
|
+
if (file.startsWith(resolved) || file === resolved) {
|
|
505
|
+
relevantFiles.push(file);
|
|
506
|
+
break;
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
// Also check if any base path is a file that's in the changed list
|
|
511
|
+
for (const basePath of basePaths) {
|
|
512
|
+
const resolved = path.resolve(basePath);
|
|
513
|
+
if (changedFiles.includes(resolved) && !relevantFiles.includes(resolved)) {
|
|
514
|
+
relevantFiles.push(resolved);
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
// Limit to maxFiles
|
|
518
|
+
const filesToRead = relevantFiles.slice(0, Math.min(maxFiles, MAX_FILES_IN_MEMORY));
|
|
519
|
+
// Filter to code extensions
|
|
520
|
+
const codeFiles = filesToRead.filter((f) => {
|
|
521
|
+
const ext = path.extname(f);
|
|
522
|
+
return CODE_EXTENSIONS.includes(ext);
|
|
523
|
+
});
|
|
524
|
+
// Read files concurrently
|
|
525
|
+
const limit = pLimit(FILE_IO_CONCURRENCY);
|
|
526
|
+
const readPromises = codeFiles.map((filePath) => limit(() => this.readFileAsync(filePath, maxLinesPerFile)));
|
|
527
|
+
const results = await Promise.all(readPromises);
|
|
528
|
+
return results.filter((f) => f !== null);
|
|
529
|
+
}
|
|
530
|
+
catch (error) {
|
|
531
|
+
// If git command fails, fall back to regular file collection
|
|
532
|
+
console.warn(`Git diff failed, falling back to regular file collection: ${error}`);
|
|
533
|
+
return this.collectFiles(basePaths, maxFiles, maxLinesPerFile, undefined);
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
/**
|
|
537
|
+
* Order files by dependency graph (Tier 3)
|
|
538
|
+
* Files with more dependents are reviewed first for better context
|
|
539
|
+
*/
|
|
540
|
+
async orderByDependencies(files) {
|
|
541
|
+
const graph = await this.buildDependencyGraph(files);
|
|
542
|
+
// Sort by number of importedBy (files that depend on this file)
|
|
543
|
+
// Files with more dependents should be reviewed first
|
|
544
|
+
return [...files].sort((a, b) => {
|
|
545
|
+
const nodeA = graph.get(a.path);
|
|
546
|
+
const nodeB = graph.get(b.path);
|
|
547
|
+
const countA = nodeA?.importedBy.length ?? 0;
|
|
548
|
+
const countB = nodeB?.importedBy.length ?? 0;
|
|
549
|
+
return countB - countA; // Descending order
|
|
550
|
+
});
|
|
551
|
+
}
|
|
552
|
+
/**
|
|
553
|
+
* Build dependency graph from files (Tier 3)
|
|
554
|
+
*/
|
|
555
|
+
async buildDependencyGraph(files) {
|
|
556
|
+
const graph = new Map();
|
|
557
|
+
const fileSet = new Set(files.map((f) => f.path));
|
|
558
|
+
// Initialize nodes
|
|
559
|
+
for (const file of files) {
|
|
560
|
+
graph.set(file.path, {
|
|
561
|
+
path: file.path,
|
|
562
|
+
imports: [],
|
|
563
|
+
importedBy: [],
|
|
564
|
+
depth: 0,
|
|
565
|
+
});
|
|
566
|
+
}
|
|
567
|
+
// Parse imports from each file
|
|
568
|
+
for (const file of files) {
|
|
569
|
+
const imports = this.extractImports(file.content, file.path);
|
|
570
|
+
const node = graph.get(file.path);
|
|
571
|
+
for (const importPath of imports) {
|
|
572
|
+
// Resolve the import to an absolute path
|
|
573
|
+
const resolvedImport = this.resolveImportPath(importPath, file.path);
|
|
574
|
+
// Only track imports that are in our file set
|
|
575
|
+
if (resolvedImport && fileSet.has(resolvedImport)) {
|
|
576
|
+
node.imports.push(resolvedImport);
|
|
577
|
+
// Update the imported file's importedBy
|
|
578
|
+
const importedNode = graph.get(resolvedImport);
|
|
579
|
+
if (importedNode) {
|
|
580
|
+
importedNode.importedBy.push(file.path);
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
// Calculate depths using BFS
|
|
586
|
+
this.calculateDependencyDepths(graph);
|
|
587
|
+
return graph;
|
|
588
|
+
}
|
|
589
|
+
/**
|
|
590
|
+
* Extract import paths from file content
|
|
591
|
+
*/
|
|
592
|
+
extractImports(content, filePath) {
|
|
593
|
+
const imports = [];
|
|
594
|
+
const ext = path.extname(filePath);
|
|
595
|
+
// TypeScript/JavaScript imports
|
|
596
|
+
if (['.ts', '.tsx', '.js', '.jsx', '.mjs', '.mts'].includes(ext)) {
|
|
597
|
+
// ES imports: import X from 'path'
|
|
598
|
+
const esImportRegex = /import\s+(?:[\w{},\s*]+\s+from\s+)?['"]([^'"]+)['"]/g;
|
|
599
|
+
let match;
|
|
600
|
+
while ((match = esImportRegex.exec(content)) !== null) {
|
|
601
|
+
const importPath = match[1];
|
|
602
|
+
if (importPath)
|
|
603
|
+
imports.push(importPath);
|
|
604
|
+
}
|
|
605
|
+
// CommonJS requires: require('path')
|
|
606
|
+
const cjsRequireRegex = /require\s*\(\s*['"]([^'"]+)['"]\s*\)/g;
|
|
607
|
+
while ((match = cjsRequireRegex.exec(content)) !== null) {
|
|
608
|
+
const importPath = match[1];
|
|
609
|
+
if (importPath)
|
|
610
|
+
imports.push(importPath);
|
|
611
|
+
}
|
|
612
|
+
// Dynamic imports: import('path')
|
|
613
|
+
const dynamicImportRegex = /import\s*\(\s*['"]([^'"]+)['"]\s*\)/g;
|
|
614
|
+
while ((match = dynamicImportRegex.exec(content)) !== null) {
|
|
615
|
+
const importPath = match[1];
|
|
616
|
+
if (importPath)
|
|
617
|
+
imports.push(importPath);
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
// Python imports
|
|
621
|
+
if (['.py'].includes(ext)) {
|
|
622
|
+
// from X import Y
|
|
623
|
+
const fromImportRegex = /from\s+([\w.]+)\s+import/g;
|
|
624
|
+
let match;
|
|
625
|
+
while ((match = fromImportRegex.exec(content)) !== null) {
|
|
626
|
+
const importPath = match[1];
|
|
627
|
+
if (importPath)
|
|
628
|
+
imports.push(importPath);
|
|
629
|
+
}
|
|
630
|
+
// import X
|
|
631
|
+
const importRegex = /^import\s+([\w.]+)/gm;
|
|
632
|
+
while ((match = importRegex.exec(content)) !== null) {
|
|
633
|
+
const importPath = match[1];
|
|
634
|
+
if (importPath)
|
|
635
|
+
imports.push(importPath);
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
return imports;
|
|
639
|
+
}
|
|
640
|
+
/**
|
|
641
|
+
* Resolve an import path to an absolute file path
|
|
642
|
+
*/
|
|
643
|
+
resolveImportPath(importPath, fromFile) {
|
|
644
|
+
// Skip node_modules and external packages
|
|
645
|
+
if (!importPath.startsWith('.') && !importPath.startsWith('/')) {
|
|
646
|
+
return null;
|
|
647
|
+
}
|
|
648
|
+
const dir = path.dirname(fromFile);
|
|
649
|
+
const resolved = path.resolve(dir, importPath);
|
|
650
|
+
// Check if import already has an extension
|
|
651
|
+
const importExt = path.extname(importPath);
|
|
652
|
+
if (importExt) {
|
|
653
|
+
return resolved;
|
|
654
|
+
}
|
|
655
|
+
// If no extension in import, add .ts as default for TypeScript projects
|
|
656
|
+
return resolved + '.ts';
|
|
657
|
+
}
|
|
658
|
+
/**
|
|
659
|
+
* Calculate dependency depths using BFS
|
|
660
|
+
*/
|
|
661
|
+
calculateDependencyDepths(graph) {
|
|
662
|
+
// Find root nodes (files with no imports)
|
|
663
|
+
const roots = Array.from(graph.values()).filter((n) => n.imports.length === 0);
|
|
664
|
+
// BFS from roots
|
|
665
|
+
const visited = new Set();
|
|
666
|
+
const queue = roots.map((r) => ({ path: r.path, depth: 0 }));
|
|
667
|
+
while (queue.length > 0) {
|
|
668
|
+
const { path: currentPath, depth } = queue.shift();
|
|
669
|
+
if (visited.has(currentPath))
|
|
670
|
+
continue;
|
|
671
|
+
visited.add(currentPath);
|
|
672
|
+
const node = graph.get(currentPath);
|
|
673
|
+
if (node) {
|
|
674
|
+
node.depth = Math.max(node.depth, depth);
|
|
675
|
+
// Add files that import this file to queue
|
|
676
|
+
for (const dependentPath of node.importedBy) {
|
|
677
|
+
if (!visited.has(dependentPath)) {
|
|
678
|
+
queue.push({ path: dependentPath, depth: depth + 1 });
|
|
679
|
+
}
|
|
680
|
+
}
|
|
681
|
+
}
|
|
682
|
+
}
|
|
683
|
+
}
|
|
179
684
|
/**
|
|
180
685
|
* Load .gitignore file from directory and its parents
|
|
181
686
|
* Returns an ignore instance with all applicable patterns
|
|
@@ -187,7 +692,6 @@ export class ReviewService {
|
|
|
187
692
|
// Walk up directory tree to find .gitignore files
|
|
188
693
|
let currentDir = dir;
|
|
189
694
|
const gitignoreFiles = [];
|
|
190
|
-
// eslint-disable-next-line no-constant-condition
|
|
191
695
|
while (true) {
|
|
192
696
|
const gitignorePath = path.join(currentDir, '.gitignore');
|
|
193
697
|
try {
|
|
@@ -364,6 +868,48 @@ export class ReviewService {
|
|
|
364
868
|
}
|
|
365
869
|
}
|
|
366
870
|
}
|
|
871
|
+
/**
|
|
872
|
+
* Initialize partial result for recovery (Tier 3)
|
|
873
|
+
*/
|
|
874
|
+
initializePartialResult(requestId) {
|
|
875
|
+
partialResultsStore.set(requestId, {
|
|
876
|
+
requestId,
|
|
877
|
+
completedBatches: [],
|
|
878
|
+
failedBatches: [],
|
|
879
|
+
partialComments: [],
|
|
880
|
+
filesReviewed: [],
|
|
881
|
+
lastSuccessAt: new Date().toISOString(),
|
|
882
|
+
});
|
|
883
|
+
}
|
|
884
|
+
/**
|
|
885
|
+
* Update partial result after successful batch (Tier 3)
|
|
886
|
+
*/
|
|
887
|
+
updatePartialResultBatch(requestId, batchId, files) {
|
|
888
|
+
const partial = partialResultsStore.get(requestId);
|
|
889
|
+
if (partial) {
|
|
890
|
+
partial.completedBatches.push(batchId);
|
|
891
|
+
partial.filesReviewed.push(...files);
|
|
892
|
+
partial.lastSuccessAt = new Date().toISOString();
|
|
893
|
+
}
|
|
894
|
+
}
|
|
895
|
+
/**
|
|
896
|
+
* Record a failed batch (Tier 3)
|
|
897
|
+
*/
|
|
898
|
+
recordFailedBatch(requestId, batchId) {
|
|
899
|
+
const partial = partialResultsStore.get(requestId);
|
|
900
|
+
if (partial) {
|
|
901
|
+
partial.failedBatches.push(batchId);
|
|
902
|
+
}
|
|
903
|
+
}
|
|
904
|
+
/**
|
|
905
|
+
* Update partial result with error (Tier 3)
|
|
906
|
+
*/
|
|
907
|
+
updatePartialResultError(requestId, error) {
|
|
908
|
+
const partial = partialResultsStore.get(requestId);
|
|
909
|
+
if (partial) {
|
|
910
|
+
partial.error = error;
|
|
911
|
+
}
|
|
912
|
+
}
|
|
367
913
|
/**
|
|
368
914
|
* Create empty result for dry run
|
|
369
915
|
*/
|
|
@@ -422,4 +968,21 @@ export function getReviewCacheStats() {
|
|
|
422
968
|
ttlMs: CACHE_TTL_MS,
|
|
423
969
|
};
|
|
424
970
|
}
|
|
971
|
+
/**
|
|
972
|
+
* Clear partial results store (Tier 3)
|
|
973
|
+
* Useful for testing or cleanup
|
|
974
|
+
*/
|
|
975
|
+
export function clearPartialResults() {
|
|
976
|
+
partialResultsStore.clear();
|
|
977
|
+
}
|
|
978
|
+
/**
|
|
979
|
+
* Get all partial results (Tier 3)
|
|
980
|
+
* Useful for debugging or monitoring
|
|
981
|
+
*/
|
|
982
|
+
export function getPartialResultsStats() {
|
|
983
|
+
return {
|
|
984
|
+
count: partialResultsStore.size,
|
|
985
|
+
requestIds: Array.from(partialResultsStore.keys()),
|
|
986
|
+
};
|
|
987
|
+
}
|
|
425
988
|
//# sourceMappingURL=review-service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review-service.js","sourceRoot":"","sources":["../src/review-service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"review-service.js","sourceRoot":"","sources":["../src/review-service.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -88,4 +88,62 @@ export interface DryRunResult {
|
|
|
88
88
|
/** Estimated duration (rough) */
|
|
89
89
|
estimatedDurationMs: number;
|
|
90
90
|
}
|
|
91
|
+
/**
|
|
92
|
+
* File batch for smart batching by focus mode (Tier 2)
|
|
93
|
+
*/
|
|
94
|
+
export interface FileBatch {
|
|
95
|
+
/** Batch identifier */
|
|
96
|
+
batchId: string;
|
|
97
|
+
/** Files in this batch */
|
|
98
|
+
files: FileContent[];
|
|
99
|
+
/** Priority level (higher = more important for focus mode) */
|
|
100
|
+
priority: number;
|
|
101
|
+
/** File category for this batch */
|
|
102
|
+
category: 'security' | 'architecture' | 'performance' | 'data' | 'test' | 'general';
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Provider timeout configuration (Tier 2)
|
|
106
|
+
*/
|
|
107
|
+
export interface ProviderTimeoutConfig {
|
|
108
|
+
/** Provider ID */
|
|
109
|
+
providerId: string;
|
|
110
|
+
/** Base timeout in milliseconds */
|
|
111
|
+
baseTimeoutMs: number;
|
|
112
|
+
/** Timeout per file in milliseconds */
|
|
113
|
+
perFileTimeoutMs: number;
|
|
114
|
+
/** Maximum total timeout */
|
|
115
|
+
maxTimeoutMs: number;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Dependency graph node (Tier 3)
|
|
119
|
+
*/
|
|
120
|
+
export interface DependencyNode {
|
|
121
|
+
/** File path */
|
|
122
|
+
path: string;
|
|
123
|
+
/** Files this file imports from */
|
|
124
|
+
imports: string[];
|
|
125
|
+
/** Files that import this file */
|
|
126
|
+
importedBy: string[];
|
|
127
|
+
/** Depth in dependency tree (0 = no dependencies) */
|
|
128
|
+
depth: number;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Partial review result for recovery (Tier 3)
|
|
132
|
+
*/
|
|
133
|
+
export interface PartialReviewResult {
|
|
134
|
+
/** Request ID */
|
|
135
|
+
requestId: string;
|
|
136
|
+
/** Completed batches */
|
|
137
|
+
completedBatches: string[];
|
|
138
|
+
/** Failed batches */
|
|
139
|
+
failedBatches: string[];
|
|
140
|
+
/** Partial comments collected so far */
|
|
141
|
+
partialComments: ReviewComment[];
|
|
142
|
+
/** Files reviewed so far */
|
|
143
|
+
filesReviewed: string[];
|
|
144
|
+
/** Timestamp of last successful batch */
|
|
145
|
+
lastSuccessAt: string;
|
|
146
|
+
/** Error message if failed */
|
|
147
|
+
error?: string;
|
|
148
|
+
}
|
|
91
149
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,aAAa,EACb,WAAW,EACX,aAAa,EACb,WAAW,EACZ,MAAM,0BAA0B,CAAC;AAGlC,YAAY,EACV,aAAa,EACb,YAAY,EACZ,aAAa,EACb,WAAW,EACX,aAAa,EACb,WAAW,GACZ,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,KAAK,EAAE,WAAW,CAAC;IACnB,uCAAuC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sBAAsB;IACtB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,mCAAmC;IACnC,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,yBAAyB;IACzB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,qCAAqC;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,yBAAyB;IACzB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,8BAA8B;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sCAAsC;IACtC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,8BAA8B;IAC9B,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,OAAO,CACL,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GACA,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACtE;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,sBAAsB;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,mCAAmC;IACnC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,yCAAyC;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB;IACjB,KAAK,EAAE,WAAW,CAAC;IACnB,iCAAiC;IACjC,mBAAmB,EAAE,MAAM,CAAC;CAC7B"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@defai.digital/review-domain",
|
|
3
|
-
"version": "13.4.
|
|
3
|
+
"version": "13.4.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Review domain for AutomatosX - AI-powered code review with focused analysis modes",
|
|
6
6
|
"license": "BUSL-1.1",
|
|
@@ -35,8 +35,8 @@
|
|
|
35
35
|
"ignore": "^6.0.2",
|
|
36
36
|
"p-limit": "^6.1.0",
|
|
37
37
|
"uuid": "^11.0.5",
|
|
38
|
-
"@defai.digital/analysis-domain": "13.4.
|
|
39
|
-
"@defai.digital/contracts": "13.4.
|
|
38
|
+
"@defai.digital/analysis-domain": "13.4.2",
|
|
39
|
+
"@defai.digital/contracts": "13.4.2"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
42
|
"@types/uuid": "^10.0.0"
|