@humanbased/crosscheck 0.20.0 → 0.20.1-beta.6

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.
Files changed (57) hide show
  1. package/dist/__tests__/clone.test.js +0 -32
  2. package/dist/__tests__/clone.test.js.map +1 -1
  3. package/dist/__tests__/optimize.test.js +2 -2
  4. package/dist/__tests__/optimize.test.js.map +1 -1
  5. package/dist/__tests__/review-models.test.js +0 -1
  6. package/dist/__tests__/review-models.test.js.map +1 -1
  7. package/dist/commands/review.js +1 -1
  8. package/dist/commands/review.js.map +1 -1
  9. package/dist/commands/run.d.ts.map +1 -1
  10. package/dist/commands/run.js +1 -4
  11. package/dist/commands/run.js.map +1 -1
  12. package/dist/commands/serve.js +1 -1
  13. package/dist/commands/serve.js.map +1 -1
  14. package/dist/commands/watch.js +1 -1
  15. package/dist/commands/watch.js.map +1 -1
  16. package/dist/config/schema.d.ts +0 -74
  17. package/dist/config/schema.d.ts.map +1 -1
  18. package/dist/config/schema.js +0 -13
  19. package/dist/config/schema.js.map +1 -1
  20. package/dist/lib/clone.d.ts +1 -1
  21. package/dist/lib/clone.d.ts.map +1 -1
  22. package/dist/lib/clone.js +15 -52
  23. package/dist/lib/clone.js.map +1 -1
  24. package/dist/lib/logger.d.ts +1 -1
  25. package/dist/lib/logger.d.ts.map +1 -1
  26. package/dist/lib/logger.js +0 -4
  27. package/dist/lib/logger.js.map +1 -1
  28. package/dist/lib/remediation.d.ts.map +1 -1
  29. package/dist/lib/remediation.js +0 -1
  30. package/dist/lib/remediation.js.map +1 -1
  31. package/dist/lib/runner.d.ts.map +1 -1
  32. package/dist/lib/runner.js +59 -110
  33. package/dist/lib/runner.js.map +1 -1
  34. package/dist/lib/smart-switch.d.ts +0 -9
  35. package/dist/lib/smart-switch.d.ts.map +1 -1
  36. package/dist/lib/smart-switch.js +0 -12
  37. package/dist/lib/smart-switch.js.map +1 -1
  38. package/dist/lib/workflow.d.ts +0 -15
  39. package/dist/lib/workflow.d.ts.map +1 -1
  40. package/dist/lib/workflow.js +1 -42
  41. package/dist/lib/workflow.js.map +1 -1
  42. package/dist/reviewers/claude.d.ts.map +1 -1
  43. package/dist/reviewers/claude.js +34 -62
  44. package/dist/reviewers/claude.js.map +1 -1
  45. package/dist/reviewers/codex.d.ts.map +1 -1
  46. package/dist/reviewers/codex.js +39 -65
  47. package/dist/reviewers/codex.js.map +1 -1
  48. package/package.json +2 -2
  49. package/dist/__tests__/logger.test.d.ts +0 -2
  50. package/dist/__tests__/logger.test.d.ts.map +0 -1
  51. package/dist/__tests__/logger.test.js +0 -69
  52. package/dist/__tests__/logger.test.js.map +0 -1
  53. package/dist/__tests__/vendor-unavailable.test.d.ts +0 -2
  54. package/dist/__tests__/vendor-unavailable.test.d.ts.map +0 -1
  55. package/dist/__tests__/vendor-unavailable.test.js +0 -24
  56. package/dist/__tests__/vendor-unavailable.test.js.map +0 -1
  57. package/dist/harness/default.md +0 -43
package/dist/lib/clone.js CHANGED
@@ -1,11 +1,4 @@
1
1
  import { execFileSync } from 'child_process';
2
- const GIT_RESILIENCE_ARGS = [
3
- '-c', 'http.postBuffer=524288000',
4
- '-c', 'http.lowSpeedLimit=1000',
5
- '-c', 'http.lowSpeedTime=60',
6
- '-c', 'http.keepAlive=true',
7
- '-c', 'http.connectTimeout=30',
8
- ];
9
2
  // Bypass `gh repo clone` so gh's keyring auth (which may bridge to VS Code's
10
3
  // GitHub extension) is never invoked. HTTPS embeds the token in the URL.
