@humanbased/crosscheck 0.14.0 → 0.15.0-beta.103
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/README.md +147 -4
- package/crosscheck.config.example.yml +3 -1
- package/dist/__tests__/backtrace.test.js +1 -1
- package/dist/__tests__/backtrace.test.js.map +1 -1
- package/dist/__tests__/durations.test.js +5 -1
- package/dist/__tests__/durations.test.js.map +1 -1
- package/dist/__tests__/fix.test.js +48 -1
- package/dist/__tests__/fix.test.js.map +1 -1
- package/dist/__tests__/kickass.test.js +362 -69
- package/dist/__tests__/kickass.test.js.map +1 -1
- package/dist/__tests__/optimize.test.js +3 -3
- package/dist/__tests__/optimize.test.js.map +1 -1
- package/dist/__tests__/pr-picker.test.js +8 -7
- package/dist/__tests__/pr-picker.test.js.map +1 -1
- package/dist/__tests__/pr-status.test.js +41 -20
- package/dist/__tests__/pr-status.test.js.map +1 -1
- package/dist/__tests__/pr-workflow-state.test.d.ts +2 -0
- package/dist/__tests__/pr-workflow-state.test.d.ts.map +1 -0
- package/dist/__tests__/pr-workflow-state.test.js +184 -0
- package/dist/__tests__/pr-workflow-state.test.js.map +1 -0
- package/dist/__tests__/review-models.test.js +1 -0
- package/dist/__tests__/review-models.test.js.map +1 -1
- package/dist/__tests__/run.test.d.ts +2 -0
- package/dist/__tests__/run.test.d.ts.map +1 -0
- package/dist/__tests__/run.test.js +81 -0
- package/dist/__tests__/run.test.js.map +1 -0
- package/dist/__tests__/runner.test.js +117 -1
- package/dist/__tests__/runner.test.js.map +1 -1
- package/dist/__tests__/smart-switch.test.js +1 -1
- package/dist/__tests__/smart-switch.test.js.map +1 -1
- package/dist/__tests__/tier-timeouts.test.d.ts +2 -0
- package/dist/__tests__/tier-timeouts.test.d.ts.map +1 -0
- package/dist/__tests__/tier-timeouts.test.js +23 -0
- package/dist/__tests__/tier-timeouts.test.js.map +1 -0
- package/dist/__tests__/webhook.test.d.ts +2 -0
- package/dist/__tests__/webhook.test.d.ts.map +1 -0
- package/dist/__tests__/webhook.test.js +197 -0
- package/dist/__tests__/webhook.test.js.map +1 -0
- package/dist/cli.js +38 -5
- package/dist/cli.js.map +1 -1
- package/dist/commands/detect-step.d.ts +5 -0
- package/dist/commands/detect-step.d.ts.map +1 -0
- package/dist/commands/detect-step.js +124 -0
- package/dist/commands/detect-step.js.map +1 -0
- package/dist/commands/kickass.d.ts +18 -10
- package/dist/commands/kickass.d.ts.map +1 -1
- package/dist/commands/kickass.js +234 -63
- package/dist/commands/kickass.js.map +1 -1
- package/dist/commands/review.d.ts.map +1 -1
- package/dist/commands/review.js +14 -5
- package/dist/commands/review.js.map +1 -1
- package/dist/commands/run.d.ts +16 -1
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +347 -44
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/serve.d.ts.map +1 -1
- package/dist/commands/serve.js +41 -3
- package/dist/commands/serve.js.map +1 -1
- package/dist/commands/watch.d.ts.map +1 -1
- package/dist/commands/watch.js +200 -6
- package/dist/commands/watch.js.map +1 -1
- package/dist/config/schema.d.ts +52 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +24 -1
- package/dist/config/schema.js.map +1 -1
- package/dist/github/client.d.ts +40 -1
- package/dist/github/client.d.ts.map +1 -1
- package/dist/github/client.js +69 -9
- package/dist/github/client.js.map +1 -1
- package/dist/github/review-status.d.ts.map +1 -1
- package/dist/github/review-status.js +7 -4
- package/dist/github/review-status.js.map +1 -1
- package/dist/github/webhook.d.ts +25 -1
- package/dist/github/webhook.d.ts.map +1 -1
- package/dist/github/webhook.js +37 -1
- package/dist/github/webhook.js.map +1 -1
- package/dist/lib/annotation.d.ts +4 -0
- package/dist/lib/annotation.d.ts.map +1 -1
- package/dist/lib/annotation.js +5 -1
- package/dist/lib/annotation.js.map +1 -1
- package/dist/lib/comment-bodies.d.ts.map +1 -1
- package/dist/lib/comment-bodies.js +3 -2
- package/dist/lib/comment-bodies.js.map +1 -1
- package/dist/lib/durations.d.ts.map +1 -1
- package/dist/lib/durations.js +5 -3
- package/dist/lib/durations.js.map +1 -1
- package/dist/lib/logger.d.ts +3 -0
- package/dist/lib/logger.d.ts.map +1 -1
- package/dist/lib/logger.js +29 -3
- package/dist/lib/logger.js.map +1 -1
- package/dist/lib/pr-picker.d.ts.map +1 -1
- package/dist/lib/pr-picker.js +5 -1
- package/dist/lib/pr-picker.js.map +1 -1
- package/dist/lib/pr-status.d.ts +4 -3
- package/dist/lib/pr-status.d.ts.map +1 -1
- package/dist/lib/pr-status.js +19 -13
- package/dist/lib/pr-status.js.map +1 -1
- package/dist/lib/pr-workflow-state.d.ts +68 -0
- package/dist/lib/pr-workflow-state.d.ts.map +1 -0
- package/dist/lib/pr-workflow-state.js +328 -0
- package/dist/lib/pr-workflow-state.js.map +1 -0
- package/dist/lib/product.d.ts +3 -0
- package/dist/lib/product.d.ts.map +1 -0
- package/dist/lib/product.js +5 -0
- package/dist/lib/product.js.map +1 -0
- package/dist/lib/repo-picker.d.ts +1 -0
- package/dist/lib/repo-picker.d.ts.map +1 -1
- package/dist/lib/repo-picker.js +50 -33
- package/dist/lib/repo-picker.js.map +1 -1
- package/dist/lib/runner.d.ts +19 -1
- package/dist/lib/runner.d.ts.map +1 -1
- package/dist/lib/runner.js +337 -54
- package/dist/lib/runner.js.map +1 -1
- package/dist/lib/smart-switch.js +1 -1
- package/dist/lib/smart-switch.js.map +1 -1
- package/dist/lib/vendor.d.ts +4 -0
- package/dist/lib/vendor.d.ts.map +1 -0
- package/dist/lib/vendor.js +14 -0
- package/dist/lib/vendor.js.map +1 -0
- package/dist/lib/workflow.d.ts +5 -0
- package/dist/lib/workflow.d.ts.map +1 -1
- package/dist/lib/workflow.js.map +1 -1
- package/dist/reviewers/claude.d.ts +3 -1
- package/dist/reviewers/claude.d.ts.map +1 -1
- package/dist/reviewers/claude.js +14 -9
- package/dist/reviewers/claude.js.map +1 -1
- package/dist/reviewers/codex.d.ts +1 -1
- package/dist/reviewers/codex.d.ts.map +1 -1
- package/dist/reviewers/codex.js +7 -10
- package/dist/reviewers/codex.js.map +1 -1
- package/dist/reviewers/conflict-resolve.d.ts +1 -1
- package/dist/reviewers/conflict-resolve.d.ts.map +1 -1
- package/dist/reviewers/conflict-resolve.js +3 -2
- package/dist/reviewers/conflict-resolve.js.map +1 -1
- package/dist/reviewers/fix.d.ts +5 -1
- package/dist/reviewers/fix.d.ts.map +1 -1
- package/dist/reviewers/fix.js +68 -2
- package/dist/reviewers/fix.js.map +1 -1
- package/dist/reviewers/tier-timeouts.d.ts +5 -0
- package/dist/reviewers/tier-timeouts.d.ts.map +1 -0
- package/dist/reviewers/tier-timeouts.js +14 -0
- package/dist/reviewers/tier-timeouts.js.map +1 -0
- package/get-started.md +56 -5
- package/get-started.zh.md +7 -1
- package/package.json +1 -1
package/dist/reviewers/fix.js
CHANGED
|
@@ -62,7 +62,7 @@ export function applyEdit(fileContent, oldText, newText) {
|
|
|
62
62
|
return null;
|
|
63
63
|
return fileContent.slice(0, idx) + newText + fileContent.slice(idx + oldText.length);
|
|
64
64
|
}
|
|
65
|
-
export async function runFixStep(tmpDir, baseRef, prTitle, reviewComment, instructions, config, model = 'default') {
|
|
65
|
+
export async function runFixStep(tmpDir, baseRef, prTitle, reviewComment, instructions, config, model = 'default', timeoutMs) {
|
|
66
66
|
let diff = '';
|
|
67
67
|
try {
|
|
68
68
|
diff = execSync(`git diff origin/${baseRef}...HEAD`, { cwd: tmpDir, encoding: 'utf8' });
|
|
@@ -82,9 +82,10 @@ export async function runFixStep(tmpDir, baseRef, prTitle, reviewComment, instru
|
|
|
82
82
|
let tokensUsed;
|
|
83
83
|
try {
|
|
84
84
|
const modelArgs = model !== 'default' ? ['--model', model] : [];
|
|
85
|
+
const resolvedTimeout = timeoutMs === undefined ? 180_000 : timeoutMs === 0 ? undefined : timeoutMs;
|
|
85
86
|
const { stdout } = await execa('claude', ['--print', '--output-format', 'json', ...modelArgs], {
|
|
86
87
|
input: prompt,
|
|
87
|
-
timeout:
|
|
88
|
+
timeout: resolvedTimeout,
|
|
88
89
|
env: { ...process.env },
|
|
89
90
|
});
|
|
90
91
|
const raw = stdout.trim();
|
|
@@ -194,4 +195,69 @@ export async function runFixStep(tmpDir, baseRef, prTitle, reviewComment, instru
|
|
|
194
195
|
}
|
|
195
196
|
return { appliedCount, tokensUsed };
|
|
196
197
|
}
|
|
198
|
+
// Codex fix: codex is an agentic tool that edits files directly on disk.
|
|
199
|
+
// We pass the fix context as a prompt, run codex in full-auto mode, then
|
|
200
|
+
// detect how many files changed via git diff rather than parsing edit blocks.
|
|
201
|
+
const CODEX_FIX_PROMPT = `You opened a pull request that received the following code review.
|
|
202
|
+
|
|
203
|
+
PR title: {PR_TITLE}
|
|
204
|
+
|
|
205
|
+
Code review comment:
|
|
206
|
+
---
|
|
207
|
+
{REVIEW_COMMENT}
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
Diff of your changes (base..head):
|
|
211
|
+
---
|
|
212
|
+
{DIFF}
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
{EXTRA_INSTRUCTIONS}
|
|
216
|
+
|
|
217
|
+
Please address the issues raised in the review. Rules:
|
|
218
|
+
- Only fix what the review explicitly calls out
|
|
219
|
+
- Do not refactor unrelated code, rename variables, or add tests unless asked
|
|
220
|
+
- If a comment requires deeper understanding of business logic, skip it
|
|
221
|
+
- If there are no actionable code changes, exit immediately without modifying any files`;
|
|
222
|
+
export async function runCodexFixStep(tmpDir, baseRef, prTitle, reviewComment, instructions, model = 'default', timeoutMs) {
|
|
223
|
+
let diff = '';
|
|
224
|
+
try {
|
|
225
|
+
diff = execSync(`git diff origin/${baseRef}...HEAD`, { cwd: tmpDir, encoding: 'utf8' });
|
|
226
|
+
}
|
|
227
|
+
catch {
|
|
228
|
+
try {
|
|
229
|
+
diff = execSync('git diff HEAD~1', { cwd: tmpDir, encoding: 'utf8' });
|
|
230
|
+
}
|
|
231
|
+
catch { /* proceed with empty diff */ }
|
|
232
|
+
}
|
|
233
|
+
const prompt = CODEX_FIX_PROMPT
|
|
234
|
+
.replace('{PR_TITLE}', prTitle)
|
|
235
|
+
.replace('{REVIEW_COMMENT}', reviewComment.slice(0, 8000))
|
|
236
|
+
.replace('{DIFF}', diff.slice(0, 16000))
|
|
237
|
+
.replace('{EXTRA_INSTRUCTIONS}', instructions ? `Additional instructions: ${instructions}` : '');
|
|
238
|
+
const resolvedTimeout = timeoutMs === undefined ? 300_000 : timeoutMs === 0 ? undefined : timeoutMs;
|
|
239
|
+
const modelArgs = model !== 'default' ? ['-c', `model="${model}"`] : [];
|
|
240
|
+
try {
|
|
241
|
+
await execa('codex', ['exec', ...modelArgs, prompt], {
|
|
242
|
+
cwd: tmpDir,
|
|
243
|
+
timeout: resolvedTimeout,
|
|
244
|
+
env: { ...process.env, CODEX_QUIET_MODE: '1', HOME: process.env.HOME ?? '' },
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
catch (err) {
|
|
248
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
249
|
+
if (/not logged in|auth|credential/i.test(msg)) {
|
|
250
|
+
throw new Error('codex auth failure during fix step — run: codex login');
|
|
251
|
+
}
|
|
252
|
+
throw err;
|
|
253
|
+
}
|
|
254
|
+
// Count all files codex touched: modified/deleted (git diff) + newly created (git ls-files --others)
|
|
255
|
+
const changedOutput = execSync('git diff --name-only', { cwd: tmpDir, encoding: 'utf8' }).trim();
|
|
256
|
+
const untrackedOutput = execSync('git ls-files --others --exclude-standard', { cwd: tmpDir, encoding: 'utf8' }).trim();
|
|
257
|
+
const changedFiles = [
|
|
258
|
+
...(changedOutput ? changedOutput.split('\n').filter(Boolean) : []),
|
|
259
|
+
...(untrackedOutput ? untrackedOutput.split('\n').filter(Boolean) : []),
|
|
260
|
+
];
|
|
261
|
+
return { appliedCount: changedFiles.length };
|
|
262
|
+
}
|
|
197
263
|
//# sourceMappingURL=fix.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fix.js","sourceRoot":"","sources":["../../src/reviewers/fix.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAA;AAQ7B,mFAAmF;AACnF,yDAAyD;AACzD,MAAM,cAAc,GAAG,GAAG,CAAA;AAE1B,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wDAyCgC,CAAA;AAExD,SAAS,UAAU,CAAC,QAAgB;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;AAC9D,CAAC;AAED,yEAAyE;AACzE,mFAAmF;AACnF,MAAM,UAAU,SAAS,CAAC,WAAmB,EAAE,OAAe,EAAE,OAAe;IAC7E,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IACxC,IAAI,GAAG,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAA;IAC3B,gFAAgF;IAChF,mFAAmF;IACnF,IAAI,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,GAAG;QAAE,OAAO,IAAI,CAAA;IACzD,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AACtF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAAc,EACd,OAAe,EACf,OAAe,EACf,aAAqB,EACrB,YAAoB,EACpB,MAAc,EACd,KAAK,GAAG,SAAS;
|
|
1
|
+
{"version":3,"file":"fix.js","sourceRoot":"","sources":["../../src/reviewers/fix.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { QualityConfig } from '../config/schema.js';
|
|
2
|
+
export declare const TIER_TIMEOUT_MS: Record<QualityConfig['tier'], number>;
|
|
3
|
+
export declare const DEFAULT_TIER_TIMEOUT_MS: number;
|
|
4
|
+
export declare function tierTimeoutMs(tier: QualityConfig['tier']): number;
|
|
5
|
+
//# sourceMappingURL=tier-timeouts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tier-timeouts.d.ts","sourceRoot":"","sources":["../../src/reviewers/tier-timeouts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAMxD,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,CAIjE,CAAA;AAED,eAAO,MAAM,uBAAuB,QAA2B,CAAA;AAE/D,wBAAgB,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,MAAM,CAEjE"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// Default reviewer subprocess timeouts per quality tier. Applied when
|
|
2
|
+
// neither --timeout nor vendor.timeout_sec is set. Both claude and codex
|
|
3
|
+
// reviewers share this table so that quality.tier has a consistent effect
|
|
4
|
+
// across vendors.
|
|
5
|
+
export const TIER_TIMEOUT_MS = {
|
|
6
|
+
fast: 300_000,
|
|
7
|
+
balanced: 600_000,
|
|
8
|
+
thorough: 1_200_000,
|
|
9
|
+
};
|
|
10
|
+
export const DEFAULT_TIER_TIMEOUT_MS = TIER_TIMEOUT_MS.balanced;
|
|
11
|
+
export function tierTimeoutMs(tier) {
|
|
12
|
+
return TIER_TIMEOUT_MS[tier] ?? DEFAULT_TIER_TIMEOUT_MS;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=tier-timeouts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tier-timeouts.js","sourceRoot":"","sources":["../../src/reviewers/tier-timeouts.ts"],"names":[],"mappings":"AAEA,sEAAsE;AACtE,yEAAyE;AACzE,0EAA0E;AAC1E,kBAAkB;AAClB,MAAM,CAAC,MAAM,eAAe,GAA0C;IACpE,IAAI,EAAE,OAAO;IACb,QAAQ,EAAE,OAAO;IACjB,QAAQ,EAAE,SAAS;CACpB,CAAA;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG,eAAe,CAAC,QAAQ,CAAA;AAE/D,MAAM,UAAU,aAAa,CAAC,IAA2B;IACvD,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,uBAAuB,CAAA;AACzD,CAAC"}
|
package/get-started.md
CHANGED
|
@@ -471,24 +471,31 @@ crosscheck review https://github.com/owner/repo/pull/123 --reviewer claude
|
|
|
471
471
|
|
|
472
472
|
### `crosscheck run <pr-url>`
|
|
473
473
|
|
|
474
|
-
|
|
474
|
+
Runs the full configured workflow against a single PR: review → (fix → recheck) × `max_rounds`. Without `--steps`, `detect-step` determines where to resume from live PR history (skipping steps already completed for the current HEAD), then runs all remaining steps from that point. Pass `--steps` explicitly to restrict to specific steps.
|
|
475
475
|
|
|
476
476
|
```bash
|
|
477
477
|
crosscheck run https://github.com/owner/repo/pull/123
|
|
478
478
|
crosscheck run https://github.com/owner/repo/pull/123 --reviewer claude
|
|
479
|
+
crosscheck run https://github.com/owner/repo/pull/123 --fixer claude
|
|
480
|
+
crosscheck run https://github.com/owner/repo/pull/123 --vendor claude
|
|
479
481
|
crosscheck run https://github.com/owner/repo/pull/123 --steps review,fix
|
|
480
482
|
crosscheck run https://github.com/owner/repo/pull/123 --dry-run
|
|
481
|
-
crosscheck run https://github.com/owner/repo/pull/123 --
|
|
483
|
+
crosscheck run https://github.com/owner/repo/pull/123 --crazy # loop until APPROVE
|
|
484
|
+
crosscheck run https://github.com/owner/repo/pull/123 --halfcrazy
|
|
482
485
|
```
|
|
483
486
|
|
|
484
487
|
The workflow executed is loaded from `.crosscheck/workflow.yml` in the repo root (if present) or falls back to the built-in default pipeline (review only). Use `crosscheck run` to test your full pipeline end-to-end against a real PR.
|
|
485
488
|
|
|
486
489
|
| Flag | Description |
|
|
487
490
|
|---|---|
|
|
488
|
-
| `-r, --reviewer codex\|claude` | Force
|
|
491
|
+
| `-r, --reviewer codex\|claude` | Force review/recheck steps to use this vendor; skip auto-detection for review routing |
|
|
492
|
+
| `--fixer codex\|claude` | Force fix steps to use this vendor |
|
|
493
|
+
| `--vendor codex\|claude` | Force review, recheck, and fix steps to use this vendor |
|
|
489
494
|
| `--steps <list>` | Run only the listed step types, comma-separated: `review`, `fix`, `recheck` |
|
|
490
495
|
| `--dry-run` | Run the review but do not post a comment or apply fixes |
|
|
491
496
|
| `--expected-head-sha <sha>` | Skip if the PR head changed since the command was queued |
|
|
497
|
+
| `--crazy` | After the initial run, loop fix→recheck until APPROVE (ceiling: 2 rounds) |
|
|
498
|
+
| `--halfcrazy` | After the initial run, loop until verdict is not BLOCK — stops at NEEDS\_WORK or APPROVE |
|
|
492
499
|
| `-c, --config <path>` | Use a specific config file |
|
|
493
500
|
|
|
494
501
|
---
|
|
@@ -515,18 +522,60 @@ crosscheck scan --json
|
|
|
515
522
|
|
|
516
523
|
### `crosscheck kickass`
|
|
517
524
|
|
|
518
|
-
Selects
|
|
525
|
+
Selects all actionable PRs (any PR where a next step is needed: review, fix, recheck) and advances each one. Stale PRs are shown first. APPROVE PRs appear as a read-only "needs merge (manual)" section — visible so you know what's ready, but not dispatched automatically. The command revalidates the PR head before each mutation and prints an execution summary when it finishes.
|
|
526
|
+
|
|
527
|
+
Each PR dispatch uses `detect-step` to read live PR comment history and advances **exactly the next needed step** — kickass drives one step per PR, then `watch` picks up continuation via the webhooks that step produces.
|
|
519
528
|
|
|
520
529
|
```bash
|
|
521
530
|
crosscheck kickass --dry-run
|
|
522
531
|
crosscheck kickass --force --stale-after 2h
|
|
532
|
+
crosscheck kickass --crazy # loop fix→recheck until APPROVE (ceiling: 2 rounds)
|
|
533
|
+
crosscheck kickass --halfcrazy # loop until verdict is not BLOCK
|
|
523
534
|
```
|
|
524
535
|
|
|
525
536
|
| Flag | Description |
|
|
526
537
|
|---|---|
|
|
527
538
|
| `--dry-run` | Print the selected actions without mutating PRs |
|
|
528
539
|
| `--force` | Bypass the short-lived scan cache |
|
|
529
|
-
| `--stale-after <duration>` | Only
|
|
540
|
+
| `--stale-after <duration>` | Only show PRs stale for at least this duration |
|
|
541
|
+
| `--crazy` | Autonomous loop: keep running fix→recheck cycles until APPROVE (ceiling: 2 rounds per PR) |
|
|
542
|
+
| `--halfcrazy` | Autonomous loop: keep running until verdict is not BLOCK — NEEDS\_WORK is acceptable |
|
|
543
|
+
|
|
544
|
+
#### `kickass` + `watch` combo
|
|
545
|
+
|
|
546
|
+
When a batch of PRs is stuck — timed out, or stopped before `watch` was running — use both commands together for hands-free recovery:
|
|
547
|
+
|
|
548
|
+
```bash
|
|
549
|
+
# terminal 1 — keep running to handle continuations
|
|
550
|
+
crosscheck watch
|
|
551
|
+
|
|
552
|
+
# terminal 2 — kick each stuck PR one step forward
|
|
553
|
+
crosscheck scan --force
|
|
554
|
+
crosscheck kickass
|
|
555
|
+
```
|
|
556
|
+
|
|
557
|
+
How they divide the work:
|
|
558
|
+
|
|
559
|
+
```
|
|
560
|
+
crosscheck kickass
|
|
561
|
+
└─ ck run <url> --trigger kickass (one step; detect-step finds where to start)
|
|
562
|
+
└─ detect-step → "review" run review only → posts comment
|
|
563
|
+
└─ detect-step → "fix" run fix only → pushes commit
|
|
564
|
+
└─ detect-step → "recheck" run recheck only → posts verdict
|
|
565
|
+
|
|
566
|
+
crosscheck watch
|
|
567
|
+
├─ issue_comment (type=review) → pick up fix step automatically
|
|
568
|
+
└─ synchronize (fix commit) → pick up recheck step automatically
|
|
569
|
+
```
|
|
570
|
+
|
|
571
|
+
> **Note:** `ck run <url>` invoked directly (without `--trigger kickass`) runs the **full remaining pipeline** from the detected starting step. The one-step behaviour above applies only when kickass dispatches it.
|
|
572
|
+
|
|
573
|
+
`kickass` advances each PR exactly one step using live `detect-step` detection. `watch` owns all continuation via webhooks:
|
|
574
|
+
|
|
575
|
+
- A posted review fires an `issue_comment` webhook → `watch` starts the fix step.
|
|
576
|
+
- A fix commit fires a `synchronize` webhook → `watch` starts the recheck step.
|
|
577
|
+
|
|
578
|
+
No second `kickass` run is needed. Once `kickass` kicks the first step, the pipeline advances on its own as long as `watch` is running. (Introduced in [#193](https://github.com/humanbased-ai/crosscheck/pull/193).)
|
|
530
579
|
|
|
531
580
|
---
|
|
532
581
|
|
|
@@ -872,11 +921,13 @@ vendors:
|
|
|
872
921
|
enabled: true
|
|
873
922
|
auth: subscription # subscription | api-key
|
|
874
923
|
model: o4-mini # only used when auth: api-key
|
|
924
|
+
# timeout_sec: 1200 # max seconds per CLI call; unset = tier-based (300/600/1200)
|
|
875
925
|
|
|
876
926
|
claude:
|
|
877
927
|
enabled: true
|
|
878
928
|
model: sonnet # haiku | sonnet | opus
|
|
879
929
|
effort: medium # low | medium | high | max
|
|
930
|
+
# timeout_sec: 1200 # max seconds per CLI call; unset = tier-based (300/600/1200)
|
|
880
931
|
|
|
881
932
|
# ── Quality ───────────────────────────────────────────────────────────────────
|
|
882
933
|
quality:
|
package/get-started.zh.md
CHANGED
|
@@ -476,6 +476,8 @@ crosscheck review https://github.com/owner/repo/pull/123 --reviewer claude
|
|
|
476
476
|
```bash
|
|
477
477
|
crosscheck run https://github.com/owner/repo/pull/123
|
|
478
478
|
crosscheck run https://github.com/owner/repo/pull/123 --reviewer claude
|
|
479
|
+
crosscheck run https://github.com/owner/repo/pull/123 --fixer claude
|
|
480
|
+
crosscheck run https://github.com/owner/repo/pull/123 --vendor claude
|
|
479
481
|
crosscheck run https://github.com/owner/repo/pull/123 --steps review,fix
|
|
480
482
|
crosscheck run https://github.com/owner/repo/pull/123 --dry-run
|
|
481
483
|
```
|
|
@@ -484,7 +486,9 @@ crosscheck run https://github.com/owner/repo/pull/123 --dry-run
|
|
|
484
486
|
|
|
485
487
|
| 参数 | 说明 |
|
|
486
488
|
|---|---|
|
|
487
|
-
| `-r, --reviewer codex\|claude` |
|
|
489
|
+
| `-r, --reviewer codex\|claude` | 强制 review/recheck 步骤使用该 vendor,并跳过审查路由自动检测 |
|
|
490
|
+
| `--fixer codex\|claude` | 强制 fix 步骤使用该 vendor |
|
|
491
|
+
| `--vendor codex\|claude` | 强制 review、recheck、fix 步骤都使用该 vendor |
|
|
488
492
|
| `--steps <list>` | 只运行列出的步骤类型,逗号分隔:`review`、`fix`、`recheck` |
|
|
489
493
|
| `--dry-run` | 运行审查但不发布评论或应用修复 |
|
|
490
494
|
| `-c, --config <path>` | 使用指定配置文件 |
|
|
@@ -823,11 +827,13 @@ vendors:
|
|
|
823
827
|
enabled: true
|
|
824
828
|
auth: subscription # subscription | api-key
|
|
825
829
|
model: o4-mini # 仅在 auth: api-key 时生效
|
|
830
|
+
# timeout_sec: 1200 # 单次 CLI 调用最大秒数;不设 = 按 tier(300/600/1200)
|
|
826
831
|
|
|
827
832
|
claude:
|
|
828
833
|
enabled: true
|
|
829
834
|
model: sonnet # haiku | sonnet | opus
|
|
830
835
|
effort: medium # low | medium | high | max
|
|
836
|
+
# timeout_sec: 1200 # 单次 CLI 调用最大秒数;不设 = 180。大 PR 可调高。
|
|
831
837
|
|
|
832
838
|
# ── 质量 ───────────────────────────────────────────────────────────────────
|
|
833
839
|
quality:
|