@defai.digital/review-domain 13.3.1 → 13.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -9,5 +9,5 @@ export { FOCUS_MODE_PROMPTS, getFocusModePrompt, RESPONSE_FORMAT_INSTRUCTIONS, b
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 } from './review-service.js';
12
+ export { ReviewService, ReviewError, createReviewService, clearReviewCache, getReviewCacheStats, } 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,EAAE,aAAa,EAAE,WAAW,EAAE,mBAAmB,EAAE,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,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"}
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 } from './review-service.js';
15
+ export { ReviewService, ReviewError, createReviewService, clearReviewCache, getReviewCacheStats, } 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,EAAE,aAAa,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC"}
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"}
@@ -5,6 +5,12 @@
5
5
  * Implements:
6
6
  * - INV-REV-OPS-001: Timeout Handling
7
7
  * - INV-REV-OPS-002: Provider Fallback
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
8
14
  */
9
15
  import { type ReviewRequest, type ReviewResult } from '@defai.digital/contracts';
10
16
  import type { ReviewServiceConfig, ReviewPromptExecutor, ReviewExecutionOptions, DryRunResult } from './types.js';
@@ -33,22 +39,48 @@ export declare class ReviewService {
33
39
  */
34
40
  getCompactSummary(result: ReviewResult): string;
35
41
  /**
36
- * Collect files from paths
42
+ * Collect files from paths with async I/O and .gitignore filtering
43
+ * Performance: Uses p-limit for controlled concurrency
37
44
  */
38
45
  private collectFiles;
39
46
  /**
40
- * Recursively collect files from directory
47
+ * Load .gitignore file from directory and its parents
48
+ * Returns an ignore instance with all applicable patterns
49
+ */
50
+ private loadGitignore;
51
+ /**
52
+ * Recursively collect file paths from directory (no file reading yet)
53
+ * Uses .gitignore filtering to skip ignored paths early
41
54
  */
42
- private collectFromDirectory;
55
+ private collectPathsFromDirectory;
43
56
  /**
44
- * Read a single file
57
+ * Read a single file asynchronously
45
58
  */
46
- private readFile;
59
+ private readFileAsync;
47
60
  /**
48
- * Execute prompt with timeout
61
+ * Execute prompt with timeout and content-hash caching
49
62
  * INV-REV-OPS-001: Timeout Handling
63
+ * Performance: Caches responses by prompt hash to avoid repeated LLM calls
50
64
  */
51
65
  private executeWithTimeout;
66
+ /**
67
+ * Generate a cache key from prompt content and provider
68
+ * Uses SHA-256 hash for deterministic, collision-resistant keys
69
+ */
70
+ private generateCacheKey;
71
+ /**
72
+ * Get cached response if valid (not expired)
73
+ */
74
+ private getCachedResponse;
75
+ /**
76
+ * Cache a response with timestamp
77
+ * Also performs cleanup of old entries
78
+ */
79
+ private cacheResponse;
80
+ /**
81
+ * Remove expired cache entries
82
+ */
83
+ private cleanupExpiredCache;
52
84
  /**
53
85
  * Create empty result for dry run
54
86
  */
@@ -65,4 +97,17 @@ export declare class ReviewError extends Error {
65
97
  * Create a review service instance
66
98
  */
67
99
  export declare function createReviewService(config?: ReviewServiceConfig, promptExecutor?: ReviewPromptExecutor): ReviewService;
100
+ /**
101
+ * Clear the LLM response cache
102
+ * Useful for testing or when cache should be invalidated
103
+ */
104
+ export declare function clearReviewCache(): void;
105
+ /**
106
+ * Get cache statistics
107
+ * Returns the current cache size and hit/miss info
108
+ */
109
+ export declare function getReviewCacheStats(): {
110
+ size: number;
111
+ ttlMs: number;
112
+ };
68
113
  //# 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;;;;;;;GAOG;AAKH,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;AAWpB;;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;;OAEG;YACW,YAAY;IAqC1B;;OAEG;YACW,oBAAoB;IAmClC;;OAEG;IACH,OAAO,CAAC,QAAQ;IAoBhB;;;OAGG;YACW,kBAAkB;IAyChC;;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"}
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"}
@@ -5,15 +5,38 @@
5
5
  * Implements:
6
6
  * - INV-REV-OPS-001: Timeout Handling
7
7
  * - INV-REV-OPS-002: Provider Fallback
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
8
14
  */
9
15
  import { v4 as uuidv4 } from 'uuid';
10
- import * as fs from 'node:fs';
16
+ import * as fs from 'node:fs/promises';
11
17
  import * as path from 'node:path';
18
+ import * as crypto from 'node:crypto';
19
+ import { createRequire } from 'node:module';
20
+ import pLimit from 'p-limit';
12
21
  import { createReviewSummary, sortCommentsBySeverity, ReviewErrorCode, TIMEOUT_PROVIDER_DEFAULT, CODE_EXTENSIONS, IGNORE_DIRECTORIES, } from '@defai.digital/contracts';
13
22
  import { buildReviewPrompt } from './focus-modes.js';
14
23
  import { parseReviewResponse, filterCommentsByConfidence } from './comment-builder.js';
15
24
  import { formatReviewAsMarkdown, formatCompactSummary } from './markdown-formatter.js';
16
25
  import { formatReviewAsSarif, formatSarifAsJson } from './sarif-formatter.js';
26
+ // Use createRequire for CJS package interop with the 'ignore' package
27
+ const require = createRequire(import.meta.url);
28
+ const ignore = require('ignore');
29
+ /**
30
+ * Concurrency limit for file I/O operations
31
+ * Balances throughput with system resource usage
32
+ */
33
+ const FILE_IO_CONCURRENCY = 15;
34
+ /**
35
+ * In-memory cache for LLM responses, keyed by content hash
36
+ * Cache entries expire after 1 hour
37
+ */
38
+ const responseCache = new Map();
39
+ const CACHE_TTL_MS = 60 * 60 * 1000; // 1 hour
17
40
  /**
18
41
  * Default configuration
19
42
  */
@@ -118,28 +141,27 @@ export class ReviewService {
118
141
  return formatCompactSummary(result);
119
142
  }
120
143
  /**
121
- * Collect files from paths
144
+ * Collect files from paths with async I/O and .gitignore filtering
145
+ * Performance: Uses p-limit for controlled concurrency
122
146
  */
123
147
  async collectFiles(paths, maxFiles, maxLinesPerFile) {
124
- const files = [];
125
148
  const seen = new Set();
149
+ const filePaths = [];
150
+ // First pass: collect all file paths (fast, low I/O)
126
151
  for (const p of paths) {
127
- if (files.length >= maxFiles)
128
- break;
129
152
  const resolved = path.resolve(p);
130
153
  try {
131
- const stat = fs.statSync(resolved);
154
+ const stat = await fs.stat(resolved);
132
155
  if (stat.isDirectory()) {
133
- // Recursively collect files from directory
134
- await this.collectFromDirectory(resolved, files, seen, maxFiles, maxLinesPerFile);
156
+ // Load .gitignore filter for this directory
157
+ const ig = await this.loadGitignore(resolved);
158
+ // Recursively collect file paths from directory
159
+ await this.collectPathsFromDirectory(resolved, resolved, filePaths, seen, maxFiles, ig);
135
160
  }
136
161
  else if (stat.isFile()) {
137
- if (!seen.has(resolved)) {
138
- const file = this.readFile(resolved, maxLinesPerFile);
139
- if (file) {
140
- files.push(file);
141
- seen.add(resolved);
142
- }
162
+ if (!seen.has(resolved) && filePaths.length < maxFiles) {
163
+ filePaths.push(resolved);
164
+ seen.add(resolved);
143
165
  }
144
166
  }
145
167
  }
@@ -148,31 +170,78 @@ export class ReviewService {
148
170
  continue;
149
171
  }
150
172
  }
151
- return files;
173
+ // Second pass: read files concurrently with p-limit
174
+ const limit = pLimit(FILE_IO_CONCURRENCY);
175
+ const readPromises = filePaths.slice(0, maxFiles).map((filePath) => limit(() => this.readFileAsync(filePath, maxLinesPerFile)));
176
+ const results = await Promise.all(readPromises);
177
+ return results.filter((f) => f !== null);
152
178
  }
153
179
  /**
154
- * Recursively collect files from directory
180
+ * Load .gitignore file from directory and its parents
181
+ * Returns an ignore instance with all applicable patterns
155
182
  */
156
- async collectFromDirectory(dir, files, seen, maxFiles, maxLinesPerFile) {
183
+ async loadGitignore(dir) {
184
+ const ig = ignore();
185
+ // Always ignore common directories (built-in patterns)
186
+ ig.add(IGNORE_DIRECTORIES.map((d) => `${d}/`));
187
+ // Walk up directory tree to find .gitignore files
188
+ let currentDir = dir;
189
+ const gitignoreFiles = [];
190
+ // eslint-disable-next-line no-constant-condition
191
+ while (true) {
192
+ const gitignorePath = path.join(currentDir, '.gitignore');
193
+ try {
194
+ await fs.access(gitignorePath);
195
+ gitignoreFiles.unshift(gitignorePath); // Parent patterns first
196
+ }
197
+ catch {
198
+ // No .gitignore in this directory
199
+ }
200
+ const parentDir = path.dirname(currentDir);
201
+ if (parentDir === currentDir)
202
+ break; // Reached root
203
+ currentDir = parentDir;
204
+ }
205
+ // Load all .gitignore files (parent patterns applied first)
206
+ for (const gitignorePath of gitignoreFiles) {
207
+ try {
208
+ const content = await fs.readFile(gitignorePath, 'utf-8');
209
+ ig.add(content);
210
+ }
211
+ catch {
212
+ // Skip unreadable .gitignore
213
+ }
214
+ }
215
+ return ig;
216
+ }
217
+ /**
218
+ * Recursively collect file paths from directory (no file reading yet)
219
+ * Uses .gitignore filtering to skip ignored paths early
220
+ */
221
+ async collectPathsFromDirectory(baseDir, dir, filePaths, seen, maxFiles, ig) {
222
+ if (filePaths.length >= maxFiles)
223
+ return;
157
224
  try {
158
- const entries = fs.readdirSync(dir, { withFileTypes: true });
225
+ const entries = await fs.readdir(dir, { withFileTypes: true });
159
226
  for (const entry of entries) {
160
- if (files.length >= maxFiles)
227
+ if (filePaths.length >= maxFiles)
161
228
  return;
162
229
  const fullPath = path.join(dir, entry.name);
230
+ const relativePath = path.relative(baseDir, fullPath);
231
+ // Check gitignore (use relative path for pattern matching)
232
+ if (ig.ignores(relativePath))
233
+ continue;
163
234
  if (entry.isDirectory()) {
235
+ // Skip hardcoded ignore directories as well (redundant but fast check)
164
236
  if (!IGNORE_DIRECTORIES.includes(entry.name)) {
165
- await this.collectFromDirectory(fullPath, files, seen, maxFiles, maxLinesPerFile);
237
+ await this.collectPathsFromDirectory(baseDir, fullPath, filePaths, seen, maxFiles, ig);
166
238
  }
167
239
  }
168
240
  else if (entry.isFile()) {
169
241
  const ext = path.extname(entry.name);
170
242
  if (CODE_EXTENSIONS.includes(ext) && !seen.has(fullPath)) {
171
- const file = this.readFile(fullPath, maxLinesPerFile);
172
- if (file) {
173
- files.push(file);
174
- seen.add(fullPath);
175
- }
243
+ filePaths.push(fullPath);
244
+ seen.add(fullPath);
176
245
  }
177
246
  }
178
247
  }
@@ -182,11 +251,11 @@ export class ReviewService {
182
251
  }
183
252
  }
184
253
  /**
185
- * Read a single file
254
+ * Read a single file asynchronously
186
255
  */
187
- readFile(filePath, maxLines) {
256
+ async readFileAsync(filePath, maxLines) {
188
257
  try {
189
- const content = fs.readFileSync(filePath, 'utf-8');
258
+ const content = await fs.readFile(filePath, 'utf-8');
190
259
  const lines = content.split('\n');
191
260
  const lineCount = lines.length;
192
261
  // Truncate if too many lines
@@ -202,13 +271,21 @@ export class ReviewService {
202
271
  }
203
272
  }
204
273
  /**
205
- * Execute prompt with timeout
274
+ * Execute prompt with timeout and content-hash caching
206
275
  * INV-REV-OPS-001: Timeout Handling
276
+ * Performance: Caches responses by prompt hash to avoid repeated LLM calls
207
277
  */
208
278
  async executeWithTimeout(prompt, providerId, timeoutMs) {
209
279
  if (!this.promptExecutor) {
210
280
  throw new ReviewError(ReviewErrorCode.PROVIDER_UNAVAILABLE, 'No prompt executor configured');
211
281
  }
282
+ // Generate cache key from prompt hash + provider
283
+ const cacheKey = this.generateCacheKey(prompt, providerId);
284
+ // Check cache first
285
+ const cached = this.getCachedResponse(cacheKey);
286
+ if (cached) {
287
+ return cached;
288
+ }
212
289
  // Create cancellable timeout to prevent timer leaks
213
290
  let timeoutId;
214
291
  const timeoutPromise = new Promise((_, reject) => {
@@ -225,6 +302,8 @@ export class ReviewService {
225
302
  if (timeoutId !== undefined) {
226
303
  clearTimeout(timeoutId);
227
304
  }
305
+ // Cache successful response
306
+ this.cacheResponse(cacheKey, result);
228
307
  return result;
229
308
  }
230
309
  catch (error) {
@@ -235,6 +314,56 @@ export class ReviewService {
235
314
  throw error;
236
315
  }
237
316
  }
317
+ /**
318
+ * Generate a cache key from prompt content and provider
319
+ * Uses SHA-256 hash for deterministic, collision-resistant keys
320
+ */
321
+ generateCacheKey(prompt, providerId) {
322
+ const hash = crypto.createHash('sha256');
323
+ hash.update(prompt);
324
+ hash.update(providerId);
325
+ return hash.digest('hex');
326
+ }
327
+ /**
328
+ * Get cached response if valid (not expired)
329
+ */
330
+ getCachedResponse(cacheKey) {
331
+ const entry = responseCache.get(cacheKey);
332
+ if (!entry)
333
+ return undefined;
334
+ // Check if expired
335
+ const now = Date.now();
336
+ if (now - entry.timestamp > CACHE_TTL_MS) {
337
+ responseCache.delete(cacheKey);
338
+ return undefined;
339
+ }
340
+ return entry.response;
341
+ }
342
+ /**
343
+ * Cache a response with timestamp
344
+ * Also performs cleanup of old entries
345
+ */
346
+ cacheResponse(cacheKey, response) {
347
+ const now = Date.now();
348
+ // Clean up old entries periodically (every 100 cache writes)
349
+ if (responseCache.size > 0 && responseCache.size % 100 === 0) {
350
+ this.cleanupExpiredCache(now);
351
+ }
352
+ responseCache.set(cacheKey, {
353
+ response,
354
+ timestamp: now,
355
+ });
356
+ }
357
+ /**
358
+ * Remove expired cache entries
359
+ */
360
+ cleanupExpiredCache(now) {
361
+ for (const [key, entry] of responseCache) {
362
+ if (now - entry.timestamp > CACHE_TTL_MS) {
363
+ responseCache.delete(key);
364
+ }
365
+ }
366
+ }
238
367
  /**
239
368
  * Create empty result for dry run
240
369
  */
@@ -276,4 +405,21 @@ export class ReviewError extends Error {
276
405
  export function createReviewService(config, promptExecutor) {
277
406
  return new ReviewService(config, promptExecutor);
278
407
  }
408
+ /**
409
+ * Clear the LLM response cache
410
+ * Useful for testing or when cache should be invalidated
411
+ */
412
+ export function clearReviewCache() {
413
+ responseCache.clear();
414
+ }
415
+ /**
416
+ * Get cache statistics
417
+ * Returns the current cache size and hit/miss info
418
+ */
419
+ export function getReviewCacheStats() {
420
+ return {
421
+ size: responseCache.size,
422
+ ttlMs: CACHE_TTL_MS,
423
+ };
424
+ }
279
425
  //# 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":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,MAAM,MAAM,SAAS,CAAC;AAC7B,OAAO,EAGL,mBAAmB,EACnB,sBAAsB,EACtB,eAAe,EACf,wBAAwB,EACxB,eAAe,EACf,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AACvF,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACvF,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAS9E,sEAAsE;AACtE,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,MAAM,GAAyB,OAAO,CAAC,QAAQ,CAAC,CAAC;AASvD;;;GAGG;AACH,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAU/B;;;GAGG;AACH,MAAM,aAAa,GAAG,IAAI,GAAG,EAAsB,CAAC;AACpD,MAAM,YAAY,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,SAAS;AAE9C;;GAEG;AACH,MAAM,cAAc,GAAkC;IACpD,eAAe,EAAE,QAAQ;IACzB,gBAAgB,EAAE,wBAAwB;IAC1C,qBAAqB,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC;CACrD,CAAC;AAEF;;GAEG;AACH,MAAM,OAAO,aAAa;IACP,MAAM,CAAgC;IACtC,cAAc,CAAmC;IAElE,YAAY,MAA4B,EAAE,cAAqC;QAC7E,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM,EAAE,CAAC;QAC/C,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM,CACV,OAAsB,EACtB,OAAgC;QAEhC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC;QAC1B,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC;QAEpE,iBAAiB;QACjB,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC1C,OAAO,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QACtE,CAAC;QAED,0BAA0B;QAC1B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;QAEhG,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,WAAW,CAAC,eAAe,CAAC,cAAc,EAAE,0BAA0B,CAAC,CAAC;QACpF,CAAC;QAED,eAAe;QACf,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAExE,uBAAuB;QACvB,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,IAAI,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;QAC5F,IAAI,QAAkE,CAAC;QAEvE,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;QAC1E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBAChE,MAAM,IAAI,WAAW,CAAC,eAAe,CAAC,OAAO,EAAE,0BAA0B,SAAS,IAAI,CAAC,CAAC;YAC1F,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;QAED,iBAAiB;QACjB,MAAM,MAAM,GAAG,mBAAmB,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;QAE3F,qCAAqC;QACrC,MAAM,gBAAgB,GAAG,0BAA0B,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;QAE5F,qCAAqC;QACrC,MAAM,cAAc,GAAG,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;QAEhE,gBAAgB;QAChB,MAAM,OAAO,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC;QAEpD,MAAM,MAAM,GAAiB;YAC3B,QAAQ;YACR,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,MAAM,EAAE;YACxC,QAAQ,EAAE,cAAc;YACxB,OAAO;YACP,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACvC,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;YAC7D,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;YAClC,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACtC,CAAC;QAEF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,OAAsB;QACjC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;QAEhG,OAAO;YACL,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAC/B,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;YAC1D,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,mBAAmB,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,EAAE,8BAA8B;SACzE,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,MAAoB,EAAE,MAAqC;QACtE,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,UAAU;gBACb,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAC;YACxC,KAAK,OAAO;gBACV,OAAO,iBAAiB,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC;YACxD,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,MAAoB;QACpC,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,YAAY,CACxB,KAAe,EACf,QAAgB,EAChB,eAAuB;QAEvB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,MAAM,SAAS,GAAa,EAAE,CAAC;QAE/B,qDAAqD;QACrD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAEjC,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAErC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;oBACvB,4CAA4C;oBAC5C,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;oBAC9C,gDAAgD;oBAChD,MAAM,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;gBAC1F,CAAC;qBAAM,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;oBACzB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;wBACvD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;wBACzB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;oBACrB,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,sCAAsC;gBACtC,SAAS;YACX,CAAC;QACH,CAAC;QAED,oDAAoD;QACpD,MAAM,KAAK,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAC1C,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CACjE,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,CAC3D,CAAC;QAEF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAChD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAoB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IAC7D,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,aAAa,CAAC,GAAW;QACrC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;QAEpB,uDAAuD;QACvD,EAAE,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAE/C,kDAAkD;QAClD,IAAI,UAAU,GAAG,GAAG,CAAC;QACrB,MAAM,cAAc,GAAa,EAAE,CAAC;QAEpC,iDAAiD;QACjD,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;YAC1D,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;gBAC/B,cAAc,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,wBAAwB;YACjE,CAAC;YAAC,MAAM,CAAC;gBACP,kCAAkC;YACpC,CAAC;YAED,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAC3C,IAAI,SAAS,KAAK,UAAU;gBAAE,MAAM,CAAC,eAAe;YACpD,UAAU,GAAG,SAAS,CAAC;QACzB,CAAC;QAED,4DAA4D;QAC5D,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;YAC3C,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;gBAC1D,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAClB,CAAC;YAAC,MAAM,CAAC;gBACP,6BAA6B;YAC/B,CAAC;QACH,CAAC;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,yBAAyB,CACrC,OAAe,EACf,GAAW,EACX,SAAmB,EACnB,IAAiB,EACjB,QAAgB,EAChB,EAAkB;QAElB,IAAI,SAAS,CAAC,MAAM,IAAI,QAAQ;YAAE,OAAO;QAEzC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YAE/D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,SAAS,CAAC,MAAM,IAAI,QAAQ;oBAAE,OAAO;gBAEzC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;gBAEtD,2DAA2D;gBAC3D,IAAI,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC;oBAAE,SAAS;gBAEvC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;oBACxB,uEAAuE;oBACvE,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAyC,CAAC,EAAE,CAAC;wBAClF,MAAM,IAAI,CAAC,yBAAyB,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;oBACzF,CAAC;gBACH,CAAC;qBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;oBAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACrC,IAAI,eAAe,CAAC,QAAQ,CAAC,GAAqC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;wBAC3F,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;wBACzB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;oBACrB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,gCAAgC;QAClC,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,aAAa,CAAC,QAAgB,EAAE,QAAgB;QAC5D,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACrD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;YAE/B,6BAA6B;YAC7B,MAAM,gBAAgB,GACpB,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,OAAO,CAAC;YAE9F,OAAO;gBACL,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,gBAAgB;gBACzB,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC;aACzC,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,kBAAkB,CAC9B,MAAc,EACd,UAAkB,EAClB,SAAiB;QAEjB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,MAAM,IAAI,WAAW,CACnB,eAAe,CAAC,oBAAoB,EACpC,+BAA+B,CAChC,CAAC;QACJ,CAAC;QAED,iDAAiD;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAE3D,oBAAoB;QACpB,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,oDAAoD;QACpD,IAAI,SAAoD,CAAC;QACzD,MAAM,cAAc,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;YACtD,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC1B,MAAM,CAAC,IAAI,KAAK,CAAC,wBAAwB,SAAS,IAAI,CAAC,CAAC,CAAC;YAC3D,CAAC,EAAE,SAAS,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;gBAChC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;gBAC9D,cAAc;aACf,CAAC,CAAC;YAEH,mBAAmB;YACnB,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC5B,YAAY,CAAC,SAAS,CAAC,CAAC;YAC1B,CAAC;YAED,4BAA4B;YAC5B,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAErC,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,gCAAgC;YAChC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC5B,YAAY,CAAC,SAAS,CAAC,CAAC;YAC1B,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,gBAAgB,CAAC,MAAc,EAAE,UAAkB;QACzD,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACpB,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,QAAgB;QACxC,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QAE7B,mBAAmB;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,GAAG,GAAG,KAAK,CAAC,SAAS,GAAG,YAAY,EAAE,CAAC;YACzC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC/B,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,KAAK,CAAC,QAAQ,CAAC;IACxB,CAAC;IAED;;;OAGG;IACK,aAAa,CAAC,QAAgB,EAAE,QAAkE;QACxG,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,6DAA6D;QAC7D,IAAI,aAAa,CAAC,IAAI,GAAG,CAAC,IAAI,aAAa,CAAC,IAAI,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC;YAC7D,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;QAChC,CAAC;QAED,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE;YAC1B,QAAQ;YACR,SAAS,EAAE,GAAG;SACf,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,GAAW;QACrC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,aAAa,EAAE,CAAC;YACzC,IAAI,GAAG,GAAG,KAAK,CAAC,SAAS,GAAG,YAAY,EAAE,CAAC;gBACzC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,iBAAiB,CACvB,OAAsB,EACtB,QAAgB,EAChB,MAAoB,EACpB,SAAiB;QAEjB,OAAO;YACL,QAAQ;YACR,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,MAAM,EAAE;YACxC,QAAQ,EAAE,EAAE;YACZ,OAAO,EAAE;gBACP,UAAU,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;gBAC/D,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,EAAE;gBACZ,WAAW,EAAE,GAAG;gBAChB,OAAO,EAAE,0BAA0B,MAAM,CAAC,KAAK,CAAC,MAAM,WAAW,MAAM,CAAC,UAAU,QAAQ;aAC3F;YACD,aAAa,EAAE,MAAM,CAAC,KAAK;YAC3B,aAAa,EAAE,MAAM,CAAC,UAAU;YAChC,UAAU,EAAE,SAAS;YACrB,OAAO,EAAE,SAAS;YAClB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;YAClC,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACtC,CAAC;IACJ,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,WAAY,SAAQ,KAAK;IAC3B,IAAI,CAAS;IAEtB,YAAY,IAAY,EAAE,OAAe;QACvC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAA4B,EAC5B,cAAqC;IAErC,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AACnD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB;IAC9B,aAAa,CAAC,KAAK,EAAE,CAAC;AACxB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO;QACL,IAAI,EAAE,aAAa,CAAC,IAAI;QACxB,KAAK,EAAE,YAAY;KACpB,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@defai.digital/review-domain",
3
- "version": "13.3.1",
3
+ "version": "13.4.0",
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",
@@ -32,9 +32,11 @@
32
32
  "access": "public"
33
33
  },
34
34
  "dependencies": {
35
+ "ignore": "^6.0.2",
36
+ "p-limit": "^6.1.0",
35
37
  "uuid": "^11.0.5",
36
- "@defai.digital/analysis-domain": "13.3.1",
37
- "@defai.digital/contracts": "13.3.1"
38
+ "@defai.digital/analysis-domain": "13.4.0",
39
+ "@defai.digital/contracts": "13.4.0"
38
40
  },
39
41
  "devDependencies": {
40
42
  "@types/uuid": "^10.0.0"