11
4
  function buildCloneUrl(owner, repo, token, protocol) {
@@ -16,57 +9,27 @@ function buildCloneUrl(owner, repo, token, protocol) {
16
9
  export function redactCloneSecrets(value) {
17
10
  return value.replace(/https:\/\/x-access-token:[^@\s]+@github\.com\//g, 'https://x-access-token:[REDACTED]@github.com/');
18
11
  }
19
- // Detect transient git clone errors that should be retried:
20
- // - curl 16: Error in the HTTP2 framing layer
21
- // - curl 18: Transferred a partial file / early EOF
22
- // - RPC failed, fetch-pack: unexpected disconnect
23
- function isTransientGitError(message) {
24
- const m = message.toLowerCase();
25
- return /curl 16|http2 framing|curl 18|partial file|early eof|rpc failed|unexpected disconnect|fetch-pack: invalid|bytes of body.*expected/.test(m);
26
- }
27
- const MAX_GIT_RETRIES = 3;
28
- const GIT_RETRY_DELAY_MS = 2000;
29
- function runGit(args, cwd, retryable = false) {
30
- let lastErr;
31
- for (let attempt = 1; attempt <= (retryable ? MAX_GIT_RETRIES : 1); attempt++) {
32
- try {
33
- execFileSync('git', args, { cwd, stdio: 'pipe' });
34
- return;
35
- }
36
- catch (err) {
37
- if (!(err instanceof Error))
38
- throw err;
39
- const redacted = redactCloneSecrets(err.message);
40
- if (retryable && isTransientGitError(redacted) && attempt < MAX_GIT_RETRIES) {
41
- // Transient error — wait and retry
42
- const delay = GIT_RETRY_DELAY_MS * attempt; // exponential backoff: 2s, 4s, 6s
43
- // eslint-disable-next-line no-console
44
- console.error(`git: transient error (attempt ${attempt}/${MAX_GIT_RETRIES}), retrying in ${delay / 1000}s...`);
45
- // Small delay before retry — using sync sleep for simplicity in this utility
46
- Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, delay);
47
- lastErr = new Error(redacted);
48
- lastErr.stack = err.stack ? redactCloneSecrets(err.stack) : undefined;
49
- continue;
50
- }
51
- const wrapped = new Error(redacted);
52
- wrapped.stack = err.stack ? redactCloneSecrets(err.stack) : undefined;
53
- throw wrapped;
54
- }
12
+ function runGit(args, cwd) {
13
+ try {
14
+ execFileSync('git', args, { cwd, stdio: 'pipe' });
15
+ }
16
+ catch (err) {
17
+ if (!(err instanceof Error))
18
+ throw err;
19
+ const redacted = redactCloneSecrets(err.message);
20
+ const wrapped = new Error(redacted);
21
+ wrapped.stack = err.stack ? redactCloneSecrets(err.stack) : undefined;
22
+ throw wrapped;
55
23
  }
56
- if (lastErr)
57
- throw lastErr;
58
24
  }
59
25
  // Clone the repo, fetch & checkout the PR head, and fetch the base ref into
60
26
  // refs/remotes/origin/<base>. onBaseFetchFailed lets callers log a warning;
61
27
  // other failures bubble up.
62
- export async function clonePRForReview(params) {
28
+ export function clonePRForReview(params) {
63
29
  const { owner, repo, prNumber, baseRef, tmpDir, token, protocol, onBaseFetchFailed } = params;
64
30
  const cloneUrl = buildCloneUrl(owner, repo, token, protocol);
65
- // Clone is retryable — transient network issues (curl 16/18, framing errors) are common.
66
- // GIT_RESILIENCE_ARGS inline (-c flags) apply HTTP buffer/timeout settings without
67
- // requiring a local repo to already exist.
68
- runGit([...GIT_RESILIENCE_ARGS, 'clone', '--depth=50', '--quiet', cloneUrl, tmpDir], undefined, true);
69
- runGit([...GIT_RESILIENCE_ARGS, 'fetch', 'origin', `pull/${prNumber}/head:pr-${prNumber}`], tmpDir);
31
+ runGit(['clone', '--depth=50', '--quiet', cloneUrl, tmpDir]);
32
+ runGit(['fetch', 'origin', `pull/${prNumber}/head:pr-${prNumber}`], tmpDir);
70
33
  runGit(['checkout', `pr-${prNumber}`], tmpDir);
71
34
  // Fetch base after PR checkout so we are never on the base branch during the fetch
72
35
  // (git refuses to update a checked-out ref). Explicit refs/remotes/origin/<base>
@@ -74,7 +37,7 @@ export async function clonePRForReview(params) {
74
37
  // alone only writes FETCH_HEAD in shallow clones when the branch is absent from
75
38
  // the default refspec mapping.
76
39
  try {
77
- runGit([...GIT_RESILIENCE_ARGS, 'fetch', 'origin', `${baseRef}:refs/remotes/origin/${baseRef}`], tmpDir);
40
+ runGit(['fetch', 'origin', `${baseRef}:refs/remotes/origin/${baseRef}`], tmpDir);
78
41
  }
79
42
  catch {
80
43
  onBaseFetchFailed?.();
@@ -1 +1 @@
1
- {"version":3,"file":"clone.js","sourceRoot":"","sources":["../../src/lib/clone.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"clone.js","sourceRoot":"","sources":["../../src/lib/clone.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAG5C,6EAA6E;AAC7E,yEAAyE;AACzE,SAAS,aAAa,CAAC,KAAa,EAAE,IAAY,EAAE,KAAa,EAAE,QAAkC;IACnG,OAAO,QAAQ,KAAK,OAAO;QACzB,CAAC,CAAC,0BAA0B,KAAK,eAAe,KAAK,IAAI,IAAI,MAAM;QACnE,CAAC,CAAC,kBAAkB,KAAK,IAAI,IAAI,MAAM,CAAA;AAC3C,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,OAAO,KAAK,CAAC,OAAO,CAAC,iDAAiD,EAAE,+CAA+C,CAAC,CAAA;AAC1H,CAAC;AAED,SAAS,MAAM,CAAC,IAAc,EAAE,GAAY;IAC1C,IAAI,CAAC;QACH,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;IACnD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC;YAAE,MAAM,GAAG,CAAA;QACtC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAChD,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAA;QACnC,OAAO,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QACrE,MAAM,OAAO,CAAA;IACf,CAAC;AACH,CAAC;AAED,4EAA4E;AAC5E,4EAA4E;AAC5E,4BAA4B;AAC5B,MAAM,UAAU,gBAAgB,CAAC,MAShC;IACC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAAA;IAC7F,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAA;IAC5D,MAAM,CAAC,CAAC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAA;IAC5D,MAAM,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,QAAQ,YAAY,QAAQ,EAAE,CAAC,EAAE,MAAM,CAAC,CAAA;IAC3E,MAAM,CAAC,CAAC,UAAU,EAAE,MAAM,QAAQ,EAAE,CAAC,EAAE,MAAM,CAAC,CAAA;IAC9C,mFAAmF;IACnF,iFAAiF;IACjF,oFAAoF;IACpF,gFAAgF;IAChF,+BAA+B;IAC/B,IAAI,CAAC;QACH,MAAM,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,OAAO,wBAAwB,OAAO,EAAE,CAAC,EAAE,MAAM,CAAC,CAAA;IAClF,CAAC;IAAC,MAAM,CAAC;QACP,iBAAiB,EAAE,EAAE,CAAA;IACvB,CAAC;AACH,CAAC"}
@@ -4,7 +4,7 @@ export interface LogEntry {
4
4
  event: string;
5
5
  [key: string]: unknown;
6
6
  }
7
- export type ErrorCategory = 'auth' | 'permission' | 'rate_limit' | 'overloaded' | 'budget' | 'timeout' | 'network' | 'git' | 'subprocess' | 'unknown';
7
+ export type ErrorCategory = 'auth' | 'permission' | 'rate_limit' | 'overloaded' | 'budget' | 'timeout' | 'network' | 'subprocess' | 'unknown';
8
8
  export declare function initLogger(config: LogsConfig): void;
9
9
  export declare function log(entry: LogEntry): void;
10
10
  export declare function logExtended(entry: LogEntry): void;
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/lib/logger.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAErD,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;IAChC,KAAK,EAAE,MAAM,CAAA;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,MAAM,MAAM,aAAa,GACrB,MAAM,GACN,YAAY,GACZ,YAAY,GACZ,YAAY,GACZ,QAAQ,GACR,SAAS,GACT,SAAS,GACT,KAAK,GACL,YAAY,GACZ,SAAS,CAAA;AAQb,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAsBnD;AAED,wBAAgB,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAKzC;AAWD,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAKjD;AAED,wBAAgB,wBAAwB,IAAI,OAAO,CAElD;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,CAuB5D;AAuBD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,OAAO,GAAG,IAAI,CAE7E;AAED,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED,wBAAgB,eAAe,IAAI,MAAM,CAGxC;AAGD,wBAAgB,WAAW,CAAC,MAAM,EAAE,mBAAmB,GAAG,oBAAoB,EAAE,GAAG,EAAE,OAAO,GAAG,IAAI,CAElG"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/lib/logger.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAErD,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;IAChC,KAAK,EAAE,MAAM,CAAA;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,MAAM,MAAM,aAAa,GACrB,MAAM,GACN,YAAY,GACZ,YAAY,GACZ,YAAY,GACZ,QAAQ,GACR,SAAS,GACT,SAAS,GACT,YAAY,GACZ,SAAS,CAAA;AAQb,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAsBnD;AAED,wBAAgB,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAKzC;AAWD,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAKjD;AAED,wBAAgB,wBAAwB,IAAI,OAAO,CAElD;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,CAoB5D;AAuBD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,OAAO,GAAG,IAAI,CAE7E;AAED,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED,wBAAgB,eAAe,IAAI,MAAM,CAGxC;AAGD,wBAAgB,WAAW,CAAC,MAAM,EAAE,mBAAmB,GAAG,oBAAoB,EAAE,GAAG,EAAE,OAAO,GAAG,IAAI,CAElG"}
@@ -71,10 +71,6 @@ export function classifyError(message) {
71
71
  return 'overloaded';
72
72
  if (/maximum budget|budget (?:exhausted|exceeded)|error_max_budget|reached maximum budget/.test(m))
73
73
  return 'budget';
74
- // Git-specific errors (non-fast-forward, clone failures) — checked before auth
75
- // since git errors may contain "token" in the URL but aren't auth issues.
76
- if (/rejected.*fetch first|updates were rejected.*remote contains work|non-fast-forward|curl 16|curl 18|http2 framing|early eof|rpc failed|fetch-pack: invalid/.test(m))
77
- return 'git';
78
74
  if (/bad credentials|401|not logged in|not authenticated|github_token|authentication required|token|auth failure/.test(m))
79
75
  return 'auth';
80
76
  if (/admin:org|admin:repo|forbidden|403|insufficient scope|requires.*scope|write:org/.test(m))
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/lib/logger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/lib/logger.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"remediation.d.ts","sourceRoot":"","sources":["../../src/lib/remediation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAKhD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CA2B7E"}
1
+ {"version":3,"file":"remediation.d.ts","sourceRoot":"","sources":["../../src/lib/remediation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAKhD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CA0B7E"}
@@ -30,6 +30,5 @@ export function hintForError(category, message) {
30
30
  case 'unknown':
31
31
  return '';
32
32
  }
33
- return '';
34
33
  }
35
34
  //# sourceMappingURL=remediation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"remediation.js","sourceRoot":"","sources":["../../src/lib/remediation.ts"],"names":[],"mappings":"AAEA,4EAA4E;AAC5E,4EAA4E;AAC5E,6EAA6E;AAC7E,MAAM,UAAU,YAAY,CAAC,QAAuB,EAAE,OAAe;IACnE,MAAM,CAAC,GAAG,OAAO,CAAC,WAAW,EAAE,CAAA;IAC/B,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,MAAM;YACT,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;gBAAE,OAAO,kBAAkB,CAAA;YAC9C,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;gBAAE,OAAO,wBAAwB,CAAA;YACrD,IAAI,8BAA8B,CAAC,IAAI,CAAC,CAAC,CAAC;gBAAE,OAAO,yBAAyB,CAAA;YAC5E,OAAO,iEAAiE,CAAA;QAC1E,KAAK,SAAS;YACZ,IAAI,wCAAwC,CAAC,IAAI,CAAC,CAAC,CAAC;gBAClD,OAAO,6GAA6G,CAAA;YACtH,OAAO,0CAA0C,CAAA;QACnD,KAAK,SAAS;YACZ,OAAO,uEAAuE,CAAA;QAChF,KAAK,YAAY;YACf,OAAO,+DAA+D,CAAA;QACxE,KAAK,YAAY;YACf,OAAO,uDAAuD,CAAA;QAChE,KAAK,QAAQ;YACX,OAAO,mFAAmF,CAAA;QAC5F,KAAK,YAAY;YACf,OAAO,sDAAsD,CAAA;QAC/D,KAAK,YAAY,CAAC;QAClB,KAAK,SAAS;YACZ,OAAO,EAAE,CAAA;IACb,CAAC;IACD,OAAO,EAAE,CAAA;AACX,CAAC"}
1
+ {"version":3,"file":"remediation.js","sourceRoot":"","sources":["../../src/lib/remediation.ts"],"names":[],"mappings":"AAEA,4EAA4E;AAC5E,4EAA4E;AAC5E,6EAA6E;AAC7E,MAAM,UAAU,YAAY,CAAC,QAAuB,EAAE,OAAe;IACnE,MAAM,CAAC,GAAG,OAAO,CAAC,WAAW,EAAE,CAAA;IAC/B,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,MAAM;YACT,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;gBAAE,OAAO,kBAAkB,CAAA;YAC9C,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;gBAAE,OAAO,wBAAwB,CAAA;YACrD,IAAI,8BAA8B,CAAC,IAAI,CAAC,CAAC,CAAC;gBAAE,OAAO,yBAAyB,CAAA;YAC5E,OAAO,iEAAiE,CAAA;QAC1E,KAAK,SAAS;YACZ,IAAI,wCAAwC,CAAC,IAAI,CAAC,CAAC,CAAC;gBAClD,OAAO,6GAA6G,CAAA;YACtH,OAAO,0CAA0C,CAAA;QACnD,KAAK,SAAS;YACZ,OAAO,uEAAuE,CAAA;QAChF,KAAK,YAAY;YACf,OAAO,+DAA+D,CAAA;QACxE,KAAK,YAAY;YACf,OAAO,uDAAuD,CAAA;QAChE,KAAK,QAAQ;YACX,OAAO,mFAAmF,CAAA;QAC5F,KAAK,YAAY;YACf,OAAO,sDAAsD,CAAA;QAC/D,KAAK,YAAY,CAAC;QAClB,KAAK,SAAS;YACZ,OAAO,EAAE,CAAA;IACb,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/lib/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/lib/runner.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAa9C,OAAO,EAA8B,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAChF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAkB9C,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAGzD;AAaD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,GAAG,MAAM,CAEpF;AAWD,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAqBnF;AAOD,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,WAAW,GAAG,SAAS,CAAA;AAE7F,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IACnC,cAAc,EAAE,OAAO,CAAA;IACvB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,eAAe,CAAA;IACzB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAOD,MAAM,MAAM,mBAAmB,GAC3B,WAAW,GACX,OAAO,GACP,eAAe,GACf,gBAAgB,GAChB,cAAc,CAAA;AAElB,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,sBAAsB,GAC7B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAsCzB;AAKD,wBAAgB,gBAAgB,CAC9B,aAAa,EAAE,MAAM,EACrB,gBAAgB,EAAE,MAAM,EACxB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,OAAO,CAOT;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,EAAE,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,QAAQ,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1B,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,IAAI,CAAA;IAE1D,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAG3B,YAAY,CAAC,EAAE,OAAO,CAAA;IAEtB,KAAK,CAAC,EAAE,MAAM,CAAA;IAGd,MAAM,CAAC,EAAE,OAAO,CAAA;IAGhB,KAAK,CAAC,EAAE,OAAO,eAAe,EAAE,YAAY,EAAE,CAAA;IAG9C,mBAAmB,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAA;IAMxC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IAIrB,oBAAoB,CAAC,EAAE;QACrB,EAAE,CAAC,EAAE,MAAM,CAAA;QACX,IAAI,EAAE,MAAM,CAAA;KACb,CAAA;IAID,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAG1B,SAAS,CAAC,EAAE,OAAO,GAAG,WAAW,CAAA;IAGjC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAE1B,OAAO,CAAC,EAAE,eAAe,CAAA;IAIzB,aAAa,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;CAChH;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IAGtB,eAAe,CAAC,EAAE,MAAM,CAAA;IAIxB,aAAa,CAAC,EAAE,MAAM,CAAA;IAItB,mBAAmB,CAAC,EAAE;QACpB,EAAE,CAAC,EAAE,MAAM,CAAA;QACX,IAAI,EAAE,MAAM,CAAA;KACb,CAAA;CACF;AAkDD,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,QAAQ,EAChB,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,GAC5B;IAAE,MAAM,EAAE,QAAQ,GAAG,OAAO,GAAG,IAAI,CAAC;IAAC,iBAAiB,EAAE,OAAO,CAAA;CAAE,CAenE;AA4ED,wBAAsB,WAAW,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAqxB/E"}
@@ -15,12 +15,12 @@ import { buildCommitTrailers } from '../lib/annotation.js';
15
15
  import { resolveClaudeModel, resolveCodexModel } from '../lib/review-models.js';
16
16
  import { buildStepIdentityFields } from '../lib/event-fields.js';
17
17
  import { buildFixAppliedCommentBody, buildConflictResolvedCommentBody, buildRetriedReviewBanner } from '../lib/comment-bodies.js';
18
- import { loadWorkflow, loadHarnessSection, evaluateWhen } from '../lib/workflow.js';
19
- import { isSubscriptionLimitError, isVendorUnavailableError } from '../lib/smart-switch.js';
18
+ import { loadWorkflow, evaluateWhen } from '../lib/workflow.js';
19
+ import { isSubscriptionLimitError } from '../lib/smart-switch.js';
20
20
  import { tierTimeoutMs } from '../reviewers/tier-timeouts.js';
21
21
  const MAX_CROSSCHECK_COMMITS = 5;
22
22
  const FIX_RETRY_DELAY_MS = 2 * 60 * 1000;
23
- const GIT_PUSH_RETRY_DELAY_MS = 3000;
23
+ const REVIEW_RETRY_DELAY_MS = 2 * 60 * 1000;
24
24
  // Per-vendor configured timeout (seconds) → execa milliseconds, or undefined when
25
25
  // unset so the reviewer falls back to its built-in default. A per-run override
26
26
  // (ctx.overrideTimeoutMs, set by --timeout / --crazy / --halfcrazy) always wins
@@ -34,6 +34,15 @@ export function isRetryableFixError(err) {
34
34
  const msg = err instanceof Error ? err.message : String(err);
35
35
  return !/auth failure|not logged in|claude auth/i.test(msg) && !isSubscriptionLimitError(err);
36
36
  }
37
+ // Transient model API errors (rate-limit 429, overloaded 529) are safe to retry
38
+ // with a delay. Auth, budget, and subscription-limit errors are operator/capacity
39
+ // issues that don't self-heal and should surface immediately.
40
+ function isTransientApiError(err) {
41
+ const msg = err instanceof Error ? err.message : String(err);
42
+ if (/quota|credit|plan.?limit/i.test(msg))
43
+ return false;
44
+ return /\b429\b|rate.?limit|\b529\b|overloaded/i.test(msg);
45
+ }
37
46
  // When a PR has already been reviewed, subsequent webhook runs treat every
38
47
  // 'review' step as a 'recheck' so the first review's CR result is preserved.
39
48
  export function getEffectiveStepType(stepType, isRecheckRun) {
@@ -261,74 +270,10 @@ function emitPRComplexity(ctx, triggerField) {
261
270
  catch { /* best-effort — never fail the workflow for a logging event */ }
262
271
  }
263
272
  // ─────────────────────────────────────────────────────────────────────────────
264
- // Detect non-fast-forward git push errors that indicate upstream commits
265
- function isNonFastForwardError(message) {
266
- return /rejected.*fetch first|updates were rejected.*remote contains work|non-fast-forward/i.test(message);
267
- }
268
- // Push with handling for non-fast-forward rejection. When the remote has new
269
- // commits, we fetch + rebase onto the PR branch and retry the push once.
270
- async function pushWithNonFastForwardHandling(params) {
271
- const { tmpDir, branch, token, log, fileLog, owner, repoName, prNumber } = params;
272
- const env = { ...process.env, GITHUB_TOKEN: token, GH_TOKEN: token };
273
- try {
274
- execSync(`git push origin HEAD:${branch}`, { cwd: tmpDir, env });
275
- }
276
- catch (pushErr) {
277
- const pushMsg = pushErr instanceof Error ? pushErr.message : String(pushErr);
278
- if (isNonFastForwardError(pushMsg)) {
279
- // Non-fast-forward rejection — fetch latest and rebase
280
- fileLog({
281
- level: 'warn',
282
- event: 'push_non_fast_forward',
283
- repo: `${owner}/${repoName}`,
284
- pr: prNumber,
285
- branch,
286
- });
287
- log(chalk.yellow(`⚠ push rejected (non-fast-forward) — fetching latest and rebasing...`));
288
- try {
289
- // Fetch the latest state of the branch
290
- execSync(`git fetch origin ${branch}`, { cwd: tmpDir, env, stdio: 'pipe' });
291
- // Rebase our changes onto the latest branch state
292
- execSync(`git rebase origin/${branch}`, { cwd: tmpDir, env, stdio: 'pipe' });
293
- // Retry the push
294
- execSync(`git push origin HEAD:${branch}`, { cwd: tmpDir, env });
295
- fileLog({
296
- level: 'info',
297
- event: 'push_rebase_succeeded',
298
- repo: `${owner}/${repoName}`,
299
- pr: prNumber,
300
- branch,
301
- });
302
- return;
303
- }
304
- catch (rebaseErr) {
305
- // Rebase failed — log and re-throw the original error
306
- const rebaseMsg = rebaseErr instanceof Error ? rebaseErr.message : String(rebaseErr);
307
- fileLog({
308
- level: 'error',
309
- event: 'push_rebase_failed',
310
- repo: `${owner}/${repoName}`,
311
- pr: prNumber,
312
- branch,
313
- error: rebaseMsg.slice(0, 500),
314
- });
315
- log(chalk.red(`✗ rebase failed: ${rebaseMsg.slice(0, 100)}`));
316
- }
317
- }
318
- // Re-throw original error
319
- throw pushErr;
320
- }
321
- }
322
- // ─────────────────────────────────────────────────────────────────────────────
323
273
  export async function runWorkflow(ctx) {
324
274
  const { owner, repoName, prNumber, pr, tmpDir, token, config, origin, log, onPhaseChange, trigger } = ctx;
325
275
  const triggerField = trigger !== undefined ? { trigger } : {};
326
- const steps = (ctx.steps ?? loadWorkflow(process.cwd())).map(step => {
327
- if (!step.harness || step.instructions)
328
- return step;
329
- const resolved = loadHarnessSection(step.harness, process.cwd());
330
- return resolved ? { ...step, instructions: resolved } : step;
331
- });
276
+ const steps = ctx.steps ?? loadWorkflow(process.cwd());
332
277
  const results = {};
333
278
  // SHAs the workflow pushed AND set a `crosscheck/review` pending status on.
334
279
  // Each one must be released in the finally below — otherwise the pending
@@ -435,31 +380,47 @@ export async function runWorkflow(ctx) {
435
380
  await new Promise(r => setTimeout(r, 30_000));
436
381
  await runReviewWithVendor(reviewer);
437
382
  }
438
- else if (!isSubscriptionLimitError(err) && !isVendorUnavailableError(err)) {
439
- throw err;
440
- }
441
383
  else {
442
- const failedVendor = reviewer;
443
- const fallbackVendor = resolveLimitFallbackVendor(failedVendor, effectiveType, config);
444
- const reason = err instanceof Error ? err.message : String(err);
445
- ctx.onVendorLimit?.(failedVendor, fallbackVendor, reason, step.name);
446
- if (!fallbackVendor)
447
- throw err;
448
- fileLog({
449
- level: 'warn',
450
- event: 'vendor_fallback',
451
- repo: `${owner}/${repoName}`,
452
- pr: prNumber,
453
- step: step.name,
454
- step_type: effectiveType,
455
- failed_vendor: failedVendor,
456
- fallback_vendor: fallbackVendor,
457
- reason: reason.slice(0, 300),
458
- });
459
- log(chalk.yellow(`⚠ ${failedVendor} ${isSubscriptionLimitError(err) ? 'hit a usage limit' : 'is unavailable'} — switching ${effectiveType} step to ${fallbackVendor}`));
460
- reviewer = fallbackVendor;
461
- onPhaseChange(`${reviewer} ${isRecheck ? 'rechecking' : 'reviewing'}...`, { phase: startPhase });
462
- await runReviewWithVendor(reviewer);
384
+ let fallbackErr = err;
385
+ if (isTransientApiError(err)) {
386
+ fileLog({ level: 'warn', event: 'review_transient_retry', repo: `${owner}/${repoName}`, pr: prNumber, reviewer, ...stepIdentity });
387
+ log(chalk.yellow(`⚠ transient API error — retrying ${effectiveType} step in 2 min...`));
388
+ onPhaseChange('retry in 2 min...', { phase: startPhase });
389
+ await new Promise(resolve => setTimeout(resolve, REVIEW_RETRY_DELAY_MS));
390
+ onPhaseChange(`${reviewer} ${isRecheck ? 'rechecking' : 'reviewing'} (retry)...`, { phase: startPhase });
391
+ try {
392
+ await runReviewWithVendor(reviewer);
393
+ fallbackErr = null;
394
+ }
395
+ catch (retryErr) {
396
+ fallbackErr = retryErr;
397
+ }
398
+ }
399
+ if (fallbackErr !== null) {
400
+ if (!isSubscriptionLimitError(fallbackErr))
401
+ throw fallbackErr;
402
+ const failedVendor = reviewer;
403
+ const fallbackVendor = resolveLimitFallbackVendor(failedVendor, effectiveType, config);
404
+ const reason = fallbackErr instanceof Error ? fallbackErr.message : String(fallbackErr);
405
+ ctx.onVendorLimit?.(failedVendor, fallbackVendor, reason, step.name);
406
+ if (!fallbackVendor)
407
+ throw fallbackErr;
408
+ fileLog({
409
+ level: 'warn',
410
+ event: 'vendor_fallback',
411
+ repo: `${owner}/${repoName}`,
412
+ pr: prNumber,
413
+ step: step.name,
414
+ step_type: effectiveType,
415
+ failed_vendor: failedVendor,
416
+ fallback_vendor: fallbackVendor,
417
+ reason: reason.slice(0, 300),
418
+ });
419
+ log(chalk.yellow(`⚠ ${failedVendor} hit a usage limit — switching ${effectiveType} step to ${fallbackVendor}`));
420
+ reviewer = fallbackVendor;
421
+ onPhaseChange(`${reviewer} ${isRecheck ? 'rechecking' : 'reviewing'}...`, { phase: startPhase });
422
+ await runReviewWithVendor(reviewer);
423
+ }
463
424
  }
464
425
  }
465
426
  // First attempt timed out but the delayed retry succeeded — surface a
@@ -709,15 +670,9 @@ export async function runWorkflow(ctx) {
709
670
  buildCommitTrailers({ reviewer: activeVendor, model: fixModel, step: 'fix', service: 'crosscheck' }),
710
671
  ], { cwd: tmpDir });
711
672
  const newSha = execSync('git rev-parse HEAD', { cwd: tmpDir, encoding: 'utf8' }).trim();
712
- await pushWithNonFastForwardHandling({
713
- tmpDir,
714
- branch: pr.head.ref,
715
- token,
716
- log,
717
- fileLog: (entry) => fileLog({ ...entry, phase: 'fix' }),
718
- owner,
719
- repoName,
720
- prNumber,
673
+ execSync(`git push origin HEAD:${pr.head.ref}`, {
674
+ cwd: tmpDir,
675
+ env: { ...process.env, GITHUB_TOKEN: token, GH_TOKEN: token },
721
676
  });
722
677
  ctx.crosscheckShas.add(newSha);
723
678
  // Set a pending status on the pushed commit only when a review/recheck
@@ -1004,15 +959,9 @@ export async function runWorkflow(ctx) {
1004
959
  buildCommitTrailers({ reviewer: vendor, model: conflictResolveModel, step: 'conflict-resolve', service: 'crosscheck' }),
1005
960
  ], { cwd: tmpDir });
1006
961
  const newSha = execSync('git rev-parse HEAD', { cwd: tmpDir, encoding: 'utf8' }).trim();
1007
- await pushWithNonFastForwardHandling({
1008
- tmpDir,
1009
- branch: pr.head.ref,
1010
- token,
1011
- log,
1012
- fileLog: (entry) => fileLog({ ...entry, phase: 'conflict-resolve' }),
1013
- owner,
1014
- repoName,
1015
- prNumber,
962
+ execSync(`git push origin HEAD:${pr.head.ref}`, {
963
+ cwd: tmpDir,
964
+ env: { ...process.env, GITHUB_TOKEN: token, GH_TOKEN: token },
1016
965
  });
1017
966
  ctx.crosscheckShas.add(newSha);
1018
967
  // Move the in-flight pending status to newSha so watchers on other