kodevu 0.1.9 → 0.1.10
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/package.json +1 -1
- package/src/config.js +10 -3
- package/src/review-runner.js +32 -8
package/package.json
CHANGED
package/src/config.js
CHANGED
|
@@ -39,7 +39,7 @@ function resolveConfigPath(baseDir, value) {
|
|
|
39
39
|
return path.isAbsolute(value) ? value : path.resolve(baseDir, value);
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
async function
|
|
42
|
+
async function resolveAutoReviewers(debug, loadedConfigPath) {
|
|
43
43
|
const availableReviewers = [];
|
|
44
44
|
|
|
45
45
|
for (const reviewerName of SUPPORTED_REVIEWERS) {
|
|
@@ -57,7 +57,12 @@ async function resolveAutoReviewer(debug, loadedConfigPath) {
|
|
|
57
57
|
);
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
-
|
|
60
|
+
for (let i = availableReviewers.length - 1; i > 0; i--) {
|
|
61
|
+
const j = Math.floor(Math.random() * (i + 1));
|
|
62
|
+
[availableReviewers[i], availableReviewers[j]] = [availableReviewers[j], availableReviewers[i]];
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return availableReviewers;
|
|
61
66
|
}
|
|
62
67
|
|
|
63
68
|
export function parseCliArgs(argv) {
|
|
@@ -177,9 +182,11 @@ export async function loadConfig(configPath, cliArgs = {}) {
|
|
|
177
182
|
config.reviewer = String(config.reviewer || "auto").toLowerCase();
|
|
178
183
|
|
|
179
184
|
if (config.reviewer === "auto") {
|
|
180
|
-
const
|
|
185
|
+
const availableReviewers = await resolveAutoReviewers(config.debug, loadedConfigPath);
|
|
186
|
+
const selectedReviewer = availableReviewers[0];
|
|
181
187
|
config.reviewer = selectedReviewer.reviewerName;
|
|
182
188
|
config.reviewerCommandPath = selectedReviewer.commandPath;
|
|
189
|
+
config.fallbackReviewers = availableReviewers.map(r => r.reviewerName).slice(1);
|
|
183
190
|
config.reviewerWasAutoSelected = true;
|
|
184
191
|
} else if (!SUPPORTED_REVIEWERS.includes(config.reviewer)) {
|
|
185
192
|
throw new Error(
|
package/src/review-runner.js
CHANGED
|
@@ -402,14 +402,38 @@ async function reviewChange(config, backend, targetInfo, changeId) {
|
|
|
402
402
|
}
|
|
403
403
|
|
|
404
404
|
const diffText = await backend.getChangeDiff(config, targetInfo, changeId);
|
|
405
|
-
const
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
405
|
+
const reviewersToTry = [config.reviewer, ...(config.fallbackReviewers || [])];
|
|
406
|
+
|
|
407
|
+
let reviewer;
|
|
408
|
+
let diffPayloads;
|
|
409
|
+
let reviewerResult;
|
|
410
|
+
let currentReviewerConfig;
|
|
411
|
+
|
|
412
|
+
for (const reviewerName of reviewersToTry) {
|
|
413
|
+
currentReviewerConfig = { ...config, reviewer: reviewerName };
|
|
414
|
+
debugLog(config, `Trying reviewer: ${reviewerName}`);
|
|
415
|
+
|
|
416
|
+
const res = await runReviewerPrompt(
|
|
417
|
+
currentReviewerConfig,
|
|
418
|
+
backend,
|
|
419
|
+
targetInfo,
|
|
420
|
+
details,
|
|
421
|
+
diffText
|
|
422
|
+
);
|
|
423
|
+
reviewer = res.reviewer;
|
|
424
|
+
diffPayloads = res.diffPayloads;
|
|
425
|
+
reviewerResult = res.result;
|
|
426
|
+
|
|
427
|
+
if (reviewerResult.code === 0 && !reviewerResult.timedOut) {
|
|
428
|
+
break;
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
if (reviewerName !== reviewersToTry[reviewersToTry.length - 1]) {
|
|
432
|
+
console.log(`${reviewer.displayName} failed for ${details.displayId}; trying next reviewer...`);
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
const report = buildReport(currentReviewerConfig, backend, targetInfo, details, diffPayloads, reviewer, reviewerResult);
|
|
413
437
|
const outputFile = path.join(config.outputDir, backend.getReportFileName(changeId));
|
|
414
438
|
await writeTextFile(outputFile, report);
|
|
415
439
|
|