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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kodevu",
3
- "version": "0.1.9",
3
+ "version": "0.1.10",
4
4
  "type": "module",
5
5
  "description": "Poll SVN revisions or Git commits, send each change diff to a reviewer CLI, and write Markdown review reports.",
6
6
  "bin": {
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 resolveAutoReviewer(debug, loadedConfigPath) {
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
- return availableReviewers[Math.floor(Math.random() * availableReviewers.length)];
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 selectedReviewer = await resolveAutoReviewer(config.debug, loadedConfigPath);
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(
@@ -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 { reviewer, diffPayloads, result: reviewerResult } = await runReviewerPrompt(
406
- config,
407
- backend,
408
- targetInfo,
409
- details,
410
- diffText
411
- );
412
- const report = buildReport(config, backend, targetInfo, details, diffPayloads, reviewer, reviewerResult);
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