@motivation-labs/crosscheck 0.13.0-beta.7 → 0.13.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.
Files changed (66) hide show
  1. package/crosscheck.config.example.yml +6 -1
  2. package/dist/__tests__/board.test.js +115 -2
  3. package/dist/__tests__/board.test.js.map +1 -1
  4. package/dist/__tests__/conflict-resolve.test.d.ts +2 -0
  5. package/dist/__tests__/conflict-resolve.test.d.ts.map +1 -0
  6. package/dist/__tests__/conflict-resolve.test.js +106 -0
  7. package/dist/__tests__/conflict-resolve.test.js.map +1 -0
  8. package/dist/__tests__/detector.test.d.ts +2 -0
  9. package/dist/__tests__/detector.test.d.ts.map +1 -0
  10. package/dist/__tests__/detector.test.js +108 -0
  11. package/dist/__tests__/detector.test.js.map +1 -0
  12. package/dist/__tests__/onboard-preservation.test.js +67 -1
  13. package/dist/__tests__/onboard-preservation.test.js.map +1 -1
  14. package/dist/__tests__/pr-lock.test.js +65 -3
  15. package/dist/__tests__/pr-lock.test.js.map +1 -1
  16. package/dist/__tests__/runner.test.js +72 -2
  17. package/dist/__tests__/runner.test.js.map +1 -1
  18. package/dist/cli.js +4 -2
  19. package/dist/cli.js.map +1 -1
  20. package/dist/commands/init.d.ts.map +1 -1
  21. package/dist/commands/init.js +11 -9
  22. package/dist/commands/init.js.map +1 -1
  23. package/dist/commands/onboard.d.ts +2 -0
  24. package/dist/commands/onboard.d.ts.map +1 -1
  25. package/dist/commands/onboard.js +53 -6
  26. package/dist/commands/onboard.js.map +1 -1
  27. package/dist/commands/run.d.ts.map +1 -1
  28. package/dist/commands/run.js +104 -61
  29. package/dist/commands/run.js.map +1 -1
  30. package/dist/commands/serve.d.ts.map +1 -1
  31. package/dist/commands/serve.js +15 -0
  32. package/dist/commands/serve.js.map +1 -1
  33. package/dist/commands/watch.d.ts.map +1 -1
  34. package/dist/commands/watch.js +17 -0
  35. package/dist/commands/watch.js.map +1 -1
  36. package/dist/config/schema.d.ts.map +1 -1
  37. package/dist/config/schema.js +5 -0
  38. package/dist/config/schema.js.map +1 -1
  39. package/dist/github/client.d.ts +2 -1
  40. package/dist/github/client.d.ts.map +1 -1
  41. package/dist/github/client.js +55 -3
  42. package/dist/github/client.js.map +1 -1
  43. package/dist/github/detector.d.ts.map +1 -1
  44. package/dist/github/detector.js +18 -1
  45. package/dist/github/detector.js.map +1 -1
  46. package/dist/lib/board.d.ts +5 -0
  47. package/dist/lib/board.d.ts.map +1 -1
  48. package/dist/lib/board.js +128 -128
  49. package/dist/lib/board.js.map +1 -1
  50. package/dist/lib/pr-lock.d.ts +1 -0
  51. package/dist/lib/pr-lock.d.ts.map +1 -1
  52. package/dist/lib/pr-lock.js +28 -13
  53. package/dist/lib/pr-lock.js.map +1 -1
  54. package/dist/lib/runner.d.ts +1 -0
  55. package/dist/lib/runner.d.ts.map +1 -1
  56. package/dist/lib/runner.js +240 -11
  57. package/dist/lib/runner.js.map +1 -1
  58. package/dist/lib/workflow.d.ts +10 -8
  59. package/dist/lib/workflow.d.ts.map +1 -1
  60. package/dist/lib/workflow.js +7 -1
  61. package/dist/lib/workflow.js.map +1 -1
  62. package/dist/reviewers/conflict-resolve.d.ts +14 -0
  63. package/dist/reviewers/conflict-resolve.d.ts.map +1 -0
  64. package/dist/reviewers/conflict-resolve.js +213 -0
  65. package/dist/reviewers/conflict-resolve.js.map +1 -0
  66. package/package.json +1 -1
