@motivation-labs/crosscheck 0.2.1-beta.f07295b.0 → 0.3.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/AGENT.md +207 -0
- package/dist/__tests__/diagnose.test.d.ts +2 -0
- package/dist/__tests__/diagnose.test.d.ts.map +1 -0
- package/dist/__tests__/diagnose.test.js +164 -0
- package/dist/__tests__/diagnose.test.js.map +1 -0
- package/dist/__tests__/optimize.test.d.ts +2 -0
- package/dist/__tests__/optimize.test.d.ts.map +1 -0
- package/dist/__tests__/optimize.test.js +88 -0
- package/dist/__tests__/optimize.test.js.map +1 -0
- package/dist/cli.js +17 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/diagnose.d.ts +53 -0
- package/dist/commands/diagnose.d.ts.map +1 -0
- package/dist/commands/diagnose.js +280 -0
- package/dist/commands/diagnose.js.map +1 -0
- package/dist/commands/optimize.d.ts +16 -0
- package/dist/commands/optimize.d.ts.map +1 -0
- package/dist/commands/optimize.js +209 -0
- package/dist/commands/optimize.js.map +1 -0
- package/dist/commands/review.d.ts.map +1 -1
- package/dist/commands/review.js +3 -1
- package/dist/commands/review.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +6 -20
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/watch.d.ts.map +1 -1
- package/dist/commands/watch.js +105 -73
- package/dist/commands/watch.js.map +1 -1
- package/dist/config/loader.d.ts +4 -0
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +22 -10
- package/dist/config/loader.js.map +1 -1
- package/dist/lib/instructions.d.ts +5 -0
- package/dist/lib/instructions.d.ts.map +1 -0
- package/dist/lib/instructions.js +61 -0
- package/dist/lib/instructions.js.map +1 -0
- package/dist/lib/languages.d.ts +3 -0
- package/dist/lib/languages.d.ts.map +1 -0
- package/dist/lib/languages.js +26 -0
- package/dist/lib/languages.js.map +1 -0
- package/dist/reviewers/claude.d.ts.map +1 -1
- package/dist/reviewers/claude.js +4 -5
- package/dist/reviewers/claude.js.map +1 -1
- package/dist/reviewers/codex.d.ts.map +1 -1
- package/dist/reviewers/codex.js +4 -11
- package/dist/reviewers/codex.js.map +1 -1
- package/package.json +5 -2
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
import { readdirSync, readFileSync, existsSync } from 'fs';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
import { homedir } from 'os';
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
const LOG_DIR = join(homedir(), '.crosscheck', 'logs');
|
|
6
|
+
// Maps command names to language identifiers
|
|
7
|
+
const COMMAND_LANGUAGE_MAP = {
|
|
8
|
+
tsc: ['typescript'], 'ts-node': ['typescript'], tsx: ['typescript'],
|
|
9
|
+
npm: ['nodejs'], npx: ['nodejs'], yarn: ['nodejs'], pnpm: ['nodejs'],
|
|
10
|
+
jest: ['nodejs'], vitest: ['nodejs'], mocha: ['nodejs'],
|
|
11
|
+
pytest: ['python'], pip: ['python'], python: ['python'], python3: ['python'],
|
|
12
|
+
cargo: ['rust'],
|
|
13
|
+
go: ['golang'],
|
|
14
|
+
mvn: ['java'], gradle: ['java'],
|
|
15
|
+
rspec: ['ruby'], bundle: ['ruby'],
|
|
16
|
+
};
|
|
17
|
+
// Language id → constraint instruction.
|
|
18
|
+
// Keys must be a subset of the language ids produced by INDICATORS and COMMAND_LANGUAGE_MAP.
|
|
19
|
+
// "jest" was a dead key — jest/vitest/mocha all map to "nodejs" in COMMAND_LANGUAGE_MAP.
|
|
20
|
+
const LANGUAGE_CONSTRAINT_MAP = {
|
|
21
|
+
typescript: 'Do not run tsc, ts-node, or tsx.',
|
|
22
|
+
nodejs: 'Do not run npm, npx, yarn, pnpm, jest, vitest, or mocha.',
|
|
23
|
+
python: 'Do not run pytest, pip, or python scripts.',
|
|
24
|
+
rust: 'Do not run cargo build or cargo test.',
|
|
25
|
+
golang: 'Do not run go build or go test.',
|
|
26
|
+
java: 'Do not run mvn or gradle.',
|
|
27
|
+
ruby: 'Do not run bundle exec or rspec.',
|
|
28
|
+
};
|
|
29
|
+
function parseLogFile(path) {
|
|
30
|
+
const entries = [];
|
|
31
|
+
const lines = readFileSync(path, 'utf8').split('\n');
|
|
32
|
+
for (const line of lines) {
|
|
33
|
+
if (!line.trim())
|
|
34
|
+
continue;
|
|
35
|
+
try {
|
|
36
|
+
entries.push(JSON.parse(line));
|
|
37
|
+
}
|
|
38
|
+
catch { /* skip malformed */ }
|
|
39
|
+
}
|
|
40
|
+
return entries;
|
|
41
|
+
}
|
|
42
|
+
export function classifyError(message) {
|
|
43
|
+
const cmdMatch = message.match(/(?:sh:|bash:|zsh:)?\s*([a-zA-Z0-9_-]+):\s*(?:command not found|not found)/i);
|
|
44
|
+
if (cmdMatch)
|
|
45
|
+
return { pattern: 'command_not_found', command: cmdMatch[1].toLowerCase() };
|
|
46
|
+
const branchMatch = message.match(/fatal: no such branch:?\s*'?([^\s'"]+)'?/i);
|
|
47
|
+
if (branchMatch)
|
|
48
|
+
return { pattern: 'base_branch_missing', branch: branchMatch[1] };
|
|
49
|
+
if (/timed? ?out|etimedout/i.test(message))
|
|
50
|
+
return { pattern: 'timeout' };
|
|
51
|
+
if (/bad credentials|401|unauthorized/i.test(message))
|
|
52
|
+
return { pattern: 'auth_failure' };
|
|
53
|
+
return { pattern: 'other' };
|
|
54
|
+
}
|
|
55
|
+
function detectLanguagesFromCommands(errors) {
|
|
56
|
+
const detected = new Set();
|
|
57
|
+
for (const e of errors) {
|
|
58
|
+
if (e.pattern === 'command_not_found' && e.command) {
|
|
59
|
+
const langs = COMMAND_LANGUAGE_MAP[e.command] ?? [];
|
|
60
|
+
for (const l of langs)
|
|
61
|
+
detected.add(l);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return [...detected];
|
|
65
|
+
}
|
|
66
|
+
function buildSuggestions(errors, languages) {
|
|
67
|
+
const suggestions = [];
|
|
68
|
+
const seen = new Set();
|
|
69
|
+
for (const e of errors) {
|
|
70
|
+
if (e.pattern === 'command_not_found' && e.command) {
|
|
71
|
+
const langs = COMMAND_LANGUAGE_MAP[e.command] ?? [];
|
|
72
|
+
for (const lang of langs) {
|
|
73
|
+
const instruction = LANGUAGE_CONSTRAINT_MAP[lang];
|
|
74
|
+
if (instruction && !seen.has(instruction)) {
|
|
75
|
+
seen.add(instruction);
|
|
76
|
+
suggestions.push({
|
|
77
|
+
type: 'add_constraint',
|
|
78
|
+
instruction,
|
|
79
|
+
reason: `${e.command}: command not found ×${e.count}${e.reviewer ? ` (${e.reviewer})` : ''}`,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (e.pattern === 'base_branch_missing' && !seen.has('base_branch_missing')) {
|
|
85
|
+
seen.add('base_branch_missing');
|
|
86
|
+
suggestions.push({
|
|
87
|
+
type: 'investigate',
|
|
88
|
+
reason: `base branch '${e.branch}' not found ×${e.count} — verify the branch is fetched before review`,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
if (e.pattern === 'timeout' && e.count >= 2 && !seen.has('timeout')) {
|
|
92
|
+
seen.add('timeout');
|
|
93
|
+
suggestions.push({
|
|
94
|
+
type: 'config_change',
|
|
95
|
+
reason: `review timed out ×${e.count} — consider lowering quality.tier to "fast" or "balanced"`,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return suggestions;
|
|
100
|
+
}
|
|
101
|
+
function collectLogFiles(since, logDir = LOG_DIR) {
|
|
102
|
+
if (!existsSync(logDir))
|
|
103
|
+
return [];
|
|
104
|
+
return readdirSync(logDir)
|
|
105
|
+
.filter(f => f.endsWith('.ndjson'))
|
|
106
|
+
.filter(f => !since || f.replace('.ndjson', '') >= since)
|
|
107
|
+
.sort()
|
|
108
|
+
.map(f => join(logDir, f));
|
|
109
|
+
}
|
|
110
|
+
export function buildDiagnoseReport(since, logDir) {
|
|
111
|
+
const files = collectLogFiles(since, logDir);
|
|
112
|
+
const allEntries = files.flatMap(parseLogFile);
|
|
113
|
+
// Track review lifecycle: review_started → review_complete
|
|
114
|
+
const started = new Map(); // key: `${repo}#${pr}`
|
|
115
|
+
const completed = new Set();
|
|
116
|
+
const errorPatterns = new Map();
|
|
117
|
+
const verdicts = { APPROVE: 0, NEEDS_WORK: 0, BLOCK: 0 };
|
|
118
|
+
const reposSeen = new Set();
|
|
119
|
+
const languagesSeen = new Set(); // from review_started log events
|
|
120
|
+
const reviewerStats = new Map();
|
|
121
|
+
for (const e of allEntries) {
|
|
122
|
+
if (e.repo)
|
|
123
|
+
reposSeen.add(e.repo);
|
|
124
|
+
if (e.event === 'review_started') {
|
|
125
|
+
const key = `${e.repo}#${e.pr}`;
|
|
126
|
+
started.set(key, e);
|
|
127
|
+
const r = e.reviewer ?? 'unknown';
|
|
128
|
+
if (!reviewerStats.has(r))
|
|
129
|
+
reviewerStats.set(r, { attempts: 0, successes: 0 });
|
|
130
|
+
reviewerStats.get(r).attempts++;
|
|
131
|
+
// Collect languages detected at review time
|
|
132
|
+
if (Array.isArray(e['languages'])) {
|
|
133
|
+
for (const lang of e['languages'])
|
|
134
|
+
languagesSeen.add(lang);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
if (e.event === 'review_complete') {
|
|
138
|
+
const key = `${e.repo}#${e.pr}`;
|
|
139
|
+
completed.add(key);
|
|
140
|
+
const r = e.reviewer ?? 'unknown';
|
|
141
|
+
const stats = reviewerStats.get(r);
|
|
142
|
+
if (stats)
|
|
143
|
+
stats.successes++;
|
|
144
|
+
if (e.verdict) {
|
|
145
|
+
const v = e.verdict;
|
|
146
|
+
if (v in verdicts)
|
|
147
|
+
verdicts[v]++;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
if (e.event === 'error' && e.level === 'error') {
|
|
151
|
+
const msg = e.message ?? '';
|
|
152
|
+
const { pattern, command, branch } = classifyError(msg);
|
|
153
|
+
// Derive reviewer from the active review_started entry for this repo+PR.
|
|
154
|
+
// The message itself never starts with "codex:" or "claude:" — that regex was dead.
|
|
155
|
+
const key = `${e.repo}#${e.pr}`;
|
|
156
|
+
const reviewer = started.get(key)?.reviewer;
|
|
157
|
+
const mapKey = pattern === 'command_not_found' ? `cmd:${command}` : pattern;
|
|
158
|
+
if (errorPatterns.has(mapKey)) {
|
|
159
|
+
errorPatterns.get(mapKey).count++;
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
errorPatterns.set(mapKey, { pattern, command, branch, count: 1, reviewer });
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
const errors = [...errorPatterns.values()].sort((a, b) => b.count - a.count);
|
|
167
|
+
// Merge: languages from log events + languages inferred from command errors
|
|
168
|
+
const languagesFromErrors = detectLanguagesFromCommands(errors);
|
|
169
|
+
const languages = [...new Set([...languagesSeen, ...languagesFromErrors])];
|
|
170
|
+
const suggestions = buildSuggestions(errors, languages);
|
|
171
|
+
const fromDate = files[0]?.split('/').at(-1)?.replace('.ndjson', '') ?? 'N/A';
|
|
172
|
+
const toDate = files.at(-1)?.split('/').at(-1)?.replace('.ndjson', '') ?? 'N/A';
|
|
173
|
+
const totalReviews = started.size;
|
|
174
|
+
const successfulReviews = completed.size;
|
|
175
|
+
// Guard against negative count: review_complete can exceed review_started when
|
|
176
|
+
// --since truncates the log window and some review_started events fall outside it.
|
|
177
|
+
const failedReviews = Math.max(0, totalReviews - successfulReviews);
|
|
178
|
+
const reviewer_performance = {};
|
|
179
|
+
for (const [name, stats] of reviewerStats.entries()) {
|
|
180
|
+
reviewer_performance[name] = {
|
|
181
|
+
attempts: stats.attempts,
|
|
182
|
+
successes: stats.successes,
|
|
183
|
+
failure_rate: stats.attempts > 0 ? (stats.attempts - stats.successes) / stats.attempts : 0,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
return {
|
|
187
|
+
period: { from: fromDate, to: toDate, log_files: files.length },
|
|
188
|
+
summary: {
|
|
189
|
+
total_reviews: totalReviews,
|
|
190
|
+
successful: successfulReviews,
|
|
191
|
+
failed: failedReviews,
|
|
192
|
+
failure_rate: totalReviews > 0 ? failedReviews / totalReviews : 0,
|
|
193
|
+
},
|
|
194
|
+
errors,
|
|
195
|
+
verdict_distribution: verdicts,
|
|
196
|
+
repos_seen: [...reposSeen],
|
|
197
|
+
languages_detected: languages,
|
|
198
|
+
reviewer_performance,
|
|
199
|
+
suggestions,
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
function pct(n, total) {
|
|
203
|
+
return total === 0 ? '—' : `${Math.round((n / total) * 100)}%`;
|
|
204
|
+
}
|
|
205
|
+
function printReport(report) {
|
|
206
|
+
const { period, summary, errors, verdict_distribution: vd, reviewer_performance: rp, suggestions } = report;
|
|
207
|
+
const total = vd.APPROVE + vd.NEEDS_WORK + vd.BLOCK;
|
|
208
|
+
console.log(chalk.bold('\ncrosscheck diagnose\n'));
|
|
209
|
+
console.log(chalk.dim(` Period ${period.from} → ${period.to} (${period.log_files} log file${period.log_files !== 1 ? 's' : ''})`));
|
|
210
|
+
console.log();
|
|
211
|
+
console.log(chalk.dim(' Reviews'));
|
|
212
|
+
console.log(` total ${summary.total_reviews}`);
|
|
213
|
+
console.log(` successful ${chalk.green(summary.successful)}`);
|
|
214
|
+
console.log(` failed ${summary.failed > 0 ? chalk.red(summary.failed) : chalk.green(summary.failed)} ${summary.failed > 0 ? chalk.dim(`(${pct(summary.failed, summary.total_reviews)} failure rate)`) : ''}`);
|
|
215
|
+
console.log();
|
|
216
|
+
if (Object.keys(rp).length > 0) {
|
|
217
|
+
console.log(chalk.dim(' Reviewer performance'));
|
|
218
|
+
for (const [name, perf] of Object.entries(rp)) {
|
|
219
|
+
const rate = perf.attempts > 0 ? Math.round((perf.successes / perf.attempts) * 100) : 0;
|
|
220
|
+
const indicator = rate >= 80 ? chalk.green(`${rate}%`) : rate >= 50 ? chalk.yellow(`${rate}%`) : chalk.red(`${rate}%`);
|
|
221
|
+
console.log(` ${name.padEnd(8)} ${perf.successes}/${perf.attempts} success ${indicator}`);
|
|
222
|
+
}
|
|
223
|
+
console.log();
|
|
224
|
+
}
|
|
225
|
+
if (total > 0) {
|
|
226
|
+
console.log(chalk.dim(' Verdict distribution'));
|
|
227
|
+
console.log(` APPROVE ${vd.APPROVE} ${chalk.dim(pct(vd.APPROVE, total))}`);
|
|
228
|
+
console.log(` NEEDS WORK ${vd.NEEDS_WORK} ${chalk.dim(pct(vd.NEEDS_WORK, total))}`);
|
|
229
|
+
console.log(` BLOCK ${vd.BLOCK} ${chalk.dim(pct(vd.BLOCK, total))}`);
|
|
230
|
+
console.log();
|
|
231
|
+
}
|
|
232
|
+
if (errors.length > 0) {
|
|
233
|
+
console.log(chalk.dim(' Error patterns'));
|
|
234
|
+
for (const e of errors) {
|
|
235
|
+
const label = e.pattern === 'command_not_found' ? `command not found: ${e.command}`
|
|
236
|
+
: e.pattern === 'base_branch_missing' ? `base branch missing: ${e.branch}`
|
|
237
|
+
: e.pattern;
|
|
238
|
+
console.log(` ${chalk.red('✗')} ${label.padEnd(40)} ×${e.count}${e.reviewer ? chalk.dim(` (${e.reviewer})`) : ''}`);
|
|
239
|
+
}
|
|
240
|
+
console.log();
|
|
241
|
+
}
|
|
242
|
+
if (report.languages_detected.length > 0) {
|
|
243
|
+
console.log(chalk.dim(' Languages detected'));
|
|
244
|
+
console.log(` ${report.languages_detected.join(', ')}`);
|
|
245
|
+
console.log();
|
|
246
|
+
}
|
|
247
|
+
if (suggestions.length > 0) {
|
|
248
|
+
console.log(chalk.dim(' Suggestions'));
|
|
249
|
+
for (const s of suggestions) {
|
|
250
|
+
const icon = s.type === 'add_constraint' ? chalk.yellow('→') : chalk.dim('→');
|
|
251
|
+
console.log(` ${icon} ${s.reason}`);
|
|
252
|
+
if (s.instruction)
|
|
253
|
+
console.log(` ${chalk.cyan(`add to instructions.md: "${s.instruction}"`)}`);
|
|
254
|
+
}
|
|
255
|
+
console.log();
|
|
256
|
+
console.log(chalk.dim(' Run `crosscheck optimize` to apply suggestions automatically.'));
|
|
257
|
+
}
|
|
258
|
+
else if (summary.total_reviews > 0) {
|
|
259
|
+
console.log(chalk.green(' ✓ No actionable issues found.'));
|
|
260
|
+
}
|
|
261
|
+
console.log();
|
|
262
|
+
}
|
|
263
|
+
export async function runDiagnose(opts) {
|
|
264
|
+
if (!existsSync(LOG_DIR)) {
|
|
265
|
+
if (opts.json) {
|
|
266
|
+
console.log(JSON.stringify({ error: 'No log directory found. Run crosscheck watch or serve first.' }));
|
|
267
|
+
}
|
|
268
|
+
else {
|
|
269
|
+
console.error(chalk.yellow('No logs found. Run `crosscheck watch` or `crosscheck serve` first.'));
|
|
270
|
+
}
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
const report = buildDiagnoseReport(opts.since, LOG_DIR);
|
|
274
|
+
if (opts.json) {
|
|
275
|
+
console.log(JSON.stringify(report, null, 2));
|
|
276
|
+
return;
|
|
277
|
+
}
|
|
278
|
+
printReport(report);
|
|
279
|
+
}
|
|
280
|
+
//# sourceMappingURL=diagnose.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnose.js","sourceRoot":"","sources":["../../src/commands/diagnose.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Config } from '../config/schema.js';
|
|
2
|
+
import { type DiagnoseReport } from './diagnose.js';
|
|
3
|
+
type Agent = 'claude' | 'codex';
|
|
4
|
+
export declare function selectOptimizeAgent(config: Config, report: DiagnoseReport): {
|
|
5
|
+
agent: Agent;
|
|
6
|
+
reason: string;
|
|
7
|
+
};
|
|
8
|
+
export declare function runOptimize(opts: {
|
|
9
|
+
apply?: boolean;
|
|
10
|
+
dryRun?: boolean;
|
|
11
|
+
since?: string;
|
|
12
|
+
agent?: string;
|
|
13
|
+
config?: string;
|
|
14
|
+
}): Promise<void>;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=optimize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optimize.d.ts","sourceRoot":"","sources":["../../src/commands/optimize.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAEjD,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,eAAe,CAAA;AAOxE,KAAK,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAA;AAE/B,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,cAAc,GACrB;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAoBlC;AAoFD,wBAAsB,WAAW,CAAC,IAAI,EAAE;IACtC,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+FhB"}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync, existsSync, mkdtempSync, rmSync } from 'fs';
|
|
2
|
+
import { fileURLToPath } from 'url';
|
|
3
|
+
import { dirname, join, resolve } from 'path';
|
|
4
|
+
import { tmpdir } from 'os';
|
|
5
|
+
import chalk from 'chalk';
|
|
6
|
+
import { execa } from 'execa';
|
|
7
|
+
import { loadConfig } from '../config/loader.js';
|
|
8
|
+
import { readInstructions, writeInstructions, getInstructionsPath } from '../lib/instructions.js';
|
|
9
|
+
import { buildDiagnoseReport } from './diagnose.js';
|
|
10
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
11
|
+
const __dirname = dirname(__filename);
|
|
12
|
+
// dist/commands/ → ../../ = package root
|
|
13
|
+
const PACKAGE_ROOT = resolve(__dirname, '..', '..');
|
|
14
|
+
export function selectOptimizeAgent(config, report) {
|
|
15
|
+
const enabled = [];
|
|
16
|
+
if (config.vendors.claude.enabled)
|
|
17
|
+
enabled.push('claude');
|
|
18
|
+
if (config.vendors.codex.enabled)
|
|
19
|
+
enabled.push('codex');
|
|
20
|
+
if (enabled.length === 0)
|
|
21
|
+
throw new Error('No vendors enabled in config — enable claude or codex under vendors.');
|
|
22
|
+
if (enabled.length === 1)
|
|
23
|
+
return { agent: enabled[0], reason: `only enabled vendor in config` };
|
|
24
|
+
// Both enabled — pick by success rate from log data
|
|
25
|
+
const cp = report.reviewer_performance['claude'];
|
|
26
|
+
const xp = report.reviewer_performance['codex'];
|
|
27
|
+
if (cp?.attempts > 0 && xp?.attempts > 0) {
|
|
28
|
+
const cr = cp.successes / cp.attempts;
|
|
29
|
+
const xr = xp.successes / xp.attempts;
|
|
30
|
+
if (xr > cr)
|
|
31
|
+
return { agent: 'codex', reason: `codex success rate ${Math.round(xr * 100)}% > claude ${Math.round(cr * 100)}%` };
|
|
32
|
+
if (cr > xr)
|
|
33
|
+
return { agent: 'claude', reason: `claude success rate ${Math.round(cr * 100)}% > codex ${Math.round(xr * 100)}%` };
|
|
34
|
+
}
|
|
35
|
+
return { agent: 'claude', reason: 'default (both enabled, no data or equal rates)' };
|
|
36
|
+
}
|
|
37
|
+
function findAgentMd(cwd) {
|
|
38
|
+
const candidates = [
|
|
39
|
+
join(cwd, 'AGENT.md'),
|
|
40
|
+
join(cwd, '.crosscheck', 'AGENT.md'),
|
|
41
|
+
join(PACKAGE_ROOT, 'AGENT.md'),
|
|
42
|
+
];
|
|
43
|
+
for (const p of candidates) {
|
|
44
|
+
if (existsSync(p))
|
|
45
|
+
return readFileSync(p, 'utf8');
|
|
46
|
+
}
|
|
47
|
+
throw new Error(`AGENT.md not found. Expected at ${candidates[2]}`);
|
|
48
|
+
}
|
|
49
|
+
// Minimal LCS-based unified diff for display
|
|
50
|
+
function unifiedDiff(oldText, newText) {
|
|
51
|
+
if (oldText === newText)
|
|
52
|
+
return '';
|
|
53
|
+
const a = oldText.split('\n');
|
|
54
|
+
const b = newText.split('\n');
|
|
55
|
+
const m = a.length, n = b.length;
|
|
56
|
+
// LCS via DP
|
|
57
|
+
const dp = Array.from({ length: m + 1 }, () => new Array(n + 1).fill(0));
|
|
58
|
+
for (let i = m - 1; i >= 0; i--)
|
|
59
|
+
for (let j = n - 1; j >= 0; j--)
|
|
60
|
+
dp[i][j] = a[i] === b[j] ? dp[i + 1][j + 1] + 1 : Math.max(dp[i + 1][j], dp[i][j + 1]);
|
|
61
|
+
const lines = [];
|
|
62
|
+
let i = 0, j = 0;
|
|
63
|
+
while (i < m || j < n) {
|
|
64
|
+
if (i < m && j < n && a[i] === b[j]) {
|
|
65
|
+
lines.push(` ${a[i]}`);
|
|
66
|
+
i++;
|
|
67
|
+
j++;
|
|
68
|
+
}
|
|
69
|
+
else if (j < n && (i >= m || dp[i + 1][j] >= dp[i][j + 1])) {
|
|
70
|
+
lines.push(chalk.green(`+${b[j]}`));
|
|
71
|
+
j++;
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
lines.push(chalk.red(`-${a[i]}`));
|
|
75
|
+
i++;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return lines.filter(l => !l.startsWith(' ')).length > 0
|
|
79
|
+
? lines.join('\n')
|
|
80
|
+
: '';
|
|
81
|
+
}
|
|
82
|
+
async function runWithClaude(prompt) {
|
|
83
|
+
let result;
|
|
84
|
+
try {
|
|
85
|
+
result = await execa('claude', ['--print', '--bare'], {
|
|
86
|
+
input: prompt,
|
|
87
|
+
timeout: 120_000,
|
|
88
|
+
env: { ...process.env },
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
93
|
+
if (/not logged in|please run \/login|run \/login/i.test(msg)) {
|
|
94
|
+
throw new Error('claude is not logged in — run: claude /login');
|
|
95
|
+
}
|
|
96
|
+
throw err;
|
|
97
|
+
}
|
|
98
|
+
return (result.stdout ?? result.stderr ?? '').trim();
|
|
99
|
+
}
|
|
100
|
+
async function runWithCodex(prompt) {
|
|
101
|
+
// codex is an agent runner — write the prompt as a file so it can read it,
|
|
102
|
+
// avoiding shell argument length limits on large prompts.
|
|
103
|
+
const tmpDir = mkdtempSync(join(tmpdir(), 'crosscheck-optimize-'));
|
|
104
|
+
try {
|
|
105
|
+
writeFileSync(join(tmpDir, 'OPTIMIZE_PROMPT.md'), prompt);
|
|
106
|
+
const result = await execa('codex', [
|
|
107
|
+
'-q',
|
|
108
|
+
'Read OPTIMIZE_PROMPT.md carefully and produce the new instructions.md content. ' +
|
|
109
|
+
'Output only the file content — no explanation, no markdown fences.',
|
|
110
|
+
], {
|
|
111
|
+
cwd: tmpDir,
|
|
112
|
+
timeout: 180_000,
|
|
113
|
+
env: { ...process.env },
|
|
114
|
+
});
|
|
115
|
+
return (result.stdout ?? '').trim();
|
|
116
|
+
}
|
|
117
|
+
finally {
|
|
118
|
+
rmSync(tmpDir, { recursive: true, force: true });
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
export async function runOptimize(opts) {
|
|
122
|
+
const config = loadConfig(opts.config);
|
|
123
|
+
const cwd = process.cwd();
|
|
124
|
+
// 1. Diagnose
|
|
125
|
+
console.log(chalk.dim(' Running diagnose...'));
|
|
126
|
+
const report = buildDiagnoseReport(opts.since);
|
|
127
|
+
// 2. Select agent
|
|
128
|
+
let selectedAgent;
|
|
129
|
+
let agentReason;
|
|
130
|
+
if (opts.agent === 'claude' || opts.agent === 'codex') {
|
|
131
|
+
selectedAgent = opts.agent;
|
|
132
|
+
agentReason = '--agent flag';
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
try {
|
|
136
|
+
const sel = selectOptimizeAgent(config, report);
|
|
137
|
+
selectedAgent = sel.agent;
|
|
138
|
+
agentReason = sel.reason;
|
|
139
|
+
}
|
|
140
|
+
catch (err) {
|
|
141
|
+
console.error(chalk.red(`✗ ${err instanceof Error ? err.message : String(err)}`));
|
|
142
|
+
process.exit(1);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
console.log(` agent ${chalk.cyan(selectedAgent)} ${chalk.dim(`(${agentReason})`)}`);
|
|
146
|
+
// 3. Load AGENT.md and current instructions
|
|
147
|
+
let agentMd;
|
|
148
|
+
try {
|
|
149
|
+
agentMd = findAgentMd(cwd);
|
|
150
|
+
}
|
|
151
|
+
catch (err) {
|
|
152
|
+
console.error(chalk.red(`✗ ${err instanceof Error ? err.message : String(err)}`));
|
|
153
|
+
process.exit(1);
|
|
154
|
+
}
|
|
155
|
+
const currentInstructions = readInstructions();
|
|
156
|
+
const instructionsPath = getInstructionsPath();
|
|
157
|
+
// 4. Build prompt
|
|
158
|
+
const prompt = [
|
|
159
|
+
agentMd,
|
|
160
|
+
'',
|
|
161
|
+
'---',
|
|
162
|
+
'',
|
|
163
|
+
'## Diagnostic report',
|
|
164
|
+
'',
|
|
165
|
+
'```json',
|
|
166
|
+
JSON.stringify(report, null, 2),
|
|
167
|
+
'```',
|
|
168
|
+
'',
|
|
169
|
+
`## Current ${instructionsPath}`,
|
|
170
|
+
'',
|
|
171
|
+
currentInstructions || '(empty)',
|
|
172
|
+
].join('\n');
|
|
173
|
+
// 5. Run agent
|
|
174
|
+
console.log(chalk.dim(` Asking ${selectedAgent} to optimize instructions...`));
|
|
175
|
+
let newInstructions;
|
|
176
|
+
try {
|
|
177
|
+
newInstructions = selectedAgent === 'claude'
|
|
178
|
+
? await runWithClaude(prompt)
|
|
179
|
+
: await runWithCodex(prompt);
|
|
180
|
+
}
|
|
181
|
+
catch (err) {
|
|
182
|
+
console.error(chalk.red(`✗ ${selectedAgent} failed: ${err instanceof Error ? err.message : String(err)}`));
|
|
183
|
+
process.exit(1);
|
|
184
|
+
}
|
|
185
|
+
if (!newInstructions || newInstructions.length < 20) {
|
|
186
|
+
console.error(chalk.red('✗ Agent returned empty or unusable output'));
|
|
187
|
+
process.exit(1);
|
|
188
|
+
}
|
|
189
|
+
// 6. Diff
|
|
190
|
+
const diff = unifiedDiff(currentInstructions, newInstructions);
|
|
191
|
+
if (!diff) {
|
|
192
|
+
console.log(chalk.green('\n ✓ Instructions are already optimal — no changes needed.'));
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
console.log(chalk.bold(`\n diff ${instructionsPath}\n`));
|
|
196
|
+
console.log(diff);
|
|
197
|
+
console.log();
|
|
198
|
+
// 7. Apply or exit
|
|
199
|
+
const apply = opts.apply && !opts.dryRun;
|
|
200
|
+
if (apply) {
|
|
201
|
+
writeInstructions(newInstructions);
|
|
202
|
+
console.log(chalk.green(` ✓ Written to ${instructionsPath}`));
|
|
203
|
+
console.log(chalk.dim(' Next reviews will use the updated instructions.'));
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
console.log(chalk.dim(` Run with --apply to write changes to ${instructionsPath}`));
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=optimize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optimize.js","sourceRoot":"","sources":["../../src/commands/optimize.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"AAoBA,wBAAsB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,iBAwGzF"}
|
package/dist/commands/review.js
CHANGED
|
@@ -10,6 +10,7 @@ import { runCodexReview } from '../reviewers/codex.js';
|
|
|
10
10
|
import { runClaudeReview } from '../reviewers/claude.js';
|
|
11
11
|
import { loadConfig, getGithubToken } from '../config/loader.js';
|
|
12
12
|
import { initLogger, log as fileLog, logError } from '../lib/logger.js';
|
|
13
|
+
import { detectLanguages } from '../lib/languages.js';
|
|
13
14
|
function parsePRUrl(url) {
|
|
14
15
|
const m = url.match(/github\.com\/([^/]+)\/([^/]+)\/pull\/(\d+)/);
|
|
15
16
|
if (!m)
|
|
@@ -70,7 +71,8 @@ export async function runReview(prUrl, configPath, forceReviewer) {
|
|
|
70
71
|
spinner2.succeed('Repo ready');
|
|
71
72
|
let reviewText;
|
|
72
73
|
const reviewStart = Date.now();
|
|
73
|
-
|
|
74
|
+
const languages = detectLanguages(tmpDir);
|
|
75
|
+
fileLog({ level: 'info', event: 'review_started', repo: `${owner}/${repo}`, pr: number, reviewer, languages });
|
|
74
76
|
let elapsed = 0;
|
|
75
77
|
const reviewSpinner = ora(`Running ${reviewer} review...`).start();
|
|
76
78
|
const elapsedTimer = setInterval(() => { elapsed++; reviewSpinner.text = `Running ${reviewer} review... (${elapsed}s)`; }, 1000);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,IAAI,CAAA;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAA;AAC3B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,GAAG,MAAM,KAAK,CAAA;AACrB,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAC3E,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAChE,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAaA,wBAAsB,SAAS,CAAC,UAAU,CAAC,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAaA,wBAAsB,SAAS,CAAC,UAAU,CAAC,EAAE,MAAM,iBAuElD"}
|