@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 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
@@ -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,GACb,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,GACpB,MAAM,qBAAqB,CAAC"}
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;AAuBH,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,GACpB,MAAM,qBAAqB,CAAC"}
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"}
@@ -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 (v13.4.0):
10
- * - Async file I/O with fs.promises
11
- * - Concurrent file reading with p-limit
12
- * - .gitignore-aware filtering
13
- * - Content-hash caching for LLM responses
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
- * Collect files from paths with async I/O and .gitignore filtering
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;;;;;;;;;;;;;GAaG;AAQH,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,YAAY,EAOlB,MAAM,0BAA0B,CAAC;AAKlC,OAAO,KAAK,EAEV,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,YAAY,EACb,MAAM,YAAY,CAAC;AA2CpB;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;IACvD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAmC;gBAEtD,MAAM,CAAC,EAAE,mBAAmB,EAAE,cAAc,CAAC,EAAE,oBAAoB;IAK/E;;;OAGG;IACG,MAAM,CACV,OAAO,EAAE,aAAa,EACtB,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,YAAY,CAAC;IA8DxB;;OAEG;IACG,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAW3D;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM;IAWjF;;OAEG;IACH,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM;IAI/C;;;OAGG;YACW,YAAY;IA0C1B;;;OAGG;YACW,aAAa;IAsC3B;;;OAGG;YACW,yBAAyB;IAwCvC;;OAEG;YACW,aAAa;IAoB3B;;;;OAIG;YACW,kBAAkB;IAqDhC;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAczB;;;OAGG;IACH,OAAO,CAAC,aAAa;IAcrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAQ3B;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAyB1B;AAED;;GAEG;AACH,qBAAa,WAAY,SAAQ,KAAK;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAK1C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,CAAC,EAAE,mBAAmB,EAC5B,cAAc,CAAC,EAAE,oBAAoB,GACpC,aAAa,CAEf;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAKrE"}
1
+ {"version":3,"file":"review-service.d.ts","sourceRoot":"","sources":["../src/review-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAUH,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,YAAY,EAQlB,MAAM,0BAA0B,CAAC;AAKlC,OAAO,KAAK,EAEV,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,YAAY,EAIZ,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAqJpB;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;IACvD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAmC;gBAEtD,MAAM,CAAC,EAAE,mBAAmB,EAAE,cAAc,CAAC,EAAE,oBAAoB;IAK/E;;;OAGG;IACG,MAAM,CACV,OAAO,EAAE,aAAa,EACtB,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,YAAY,CAAC;IAuGxB;;OAEG;IACG,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAgB3D;;OAEG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS;IAIpE;;OAEG;IACG,iBAAiB,CACrB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,aAAa,EACtB,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,YAAY,CAAC;IAgBxB;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM;IAWjF;;OAEG;IACH,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM;IAI/C;;;OAGG;YACW,wBAAwB;IA6DtC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAgD1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAaxB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAqB/B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAmBhC;;;OAGG;YACW,YAAY;IAmD1B;;OAEG;YACW,wBAAwB;IAmEtC;;;OAGG;YACW,mBAAmB;IAcjC;;OAEG;YACW,oBAAoB;IA0ClC;;OAEG;IACH,OAAO,CAAC,cAAc;IAkDtB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAmBzB;;OAEG;IACH,OAAO,CAAC,yBAAyB;IA2BjC;;;OAGG;YACW,aAAa;IAqC3B;;;OAGG;YACW,yBAAyB;IAwCvC;;OAEG;YACW,aAAa;IAoB3B;;;;OAIG;YACW,kBAAkB;IAqDhC;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAczB;;;OAGG;IACH,OAAO,CAAC,aAAa;IAcrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAQ3B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAW/B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAShC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAOzB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAOhC;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAyB1B;AAED;;GAEG;AACH,qBAAa,WAAY,SAAQ,KAAK;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAK1C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,CAAC,EAAE,mBAAmB,EAC5B,cAAc,CAAC,EAAE,oBAAoB,GACpC,aAAa,CAEf;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAKrE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAKhF"}
@@ -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 (v13.4.0):
10
- * - Async file I/O with fs.promises
11
- * - Concurrent file reading with p-limit
12
- * - .gitignore-aware filtering
13
- * - Content-hash caching for LLM responses
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 timeoutMs = request.timeoutMs ?? this.config.defaultTimeoutMs;
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
- // Collect files to review
72
- const files = await this.collectFiles(request.paths, request.maxFiles, request.maxLinesPerFile);
73
- if (files.length === 0) {
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
- response = await this.executeWithTimeout(prompt, providerId, timeoutMs);
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 after ${timeoutMs}ms`);
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
- * Collect files from paths with async I/O and .gitignore filtering
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 = filePaths.slice(0, maxFiles).map((filePath) => limit(() => this.readFileAsync(filePath, maxLinesPerFile)));
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
@@ -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.0",
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.0",
39
- "@defai.digital/contracts": "13.4.0"
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"