@humanbased/crosscheck 0.14.0 → 0.15.0-beta.145
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/ISSUE.md +1 -1
- package/LICENSE +1 -1
- package/README.md +191 -8
- package/README.zh.md +1 -1
- package/crosscheck.config.example.yml +4 -2
- package/dist/__tests__/backtrace.test.js +1 -1
- package/dist/__tests__/backtrace.test.js.map +1 -1
- package/dist/__tests__/diagnose.test.js +36 -0
- package/dist/__tests__/diagnose.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__/error-classification.test.d.ts +2 -0
- package/dist/__tests__/error-classification.test.d.ts.map +1 -0
- package/dist/__tests__/error-classification.test.js +36 -0
- package/dist/__tests__/error-classification.test.js.map +1 -0
- package/dist/__tests__/fix.test.js +48 -1
- package/dist/__tests__/fix.test.js.map +1 -1
- package/dist/__tests__/issue.test.js +2 -2
- package/dist/__tests__/issue.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 +18 -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__/scopes.test.js +11 -11
- package/dist/__tests__/scopes.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/diagnose.d.ts +1 -1
- package/dist/commands/diagnose.d.ts.map +1 -1
- package/dist/commands/diagnose.js +30 -1
- package/dist/commands/diagnose.js.map +1 -1
- package/dist/commands/kickass.d.ts +28 -10
- package/dist/commands/kickass.d.ts.map +1 -1
- package/dist/commands/kickass.js +295 -68
- 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/status.d.ts.map +1 -1
- package/dist/commands/status.js +10 -2
- package/dist/commands/status.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/board.d.ts.map +1 -1
- package/dist/lib/board.js +7 -5
- package/dist/lib/board.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 +4 -1
- package/dist/lib/logger.d.ts.map +1 -1
- package/dist/lib/logger.js +41 -5
- 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/review-models.d.ts +2 -2
- package/dist/lib/review-models.d.ts.map +1 -1
- package/dist/lib/review-models.js +6 -1
- package/dist/lib/review-models.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 +338 -55
- package/dist/lib/runner.js.map +1 -1
- package/dist/lib/scopes.js +1 -1
- package/dist/lib/scopes.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 +15 -10
- 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/docs/fixture-pr.md +112 -0
- package/docs/proof-demo.md +102 -0
- package/get-started.md +128 -31
- package/get-started.zh.md +7 -1
- package/package.json +4 -2
package/get-started.md
CHANGED
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
- [Prerequisites](#prerequisites)
|
|
10
10
|
- [Install](#install)
|
|
11
11
|
- [Environment variables](#environment-variables)
|
|
12
|
-
- [Step 1 — Check your
|
|
13
|
-
- [Step 2 —
|
|
12
|
+
- [Step 1 — Check your setup](#step-1--check-your-setup)
|
|
13
|
+
- [Step 2 — Get one useful review](#step-2--get-one-useful-review)
|
|
14
14
|
- [Step 3 — Choose a deployment mode](#step-3--choose-a-deployment-mode)
|
|
15
15
|
- [Step 4 — Verify it's working](#step-4--verify-its-working)
|
|
16
16
|
- [Commands](#commands)
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
|
|
35
35
|
## Prerequisites
|
|
36
36
|
|
|
37
|
-
You need
|
|
37
|
+
You need GitHub CLI and at least one authenticated AI reviewer CLI before crosscheck can run a one-shot review. Install both Claude Code and Codex only if you want cross-vendor review routing.
|
|
38
38
|
|
|
39
39
|
### Claude Code
|
|
40
40
|
|
|
@@ -143,40 +143,50 @@ export CROSSCHECK_WEBHOOK_SECRET=your-secret
|
|
|
143
143
|
|
|
144
144
|
---
|
|
145
145
|
|
|
146
|
-
## Step 1 —
|
|
146
|
+
## Step 1 — Check your setup
|
|
147
147
|
|
|
148
148
|
```bash
|
|
149
|
-
crosscheck
|
|
149
|
+
crosscheck status
|
|
150
150
|
```
|
|
151
151
|
|
|
152
|
-
`crosscheck
|
|
152
|
+
`crosscheck status` prints the active config path, GitHub auth source, usable reviewer CLIs, webhook-secret handling, and current logs. A webhook secret is auto-managed for `watch` and `serve`, so it does not need to be set before a one-shot review.
|
|
153
153
|
|
|
154
|
-
|
|
154
|
+
If you prefer to create a starter config without the full wizard:
|
|
155
155
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
156
|
+
```bash
|
|
157
|
+
crosscheck init
|
|
158
|
+
```
|
|
159
159
|
|
|
160
|
-
## Step 2 —
|
|
160
|
+
## Step 2 — Get one useful review
|
|
161
161
|
|
|
162
|
-
Before running continuously, verify end-to-end with one PR:
|
|
162
|
+
Before running continuously, verify end-to-end with one low-risk PR:
|
|
163
163
|
|
|
164
164
|
```bash
|
|
165
165
|
crosscheck review https://github.com/owner/repo/pull/123 --reviewer codex
|
|
166
166
|
```
|
|
167
167
|
|
|
168
|
-
This clones the PR branch, runs Codex review against the base branch, and posts a comment to the PR. If
|
|
169
|
-
|
|
170
|
-
Try Claude as reviewer too:
|
|
168
|
+
This clones the PR branch, runs Codex review against the base branch, and posts a comment to the PR. If Claude Code is your authenticated reviewer, use:
|
|
171
169
|
|
|
172
170
|
```bash
|
|
173
171
|
crosscheck review https://github.com/owner/repo/pull/123 --reviewer claude
|
|
174
172
|
```
|
|
175
173
|
|
|
176
|
-
|
|
174
|
+
If this step fails, fix the specific auth, clone, reviewer, or comment-posting error before enabling `watch` or `serve`.
|
|
177
175
|
|
|
178
176
|
## Step 3 — Choose a deployment mode
|
|
179
177
|
|
|
178
|
+
After one-shot review works, run the guided setup:
|
|
179
|
+
|
|
180
|
+
```bash
|
|
181
|
+
crosscheck onboard
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
`crosscheck onboard` checks your CLIs, walks you through deployment mode, repo selection, review mode, workflow pipeline, and connection settings, then writes a ready-to-use config. See the [`crosscheck onboard`](#crosscheck-onboard) command reference for the full walkthrough.
|
|
185
|
+
|
|
186
|
+
Once it completes, go straight to `crosscheck watch`. There is no separate init step required.
|
|
187
|
+
|
|
188
|
+
> If you prefer to skip the wizard and configure manually, run `crosscheck init` to generate a starter config, then edit `~/.crosscheck/config.yml` directly.
|
|
189
|
+
|
|
180
190
|
### Personal vs team
|
|
181
191
|
|
|
182
192
|
On first run, `crosscheck watch` (or `crosscheck serve`) will ask how you're using it:
|
|
@@ -344,7 +354,7 @@ crosscheck init
|
|
|
344
354
|
crosscheck init --config /path/to/crosscheck.config.yml
|
|
345
355
|
```
|
|
346
356
|
|
|
347
|
-
What it checks: `codex` CLI, `claude` CLI, `gh` CLI, `
|
|
357
|
+
What it checks: `codex` CLI, `claude` CLI, `gh` CLI, GitHub auth, and webhook-secret handling. The webhook secret is auto-managed at `~/.crosscheck/webhook-secret` for `watch` and `serve`.
|
|
348
358
|
|
|
349
359
|
| Flag | Description |
|
|
350
360
|
|---|---|
|
|
@@ -354,7 +364,7 @@ What it checks: `codex` CLI, `claude` CLI, `gh` CLI, `GITHUB_TOKEN`, `CROSSCHECK
|
|
|
354
364
|
|
|
355
365
|
### `crosscheck onboard`
|
|
356
366
|
|
|
357
|
-
The recommended first-time setup command. Walks through
|
|
367
|
+
The recommended first-time setup command. Walks through ten steps interactively and writes a ready-to-use config.
|
|
358
368
|
|
|
359
369
|
```bash
|
|
360
370
|
crosscheck onboard
|
|
@@ -364,7 +374,7 @@ crosscheck onboard --team # force team mode for this session
|
|
|
364
374
|
crosscheck onboard --reconfigure # re-run setup even if config already exists
|
|
365
375
|
```
|
|
366
376
|
|
|
367
|
-
**The
|
|
377
|
+
**The ten steps:**
|
|
368
378
|
|
|
369
379
|
**Step 1 — Environment check.** Verifies codex CLI, claude CLI, gh CLI, and GitHub token. At least one AI CLI must be authenticated; gh auth is always required. Prints ✓/✗ with fix hints.
|
|
370
380
|
|
|
@@ -378,7 +388,11 @@ crosscheck onboard --reconfigure # re-run setup even if config already exists
|
|
|
378
388
|
- `cross-vendor` — Claude reviews Codex PRs; Codex reviews Claude PRs (recommended when using both agents)
|
|
379
389
|
- `single-vendor` — one AI reviews all PRs (default when only one CLI is installed)
|
|
380
390
|
|
|
381
|
-
**Step 5 —
|
|
391
|
+
**Step 5 — Primary author.** In personal cross-vendor mode, choose which agent usually authors your PRs so Crosscheck can route reviews to the other vendor.
|
|
392
|
+
|
|
393
|
+
**Step 6 — Review quality.** Choose the speed/thoroughness tier for review prompts and reviewer timeouts.
|
|
394
|
+
|
|
395
|
+
**Step 7 — Workflow pipeline.** Choose what happens after a review:
|
|
382
396
|
|
|
383
397
|
```
|
|
384
398
|
[1] review only — AI posts a comment; you handle fixes
|
|
@@ -388,11 +402,17 @@ crosscheck onboard --reconfigure # re-run setup even if config already exists
|
|
|
388
402
|
|
|
389
403
|
The `review → fix → re-check` option writes a `~/.crosscheck/workflow.yml` with all three pipeline steps configured.
|
|
390
404
|
|
|
391
|
-
**Step
|
|
405
|
+
**Step 8 — Fix -> recheck rounds.** When the full loop is selected, choose how many fix/recheck rounds Crosscheck can run before stopping.
|
|
406
|
+
|
|
407
|
+
**Step 9 — Auto conflict-resolve.** Optionally add a merge-conflict resolution step before review.
|
|
408
|
+
|
|
409
|
+
**Step 10 — Connection type.** Choose how GitHub webhooks reach your local server:
|
|
392
410
|
- `localhost.run` — zero-config SSH tunnel; reconnects automatically, no install required *(default)*
|
|
393
411
|
- `smee.io` — webhook relay; events queued while offline, stable channel URL (requires `npm install -g smee-client` and `tunnel.smee_channel` in config)
|
|
394
412
|
|
|
395
|
-
**Step
|
|
413
|
+
**Step 11 — Git clone protocol.** Choose SSH or HTTPS for PR checkout.
|
|
414
|
+
|
|
415
|
+
**Step 12 — Review and write config.** Shows a summary of all choices and writes `~/.crosscheck/config.yml` and `~/.crosscheck/workflow.yml`.
|
|
396
416
|
|
|
397
417
|
```
|
|
398
418
|
crosscheck onboard
|
|
@@ -417,21 +437,45 @@ crosscheck onboard
|
|
|
417
437
|
[1] cross-vendor [2] single-vendor
|
|
418
438
|
Choice [1]: 1
|
|
419
439
|
|
|
420
|
-
Step 5 —
|
|
440
|
+
Step 5 — primary author
|
|
441
|
+
[1] Claude [2] Codex [3] both
|
|
442
|
+
Choice [3]: 3
|
|
443
|
+
|
|
444
|
+
Step 6 — review quality
|
|
445
|
+
[1] fast [2] balanced [3] thorough
|
|
446
|
+
Choice [2]: 2
|
|
447
|
+
|
|
448
|
+
Step 7 — workflow pipeline
|
|
421
449
|
[1] review only [2] review → fix [3] review → fix → re-check
|
|
422
450
|
Choice [2]: 3
|
|
423
451
|
|
|
424
|
-
Step
|
|
452
|
+
Step 8 — fix → re-check rounds
|
|
453
|
+
[1] 1 round [2] 2 rounds [3] 3 rounds
|
|
454
|
+
Choice [1]: 1
|
|
455
|
+
|
|
456
|
+
Step 9 — auto conflict-resolve
|
|
457
|
+
[1] disabled [2] enabled
|
|
458
|
+
Choice [1]: 1
|
|
459
|
+
|
|
460
|
+
Step 10 — connection type
|
|
425
461
|
[1] localhost.run [2] smee.io
|
|
426
462
|
Choice [1]: 1
|
|
427
463
|
|
|
428
|
-
Step
|
|
464
|
+
Step 11 — git clone protocol
|
|
465
|
+
[1] SSH [2] HTTPS
|
|
466
|
+
Choice [1]: 1
|
|
467
|
+
|
|
468
|
+
Step 12 — review and write config
|
|
429
469
|
deployment personal
|
|
430
470
|
connection localhost.run
|
|
471
|
+
clone ssh
|
|
431
472
|
orgs humanbased-ai
|
|
432
473
|
users your-github-login (8 repos)
|
|
433
474
|
mode cross-vendor
|
|
475
|
+
quality balanced
|
|
434
476
|
pipeline review-fix-recheck
|
|
477
|
+
max rounds 1
|
|
478
|
+
conflict-resolve no
|
|
435
479
|
config ~/.crosscheck/config.yml
|
|
436
480
|
|
|
437
481
|
✓ config written to ~/.crosscheck/config.yml
|
|
@@ -471,24 +515,31 @@ crosscheck review https://github.com/owner/repo/pull/123 --reviewer claude
|
|
|
471
515
|
|
|
472
516
|
### `crosscheck run <pr-url>`
|
|
473
517
|
|
|
474
|
-
|
|
518
|
+
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
519
|
|
|
476
520
|
```bash
|
|
477
521
|
crosscheck run https://github.com/owner/repo/pull/123
|
|
478
522
|
crosscheck run https://github.com/owner/repo/pull/123 --reviewer claude
|
|
523
|
+
crosscheck run https://github.com/owner/repo/pull/123 --fixer claude
|
|
524
|
+
crosscheck run https://github.com/owner/repo/pull/123 --vendor claude
|
|
479
525
|
crosscheck run https://github.com/owner/repo/pull/123 --steps review,fix
|
|
480
526
|
crosscheck run https://github.com/owner/repo/pull/123 --dry-run
|
|
481
|
-
crosscheck run https://github.com/owner/repo/pull/123 --
|
|
527
|
+
crosscheck run https://github.com/owner/repo/pull/123 --crazy # loop until APPROVE
|
|
528
|
+
crosscheck run https://github.com/owner/repo/pull/123 --halfcrazy
|
|
482
529
|
```
|
|
483
530
|
|
|
484
|
-
The workflow executed is loaded from `.crosscheck/workflow.yml` in the repo root
|
|
531
|
+
The workflow executed is loaded from `.crosscheck/workflow.yml` in the operator repo root if present, then `~/.crosscheck/workflow.yml`, and otherwise falls back to the built-in default pipeline: review, then fix when the verdict is not `APPROVE`. Use `crosscheck run` to test your full pipeline end-to-end against a real PR.
|
|
485
532
|
|
|
486
533
|
| Flag | Description |
|
|
487
534
|
|---|---|
|
|
488
|
-
| `-r, --reviewer codex\|claude` | Force
|
|
535
|
+
| `-r, --reviewer codex\|claude` | Force review/recheck steps to use this vendor; skip auto-detection for review routing |
|
|
536
|
+
| `--fixer codex\|claude` | Force fix steps to use this vendor |
|
|
537
|
+
| `--vendor codex\|claude` | Force review, recheck, and fix steps to use this vendor |
|
|
489
538
|
| `--steps <list>` | Run only the listed step types, comma-separated: `review`, `fix`, `recheck` |
|
|
490
539
|
| `--dry-run` | Run the review but do not post a comment or apply fixes |
|
|
491
540
|
| `--expected-head-sha <sha>` | Skip if the PR head changed since the command was queued |
|
|
541
|
+
| `--crazy` | After the initial run, loop fix→recheck until APPROVE (ceiling: 2 rounds) |
|
|
542
|
+
| `--halfcrazy` | After the initial run, loop until verdict is not BLOCK — stops at NEEDS\_WORK or APPROVE |
|
|
492
543
|
| `-c, --config <path>` | Use a specific config file |
|
|
493
544
|
|
|
494
545
|
---
|
|
@@ -515,18 +566,60 @@ crosscheck scan --json
|
|
|
515
566
|
|
|
516
567
|
### `crosscheck kickass`
|
|
517
568
|
|
|
518
|
-
Selects
|
|
569
|
+
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.
|
|
570
|
+
|
|
571
|
+
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
572
|
|
|
520
573
|
```bash
|
|
521
574
|
crosscheck kickass --dry-run
|
|
522
575
|
crosscheck kickass --force --stale-after 2h
|
|
576
|
+
crosscheck kickass --crazy # loop fix→recheck until APPROVE (ceiling: 2 rounds)
|
|
577
|
+
crosscheck kickass --halfcrazy # loop until verdict is not BLOCK
|
|
523
578
|
```
|
|
524
579
|
|
|
525
580
|
| Flag | Description |
|
|
526
581
|
|---|---|
|
|
527
582
|
| `--dry-run` | Print the selected actions without mutating PRs |
|
|
528
583
|
| `--force` | Bypass the short-lived scan cache |
|
|
529
|
-
| `--stale-after <duration>` | Only
|
|
584
|
+
| `--stale-after <duration>` | Only show PRs stale for at least this duration |
|
|
585
|
+
| `--crazy` | Autonomous loop: keep running fix→recheck cycles until APPROVE (ceiling: 2 rounds per PR) |
|
|
586
|
+
| `--halfcrazy` | Autonomous loop: keep running until verdict is not BLOCK — NEEDS\_WORK is acceptable |
|
|
587
|
+
|
|
588
|
+
#### `kickass` + `watch` combo
|
|
589
|
+
|
|
590
|
+
When a batch of PRs is stuck — timed out, or stopped before `watch` was running — use both commands together for hands-free recovery:
|
|
591
|
+
|
|
592
|
+
```bash
|
|
593
|
+
# terminal 1 — keep running to handle continuations
|
|
594
|
+
crosscheck watch
|
|
595
|
+
|
|
596
|
+
# terminal 2 — kick each stuck PR one step forward
|
|
597
|
+
crosscheck scan --force
|
|
598
|
+
crosscheck kickass
|
|
599
|
+
```
|
|
600
|
+
|
|
601
|
+
How they divide the work:
|
|
602
|
+
|
|
603
|
+
```
|
|
604
|
+
crosscheck kickass
|
|
605
|
+
└─ ck run <url> --trigger kickass (one step; detect-step finds where to start)
|
|
606
|
+
└─ detect-step → "review" run review only → posts comment
|
|
607
|
+
└─ detect-step → "fix" run fix only → pushes commit
|
|
608
|
+
└─ detect-step → "recheck" run recheck only → posts verdict
|
|
609
|
+
|
|
610
|
+
crosscheck watch
|
|
611
|
+
├─ issue_comment (type=review) → pick up fix step automatically
|
|
612
|
+
└─ synchronize (fix commit) → pick up recheck step automatically
|
|
613
|
+
```
|
|
614
|
+
|
|
615
|
+
> **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.
|
|
616
|
+
|
|
617
|
+
`kickass` advances each PR exactly one step using live `detect-step` detection. `watch` owns all continuation via webhooks:
|
|
618
|
+
|
|
619
|
+
- A posted review fires an `issue_comment` webhook → `watch` starts the fix step.
|
|
620
|
+
- A fix commit fires a `synchronize` webhook → `watch` starts the recheck step.
|
|
621
|
+
|
|
622
|
+
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/Motivation-Labs/crosscheck/pull/193).)
|
|
530
623
|
|
|
531
624
|
---
|
|
532
625
|
|
|
@@ -841,6 +934,8 @@ crosscheck stores its config in `~/.crosscheck/config.yml` by default — persis
|
|
|
841
934
|
2. `./crosscheck.config.yml`
|
|
842
935
|
3. `./.crosscheck.yml`
|
|
843
936
|
|
|
937
|
+
If `~/.crosscheck/config.yml` exists, it wins over local project files. Pass `--config ./crosscheck.config.yml` when you deliberately want to test a project-local config.
|
|
938
|
+
|
|
844
939
|
Run `crosscheck init` to generate `~/.crosscheck/config.yml` with all options documented.
|
|
845
940
|
|
|
846
941
|
Logs are written to `~/.crosscheck/logs/YYYY-MM-DD.ndjson` and retained for 30 days by default.
|
|
@@ -872,11 +967,13 @@ vendors:
|
|
|
872
967
|
enabled: true
|
|
873
968
|
auth: subscription # subscription | api-key
|
|
874
969
|
model: o4-mini # only used when auth: api-key
|
|
970
|
+
# timeout_sec: 1200 # max seconds per CLI call; unset = tier-based (300/600/1200)
|
|
875
971
|
|
|
876
972
|
claude:
|
|
877
973
|
enabled: true
|
|
878
974
|
model: sonnet # haiku | sonnet | opus
|
|
879
975
|
effort: medium # low | medium | high | max
|
|
976
|
+
# timeout_sec: 1200 # max seconds per CLI call; unset = tier-based (300/600/1200)
|
|
880
977
|
|
|
881
978
|
# ── Quality ───────────────────────────────────────────────────────────────────
|
|
882
979
|
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:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@humanbased/crosscheck",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.0-beta.145",
|
|
4
4
|
"description": "AI code review pipeline that turns agent-written PRs into merge-ready patches",
|
|
5
5
|
"bin": {
|
|
6
6
|
"crosscheck": "dist/cli.js",
|
|
@@ -16,6 +16,8 @@
|
|
|
16
16
|
"README.zh.md",
|
|
17
17
|
"get-started.md",
|
|
18
18
|
"get-started.zh.md",
|
|
19
|
+
"docs/fixture-pr.md",
|
|
20
|
+
"docs/proof-demo.md",
|
|
19
21
|
"assets"
|
|
20
22
|
],
|
|
21
23
|
"engines": {
|
|
@@ -70,6 +72,6 @@
|
|
|
70
72
|
"bugs": {
|
|
71
73
|
"url": "https://github.com/humanbased-ai/crosscheck/issues"
|
|
72
74
|
},
|
|
73
|
-
"author": "
|
|
75
|
+
"author": "Humanbased PTE LTD",
|
|
74
76
|
"license": "MIT"
|
|
75
77
|
}
|