@@ -1,8 +1,8 @@
1
- import { describe, it, expect, afterEach } from 'vitest';
2
- import { writeFileSync, mkdirSync, utimesSync } from 'fs';
1
+ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
2
+ import { writeFileSync, mkdirSync, utimesSync, existsSync } from 'fs';
3
3
  import { homedir } from 'os';
4
4
  import { join } from 'path';
5
- import { acquirePRLock, releasePRLock } from '../lib/pr-lock.js';
5
+ import { acquirePRLock, releasePRLock, handleLockSignal } from '../lib/pr-lock.js';
6
6
  const OWNER = 'test-owner';
7
7
  const REPO = 'test-repo';
8
8
  const PR = 999;
@@ -50,4 +50,66 @@ describe('releasePRLock', () => {
50
50
  expect(() => releasePRLock(OWNER, REPO, PR, SHA)).not.toThrow();
51
51
  });
52
52
  });
53
+ describe('handleLockSignal', () => {
54
+ // process.kill would actually deliver the signal to the test runner and
55
+ // terminate it. We stub it out and assert the call shape instead. Each
56
+ // test snapshots existing SIGINT listeners and restores them afterward so
57
+ // module-level state (acquirePRLock's one-shot register) doesn't bleed
58
+ // across tests.
59
+ let savedListeners = [];
60
+ beforeEach(() => {
61
+ savedListeners = process.listeners('SIGINT');
62
+ for (const l of savedListeners)
63
+ process.removeListener('SIGINT', l);
64
+ });
65
+ afterEach(() => {
66
+ for (const l of process.listeners('SIGINT'))
67
+ process.removeListener('SIGINT', l);
68
+ for (const l of savedListeners)
69
+ process.on('SIGINT', l);
70
+ });
71
+ it('removes active lock files when signal fires', () => {
72
+ acquirePRLock(OWNER, REPO, PR, SHA);
73
+ const lockFile = join(homedir(), '.crosscheck', 'locks', `${OWNER}-${REPO}-${PR}-${SHA.slice(0, 8)}.lock`);
74
+ expect(existsSync(lockFile)).toBe(true);
75
+ const killSpy = vi.spyOn(process, 'kill').mockImplementation(() => true);
76
+ try {
77
+ handleLockSignal('SIGINT');
78
+ expect(existsSync(lockFile)).toBe(false);
79
+ }
80
+ finally {
81
+ killSpy.mockRestore();
82
+ }
83
+ });
84
+ it('re-raises the signal to terminate the process when it is the sole listener', () => {
85
+ process.on('SIGINT', handleLockSignal);
86
+ expect(process.listenerCount('SIGINT')).toBe(1);
87
+ const killSpy = vi.spyOn(process, 'kill').mockImplementation(() => true);
88
+ try {
89
+ handleLockSignal('SIGINT');
90
+ expect(killSpy).toHaveBeenCalledWith(process.pid, 'SIGINT');
91
+ // Should have removed itself before re-raising so the default action takes over
92
+ expect(process.listenerCount('SIGINT')).toBe(0);
93
+ }
94
+ finally {
95
+ killSpy.mockRestore();
96
+ }
97
+ });
98
+ it('does not re-raise when another listener exists (lets graceful-shutdown handlers drive exit)', () => {
99
+ process.on('SIGINT', handleLockSignal);
100
+ const otherListener = () => { };
101
+ process.on('SIGINT', otherListener);
102
+ expect(process.listenerCount('SIGINT')).toBe(2);
103
+ const killSpy = vi.spyOn(process, 'kill').mockImplementation(() => true);
104
+ try {
105
+ handleLockSignal('SIGINT');
106
+ expect(killSpy).not.toHaveBeenCalled();
107
+ // Our handler should still be registered — only the sole-listener path removes it
108
+ expect(process.listenerCount('SIGINT')).toBe(2);
109
+ }
110
+ finally {
111
+ killSpy.mockRestore();
112
+ }
113
+ });
114
+ });
53
115
  //# sourceMappingURL=pr-lock.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pr-lock.test.js","sourceRoot":"","sources":["../../src/__tests__/pr-lock.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pr-lock.test.js","sourceRoot":"","sources":["../../src/__tests__/pr-lock.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,9 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { isRetryableFixError, getEffectiveStepType, exceedsMaxRounds } from '../lib/runner.js';
