@humanbased/crosscheck 0.20.1-beta.6 → 1.0.0-beta.10
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 +8 -20
- package/README.zh.md +8 -8
- package/crosscheck.config.example.yml +7 -4
- package/dist/__tests__/clone.test.js +32 -0
- package/dist/__tests__/clone.test.js.map +1 -1
- package/dist/__tests__/logger.test.d.ts +2 -0
- package/dist/__tests__/logger.test.d.ts.map +1 -0
- package/dist/__tests__/logger.test.js +69 -0
- package/dist/__tests__/logger.test.js.map +1 -0
- package/dist/__tests__/optimize.test.js +2 -2
- package/dist/__tests__/optimize.test.js.map +1 -1
- package/dist/__tests__/pr-workflow-state.test.js +47 -1
- package/dist/__tests__/pr-workflow-state.test.js.map +1 -1
- package/dist/__tests__/review-models.test.js +1 -0
- package/dist/__tests__/review-models.test.js.map +1 -1
- package/dist/__tests__/vendor-unavailable.test.d.ts +2 -0
- package/dist/__tests__/vendor-unavailable.test.d.ts.map +1 -0
- package/dist/__tests__/vendor-unavailable.test.js +24 -0
- package/dist/__tests__/vendor-unavailable.test.js.map +1 -0
- package/dist/cli.js +2 -12
- package/dist/cli.js.map +1 -1
- package/dist/commands/diagnose.js +2 -2
- package/dist/commands/diagnose.js.map +1 -1
- package/dist/commands/issue.js +3 -3
- package/dist/commands/issue.js.map +1 -1
- package/dist/commands/review.js +1 -1
- package/dist/commands/review.js.map +1 -1
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +4 -1
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/status.js +1 -1
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/watch.d.ts +1 -0
- package/dist/commands/watch.d.ts.map +1 -1
- package/dist/commands/watch.js +51 -5
- package/dist/commands/watch.js.map +1 -1
- package/dist/config/schema.d.ts +74 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +13 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/harness/default.md +43 -0
- package/dist/lib/clone.d.ts +1 -1
- package/dist/lib/clone.d.ts.map +1 -1
- package/dist/lib/clone.js +52 -15
- package/dist/lib/clone.js.map +1 -1
- package/dist/lib/logger.d.ts +1 -1
- package/dist/lib/logger.d.ts.map +1 -1
- package/dist/lib/logger.js +4 -0
- package/dist/lib/logger.js.map +1 -1
- package/dist/lib/pr-workflow-state.d.ts +7 -0
- package/dist/lib/pr-workflow-state.d.ts.map +1 -1
- package/dist/lib/pr-workflow-state.js +12 -0
- package/dist/lib/pr-workflow-state.js.map +1 -1
- package/dist/lib/remediation.d.ts.map +1 -1
- package/dist/lib/remediation.js +1 -0
- package/dist/lib/remediation.js.map +1 -1
- package/dist/lib/runner.d.ts.map +1 -1
- package/dist/lib/runner.js +88 -11
- package/dist/lib/runner.js.map +1 -1
- package/dist/lib/smart-switch.d.ts +9 -0
- package/dist/lib/smart-switch.d.ts.map +1 -1
- package/dist/lib/smart-switch.js +12 -0
- package/dist/lib/smart-switch.js.map +1 -1
- package/dist/lib/workflow.d.ts +15 -0
- package/dist/lib/workflow.d.ts.map +1 -1
- package/dist/lib/workflow.js +42 -1
- package/dist/lib/workflow.js.map +1 -1
- package/dist/reviewers/claude.d.ts.map +1 -1
- package/dist/reviewers/claude.js +62 -34
- package/dist/reviewers/claude.js.map +1 -1
- package/dist/reviewers/codex.d.ts.map +1 -1
- package/dist/reviewers/codex.js +65 -39
- package/dist/reviewers/codex.js.map +1 -1
- package/get-started.md +19 -107
- package/package.json +2 -2
- package/dist/commands/serve.d.ts +0 -9
- package/dist/commands/serve.d.ts.map +0 -1
- package/dist/commands/serve.js +0 -440
- package/dist/commands/serve.js.map +0 -1
package/README.md
CHANGED
|
@@ -31,7 +31,7 @@ Built by [Humanbased](https://github.com/humanbased-ai). Read the field report:
|
|
|
31
31
|
- **Independent eyes, not self-review** — route Claude-authored PRs to Codex and vice versa. Self-review is exactly where early-victory failures hide.
|
|
32
32
|
- **Review → Fix → Recheck, not just comments** — findings return to the author agent for repair; a clean recheck follows before merge. PRs move forward, not sideways.
|
|
33
33
|
- **No new vendor** — runs through the `claude` and `codex` CLIs you already pay for. No per-review bill, no extra trust surface.
|
|
34
|
-
- **Configurable for any team size** — review-only mode, review + fix, or the full loop.
|
|
34
|
+
- **Configurable for any team size** — review-only mode (`watch --only-review`), review + fix, or the full loop. Continuous monitoring via `watch`, one-shot via `review`.
|
|
35
35
|
|
|
36
36
|
## Who uses crosscheck
|
|
37
37
|
|
|
@@ -49,7 +49,7 @@ Built by [Humanbased](https://github.com/humanbased-ai). Read the field report:
|
|
|
49
49
|
crosscheck run <pr-url>
|
|
50
50
|
|
|
51
51
|
# Continuous review on every incoming agent PR
|
|
52
|
-
crosscheck
|
|
52
|
+
crosscheck watch # tunnel + webhook, reviews as PRs arrive
|
|
53
53
|
|
|
54
54
|
# Review stale PRs from a queue
|
|
55
55
|
crosscheck scan && crosscheck kickass
|
|
@@ -103,8 +103,8 @@ brew install gh && gh auth login # GitHub CLI
|
|
|
103
103
|
crosscheck onboard
|
|
104
104
|
|
|
105
105
|
# 3. Start watching
|
|
106
|
-
crosscheck watch
|
|
107
|
-
crosscheck
|
|
106
|
+
crosscheck watch # continuous review as PRs arrive
|
|
107
|
+
crosscheck watch --only-review # reviews only — never auto-fix
|
|
108
108
|
```
|
|
109
109
|
|
|
110
110
|
---
|
|
@@ -113,8 +113,8 @@ crosscheck serve # always-on team server
|
|
|
113
113
|
|
|
114
114
|
```bash
|
|
115
115
|
crosscheck onboard # guided setup — pick repos, mode, and pipeline
|
|
116
|
-
crosscheck watch #
|
|
117
|
-
crosscheck
|
|
116
|
+
crosscheck watch # continuous use — tunnel + webhook + listening
|
|
117
|
+
crosscheck watch --only-review # continuous reviews only — never auto-fix
|
|
118
118
|
crosscheck review <pr-urls...> # review one or more PRs (comma lists, ranges, cross-repo)
|
|
119
119
|
crosscheck run <pr-urls...> # run the full workflow: review → (fix → recheck) × max_rounds
|
|
120
120
|
crosscheck recheck|fix|resolve <pr-urls...> # force one workflow step on one or more PRs
|
|
@@ -194,29 +194,17 @@ crosscheck onboard -y # accept all defaults non-interactively
|
|
|
194
194
|
|
|
195
195
|
### `crosscheck watch`
|
|
196
196
|
|
|
197
|
-
|
|
197
|
+
Starts an SSH tunnel (localhost.run), registers GitHub webhooks, and listens for PR events. Everything self-cleans on Ctrl+C.
|
|
198
198
|
|
|
199
199
|
```bash
|
|
200
200
|
crosscheck watch
|
|
201
|
+
crosscheck watch --only-review # post reviews only — never fix, recheck, or resolve
|
|
201
202
|
crosscheck watch --no-backtrace # skip startup scan for unreviewed open PRs
|
|
202
203
|
crosscheck watch --reconfigure # re-run deployment setup before starting
|
|
203
204
|
```
|
|
204
205
|
|
|
205
206
|
---
|
|
206
207
|
|
|
207
|
-
### `crosscheck serve`
|
|
208
|
-
|
|
209
|
-
Team mode. Binds to a fixed port — register the webhook once, cover the whole team. Designed for a mac-mini or home server.
|
|
210
|
-
|
|
211
|
-
```bash
|
|
212
|
-
crosscheck serve
|
|
213
|
-
crosscheck serve --no-backtrace # skip startup scan
|
|
214
|
-
crosscheck serve --personal # personal scope this session only
|
|
215
|
-
crosscheck serve --reconfigure # re-run deployment setup
|
|
216
|
-
```
|
|
217
|
-
|
|
218
|
-
---
|
|
219
|
-
|
|
220
208
|
### `crosscheck review <pr-urls...>`
|
|
221
209
|
|
|
222
210
|
Reviews one or more PRs. Clones, checks out, reviews, and posts the comment. The PR argument accepts the [multi-PR spec syntax](#multi-pr-syntax) — multiple PRs are reviewed concurrently.
|
package/README.zh.md
CHANGED
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
- **可定制的审查工作流** — 灵活配置完整流水线:仅审查、审查 + 自动修复,或审查 + 修复 + 复查。每个步骤均可定制审查指令,无需手动编辑 Prompt。
|
|
22
22
|
- **跨供应商模式与单供应商模式** — 跨供应商模式将每个 PR 路由给对手 AI 进行独立审查;单供应商模式则使用你拥有的任意一个 AI。一行配置即可切换。
|
|
23
23
|
- **订阅驱动,无需按 token 计费** — 通过 `claude` 和 `codex` 命令行工具运行,使用你已有的 Claude Pro/Max 和 ChatGPT Plus/Pro 订阅。无需 API Key,无额外审查费用。
|
|
24
|
-
- **`watch`
|
|
24
|
+
- **`watch` 持续监听** — `crosscheck watch` 自动建立隧道并注册 webhook,PR 到达即审查。加 `--only-review` 则只发审查、不自动修复。
|
|
25
25
|
|
|
26
26
|
---
|
|
27
27
|
|
|
@@ -38,11 +38,11 @@ brew install gh && gh auth login # GitHub CLI
|
|
|
38
38
|
crosscheck onboard
|
|
39
39
|
|
|
40
40
|
# 3. 启动监听
|
|
41
|
-
crosscheck watch
|
|
42
|
-
crosscheck
|
|
41
|
+
crosscheck watch # 持续审查到达的 PR
|
|
42
|
+
crosscheck watch --only-review # 只发审查,不自动修复
|
|
43
43
|
```
|
|
44
44
|
|
|
45
|
-
`crosscheck onboard` 将引导你完成仓库选择、供应商模式、流水线步骤和隧道选择。完成后,运行 `watch`
|
|
45
|
+
`crosscheck onboard` 将引导你完成仓库选择、供应商模式、流水线步骤和隧道选择。完成后,运行 `watch` 即可。
|
|
46
46
|
|
|
47
47
|
---
|
|
48
48
|
|
|
@@ -85,8 +85,8 @@ crosscheck onboard # 引导式配置——选择仓库、模式
|
|
|
85
85
|
crosscheck review <pr-urls...> # 审查一个或多个 PR(逗号列表、区间、跨仓库)
|
|
86
86
|
crosscheck run <pr-urls...> # 运行完整流水线:review → (fix → recheck) × max_rounds
|
|
87
87
|
crosscheck recheck|fix|resolve <pr-urls...> # 对一个或多个 PR 强制执行某个工作流步骤
|
|
88
|
-
crosscheck watch #
|
|
89
|
-
crosscheck
|
|
88
|
+
crosscheck watch # 持续监听——隧道 + 自动 Webhook + 本地监听
|
|
89
|
+
crosscheck watch --only-review # 持续监听,只发审查、不自动修复
|
|
90
90
|
crosscheck status # 查看认证状态、配置摘要、CLI 版本
|
|
91
91
|
```
|
|
92
92
|
|
|
@@ -139,9 +139,9 @@ post_review:
|
|
|
139
139
|
|
|
140
140
|
## 部署方式
|
|
141
141
|
|
|
142
|
-
|
|
142
|
+
**`crosscheck watch`** — 通过 `localhost.run` 建立 SSH 隧道,无需端口转发,无需云账号,自动注册 Webhook 并在退出时清理。隧道断开时健康检查会自动重连。可运行在笔记本,也可运行在常驻机器上持续监听。
|
|
143
143
|
|
|
144
|
-
|
|
144
|
+
**`crosscheck watch --only-review`** — 仅审查模式:只发审查评论,绝不执行 fix / recheck / conflict-resolve,也不向 PR 推送任何提交。适合想要审查意见、但自己动手修复的场景。
|
|
145
145
|
|
|
146
146
|
---
|
|
147
147
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
# All fields are optional — crosscheck uses sensible defaults.
|
|
4
4
|
|
|
5
5
|
# ─── Deployment ──────────────────────────────────────────────────────────────
|
|
6
|
-
# Set automatically on first run of `crosscheck watch
|
|
6
|
+
# Set automatically on first run of `crosscheck watch`.
|
|
7
7
|
# personal — monitor your own repos and orgs; review only PRs you author
|
|
8
8
|
# team — monitor org repos only; review all PRs from any author
|
|
9
9
|
# Absent = first-run prompt will ask you to choose.
|
|
@@ -67,7 +67,7 @@ budget:
|
|
|
67
67
|
codex_monthly_usd: 20 # null = unlimited (use if on subscription)
|
|
68
68
|
per_review_usd: 2.00 # hard stop per single review
|
|
69
69
|
|
|
70
|
-
# ── Orgs (watch
|
|
70
|
+
# ── Orgs (watch mode) ─────────────────────────────────────────────────────────
|
|
71
71
|
# Monitor entire orgs — all repos get covered with one webhook per org.
|
|
72
72
|
# Takes priority over `repos` when both are set.
|
|
73
73
|
orgs:
|
|
@@ -156,11 +156,14 @@ routing:
|
|
|
156
156
|
# backend: smee
|
|
157
157
|
# smee_channel: https://smee.io/your-channel-id
|
|
158
158
|
|
|
159
|
-
# ─── Server
|
|
159
|
+
# ─── Server ──────────────────────────────────────────────────────────────────
|
|
160
|
+
# crosscheck watch binds a local HTTP server on `port` (auto-increments on
|
|
161
|
+
# collision) and listens for webhook delivery at `webhook_path`. pid_file is
|
|
162
|
+
# unused (legacy daemon management).
|
|
160
163
|
server:
|
|
161
164
|
port: 7891
|
|
162
165
|
webhook_path: /webhook
|
|
163
|
-
# pid_file: ~/.crosscheck/crosscheck.pid #
|
|
166
|
+
# pid_file: ~/.crosscheck/crosscheck.pid # legacy — unused
|
|
164
167
|
|
|
165
168
|
# ─── Post-Review Auto-Fix ────────────────────────────────────────────────────
|
|
166
169
|
# Controls HOW fixes are delivered after the agent applies them.
|
|
@@ -6,4 +6,36 @@ describe('redactCloneSecrets', () => {
|
|
|
6
6
|
expect(redactCloneSecrets(message)).toBe('Command failed: git clone https://x-access-token:[REDACTED]@github.com/humanbased-ai/crosscheck-proof-fixture.git /tmp/repo');
|
|
7
7
|
});
|
|
8
8
|
});
|
|
9
|
+
describe('isTransientGitError', () => {
|
|
10
|
+
// Note: isTransientGitError is not exported, so we test via error message patterns
|
|
11
|
+
// that should trigger retry behavior
|
|
12
|
+
const transientPatterns = [
|
|
13
|
+
'curl 16 Error in the HTTP2 framing layer',
|
|
14
|
+
'curl 18 Transferred a partial file',
|
|
15
|
+
'error: 3789 bytes of body are still expected',
|
|
16
|
+
'fetch-pack: unexpected disconnect while reading sideband packet',
|
|
17
|
+
'fatal: early EOF',
|
|
18
|
+
'fatal: fetch-pack: invalid index-pack output',
|
|
19
|
+
'RPC failed; curl 16',
|
|
20
|
+
'RPC failed; curl 18',
|
|
21
|
+
];
|
|
22
|
+
const nonTransientPatterns = [
|
|
23
|
+
'Authentication failed',
|
|
24
|
+
'Repository not found',
|
|
25
|
+
'Permission denied (publickey)',
|
|
26
|
+
'fatal: Could not read from remote repository',
|
|
27
|
+
];
|
|
28
|
+
// Helper to check if a message would be considered transient
|
|
29
|
+
// (mirrors the regex in clone.ts)
|
|
30
|
+
function isTransientGitError(message) {
|
|
31
|
+
const m = message.toLowerCase();
|
|
32
|
+
return /curl 16|http2 framing|curl 18|partial file|early eof|rpc failed|unexpected disconnect|fetch-pack: invalid|bytes of body.*expected/.test(m);
|
|
33
|
+
}
|
|
34
|
+
it.each(transientPatterns)('detects transient error: %s', (pattern) => {
|
|
35
|
+
expect(isTransientGitError(pattern)).toBe(true);
|
|
36
|
+
});
|
|
37
|
+
it.each(nonTransientPatterns)('does not detect non-transient error: %s', (pattern) => {
|
|
38
|
+
expect(isTransientGitError(pattern)).toBe(false);
|
|
39
|
+
});
|
|
40
|
+
});
|
|
9
41
|
//# sourceMappingURL=clone.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clone.test.js","sourceRoot":"","sources":["../../src/__tests__/clone.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAEpD,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,OAAO,GAAG,gIAAgI,CAAA;QAEhJ,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CACtC,6HAA6H,CAC9H,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"clone.test.js","sourceRoot":"","sources":["../../src/__tests__/clone.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAEpD,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,OAAO,GAAG,gIAAgI,CAAA;QAEhJ,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CACtC,6HAA6H,CAC9H,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,mFAAmF;IACnF,qCAAqC;IAErC,MAAM,iBAAiB,GAAG;QACxB,0CAA0C;QAC1C,oCAAoC;QACpC,8CAA8C;QAC9C,iEAAiE;QACjE,kBAAkB;QAClB,8CAA8C;QAC9C,qBAAqB;QACrB,qBAAqB;KACtB,CAAA;IAED,MAAM,oBAAoB,GAAG;QAC3B,uBAAuB;QACvB,sBAAsB;QACtB,+BAA+B;QAC/B,8CAA8C;KAC/C,CAAA;IAED,6DAA6D;IAC7D,kCAAkC;IAClC,SAAS,mBAAmB,CAAC,OAAe;QAC1C,MAAM,CAAC,GAAG,OAAO,CAAC,WAAW,EAAE,CAAA;QAC/B,OAAO,mIAAmI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACpJ,CAAC;IAED,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,6BAA6B,EAAE,CAAC,OAAO,EAAE,EAAE;QACpE,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACjD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,yCAAyC,EAAE,CAAC,OAAO,EAAE,EAAE;QACnF,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAClD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/logger.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { classifyError } from '../lib/logger.js';
|
|
3
|
+
describe('classifyError', () => {
|
|
4
|
+
describe('git errors', () => {
|
|
5
|
+
it('classifies non-fast-forward push rejection', () => {
|
|
6
|
+
const msg = 'Command failed: git push origin HEAD:feature\nTo github.com:org/repo.git\n ! [rejected] HEAD -> feature (fetch first)\nerror: failed to push some refs to \'github.com:org/repo.git\'\nhint: Updates were rejected because the remote contains work that you do not have locally.';
|
|
7
|
+
expect(classifyError(msg)).toBe('git');
|
|
8
|
+
});
|
|
9
|
+
it('classifies curl 16 framing error', () => {
|
|
10
|
+
const msg = 'Command failed: git clone --depth=50 --quiet https://x-access-token:token@github.com/org/repo.git /tmp/repo\nerror: RPC failed; curl 16 Error in the HTTP2 framing layer\nfatal: expected flush after ref listing';
|
|
11
|
+
expect(classifyError(msg)).toBe('git');
|
|
12
|
+
});
|
|
13
|
+
it('classifies curl 18 partial transfer', () => {
|
|
14
|
+
const msg = 'Command failed: git clone --depth=50 --quiet https://x-access-token:token@github.com/org/repo.git /tmp/repo\nerror: RPC failed; curl 18 Transferred a partial file\nerror: 3789 bytes of body are still expected\nfatal: early EOF';
|
|
15
|
+
expect(classifyError(msg)).toBe('git');
|
|
16
|
+
});
|
|
17
|
+
it('classifies fetch-pack invalid', () => {
|
|
18
|
+
const msg = 'fatal: fetch-pack: invalid index-pack output';
|
|
19
|
+
expect(classifyError(msg)).toBe('git');
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
describe('rate limit errors', () => {
|
|
23
|
+
it('classifies 429 rate limit', () => {
|
|
24
|
+
const msg = 'API Error: You\'ve hit your session limit · resets 5:30pm (rate limit)';
|
|
25
|
+
expect(classifyError(msg)).toBe('rate_limit');
|
|
26
|
+
});
|
|
27
|
+
it('classifies secondary rate limit', () => {
|
|
28
|
+
const msg = 'You have exceeded a secondary rate limit';
|
|
29
|
+
expect(classifyError(msg)).toBe('rate_limit');
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
describe('auth errors', () => {
|
|
33
|
+
it('classifies bad credentials', () => {
|
|
34
|
+
const msg = 'Bad credentials';
|
|
35
|
+
expect(classifyError(msg)).toBe('auth');
|
|
36
|
+
});
|
|
37
|
+
it('classifies 401 unauthorized', () => {
|
|
38
|
+
const msg = 'HTTP 401: Unauthorized';
|
|
39
|
+
expect(classifyError(msg)).toBe('auth');
|
|
40
|
+
});
|
|
41
|
+
it('classifies not logged in', () => {
|
|
42
|
+
const msg = 'Error: not logged in';
|
|
43
|
+
expect(classifyError(msg)).toBe('auth');
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
describe('network errors', () => {
|
|
47
|
+
it('classifies connection refused', () => {
|
|
48
|
+
const msg = 'Error: connect ECONNREFUSED 127.0.0.1:443';
|
|
49
|
+
expect(classifyError(msg)).toBe('network');
|
|
50
|
+
});
|
|
51
|
+
it('classifies socket hang up', () => {
|
|
52
|
+
const msg = 'Error: socket hang up';
|
|
53
|
+
expect(classifyError(msg)).toBe('network');
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
describe('timeout errors', () => {
|
|
57
|
+
it('classifies timeout', () => {
|
|
58
|
+
const msg = 'Error: timed out after 300s';
|
|
59
|
+
expect(classifyError(msg)).toBe('timeout');
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
describe('subprocess errors', () => {
|
|
63
|
+
it('classifies exit code errors', () => {
|
|
64
|
+
const msg = 'Command failed with exit code 1';
|
|
65
|
+
expect(classifyError(msg)).toBe('subprocess');
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
//# sourceMappingURL=logger.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.test.js","sourceRoot":"","sources":["../../src/__tests__/logger.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@ function makeConfig(claudeEnabled, codexEnabled) {
|
|
|
9
9
|
repos: [],
|
|
10
10
|
routing: { codex_reviews_patterns: [], claude_reviews_patterns: [], claude_branch_prefixes: [], codex_branch_prefixes: [], allowed_authors: [], author_routes: {}, fallback_reviewer: 'auto' },
|
|
11
11
|
server: { port: 7892, webhook_path: '/webhook' },
|
|
12
|
-
quality: { tier: 'balanced', focus: [], custom_prompt: undefined },
|
|
12
|
+
quality: { tier: 'balanced', mode: 'fixed', focus: [], custom_prompt: undefined },
|
|
13
13
|
budget: { codex_monthly_usd: null, per_review_usd: 1 },
|
|
14
14
|
vendors: {
|
|
15
15
|
claude: { enabled: claudeEnabled, model: null, auth: 'subscription', effort: 'medium', timeout_sec: null },
|
|
@@ -103,7 +103,7 @@ describe('deriveConfigChanges', () => {
|
|
|
103
103
|
function makeFullConfig(tier, budgetUsd = 2) {
|
|
104
104
|
return {
|
|
105
105
|
...makeConfig(true, true),
|
|
106
|
-
quality: { tier, focus: [], custom_prompt: undefined },
|
|
106
|
+
quality: { tier, mode: 'fixed', focus: [], custom_prompt: undefined },
|
|
107
107
|
budget: { codex_monthly_usd: null, per_review_usd: budgetUsd },
|
|
108
108
|
};
|
|
109
109
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"optimize.test.js","sourceRoot":"","sources":["../../src/__tests__/optimize.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,yBAAyB,CAAA;AAIhC,SAAS,UAAU,CAAC,aAAsB,EAAE,YAAqB;IAC/D,OAAO;QACL,IAAI,EAAE,cAAc;QACpB,cAAc,EAAE,KAAK;QACrB,IAAI,EAAE,EAAE;QACR,KAAK,EAAE,EAAE;QACT,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,EAAE,sBAAsB,EAAE,EAAE,EAAE,uBAAuB,EAAE,EAAE,EAAE,sBAAsB,EAAE,EAAE,EAAE,qBAAqB,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,iBAAiB,EAAE,MAAM,EAAE;QAC9L,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE;QAChD,OAAO,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,aAAa,EAAE,SAAS,EAAE;
|
|
1
|
+
{"version":3,"file":"optimize.test.js","sourceRoot":"","sources":["../../src/__tests__/optimize.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { commitToRecord, identifyNextWorkflowStep } from '../lib/pr-workflow-state.js';
|
|
2
|
+
import { commitToRecord, decideReviewOnly, identifyNextWorkflowStep } from '../lib/pr-workflow-state.js';
|
|
3
3
|
const conflictResolveStep = {
|
|
4
4
|
name: 'conflict-resolve',
|
|
5
5
|
type: 'conflict-resolve',
|
|
@@ -181,4 +181,50 @@ describe('identifyNextWorkflowStep', () => {
|
|
|
181
181
|
expect(next.round).toBe(2);
|
|
182
182
|
});
|
|
183
183
|
});
|
|
184
|
+
// crosscheck watch --only-review uses decideReviewOnly (NOT identifyNextWorkflowStep)
|
|
185
|
+
// so it can never advance to fix/recheck. These cases lock the behaviors that mode
|
|
186
|
+
// depends on: review a fresh PR, skip an already-reviewed SHA, re-review a new SHA,
|
|
187
|
+
// and — critically — treat a fix-pushed SHA from another session as new content to
|
|
188
|
+
// review rather than mistaking it for a recheck (the fixedCurrentSha bypass).
|
|
189
|
+
describe('decideReviewOnly (--only-review)', () => {
|
|
190
|
+
it('reviews a fresh PR at round 1', () => {
|
|
191
|
+
expect(decideReviewOnly([], 'head-sha')).toEqual({ alreadyReviewed: false, round: 1 });
|
|
192
|
+
});
|
|
193
|
+
it('skips when the current SHA was already reviewed', () => {
|
|
194
|
+
const decision = decideReviewOnly([
|
|
195
|
+
record({ type: 'review', verdict: 'NEEDS_WORK', sha: 'reviewed-sha', round: 1 }),
|
|
196
|
+
], 'reviewed-sha');
|
|
197
|
+
expect(decision.alreadyReviewed).toBe(true);
|
|
198
|
+
});
|
|
199
|
+
it('re-reviews a new SHA at the next round', () => {
|
|
200
|
+
const decision = decideReviewOnly([
|
|
201
|
+
record({ type: 'review', verdict: 'BLOCK', sha: 'old-sha', round: 1 }),
|
|
202
|
+
], 'new-sha');
|
|
203
|
+
expect(decision).toEqual({ alreadyReviewed: false, round: 2 });
|
|
204
|
+
});
|
|
205
|
+
it('reviews a fix-pushed SHA as new content, not a recheck (fixedCurrentSha bypass)', () => {
|
|
206
|
+
// A prior non-only-review session reviewed sha-A (BLOCK) and pushed a fix to sha-B
|
|
207
|
+
// but never rechecked. decideReviewOnly must REVIEW sha-B (it was never reviewed),
|
|
208
|
+
// not skip it and not treat it as a recheck.
|
|
209
|
+
const decision = decideReviewOnly([
|
|
210
|
+
record({ type: 'review', verdict: 'BLOCK', sha: 'sha-A', round: 1 }),
|
|
211
|
+
record({ type: 'fix', pushedSha: 'sha-B', round: 1, commentId: 101 }),
|
|
212
|
+
], 'sha-B');
|
|
213
|
+
expect(decision).toEqual({ alreadyReviewed: false, round: 2 });
|
|
214
|
+
});
|
|
215
|
+
it('skips the fix-pushed SHA once it has been reviewed', () => {
|
|
216
|
+
const decision = decideReviewOnly([
|
|
217
|
+
record({ type: 'review', verdict: 'BLOCK', sha: 'sha-A', round: 1 }),
|
|
218
|
+
record({ type: 'fix', pushedSha: 'sha-B', round: 1, commentId: 101 }),
|
|
219
|
+
record({ type: 'review', verdict: 'NEEDS_WORK', sha: 'sha-B', round: 2, commentId: 102 }),
|
|
220
|
+
], 'sha-B');
|
|
221
|
+
expect(decision.alreadyReviewed).toBe(true);
|
|
222
|
+
});
|
|
223
|
+
it('matches short and long SHA forms by prefix', () => {
|
|
224
|
+
const decision = decideReviewOnly([
|
|
225
|
+
record({ type: 'review', sha: 'abc1234', round: 1 }),
|
|
226
|
+
], 'abc1234def5678');
|
|
227
|
+
expect(decision.alreadyReviewed).toBe(true);
|
|
228
|
+
});
|
|
229
|
+
});
|
|
184
230
|
//# sourceMappingURL=pr-workflow-state.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pr-workflow-state.test.js","sourceRoot":"","sources":["../../src/__tests__/pr-workflow-state.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAmB,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"pr-workflow-state.test.js","sourceRoot":"","sources":["../../src/__tests__/pr-workflow-state.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import { describe, it, expect } from 'vitest';
|
|
|
2
2
|
import { modelDisplayName, primaryModelFromUsage, resolveClaudeModel, resolveCodexModel } from '../lib/review-models.js';
|
|
3
3
|
const quality = (tier) => ({
|
|
4
4
|
tier,
|
|
5
|
+
mode: 'fixed',
|
|
5
6
|
focus: [],
|
|
6
7
|
});
|
|
7
8
|
const codexVendor = (auth, model = null) => ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review-models.test.js","sourceRoot":"","sources":["../../src/__tests__/review-models.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"review-models.test.js","sourceRoot":"","sources":["../../src/__tests__/review-models.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vendor-unavailable.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/vendor-unavailable.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { isVendorUnavailableError, isSubscriptionLimitError } from '../lib/smart-switch.js';
|
|
3
|
+
describe('isVendorUnavailableError', () => {
|
|
4
|
+
it('matches a Codex CLI too old for its default model', () => {
|
|
5
|
+
const err = new Error("codex: The 'gpt-5.5' model requires a newer version of Codex. Please upgrade to the latest app or CLI and try again.");
|
|
6
|
+
expect(isVendorUnavailableError(err)).toBe(true);
|
|
7
|
+
});
|
|
8
|
+
it('matches a not-logged-in / auth failure', () => {
|
|
9
|
+
expect(isVendorUnavailableError(new Error('codex: not logged in'))).toBe(true);
|
|
10
|
+
expect(isVendorUnavailableError(new Error('claude: authentication required'))).toBe(true);
|
|
11
|
+
expect(isVendorUnavailableError(new Error('codex: unauthorized (bad credentials)'))).toBe(true);
|
|
12
|
+
});
|
|
13
|
+
it('does not match ordinary subprocess crashes or timeouts', () => {
|
|
14
|
+
expect(isVendorUnavailableError(new Error('codex: reviewer subprocess failed'))).toBe(false);
|
|
15
|
+
expect(isVendorUnavailableError(new Error('claude: timed out after 600s'))).toBe(false);
|
|
16
|
+
expect(isVendorUnavailableError(new Error('network error: ECONNRESET'))).toBe(false);
|
|
17
|
+
});
|
|
18
|
+
it('does not overlap with usage-limit detection (distinct triggers)', () => {
|
|
19
|
+
const limit = new Error('codex: usage limit reached (429)');
|
|
20
|
+
expect(isSubscriptionLimitError(limit)).toBe(true);
|
|
21
|
+
expect(isVendorUnavailableError(limit)).toBe(false);
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
//# sourceMappingURL=vendor-unavailable.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vendor-unavailable.test.js","sourceRoot":"","sources":["../../src/__tests__/vendor-unavailable.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAA;AAE3F,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,GAAG,GAAG,IAAI,KAAK,CACnB,sHAAsH,CACvH,CAAA;QACD,MAAM,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAClD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,CAAC,wBAAwB,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC9E,MAAM,CAAC,wBAAwB,CAAC,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACzF,MAAM,CAAC,wBAAwB,CAAC,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACjG,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,CAAC,wBAAwB,CAAC,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC5F,MAAM,CAAC,wBAAwB,CAAC,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACvF,MAAM,CAAC,wBAAwB,CAAC,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACtF,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;QAC3D,MAAM,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAClD,MAAM,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACrD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
package/dist/cli.js
CHANGED
|
@@ -5,7 +5,6 @@ import { fileURLToPath } from 'url';
|
|
|
5
5
|
import { basename, dirname, join } from 'path';
|
|
6
6
|
import { runInit } from './commands/init.js';
|
|
7
7
|
import { runOnboard } from './commands/onboard.js';
|
|
8
|
-
import { runServe } from './commands/serve.js';
|
|
9
8
|
import { runWatch } from './commands/watch.js';
|
|
10
9
|
import { runReviewSpec } from './commands/review.js';
|
|
11
10
|
import { runStatus } from './commands/status.js';
|
|
@@ -41,7 +40,7 @@ function addStepRunOptions(cmd) {
|
|
|
41
40
|
.option('--concurrent [n]', 'multi-PR: cap parallel agents; omit n for one agent per PR (default)')
|
|
42
41
|
.option('--sequential', 'multi-PR: run PRs one at a time instead of in parallel')
|
|
43
42
|
.option('--stagger <ms>', 'multi-PR: ms delay between concurrent worker starts; default 2000')
|
|
44
|
-
.addOption(new Option('--trigger <source>').hideHelp()); // internal: set by kickass/watch
|
|
43
|
+
.addOption(new Option('--trigger <source>').hideHelp()); // internal: set by kickass/watch
|
|
45
44
|
}
|
|
46
45
|
function buildRunSpecOpts(opts) {
|
|
47
46
|
const roundMode = opts.crazy ? 'crazy' : (opts.halfCrazy || opts.halfcrazy) ? 'halfcrazy' : undefined;
|
|
@@ -81,16 +80,6 @@ program
|
|
|
81
80
|
.option('--team', 'pre-select team deployment mode, skip persona prompt')
|
|
82
81
|
.option('--reconfigure', 're-run setup (accepted for compatibility; onboard always reconfigures)')
|
|
83
82
|
.action((opts) => void runOnboard(opts));
|
|
84
|
-
program
|
|
85
|
-
.command('serve')
|
|
86
|
-
.description('[BETA] Always-on webhook server (mac-mini / home server mode)')
|
|
87
|
-
.option('-c, --config <path>', 'config file path')
|
|
88
|
-
.option('--personal', 'personal mode this session only (does not save to config)')
|
|
89
|
-
.option('--team', 'team mode this session only (does not save to config)')
|
|
90
|
-
.option('--reconfigure', 're-run deployment setup and save new choice to config')
|
|
91
|
-
.option('--backtrace', 'enable startup scan for unreviewed open PRs this session (overrides backtrace.enabled: false)')
|
|
92
|
-
.option('--no-backtrace', 'skip startup scan for unreviewed open PRs this session (overrides backtrace.enabled: true)')
|
|
93
|
-
.action((opts) => void runServe(opts));
|
|
94
83
|
program
|
|
95
84
|
.command('watch')
|
|
96
85
|
.description('Local dev mode — listen for PRs via gh webhook forward')
|
|
@@ -98,6 +87,7 @@ program
|
|
|
98
87
|
.option('--personal', 'personal mode this session only (does not save to config)')
|
|
99
88
|
.option('--team', 'team mode this session only (does not save to config)')
|
|
100
89
|
.option('--reconfigure', 're-run deployment setup and save new choice to config')
|
|
90
|
+
.option('--only-review', 'review-only mode: post reviews but never fix, recheck, or resolve')
|
|
101
91
|
.option('--backtrace', 'enable startup scan for unreviewed open PRs this session (overrides backtrace.enabled: false)')
|
|
102
92
|
.option('--no-backtrace', 'skip startup scan for unreviewed open PRs this session (overrides backtrace.enabled: true)')
|
|
103
93
|
.action((opts) => void runWatch(opts));
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAA;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|