@motivation-labs/crosscheck 0.14.0-beta.88 → 0.14.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/README.md +93 -64
- package/dist/__tests__/annotation.test.js +42 -1
- package/dist/__tests__/annotation.test.js.map +1 -1
- package/dist/__tests__/github-client.test.js +1 -1
- package/dist/__tests__/github-client.test.js.map +1 -1
- package/dist/__tests__/github-scan-client.test.js +1 -1
- package/dist/__tests__/github-scan-client.test.js.map +1 -1
- package/dist/__tests__/kickass.test.js +43 -5
- package/dist/__tests__/kickass.test.js.map +1 -1
- package/dist/__tests__/post-review-comment.test.js +7 -0
- package/dist/__tests__/post-review-comment.test.js.map +1 -1
- package/dist/__tests__/pr-status.test.js +162 -2
- package/dist/__tests__/pr-status.test.js.map +1 -1
- package/dist/__tests__/review-comment-body.test.js +2 -1
- package/dist/__tests__/review-comment-body.test.js.map +1 -1
- package/dist/cli.js +1 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/kickass.d.ts +4 -1
- package/dist/commands/kickass.d.ts.map +1 -1
- package/dist/commands/kickass.js +28 -12
- package/dist/commands/kickass.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 +5 -0
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +6 -0
- package/dist/commands/run.js.map +1 -1
- package/dist/github/client.d.ts +2 -1
- package/dist/github/client.d.ts.map +1 -1
- package/dist/github/client.js +7 -3
- package/dist/github/client.js.map +1 -1
- package/dist/github/merge.d.ts +1 -0
- package/dist/github/merge.d.ts.map +1 -1
- package/dist/github/merge.js +1 -0
- package/dist/github/merge.js.map +1 -1
- package/dist/lib/annotation.d.ts +2 -0
- package/dist/lib/annotation.d.ts.map +1 -1
- package/dist/lib/annotation.js +43 -5
- package/dist/lib/annotation.js.map +1 -1
- package/dist/lib/pr-status.d.ts.map +1 -1
- package/dist/lib/pr-status.js +31 -60
- package/dist/lib/pr-status.js.map +1 -1
- package/dist/lib/runner.d.ts +4 -0
- package/dist/lib/runner.d.ts.map +1 -1
- package/dist/lib/runner.js +5 -1
- package/dist/lib/runner.js.map +1 -1
- package/get-started.md +39 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -14,29 +14,12 @@
|
|
|
14
14
|
<img src="./assets/screenshot-watch.png" alt="crosscheck watch — live pipeline view" width="860" />
|
|
15
15
|
</p>
|
|
16
16
|
|
|
17
|
-
<p align="center">
|
|
18
|
-
<sub>
|
|
19
|
-
<b>①</b> Session header — profile, orgs, config path, and registered webhooks at a glance. |
|
|
20
|
-
<b>②</b> Per-PR event row — origin detection (<code>via=commits</code>), assigned reviewer, and elapsed time. |
|
|
21
|
-
<b>③</b> Live pipeline stripe — PR size · CR verdict · Fix count · Recheck status, updating in real time.
|
|
22
|
-
</sub>
|
|
23
|
-
</p>
|
|
24
|
-
|
|
25
17
|
**Auto Code Review Pipeline — customizable PR → Review → Fix → Recheck loop, single-vendor or cross-vendor, zero new infrastructure.**
|
|
26
18
|
|
|
27
19
|
Define the review pipeline in `workflow.yml`: review-only, review + fix, or the full review + fix + recheck cycle. Each step runs through the `claude` or `codex` CLI against your existing subscriptions — no API keys, no per-review cost.
|
|
28
20
|
|
|
29
21
|
---
|
|
30
22
|
|
|
31
|
-
## Highlights
|
|
32
|
-
|
|
33
|
-
- **Configurable pipeline** — compose steps in `workflow.yml`: a `review` step, an optional `fix` step, and an optional `recheck` step. Add per-step `instructions:` and `when:` conditions to control exactly what runs and when.
|
|
34
|
-
- **Single-vendor and cross-vendor modes** — single-vendor uses whatever AI you have enabled. Cross-vendor routes each PR to the rival AI for an independent review (Claude reviews Codex PRs, Codex reviews Claude PRs). Switch with one config line.
|
|
35
|
-
- **Subscription-funded, not token-billed** — runs through the `claude` and `codex` CLIs against your Claude Pro/Max and ChatGPT Plus/Pro plans. No API keys, no per-review cost.
|
|
36
|
-
- **`watch` for personal use, `serve` for your team** — `crosscheck watch` runs on your laptop with an auto-tunnel, ideal for solo use. `crosscheck serve` binds to a fixed port on a shared machine so the whole team is covered.
|
|
37
|
-
|
|
38
|
-
---
|
|
39
|
-
|
|
40
23
|
## Quick start
|
|
41
24
|
|
|
42
25
|
```bash
|
|
@@ -54,69 +37,124 @@ crosscheck watch # personal laptop
|
|
|
54
37
|
crosscheck serve # always-on team server
|
|
55
38
|
```
|
|
56
39
|
|
|
57
|
-
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Commands
|
|
43
|
+
|
|
44
|
+
### `crosscheck onboard`
|
|
45
|
+
|
|
46
|
+
Interactive setup wizard. Picks repos/orgs to monitor, selects single-vendor or cross-vendor mode, configures the review pipeline, and writes `~/.crosscheck/config.yml` and `workflow.yml`.
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
crosscheck onboard # guided setup
|
|
50
|
+
crosscheck onboard --personal # skip persona prompt, go straight to personal mode
|
|
51
|
+
crosscheck onboard --team # skip persona prompt, go straight to team mode
|
|
52
|
+
crosscheck onboard -y # accept all defaults non-interactively
|
|
53
|
+
```
|
|
58
54
|
|
|
59
55
|
---
|
|
60
56
|
|
|
61
|
-
|
|
57
|
+
### `crosscheck watch`
|
|
62
58
|
|
|
59
|
+
Personal mode. Starts an SSH tunnel (localhost.run), registers GitHub webhooks, and listens for PR events. Everything self-cleans on Ctrl+C.
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
crosscheck watch
|
|
63
|
+
crosscheck watch --no-backtrace # skip startup scan for unreviewed open PRs
|
|
64
|
+
crosscheck watch --reconfigure # re-run deployment setup before starting
|
|
63
65
|
```
|
|
64
|
-
$ crosscheck watch
|
|
65
66
|
|
|
66
|
-
|
|
67
|
+
---
|
|
67
68
|
|
|
68
|
-
|
|
69
|
-
pipeline review → fix → recheck
|
|
70
|
-
users your-github-login (5 repos)
|
|
71
|
-
config ./crosscheck.config.yml
|
|
69
|
+
### `crosscheck serve`
|
|
72
70
|
|
|
73
|
-
|
|
74
|
-
✓ webhook registered for your-org/your-repo
|
|
75
|
-
Waiting for PR events — Ctrl+C to stop.
|
|
71
|
+
Team mode. Binds to a fixed port — register the webhook once, cover the whole team. Designed for a mac-mini or home server.
|
|
76
72
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
73
|
+
```bash
|
|
74
|
+
crosscheck serve
|
|
75
|
+
crosscheck serve --no-backtrace # skip startup scan
|
|
76
|
+
crosscheck serve --personal # personal scope this session only
|
|
77
|
+
crosscheck serve --reconfigure # re-run deployment setup
|
|
78
|
+
```
|
|
82
79
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
### `crosscheck review <pr-url>`
|
|
83
|
+
|
|
84
|
+
One-shot review of a single PR. Clones, checks out, reviews, and posts the comment.
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
crosscheck review https://github.com/org/repo/pull/42
|
|
88
|
+
crosscheck review <pr-url> --reviewer claude # force Claude regardless of detection
|
|
89
|
+
crosscheck review <pr-url> --reviewer codex # force Codex regardless of detection
|
|
86
90
|
```
|
|
87
91
|
|
|
88
92
|
---
|
|
89
93
|
|
|
90
|
-
|
|
94
|
+
### `crosscheck run <pr-url>`
|
|
95
|
+
|
|
96
|
+
Runs the full configured workflow against one PR: review → fix → recheck. Same logic as `watch`/`serve`, but triggered manually.
|
|
91
97
|
|
|
92
98
|
```bash
|
|
93
|
-
crosscheck
|
|
94
|
-
crosscheck
|
|
95
|
-
crosscheck
|
|
96
|
-
crosscheck
|
|
97
|
-
crosscheck
|
|
98
|
-
crosscheck status # auth state, config summary, CLI versions
|
|
99
|
+
crosscheck run <pr-url>
|
|
100
|
+
crosscheck run <pr-url> --steps review # only the review step
|
|
101
|
+
crosscheck run <pr-url> --steps fix,recheck # skip initial review
|
|
102
|
+
crosscheck run <pr-url> --reviewer claude # override reviewer assignment
|
|
103
|
+
crosscheck run <pr-url> --dry-run # review without posting or fixing
|
|
99
104
|
```
|
|
100
105
|
|
|
101
|
-
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
### `crosscheck scan`
|
|
109
|
+
|
|
110
|
+
Scans every open PR in the configured monitor scope and reports where each one is in the crosscheck workflow. Results are cached for 60 seconds.
|
|
111
|
+
|
|
112
|
+
States: `PR` (needs review) · `APPROVE` · `NEEDS_WORK` · `BLOCK` · `RECHECK` (fix applied, needs recheck)
|
|
102
113
|
|
|
103
114
|
```bash
|
|
104
|
-
crosscheck
|
|
105
|
-
crosscheck
|
|
106
|
-
crosscheck
|
|
107
|
-
crosscheck
|
|
115
|
+
crosscheck scan # all open PRs, grouped stale/not-stale
|
|
116
|
+
crosscheck scan --tidy # stale actionable rows only
|
|
117
|
+
crosscheck scan --stale-after 4h # custom staleness threshold (default 24h)
|
|
118
|
+
crosscheck scan --force # bypass cache
|
|
119
|
+
crosscheck scan --json # machine-readable output
|
|
108
120
|
```
|
|
109
121
|
|
|
110
122
|
---
|
|
111
123
|
|
|
124
|
+
### `crosscheck kickass`
|
|
125
|
+
|
|
126
|
+
Selects stale PRs from the operator queue and advances them — runs `scan` first, presents a multi-select picker, shows a preflight summary, then executes after confirmation.
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
crosscheck kickass # interactive operator queue
|
|
130
|
+
crosscheck kickass --dry-run # preflight only — no mutations
|
|
131
|
+
crosscheck kickass --stale-after 2h # tighter staleness threshold
|
|
132
|
+
crosscheck kickass --force # bypass scan cache before picking
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Actions: `PR → CR` · `NEEDS_WORK/BLOCK → Fix` · `FIX/RECHECK → Recheck` · `APPROVE → Merge`
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
112
139
|
## Configuration
|
|
113
140
|
|
|
114
|
-
###
|
|
141
|
+
### Review depth (`quality.tier`)
|
|
115
142
|
|
|
116
|
-
|
|
143
|
+
```yaml
|
|
144
|
+
# crosscheck.config.yml
|
|
145
|
+
quality:
|
|
146
|
+
tier: balanced # fast | balanced | thorough
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
| Tier | Claude model | Codex model | Latency |
|
|
150
|
+
|---|---|---|---|
|
|
151
|
+
| `fast` | Haiku | default | ~10s |
|
|
152
|
+
| `balanced` | Sonnet (default) | default | ~30s |
|
|
153
|
+
| `thorough` | Opus | default | ~60s |
|
|
154
|
+
|
|
155
|
+
### Pipeline (`workflow.yml`)
|
|
117
156
|
|
|
118
157
|
```yaml
|
|
119
|
-
# workflow.yml — define the review pipeline
|
|
120
158
|
steps:
|
|
121
159
|
- name: review
|
|
122
160
|
type: review
|
|
@@ -124,7 +162,7 @@ steps:
|
|
|
124
162
|
|
|
125
163
|
- name: fix
|
|
126
164
|
type: fix
|
|
127
|
-
reviewer: origin
|
|
165
|
+
reviewer: origin
|
|
128
166
|
when: review.verdict != 'APPROVE'
|
|
129
167
|
|
|
130
168
|
- name: recheck
|
|
@@ -133,11 +171,10 @@ steps:
|
|
|
133
171
|
when: fix.applied_count > 0
|
|
134
172
|
```
|
|
135
173
|
|
|
136
|
-
### Config
|
|
137
|
-
|
|
138
|
-
Config lives at `~/.crosscheck/config.yml` — one file covers all your repos. Run `crosscheck init` to generate it, or let `crosscheck onboard` write it for you.
|
|
174
|
+
### Config snapshot
|
|
139
175
|
|
|
140
176
|
```yaml
|
|
177
|
+
# ~/.crosscheck/config.yml
|
|
141
178
|
orgs:
|
|
142
179
|
- your-org
|
|
143
180
|
|
|
@@ -154,7 +191,7 @@ vendors:
|
|
|
154
191
|
enabled: true
|
|
155
192
|
|
|
156
193
|
quality:
|
|
157
|
-
tier: balanced
|
|
194
|
+
tier: balanced
|
|
158
195
|
|
|
159
196
|
clone_protocol: ssh # ssh (default) | https
|
|
160
197
|
```
|
|
@@ -163,14 +200,6 @@ Full reference: [get-started.md](./get-started.md)
|
|
|
163
200
|
|
|
164
201
|
---
|
|
165
202
|
|
|
166
|
-
## Deployment
|
|
167
|
-
|
|
168
|
-
**Personal (`crosscheck watch`)** — runs on your laptop. An SSH tunnel through `localhost.run` handles GitHub webhook delivery automatically — no port-forwarding, no cloud account needed. Reconnects if the tunnel drops.
|
|
169
|
-
|
|
170
|
-
**Team (`crosscheck serve`)** — bind to a fixed port on a machine with a public IP or behind a reverse proxy. Register the webhook once; the whole team is covered without anyone's laptop staying on.
|
|
171
|
-
|
|
172
|
-
---
|
|
173
|
-
|
|
174
203
|
## Requirements
|
|
175
204
|
|
|
176
205
|
| | Minimum |
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { buildAnnotation, buildCommitTrailers, parseAnnotation, } from '../lib/annotation.js';
|
|
2
|
+
import { buildAnnotation, buildCommitTrailers, parseAnnotation, parseAnnotationFieldsFenced, } from '../lib/annotation.js';
|
|
3
3
|
describe('crosscheck annotation contract', () => {
|
|
4
4
|
const stepTypes = ['review', 'recheck', 'fix', 'conflict-resolve'];
|
|
5
5
|
for (const type of stepTypes) {
|
|
@@ -33,6 +33,32 @@ describe('crosscheck annotation contract', () => {
|
|
|
33
33
|
'<!-- crosscheck: origin=claude reviewer=codex model=gpt-5 type=conflict-resolve round=3 verdict=BLOCK service=crosscheck -->',
|
|
34
34
|
]);
|
|
35
35
|
});
|
|
36
|
+
it('appends optional head sha after stable v2 fields', () => {
|
|
37
|
+
const annotation = buildAnnotation({
|
|
38
|
+
origin: 'claude',
|
|
39
|
+
reviewer: 'codex',
|
|
40
|
+
model: 'gpt-5',
|
|
41
|
+
type: 'review',
|
|
42
|
+
round: 3,
|
|
43
|
+
verdict: 'BLOCK',
|
|
44
|
+
service: 'crosscheck',
|
|
45
|
+
sha: 'abc1234',
|
|
46
|
+
});
|
|
47
|
+
expect(annotation).toBe('<!-- crosscheck: origin=claude reviewer=codex model=gpt-5 type=review round=3 verdict=BLOCK service=crosscheck sha=abc1234 -->');
|
|
48
|
+
expect(parseAnnotation(annotation)).toEqual({
|
|
49
|
+
origin: 'claude',
|
|
50
|
+
reviewer: 'codex',
|
|
51
|
+
model: 'gpt-5',
|
|
52
|
+
type: 'review',
|
|
53
|
+
round: 3,
|
|
54
|
+
verdict: 'BLOCK',
|
|
55
|
+
service: 'crosscheck',
|
|
56
|
+
sha: 'abc1234',
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
it('preserves bare marker handling when sha-like fields are absent', () => {
|
|
60
|
+
expect(parseAnnotation('<!-- crosscheck: fix_applied -->')).toBeNull();
|
|
61
|
+
});
|
|
36
62
|
it('parses legacy annotations with documented defaults', () => {
|
|
37
63
|
expect(parseAnnotation('<!-- crosscheck: origin=claude reviewer=codex verdict=APPROVE type=review -->')).toEqual({
|
|
38
64
|
origin: 'claude',
|
|
@@ -74,6 +100,21 @@ describe('crosscheck annotation contract', () => {
|
|
|
74
100
|
it('returns null for bare summary markers', () => {
|
|
75
101
|
expect(parseAnnotation('<!-- crosscheck: fix_applied -->')).toBeNull();
|
|
76
102
|
});
|
|
103
|
+
it('skips fenced annotations and parses the footer annotation', () => {
|
|
104
|
+
const body = [
|
|
105
|
+
'Example:',
|
|
106
|
+
'```',
|
|
107
|
+
'<!-- crosscheck: origin=claude reviewer=codex type=review verdict=BLOCK -->',
|
|
108
|
+
'```',
|
|
109
|
+
'<!-- crosscheck: origin=codex reviewer=claude type=recheck verdict=APPROVE -->',
|
|
110
|
+
].join('\n');
|
|
111
|
+
expect(parseAnnotation(body)?.type).toBe('recheck');
|
|
112
|
+
expect(parseAnnotation(body)?.verdict).toBe('APPROVE');
|
|
113
|
+
});
|
|
114
|
+
it('exposes bare summary markers through the fenced field parser', () => {
|
|
115
|
+
const fields = parseAnnotationFieldsFenced('<!-- crosscheck: fix_applied -->');
|
|
116
|
+
expect(fields?.get('__marker__')).toBe('fix_applied');
|
|
117
|
+
});
|
|
77
118
|
});
|
|
78
119
|
describe('crosscheck commit trailers', () => {
|
|
79
120
|
it('emits reviewer, model, step, and service trailers', () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"annotation.test.js","sourceRoot":"","sources":["../../src/__tests__/annotation.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,eAAe,
|
|
1
|
+
{"version":3,"file":"annotation.test.js","sourceRoot":"","sources":["../../src/__tests__/annotation.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@ describe('github client listing failures', () => {
|
|
|
9
9
|
status: 500,
|
|
10
10
|
statusText: 'Internal Server Error',
|
|
11
11
|
})));
|
|
12
|
-
await expect(listOpenPRs('acme', 'api', 'token')).rejects.toThrow('Failed to list open PRs [500]:
|
|
12
|
+
await expect(listOpenPRs('acme', 'api', 'token')).rejects.toThrow('Failed to list open PRs for acme/api page 1 [500]: server error');
|
|
13
13
|
});
|
|
14
14
|
it('throws when listOrgRepos receives a non-OK response', async () => {
|
|
15
15
|
vi.stubGlobal('fetch', vi.fn().mockResolvedValue(new Response(JSON.stringify({ message: 'rate limited' }), {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github-client.test.js","sourceRoot":"","sources":["../../src/__tests__/github-client.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAE/D,SAAS,CAAC,GAAG,EAAE;IACb,EAAE,CAAC,gBAAgB,EAAE,CAAA;AACvB,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAC9C,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAClE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAC9C,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,EAAE;YACxD,MAAM,EAAE,GAAG;YACX,UAAU,EAAE,uBAAuB;SACpC,CAAC,CACH,CAAC,CAAA;QAEF,MAAM,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAC/D,
|
|
1
|
+
{"version":3,"file":"github-client.test.js","sourceRoot":"","sources":["../../src/__tests__/github-client.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAE/D,SAAS,CAAC,GAAG,EAAE;IACb,EAAE,CAAC,gBAAgB,EAAE,CAAA;AACvB,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAC9C,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAClE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAC9C,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,EAAE;YACxD,MAAM,EAAE,GAAG;YACX,UAAU,EAAE,uBAAuB;SACpC,CAAC,CACH,CAAC,CAAA;QAEF,MAAM,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAC/D,iEAAiE,CAClE,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAC9C,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,EAAE;YACxD,MAAM,EAAE,GAAG;YACX,UAAU,EAAE,WAAW;SACxB,CAAC,CACH,CAAC,CAAA;QAEF,MAAM,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CACzD,2CAA2C,CAC5C,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -64,7 +64,7 @@ describe('scan GitHub client helpers', () => {
|
|
|
64
64
|
it('throws for non-404 open PR list failures', async () => {
|
|
65
65
|
vi.spyOn(globalThis, 'fetch').mockResolvedValueOnce(jsonResponse({ message: 'rate limited' }, 429));
|
|
66
66
|
await expect(listOpenPRs('acme', 'web', 'token'))
|
|
67
|
-
.rejects.toThrow('
|
|
67
|
+
.rejects.toThrow('Failed to list open PRs for acme/web page 1 [429]: rate limited');
|
|
68
68
|
});
|
|
69
69
|
it('throws for non-404 repo scope list failures', async () => {
|
|
70
70
|
vi.spyOn(globalThis, 'fetch')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github-scan-client.test.js","sourceRoot":"","sources":["../../src/__tests__/github-scan-client.test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"github-scan-client.test.js","sourceRoot":"","sources":["../../src/__tests__/github-scan-client.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC5D,OAAO,EAAE,8BAA8B,EAAE,aAAa,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,WAAW,EAAE,YAAY,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAExL,SAAS,CAAC,GAAG,EAAE;IACb,EAAE,CAAC,eAAe,EAAE,CAAA;AACtB,CAAC,CAAC,CAAA;AAEF,SAAS,YAAY,CAAC,IAAa,EAAE,MAAM,GAAG,GAAG;IAC/C,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;QACxC,MAAM;QACN,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;KAChD,CAAC,CAAA;AACJ,CAAC;AAED,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC1C,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YAC3D,IAAI,EAAE,SAAS,KAAK,EAAE;YACtB,MAAM,EAAE,WAAW;YACnB,UAAU,EAAE,SAAS;YACrB,YAAY,EAAE,0BAA0B;YACxC,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC,CAAA;QACH,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC;aAC3C,qBAAqB,CAAC,YAAY,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;aAC9D,qBAAqB,CAAC,YAAY,CAAC;YAClC,UAAU,EAAE,CAAC;oBACX,IAAI,EAAE,WAAW;oBACjB,MAAM,EAAE,WAAW;oBACnB,UAAU,EAAE,SAAS;oBACrB,YAAY,EAAE,0BAA0B;oBACxC,UAAU,EAAE,IAAI;iBACjB,CAAC;SACH,CAAC,CAAC,CAAA;QAEL,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;QAElE,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;QAC9B,MAAM,CAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;QACzC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;IAC/D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YAC3D,OAAO,EAAE,MAAM,KAAK,EAAE;YACtB,KAAK,EAAE,SAAS;YAChB,UAAU,EAAE,0BAA0B;SACvC,CAAC,CAAC,CAAA;QACH,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC;aAC3C,qBAAqB,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;aAC9C,qBAAqB,CAAC,YAAY,CAAC,CAAC;gBACnC,OAAO,EAAE,QAAQ;gBACjB,KAAK,EAAE,SAAS;gBAChB,UAAU,EAAE,0BAA0B;aACvC,CAAC,CAAC,CAAC,CAAA;QAEN,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;QAE3E,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;QAClC,MAAM,CAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;QACzC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,+BAA+B,CAAC,CAAA;IACtF,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,qBAAqB,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,GAAG,CAAC,CAAC,CAAA;QAEnG,MAAM,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;aACvD,OAAO,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAA;IACjD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,qBAAqB,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,GAAG,CAAC,CAAC,CAAA;QAEhG,MAAM,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IACjF,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,qBAAqB,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,GAAG,CAAC,CAAC,CAAA;QAEnG,MAAM,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;aAC9C,OAAO,CAAC,OAAO,CAAC,iEAAiE,CAAC,CAAA;IACvF,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC;aAC1B,qBAAqB,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,GAAG,CAAC,CAAC;aAClE,qBAAqB,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,GAAG,CAAC,CAAC,CAAA;QAErE,MAAM,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAA;QACxF,MAAM,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAA;IAC5F,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,qBAAqB,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,GAAG,CAAC,CAAC,CAAA;QAEhG,MAAM,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IACxE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC5E,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC;aAC3C,qBAAqB,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,0BAA0B,EAAE,CAAC,CAAC,CAAC,CAAA;QAE/G,MAAM,kBAAkB,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,CAAA;QAEnD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC;YAClE,OAAO,EAAE,MAAM,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,6BAA6B,EAAE,CAAC;SAC5E,CAAC,CAAC,CAAA;IACL,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,qBAAqB,CAAC,YAAY,CAAC;YAC/D,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,6EAA6E,EAAE;YAC9F,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,kCAAkC,EAAE;YACnD,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,kFAAkF,EAAE;SACpG,CAAC,CAAC,CAAA;QAEH,MAAM,MAAM,CAAC,8BAA8B,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;YACvF,EAAE,EAAE,CAAC;YACL,IAAI,EAAE,kFAAkF;SACzF,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { buildKickassRunArgs, buildPreflightPlan, executeKickassPlan, resolveCliInvocation, runKickassWithDeps, } from '../commands/kickass.js';
|
|
2
|
+
import { buildKickassRunArgs, buildPreflightPlan, executeKickassPlan, resolveCliInvocation, runKickassWithDeps, summarizeExecutionResults, } from '../commands/kickass.js';
|
|
3
3
|
function pr(overrides = {}) {
|
|
4
4
|
const nextAction = overrides.nextAction ?? 'review';
|
|
5
5
|
return {
|
|
@@ -45,6 +45,8 @@ describe('buildKickassRunArgs', () => {
|
|
|
45
45
|
'https://github.com/acme/web/pull/7',
|
|
46
46
|
'--steps',
|
|
47
47
|
'review',
|
|
48
|
+
'--expected-head-sha',
|
|
49
|
+
'abc123456789',
|
|
48
50
|
]);
|
|
49
51
|
});
|
|
50
52
|
it('targets only fix for stale PRs with unresolved findings', () => {
|
|
@@ -63,6 +65,8 @@ describe('buildKickassRunArgs', () => {
|
|
|
63
65
|
'https://github.com/acme/web/pull/7',
|
|
64
66
|
'--steps',
|
|
65
67
|
'fix',
|
|
68
|
+
'--expected-head-sha',
|
|
69
|
+
'abc123456789',
|
|
66
70
|
]);
|
|
67
71
|
});
|
|
68
72
|
it('targets only recheck for stale PRs after a fix', () => {
|
|
@@ -71,6 +75,8 @@ describe('buildKickassRunArgs', () => {
|
|
|
71
75
|
'https://github.com/acme/web/pull/7',
|
|
72
76
|
'--steps',
|
|
73
77
|
'recheck',
|
|
78
|
+
'--expected-head-sha',
|
|
79
|
+
'abc123456789',
|
|
74
80
|
]);
|
|
75
81
|
});
|
|
76
82
|
});
|
|
@@ -154,7 +160,7 @@ describe('runKickassWithDeps', () => {
|
|
|
154
160
|
expect(plan[0].transition).toBe('PR -> CR');
|
|
155
161
|
expect(plan[0].explanation).toBe('no_usable_review_comment');
|
|
156
162
|
});
|
|
157
|
-
it('skips fork fix
|
|
163
|
+
it('skips fork fix while allowing fork review and merge actions', async () => {
|
|
158
164
|
const review = pr({
|
|
159
165
|
number: 1,
|
|
160
166
|
nextAction: 'review',
|
|
@@ -191,9 +197,41 @@ describe('runKickassWithDeps', () => {
|
|
|
191
197
|
dispatched.push(item.pr.number);
|
|
192
198
|
},
|
|
193
199
|
});
|
|
194
|
-
expect(plan.map(item => item.action)).toEqual(['review', 'skip', '
|
|
195
|
-
expect(dispatched).toEqual([1]);
|
|
196
|
-
expect(results.map(result => result.reason)).toEqual([undefined, 'fork_pr',
|
|
200
|
+
expect(plan.map(item => item.action)).toEqual(['review', 'skip', 'merge']);
|
|
201
|
+
expect(dispatched).toEqual([1, 3]);
|
|
202
|
+
expect(results.map(result => result.reason)).toEqual([undefined, 'fork_pr', undefined]);
|
|
203
|
+
});
|
|
204
|
+
it('continues executing later PRs when one PR throws', async () => {
|
|
205
|
+
const first = pr({ number: 1, nextAction: 'review' });
|
|
206
|
+
const second = pr({ number: 2, nextAction: 'review' });
|
|
207
|
+
const third = pr({ number: 3, nextAction: 'merge' });
|
|
208
|
+
const dispatched = [];
|
|
209
|
+
const results = await executeKickassPlan(buildPreflightPlan([first, second, third]), {
|
|
210
|
+
getCurrentHeadSha: async (item) => {
|
|
211
|
+
if (item.pr.number === 2)
|
|
212
|
+
throw new Error('api unavailable');
|
|
213
|
+
return item.pr.headSha;
|
|
214
|
+
},
|
|
215
|
+
dispatchRun: async (item) => {
|
|
216
|
+
dispatched.push(item.pr.number);
|
|
217
|
+
},
|
|
218
|
+
dispatchMerge: async (item) => {
|
|
219
|
+
dispatched.push(item.pr.number);
|
|
220
|
+
},
|
|
221
|
+
});
|
|
222
|
+
expect(dispatched).toEqual([1, 3]);
|
|
223
|
+
expect(results.map(result => [result.pr.number, result.status, result.reason])).toEqual([
|
|
224
|
+
[1, 'executed', undefined],
|
|
225
|
+
[2, 'failed', 'error'],
|
|
226
|
+
[3, 'executed', undefined],
|
|
227
|
+
]);
|
|
228
|
+
});
|
|
229
|
+
it('summarizes execution outcomes', () => {
|
|
230
|
+
expect(summarizeExecutionResults([
|
|
231
|
+
{ pr: pr({ number: 1 }), status: 'executed' },
|
|
232
|
+
{ pr: pr({ number: 2 }), status: 'skipped', reason: 'stale_signature' },
|
|
233
|
+
{ pr: pr({ number: 3 }), status: 'failed', reason: 'error' },
|
|
234
|
+
])).toBe('Execution summary: 1 executed, 1 skipped, 1 failed');
|
|
197
235
|
});
|
|
198
236
|
});
|
|
199
237
|
describe('resolveCliInvocation', () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kickass.test.js","sourceRoot":"","sources":["../../src/__tests__/kickass.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,
|
|
1
|
+
{"version":3,"file":"kickass.test.js","sourceRoot":"","sources":["../../src/__tests__/kickass.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,5 +33,12 @@ describe('postReviewComment', () => {
|
|
|
33
33
|
body: expect.stringContaining('model=claude-opus-4-7 type=review round=3'),
|
|
34
34
|
}));
|
|
35
35
|
});
|
|
36
|
+
it('threads the selected head sha into the annotation when provided', async () => {
|
|
37
|
+
const { octokit, createComment } = makeOctokit();
|
|
38
|
+
await postReviewComment(octokit, 'owner', 'repo', 42, 'Review', 'codex', {}, 'claude', 'BLOCK', undefined, false, 'gpt-5', 'review', 1, 'abc1234');
|
|
39
|
+
expect(createComment).toHaveBeenCalledWith(expect.objectContaining({
|
|
40
|
+
body: expect.stringContaining('service=crosscheck sha=abc1234'),
|
|
41
|
+
}));
|
|
42
|
+
});
|
|
36
43
|
});
|
|
37
44
|
//# sourceMappingURL=post-review-comment.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"post-review-comment.test.js","sourceRoot":"","sources":["../../src/__tests__/post-review-comment.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAEvD,SAAS,WAAW;IAClB,MAAM,aAAa,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAA;IACtE,OAAO;QACL,OAAO,EAAE;YACP,IAAI,EAAE;gBACJ,MAAM,EAAE,EAAE,aAAa,EAAE;aAC1B;SACO;QACV,aAAa;KACd,CAAA;AACH,CAAC;AAED,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,WAAW,EAAE,CAAA;QAEhD,MAAM,iBAAiB,CACrB,OAAO,EACP,OAAO,EACP,MAAM,EACN,EAAE,EACF,aAAa,EACb,OAAO,EACP,EAAE,EACF,QAAQ,EACR,IAAI,CACL,CAAA;QAED,MAAM,CAAC,aAAa,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,gBAAgB,CAAC;YACjE,IAAI,EAAE,MAAM,CAAC,gBAAgB,CAC3B,wHAAwH,CACzH;SACF,CAAC,CAAC,CAAA;IACL,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,WAAW,EAAE,CAAA;QAEhD,MAAM,iBAAiB,CACrB,OAAO,EACP,OAAO,EACP,MAAM,EACN,EAAE,EACF,cAAc,EACd,QAAQ,EACR,EAAE,EACF,OAAO,EACP,SAAS,EACT,EAAE,EACF,IAAI,EACJ,SAAS,EACT,SAAS,EACT,CAAC,CACF,CAAA;QAED,MAAM,CAAC,aAAa,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,gBAAgB,CAAC;YACjE,IAAI,EAAE,MAAM,CAAC,gBAAgB,CAC3B,yHAAyH,CAC1H;SACF,CAAC,CAAC,CAAA;IACL,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,WAAW,EAAE,CAAA;QAEhD,MAAM,iBAAiB,CACrB,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,YAAY,EAC3E,SAAS,EAAE,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC,CACjD,CAAA;QAED,MAAM,CAAC,aAAa,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,gBAAgB,CAAC;YACjE,IAAI,EAAE,MAAM,CAAC,gBAAgB,CAAC,2CAA2C,CAAC;SAC3E,CAAC,CAAC,CAAA;IACL,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"post-review-comment.test.js","sourceRoot":"","sources":["../../src/__tests__/post-review-comment.test.ts"],"names":[],"mappings":"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"}
|