1
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
+ import { execFileSync } from 'child_process';
3
+ import { mkdtempSync, rmSync, writeFileSync } from 'fs';
4
+ import { tmpdir } from 'os';
5
+ import { join } from 'path';
6
+ import { isRetryableFixError, getEffectiveStepType, exceedsMaxRounds, countCrosscheckCommitsForPR, } from '../lib/runner.js';
3
7
  describe('isRetryableFixError', () => {
4
8
  it('returns false for auth failure errors', () => {
5
9
  expect(isRetryableFixError(new Error('claude auth failure during fix step — run: claude auth login'))).toBe(false);
@@ -45,6 +49,72 @@ describe('exceedsMaxRounds', () => {
45
49
  expect(exceedsMaxRounds('review', 'review', 1, 2)).toBe(false);
46
50
  });
47
51
  });
52
+ describe('countCrosscheckCommitsForPR', () => {
53
+ let tmpDir;
54
+ // Build a repo with a `base` branch carrying [crosscheck] commits (simulating
55
+ // a long-lived branch like staging) and a `head` branch ahead of it. The
56
+ // count must include only commits unique to head.
57
+ const git = (...args) => execFileSync('git', args, { cwd: tmpDir, encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'] });
58
+ const commit = (file, content, message) => {
59
+ writeFileSync(join(tmpDir, file), content);
60
+ git('add', file);
61
+ git('commit', '-m', message);
62
+ };
63
+ beforeEach(() => {
64
+ tmpDir = mkdtempSync(join(tmpdir(), 'crosscheck-runner-test-'));
65
+ git('init', '-q', '-b', 'base');
66
+ git('config', 'user.email', 'test@example.com');
67
+ git('config', 'user.name', 'Test');
68
+ git('config', 'commit.gpgsign', 'false');
69
+ // base branch: 6 [crosscheck] commits from prior merged PRs
70
+ commit('seed.txt', 'seed\n', 'chore: initial');
71
+ for (let i = 0; i < 6; i++) {
72
+ commit(`base${i}.txt`, `b${i}\n`, `[crosscheck] fix from prior PR #${i}`);
73
+ }
74
+ // Promote base into refs/remotes/origin/base so the helper's
75
+ // `origin/<base>..HEAD` range resolves the same way it does in production
76
+ // (clone.ts fetches the base ref into refs/remotes/origin/<base>).
77
+ git('update-ref', 'refs/remotes/origin/base', 'base');
78
+ // head branch ahead of base
79
+ git('checkout', '-q', '-b', 'feature');
80
+ });
81
+ afterEach(() => {
82
+ rmSync(tmpDir, { force: true, recursive: true });
83
+ });
84
+ it('counts only [crosscheck] commits ahead of base (ignores base history)', () => {
85
+ // Two fix commits on this PR — base has 6 prior crosscheck commits we must ignore
86
+ commit('a.txt', 'a\n', '[crosscheck] fix round 1');
87
+ commit('b.txt', 'b\n', '[crosscheck] fix round 2');
88
+ expect(countCrosscheckCommitsForPR(tmpDir, 'base')).toBe(2);
89
+ });
90
+ it('returns 0 when the PR has no crosscheck commits, even if base has many', () => {
91
+ commit('feat.txt', 'feat\n', 'feat: human work only');
92
+ expect(countCrosscheckCommitsForPR(tmpDir, 'base')).toBe(0);
93
+ });
94
+ it('ignores non-crosscheck commits on the PR branch', () => {
95
+ commit('feat.txt', 'feat\n', 'feat: add thing');
96
+ commit('a.txt', 'a\n', '[crosscheck] fix one');
97
+ commit('docs.txt', 'docs\n', 'docs: update readme');
98
+ expect(countCrosscheckCommitsForPR(tmpDir, 'base')).toBe(1);
99
+ });
100
+ it('falls back to full-history count when origin/<base> does not exist (fail closed)', () => {
101
+ // 6 [crosscheck] commits on base + 1 on feature = 7 total in the branch
102
+ // history. If the scoped range fails, we must still see them so the
103
+ // 5-commit cap trips rather than silently passing.
104
+ commit('a.txt', 'a\n', '[crosscheck] fix one');
105
+ expect(countCrosscheckCommitsForPR(tmpDir, 'nonexistent-branch')).toBe(7);
106
+ });
107
+ it('returns 0 only when neither the scoped range nor the full history is readable', () => {
108
+ // Point tmpDir at a non-repo location — both git invocations will fail.
109
+ const nonRepo = mkdtempSync(join(tmpdir(), 'crosscheck-not-a-repo-'));
110
+ try {
111
+ expect(countCrosscheckCommitsForPR(nonRepo, 'main')).toBe(0);
112
+ }
113
+ finally {
114
+ rmSync(nonRepo, { force: true, recursive: true });
115
+ }
116
+ });
117
+ });
48
118
  describe('getEffectiveStepType', () => {
49
119
  it('coerces review → recheck when isRecheckRun is true', () => {
50
120
  expect(getEffectiveStepType('review', true)).toBe('recheck');
@@ -1 +1 @@
1
- {"version":3,"file":"runner.test.js","sourceRoot":"","sources":["../../src/__tests__/runner.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.test.js","sourceRoot":"","sources":["../../src/__tests__/runner.test.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -62,15 +62,17 @@ program
62
62
  .description('Manually trigger a review for a single PR URL')
63
63
  .option('-c, --config <path>', 'config file path')
64
64
  .option('-r, --reviewer <vendor>', 'force a specific reviewer: codex | claude (bypasses auto-detection)')
65
- .action((prUrl, opts) => void runReview(prUrl, opts.config, opts.reviewer));
65
+ .option('--vendor <vendor>', 'alias for --reviewer')
66
+ .action((prUrl, opts) => void runReview(prUrl, opts.config, opts.reviewer ?? opts.vendor));
66
67
  program
67
68
  .command('run <pr-url>')
68
69
  .description('Execute the full configured workflow against a single PR (review → fix → recheck)')
69
70
  .option('-c, --config <path>', 'config file path')
70
71
  .option('-r, --reviewer <vendor>', 'force a specific reviewer: codex | claude (bypasses attribution detection)')
72
+ .option('--vendor <vendor>', 'alias for --reviewer')
71
73
  .option('--steps <list>', 'run only these step types, comma-separated: review,fix,recheck')
72
74
  .option('--dry-run', 'run the review but do not post a comment or apply fixes')
73
- .action((prUrl, opts) => void runRun(prUrl, opts));
75
+ .action((prUrl, opts) => void runRun(prUrl, { ...opts, reviewer: opts.reviewer ?? opts.vendor }));
74
76
  program
75
77
  .command('status')
76
78
  .description('Show auth state, config summary, and CLI versions')
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,EAAE,EAAE,OAAO,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,WAAW,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CA2EzF;AASD,wBAAsB,OAAO,CAAC,UAAU,CAAC,EAAE,MAAM,iBA0FhD"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,EAAE,EAAE,OAAO,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,WAAW,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CA2EzF;AASD,wBAAsB,OAAO,CAAC,UAAU,CAAC,EAAE,MAAM,iBAyFhD"}
@@ -5,7 +5,7 @@ import { homedir } from 'os';
5
5
  import chalk from 'chalk';
6
6
  import { checkCodexAuth } from '../reviewers/codex.js';
7
7
  import { checkClaudeAuth } from '../reviewers/claude.js';
8
- import { getWebhookSecret, getWebhookSecretPath, detectGitHubLogin, patchAllowedAuthors, patchAuthorRoutes, loadConfig, resolveConfigPath } from '../config/loader.js';
8
+ import { getWebhookSecret, getWebhookSecretPath, detectGitHubLogin, patchAllowedAuthors, loadConfig, resolveConfigPath } from '../config/loader.js';
9
9
  export async function runChecks() {
10
10
  const results = [];
11
11
  let aiCliCount = 0;
@@ -137,17 +137,22 @@ export async function runInit(configPath) {
137
137
  if (login) {
138
138
  // Uncomment allowed_authors placeholder
139
139
  content = content.replace(/ # allowed_authors:\n( #[^\n]*\n)+/, ` allowed_authors:\n - ${login} # auto-detected from gh auth\n`);
140
- // Uncomment author_routes placeholder so PRs lacking attribution footers
141
- // are still detected and routed to the correct reviewer
142
- content = content.replace(/ # author_routes:\n #[^\n]*\n/, ` author_routes:\n ${login}: claude # auto-detected from gh auth\n`);
140
+ // author_routes is intentionally left commented out. In cross-vendor mode with
141
+ // both vendors enabled (the default), routes for an author who uses both
142
+ // agents are structurally wrong attribution detection + fallback_reviewer
143
+ // are the correct path. `crosscheck onboard` writes the route only when the
144
+ // user picks a single authorVendor.
143
145
  }
144
146
  writeFileSync(dest, content);
145
- const hint = login ? `allowed_authors and author_routes set to ${chalk.cyan(login)}` : 'edit to customize';
147
+ const hint = login ? `allowed_authors set to ${chalk.cyan(login)}` : 'edit to customize';
146
148
  console.log(chalk.dim(`Config written to ${dest} — ${hint}.\n`));
147
149
  }
148
150
  }
149
151
  else {
150
- // Config exists — patch allowed_authors and author_routes if still empty
152
+ // Config exists — patch allowed_authors if still empty.
153
+ // author_routes is intentionally not auto-patched: `crosscheck onboard` writes it
154
+ // only when the user picks a single authorVendor, since cross-vendor + both
155
+ // enabled bypasses the route (see detector.ts).
151
156
  const existing = loadConfig(resolveConfigPath(configPath) ?? dest);
152
157
  const login = detectGitHubLogin();
153
158
  let patched = false;
@@ -155,9 +160,6 @@ export async function runInit(configPath) {
155
160
  if (existing.routing.allowed_authors.length === 0) {
156
161
  patched = patchAllowedAuthors(dest, login) || patched;
157
162
  }
158
- if (Object.keys(existing.routing.author_routes).length === 0) {
159
- patched = patchAuthorRoutes(dest, login) || patched;
160
- }
161
163
  }
162
164
  if (patched) {
163
165
  console.log(chalk.green(` ✓ routing updated for ${chalk.cyan(login ?? 'unknown')} in ${dest}\n`));
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -48,6 +48,7 @@ declare const QUALITY_TIERS: {
48
48
  };
49
49
  type QualityTier = keyof typeof QUALITY_TIERS;
50
50
  export declare function detectCurrentPreset(workflowDir?: string): WorkflowPreset;
51
+ export declare function detectConflictResolveEnabled(workflowDir?: string): boolean;
51
52
  export interface OnboardDecisions {
52
53
  deployment: 'personal' | 'team';
53
54
  login: string;
@@ -58,6 +59,7 @@ export interface OnboardDecisions {
58
59
  qualityTier: QualityTier;
59
60
  pipelinePreset: WorkflowPreset;
60
61
  maxRounds?: number;
62
+ conflictResolve: boolean;
61
63
  tunnelBackend: 'localhost.run' | 'smee';
62
64
  smeeChannel: string;
63
65
  cloneProtocol: 'ssh' | 'https';
@@ -1 +1 @@
1
- {"version":3,"file":"onboard.d.ts","sourceRoot":"","sources":["../../src/commands/onboard.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAQD,KAAK,cAAc,GAAG,aAAa,GAAG,YAAY,GAAG,oBAAoB,CAAA;AAEzE,KAAK,gBAAgB,GAAG;IACtB,IAAI,EAAE,cAAc,GAAG,eAAe,CAAA;IACtC,aAAa,EAAE,OAAO,CAAA;IACtB,YAAY,EAAE,OAAO,CAAA;CACtB,CAAA;AAID,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgBT,CAAA;AAEV,KAAK,WAAW,GAAG,MAAM,OAAO,aAAa,CAAA;AAkM7C,wBAAgB,mBAAmB,CAAC,WAAW,GAAE,MAAuC,GAAG,cAAc,CAexG;AAsHD,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,UAAU,GAAG,MAAM,CAAA;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,YAAY,EAAE,gBAAgB,CAAA;IAC9B,YAAY,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAA;IACzC,WAAW,EAAE,WAAW,CAAA;IACxB,cAAc,EAAE,cAAc,CAAA;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,eAAe,GAAG,MAAM,CAAA;IACvC,WAAW,EAAE,MAAM,CAAA;IACnB,aAAa,EAAE,KAAK,GAAG,OAAO,CAAA;CAC/B;AA+CD,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,gBAAgB,EAC3B,WAAW,SAAiC,GAC3C,IAAI,CAuKN;AAED,wBAAsB,UAAU,CAAC,IAAI,GAAE,WAAgB,iBA4VtD"}
1
+ {"version":3,"file":"onboard.d.ts","sourceRoot":"","sources":["../../src/commands/onboard.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAQD,KAAK,cAAc,GAAG,aAAa,GAAG,YAAY,GAAG,oBAAoB,CAAA;AAEzE,KAAK,gBAAgB,GAAG;IACtB,IAAI,EAAE,cAAc,GAAG,eAAe,CAAA;IACtC,aAAa,EAAE,OAAO,CAAA;IACtB,YAAY,EAAE,OAAO,CAAA;CACtB,CAAA;AAID,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgBT,CAAA;AAEV,KAAK,WAAW,GAAG,MAAM,OAAO,aAAa,CAAA;AAkM7C,wBAAgB,mBAAmB,CAAC,WAAW,GAAE,MAAuC,GAAG,cAAc,CAexG;AAED,wBAAgB,4BAA4B,CAAC,WAAW,GAAE,MAAuC,GAAG,OAAO,CAO1G;AA4ID,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,UAAU,GAAG,MAAM,CAAA;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,YAAY,EAAE,gBAAgB,CAAA;IAC9B,YAAY,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAA;IACzC,WAAW,EAAE,WAAW,CAAA;IACxB,cAAc,EAAE,cAAc,CAAA;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,eAAe,EAAE,OAAO,CAAA;IACxB,aAAa,EAAE,eAAe,GAAG,MAAM,CAAA;IACvC,WAAW,EAAE,MAAM,CAAA;IACnB,aAAa,EAAE,KAAK,GAAG,OAAO,CAAA;CAC/B;AAwDD,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,gBAAgB,EAC3B,WAAW,SAAiC,GAC3C,IAAI,CAwKN;AAED,wBAAsB,UAAU,CAAC,IAAI,GAAE,WAAgB,iBAoWtD"}
@@ -10,7 +10,7 @@ import { checkCodexAuth } from '../reviewers/codex.js';
10
10
  import { checkClaudeAuth } from '../reviewers/claude.js';
11
11
  import { execSync } from 'child_process';
12
12
  import { promptRepoPicker, promptSinglePicker } from '../lib/repo-picker.js';
13
- import { DEFAULT_REVIEW_INSTRUCTIONS, DEFAULT_FIX_INSTRUCTIONS, DEFAULT_RECHECK_INSTRUCTIONS } from '../lib/workflow.js';
13
+ import { DEFAULT_REVIEW_INSTRUCTIONS, DEFAULT_FIX_INSTRUCTIONS, DEFAULT_RECHECK_INSTRUCTIONS, DEFAULT_CONFLICT_RESOLVE_INSTRUCTIONS } from '../lib/workflow.js';
14
14
  // Model and effort settings for each quality tier.
15
15
  // These are written directly to vendors.claude / vendors.codex in the config.
16
16
  const QUALITY_TIERS = {
@@ -216,6 +216,35 @@ export function detectCurrentPreset(workflowDir = join(homedir(), '.crosscheck')
216
216
  }
217
217
  return 'review-only';
218
218
  }
219
+ export function detectConflictResolveEnabled(workflowDir = join(homedir(), '.crosscheck')) {
220
+ const path = join(workflowDir, 'workflow.yml');
221
+ if (!existsSync(path))
222
+ return false;
223
+ try {
224
+ const raw = yaml.load(readFileSync(path, 'utf8'));
225
+ return (raw?.steps ?? []).some(s => s.type === 'conflict-resolve');
226
+ }
227
+ catch {
228
+ return false;
229
+ }
230
+ }
231
+ async function promptConflictResolve(currentEnabled, opts) {
232
+ if (opts.yes) {
233
+ console.log(` Conflict-resolve: ${chalk.cyan(currentEnabled ? 'yes' : 'no')}`);
234
+ return currentEnabled;
235
+ }
236
+ const items = [
237
+ { label: 'no', description: 'leave merge conflicts for the PR author to resolve manually' },
238
+ { label: 'yes', description: 'auto-resolve merge conflicts before each review (requires Claude)' },
239
+ ];
240
+ const defaultIdx = currentEnabled ? 1 : 0;
241
+ const idx = await promptSinglePicker(items, {
242
+ title: 'Auto-resolve merge conflicts?',
243
+ defaultIndex: defaultIdx,
244
+ });
245
+ console.log();
246
+ return idx === 1;
247
+ }
219
248
  async function promptMaxRounds(currentMaxRounds, opts) {
220
249
  if (opts.yes) {
221
250
  const rounds = currentMaxRounds ?? 1;
@@ -312,7 +341,14 @@ async function promptCloneProtocol(currentProtocol, opts) {
312
341
  // Build the workflow YAML for the given preset, with inline per-step instructions.
313
342
  // Written to ~/.crosscheck/workflow.yml on first onboard. On re-runs, regenerated
314
343
  // only when the step-type sequence drifts from the selected preset.
315
- function buildWorkflowYaml(preset, maxRounds = 1) {
344
+ function buildWorkflowYaml(preset, maxRounds = 1, conflictResolve = false) {
345
+ const conflictResolveStep = {
346
+ name: 'conflict-resolve',
347
+ type: 'conflict-resolve',
348
+ reviewer: 'origin',
349
+ max_rounds: 3,
350
+ instructions: DEFAULT_CONFLICT_RESOLVE_INSTRUCTIONS,
351
+ };
316
352
  const reviewStep = {
317
353
  name: 'review',
318
354
  type: 'review',
@@ -343,6 +379,8 @@ function buildWorkflowYaml(preset, maxRounds = 1) {
343
379
  steps = [reviewStep, fixStep];
344
380
  else
345
381
  steps = [reviewStep, fixStep, recheckStep];
382
+ if (conflictResolve)
383
+ steps = [conflictResolveStep, ...steps];
346
384
  const header = [
347
385
  '# crosscheck workflow — generated by crosscheck onboard',
348
386
  '# Edit this file to customize your pipeline. Re-running onboard preserves this file.',
@@ -354,7 +392,7 @@ function buildWorkflowYaml(preset, maxRounds = 1) {
354
392
  // Writes all onboard decisions to configPath and manages the global workflow.yml.
355
393
  // On re-runs, only the fields onboard owns are updated; everything else is preserved.
356
394
  export function applyOnboardConfig(configPath, decisions, workflowDir = join(homedir(), '.crosscheck')) {
357
- const { deployment, login, selectedRepos, selectedOrgs, vendorConfig, qualityTier, pipelinePreset, maxRounds, tunnelBackend, smeeChannel, cloneProtocol } = decisions;
395
+ const { deployment, login, selectedRepos, selectedOrgs, vendorConfig, qualityTier, pipelinePreset, maxRounds, conflictResolve, tunnelBackend, smeeChannel, cloneProtocol } = decisions;
358
396
  mkdirSync(dirname(configPath), { recursive: true });
359
397
  // Load existing config (preserves all custom fields) or start fresh
360
398
  const raw = existsSync(configPath)
@@ -471,9 +509,11 @@ export function applyOnboardConfig(configPath, decisions, workflowDir = join(hom
471
509
  'review-fix-recheck': ['review', 'fix', 'recheck'],
472
510
  };
473
511
  const requiredSet = new Set(presetStepTypes[pipelinePreset]);
512
+ if (conflictResolve)
513
+ requiredSet.add('conflict-resolve');
474
514
  const effectiveMaxRounds = maxRounds ?? 1;
475
515
  if (!existsSync(globalWorkflowPath)) {
476
- writeFileSync(globalWorkflowPath, buildWorkflowYaml(pipelinePreset, effectiveMaxRounds));
516
+ writeFileSync(globalWorkflowPath, buildWorkflowYaml(pipelinePreset, effectiveMaxRounds, conflictResolve));
477
517
  }
478
518
  else {
479
519
  try {
@@ -496,7 +536,7 @@ export function applyOnboardConfig(configPath, decisions, workflowDir = join(hom
496
536
  && existingMaxRounds.some(r => r !== effectiveMaxRounds);
497
537
  if (!setsMatch) {
498
538
  // Preset changed — regenerate from template (step types differ)
499
- writeFileSync(globalWorkflowPath, buildWorkflowYaml(pipelinePreset, effectiveMaxRounds));
539
+ writeFileSync(globalWorkflowPath, buildWorkflowYaml(pipelinePreset, effectiveMaxRounds, conflictResolve));
500
540
  }
501
541
  else if (maxRoundsDrifted) {
502
542
  // Preset unchanged, only max_rounds changed — patch in-place to preserve
@@ -514,7 +554,7 @@ export function applyOnboardConfig(configPath, decisions, workflowDir = join(hom
514
554
  }
515
555
  catch {
516
556
  // Malformed workflow file — regenerate
517
- writeFileSync(globalWorkflowPath, buildWorkflowYaml(pipelinePreset, effectiveMaxRounds));
557
+ writeFileSync(globalWorkflowPath, buildWorkflowYaml(pipelinePreset, effectiveMaxRounds, conflictResolve));
518
558
  }
519
559
  }
520
560
  }
@@ -735,6 +775,11 @@ export async function runOnboard(opts = {}) {
735
775
  maxRounds = await promptMaxRounds(currentMaxRounds, opts);
736
776
  console.log();
737
777
  }
778
+ // ── Step 7.7: Auto-conflict-resolve (opt-in) ──────────────────────────────
779
+ console.log(chalk.bold('Step 7.7 — auto conflict-resolve'));
780
+ const currentConflictResolve = detectConflictResolveEnabled();
781
+ const conflictResolve = await promptConflictResolve(currentConflictResolve, opts);
782
+ console.log();
738
783
  // ── Step 8: Connection type ────────────────────────────────────────────────
739
784
  console.log(chalk.bold('Step 8 — connection type'));
740
785
  const currentTunnel = existingConfig?.tunnel?.backend;
@@ -787,6 +832,7 @@ export async function runOnboard(opts = {}) {
787
832
  if (pipelinePreset === 'review-fix-recheck') {
788
833
  console.log(` max rounds ${chalk.cyan(String(maxRounds ?? 1))}`);
789
834
  }
835
+ console.log(` conflict-resolve ${chalk.cyan(conflictResolve ? 'yes' : 'no')}`);
790
836
  if (selectedOrgs.length > 0) {
791
837
  console.log(` orgs ${selectedOrgs.map(o => chalk.cyan(o)).join(', ')}`);
792
838
  }
@@ -818,6 +864,7 @@ export async function runOnboard(opts = {}) {
818
864
  qualityTier,
819
865
  pipelinePreset,
820
866
  maxRounds,
867
+ conflictResolve,
821
868
  tunnelBackend,
822
869
  smeeChannel,
823
870
  cloneProtocol,