@weareikko/code-review 0.8.2 → 0.8.3
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 +53 -38
- package/dist/{cli-DBkaU14C.js → cli-CICuhytH.js} +91 -9
- package/dist/cli-CICuhytH.js.map +1 -0
- package/dist/cli.js +1 -1
- package/dist/github.d.ts +15 -0
- package/dist/github.d.ts.map +1 -1
- package/dist/platforms/github.d.ts +5 -1
- package/dist/platforms/github.d.ts.map +1 -1
- package/dist/review.js +1 -1
- package/package.json +1 -1
- package/dist/cli-DBkaU14C.js.map +0 -1
package/README.md
CHANGED
|
@@ -5,15 +5,19 @@
|
|
|
5
5
|
[](https://bundlephobia.com/package/@weareikko/code-review)
|
|
6
6
|

|
|
7
7
|
|
|
8
|
-
Run an agent-driven code review
|
|
8
|
+
Run an agent-driven code review on **GitLab merge requests and GitHub pull requests** — the same review engine on both. It parses inline comments, posts deduplicated review discussions, upserts a summary, and reports per-run token usage and cost. The platform is auto-detected from the environment (GitLab CI vs. GitHub Actions) and can be forced with `--platform github|gitlab`.
|
|
9
9
|
|
|
10
|
-
The reviewer reads the
|
|
10
|
+
The reviewer reads the merge/pull request **title and description** as the author's declared intent: it reads the diff against the stated purpose and surfaces code/intent mismatches (the change does something the description never claimed, or omits something it promised) as a summary note. A missing or empty description degrades gracefully — the review still runs.
|
|
11
11
|
|
|
12
12
|
## Requirements
|
|
13
13
|
|
|
14
14
|
- Node.js `>=24`
|
|
15
|
-
- `git` available in the runtime
|
|
16
|
-
- A
|
|
15
|
+
- `git` available in the runtime (full history — the review diffs against the merge base)
|
|
16
|
+
- A run in one of the two supported contexts, which the tool auto-detects:
|
|
17
|
+
- **GitLab CI** in a merge-request pipeline (`GITLAB_CI`, `CI_PROJECT_ID`, `CI_MERGE_REQUEST_IID`), or
|
|
18
|
+
- **GitHub Actions** on a `pull_request` event (`GITHUB_ACTIONS`, `GITHUB_REPOSITORY`, the PR number)
|
|
19
|
+
|
|
20
|
+
Detection precedence: an explicit `--platform github|gitlab` (or `CODE_REVIEW_PLATFORM`) always wins; otherwise `GITHUB_ACTIONS=true` selects GitHub and `GITLAB_CI=true` (or a present `CI_PROJECT_ID` / `CI_SERVER_URL`) selects GitLab; failing that, the tool infers the platform from whichever side's identifiers are present.
|
|
17
21
|
|
|
18
22
|
## Install / Run
|
|
19
23
|
|
|
@@ -79,13 +83,17 @@ review:
|
|
|
79
83
|
- review-usage.json
|
|
80
84
|
```
|
|
81
85
|
|
|
82
|
-
## GitHub Actions
|
|
86
|
+
## GitHub Actions example
|
|
87
|
+
|
|
88
|
+
On GitHub the same engine reviews **pull requests** — auto-detected from the Actions environment (`GITHUB_ACTIONS`, `GITHUB_REPOSITORY`, the `pull_request` event); pass `--platform github` to force it. Findings post as one batched PR review with inline comments plus an upserted summary comment.
|
|
83
89
|
|
|
84
|
-
|
|
90
|
+
### Composite action (recommended)
|
|
85
91
|
|
|
86
|
-
|
|
92
|
+
The bundled composite action is the primary path: it checks out the repository, sets up Node, installs the CLI, and runs the review in one step. It needs:
|
|
87
93
|
|
|
88
|
-
|
|
94
|
+
- **Permissions:** `pull-requests: write` (to post the review and summary) and `contents: read` (to check out the code). The default `GITHUB_TOKEN` is enough; the action reads it as `${{ github.token }}` by default.
|
|
95
|
+
- **Full git history:** the action checks out the repository by default with `fetch-depth: 0` so the merge-base diff and commit log resolve (tune with `fetch-depth`, or set `checkout: false` and check out yourself first).
|
|
96
|
+
- **A model + its key:** pass the model via the `model` input and the provider's key via the `api-key` input (or expose the provider's standard env var, e.g. `ANTHROPIC_API_KEY`, to the step).
|
|
89
97
|
|
|
90
98
|
```yml
|
|
91
99
|
name: code-review
|
|
@@ -98,19 +106,25 @@ permissions:
|
|
|
98
106
|
|
|
99
107
|
jobs:
|
|
100
108
|
review:
|
|
101
|
-
|
|
102
|
-
|
|
109
|
+
runs-on: ubuntu-latest
|
|
110
|
+
steps:
|
|
111
|
+
# Checkout (full history) is bundled — no separate checkout step needed.
|
|
112
|
+
# Opt out with `checkout: false` if your job already checked out the code.
|
|
113
|
+
- uses: weareikko/code-review@0.8.2 # pin to a release tag
|
|
114
|
+
with:
|
|
115
|
+
model: anthropic/claude-sonnet-4-5
|
|
116
|
+
api-key: ${{ secrets.ANTHROPIC_API_KEY }}
|
|
117
|
+
# github-token defaults to ${{ github.token }}
|
|
118
|
+
# args: --min-severity warn --dry-run
|
|
103
119
|
```
|
|
104
120
|
|
|
105
|
-
|
|
121
|
+
Inputs: `model` (required), `api-key`, `github-token` (default `${{ github.token }}`), `version` (npm dist-tag/version, default `latest`), `node-version` (default `24`), `working-directory`, `args` (extra CLI flags forwarded verbatim), `checkout` (default `true` — bundled repository checkout), and `fetch-depth` (default `0` — full history, required for the merge-base diff).
|
|
106
122
|
|
|
107
|
-
|
|
123
|
+
Because the composite action references your secrets directly (`${{ secrets.ANTHROPIC_API_KEY }}`), it works from **any** repository, including consumers in a different organization from this one.
|
|
108
124
|
|
|
109
|
-
|
|
125
|
+
### Reusable workflow (same org/enterprise)
|
|
110
126
|
|
|
111
|
-
|
|
112
|
-
- **Full git history:** the bundled checkout uses `fetch-depth: 0` so the merge-base diff and commit log resolve (tune with `fetch-depth`, or set `checkout: false` and check out yourself).
|
|
113
|
-
- **A model + its key:** pass the model via the `model` input and the provider's key via the `api-key` input (or expose the provider's standard env var, e.g. `ANTHROPIC_API_KEY`, to the step).
|
|
127
|
+
The bundled reusable workflow lets a caller enable reviews with no `steps:` of its own — it checks out the code, installs the CLI, and runs the review for you:
|
|
114
128
|
|
|
115
129
|
```yml
|
|
116
130
|
name: code-review
|
|
@@ -123,24 +137,23 @@ permissions:
|
|
|
123
137
|
|
|
124
138
|
jobs:
|
|
125
139
|
review:
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
# Checkout (full history) is bundled — opt out with `checkout: false` if
|
|
129
|
-
# your job already checked out the code with its own options.
|
|
130
|
-
- uses: weareikko/code-review@main # pin to a release tag in production
|
|
131
|
-
with:
|
|
132
|
-
model: anthropic/claude-sonnet-4-5
|
|
133
|
-
api-key: ${{ secrets.ANTHROPIC_API_KEY }}
|
|
134
|
-
# github-token defaults to ${{ github.token }}
|
|
135
|
-
# args: --min-severity warn --dry-run
|
|
140
|
+
uses: weareikko/code-review/.github/workflows/code-review.yml@0.8.2 # pin to a release tag
|
|
141
|
+
secrets: inherit
|
|
136
142
|
```
|
|
137
143
|
|
|
138
|
-
|
|
144
|
+
It reads review settings from repo/org **variables** (`CODE_REVIEW_MODEL`, `CODE_REVIEW_DEPTH`, `CODE_REVIEW_THINKING_LEVEL`, `CODE_REVIEW_VERIFY_MODEL`) and provider credentials from **secrets** named with the `CODE_REVIEW_` prefix (e.g. `CODE_REVIEW_ANTHROPIC_API_KEY`), which the CLI's env shim de-prefixes for the provider. Optional `with:` inputs: `model` (overrides the `CODE_REVIEW_MODEL` variable), `version`, `node-version`, `working-directory`, `args`, and `runs-on`.
|
|
139
145
|
|
|
140
|
-
|
|
146
|
+
> **Caveat — `secrets: inherit` is same-organization (or enterprise) only.** Organization secrets are **not** inherited across organizations, so this pattern only works when the caller repository lives in the same org (or enterprise) as `weareikko/code-review`. Cross-organization consumers must use the **composite action** above, which references their own secrets directly. (The reusable workflow relies on `secrets: inherit` and declares no `workflow_call.secrets`, so there is no explicit-secrets path for it.)
|
|
147
|
+
|
|
148
|
+
### Running the CLI directly
|
|
149
|
+
|
|
150
|
+
Prefer no action at all? `GITHUB_TOKEN`, `GITHUB_REPOSITORY`, and the PR number are read straight from the Actions environment. Check out the code first (full history) so the merge-base diff resolves:
|
|
141
151
|
|
|
142
152
|
```yml
|
|
143
|
-
- uses: actions/
|
|
153
|
+
- uses: actions/checkout@v5
|
|
154
|
+
with:
|
|
155
|
+
fetch-depth: 0
|
|
156
|
+
- uses: actions/setup-node@v5
|
|
144
157
|
with:
|
|
145
158
|
node-version: 24
|
|
146
159
|
- run: npx @weareikko/code-review
|
|
@@ -159,17 +172,17 @@ The README covers getting started. Reference material lives in [`docs/`](https:/
|
|
|
159
172
|
- [Skills](https://github.com/weareikko/code-review/blob/main/docs/skills.md) — built-in, external (`npm:`/`file:`/`git:`), and project auto-discovered review skills.
|
|
160
173
|
- [Multi-stage review](https://github.com/weareikko/code-review/blob/main/docs/multi-stage-review.md) — the staged Find / Verify / Synthesize pipeline behind `--review-depth`.
|
|
161
174
|
- [Observability](https://github.com/weareikko/code-review/blob/main/docs/observability.md) — diagnostics-channel tracing and the opt-in OpenTelemetry bridge (spans, metrics, logs).
|
|
162
|
-
- [Output format](https://github.com/weareikko/code-review/blob/main/docs/output-format.md) — inline-comment shape,
|
|
175
|
+
- [Output format](https://github.com/weareikko/code-review/blob/main/docs/output-format.md) — inline-comment shape, the upserted summary (a note on GitLab, an issue comment on GitHub), footer, and duplicate prevention.
|
|
163
176
|
|
|
164
177
|
## Configuration
|
|
165
178
|
|
|
166
|
-
The CLI auto-resolves most values from GitLab CI variables and provider-standard env vars. The two things you must provide are a model and its provider's API key:
|
|
179
|
+
The CLI auto-resolves most values from the CI environment (GitLab CI variables or the GitHub Actions context) and provider-standard env vars. The two things you must provide are a model and its provider's API key:
|
|
167
180
|
|
|
168
181
|
```bash
|
|
169
182
|
code-review --model anthropic/claude-sonnet-4-5 --api-key "$ANTHROPIC_API_KEY"
|
|
170
183
|
```
|
|
171
184
|
|
|
172
|
-
Equivalently, set `CODE_REVIEW_MODEL` and the provider's key (e.g. `ANTHROPIC_API_KEY`) as CI/CD variables. Common knobs include `--min-severity`, `--thinking`, `--posting-mode draft`, `--no-summary`, and `--dry-run`. See the full [environment-variable and flag reference](https://github.com/weareikko/code-review/blob/main/docs/configuration.md).
|
|
185
|
+
Equivalently, set `CODE_REVIEW_MODEL` and the provider's key (e.g. `ANTHROPIC_API_KEY`) as CI/CD variables (GitLab) or repository/organization variables and secrets (GitHub). Common knobs include `--min-severity`, `--thinking`, `--posting-mode draft`, `--no-summary`, and `--dry-run`. See the full [environment-variable and flag reference](https://github.com/weareikko/code-review/blob/main/docs/configuration.md).
|
|
173
186
|
|
|
174
187
|
## Providers
|
|
175
188
|
|
|
@@ -182,7 +195,7 @@ Equivalently, set `CODE_REVIEW_MODEL` and the provider's key (e.g. `ANTHROPIC_AP
|
|
|
182
195
|
- parsed comment payload
|
|
183
196
|
- computed fingerprints
|
|
184
197
|
- duplicate status
|
|
185
|
-
- final GitLab discussion payload
|
|
198
|
+
- final platform-specific posting payload (a GitLab discussion payload, or a GitHub review-comment payload)
|
|
186
199
|
- `review-usage.json`: token and cost breakdown for the run (`tokens.{input,output,cacheRead,cacheWrite,total}`, `cost.{input,output,cacheRead,cacheWrite,total}`, `model`)
|
|
187
200
|
|
|
188
201
|
The CLI also prints a one-line summary at the end of the run:
|
|
@@ -198,15 +211,17 @@ Use these files for CI debugging and auditing.
|
|
|
198
211
|
- **`Node.js >=24 is required`**
|
|
199
212
|
- Use `node:24` (or newer) in CI.
|
|
200
213
|
- **`Missing required configuration`**
|
|
201
|
-
- Provide required flags or ensure
|
|
214
|
+
- Provide required flags or ensure the platform's identifiers/token are available: on GitLab `CI_PROJECT_ID`, `CI_MERGE_REQUEST_IID`, and a GitLab token; on GitHub `GITHUB_REPOSITORY`, the PR number, and `GITHUB_TOKEN`. A model and its API key are required on both.
|
|
215
|
+
- **`Could not detect the review platform` / `Ambiguous review platform`**
|
|
216
|
+
- Set `--platform github|gitlab` (or `CODE_REVIEW_PLATFORM`) to force the platform.
|
|
202
217
|
- **`--min-severity must be one of: info, warn, critical`**
|
|
203
218
|
- Fix `--min-severity` or `CODE_REVIEW_MIN_SEVERITY`.
|
|
204
219
|
- **Git history errors / merge-base failures**
|
|
205
|
-
-
|
|
220
|
+
- Fetch full history: `GIT_DEPTH: 0` on GitLab, `fetch-depth: 0` on `actions/checkout` (the composite action does this by default).
|
|
206
221
|
- Ensure source and target branches are fetchable from `origin`.
|
|
207
|
-
- **
|
|
208
|
-
-
|
|
209
|
-
-
|
|
222
|
+
- **API 401/403 when posting**
|
|
223
|
+
- GitLab: ensure the token can read MR metadata/discussions and create MR discussions; with `CI_JOB_TOKEN`, check that project settings allow the required API access.
|
|
224
|
+
- GitHub: ensure the token has `pull-requests: write` (the default `GITHUB_TOKEN` with that permission is enough).
|
|
210
225
|
- **No comments posted**
|
|
211
226
|
- Check `review-comments.json` for `duplicate: true` or empty parsed comments.
|
|
212
227
|
- Run with `--dry-run` and inspect `code-review.md` formatting (`== Inline Comments ==`).
|
|
@@ -155,6 +155,20 @@ function parseNextLink(header) {
|
|
|
155
155
|
}
|
|
156
156
|
return null;
|
|
157
157
|
}
|
|
158
|
+
var REVIEW_THREADS_QUERY = `
|
|
159
|
+
query ($owner: String!, $repo: String!, $pull: Int!, $cursor: String) {
|
|
160
|
+
repository(owner: $owner, name: $repo) {
|
|
161
|
+
pullRequest(number: $pull) {
|
|
162
|
+
reviewThreads(first: 100, after: $cursor) {
|
|
163
|
+
pageInfo { hasNextPage endCursor }
|
|
164
|
+
nodes {
|
|
165
|
+
isResolved
|
|
166
|
+
comments(first: 100) { nodes { databaseId } }
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}`;
|
|
158
172
|
var GitHubClient = class {
|
|
159
173
|
base;
|
|
160
174
|
token;
|
|
@@ -290,6 +304,65 @@ var GitHubClient = class {
|
|
|
290
304
|
getCurrentUser() {
|
|
291
305
|
return this.request("/user");
|
|
292
306
|
}
|
|
307
|
+
/**
|
|
308
|
+
* Derive the GraphQL endpoint from the REST base. github.com exposes GraphQL
|
|
309
|
+
* at `<origin>/graphql`, while GitHub Enterprise Server exposes it at
|
|
310
|
+
* `<origin>/api/graphql` (its REST base is `<origin>/api/v3`).
|
|
311
|
+
*/
|
|
312
|
+
graphqlEndpoint() {
|
|
313
|
+
if (this.base.endsWith("/api/v3")) return `${this.base.slice(0, -7)}/api/graphql`;
|
|
314
|
+
return `${this.base}/graphql`;
|
|
315
|
+
}
|
|
316
|
+
async graphql(query, variables) {
|
|
317
|
+
const url = this.graphqlEndpoint();
|
|
318
|
+
const response = await this.fetchWithTimeout(url, {
|
|
319
|
+
method: "POST",
|
|
320
|
+
headers: this.headers({ "Content-Type": "application/json" }),
|
|
321
|
+
body: JSON.stringify({
|
|
322
|
+
query,
|
|
323
|
+
variables
|
|
324
|
+
})
|
|
325
|
+
}, "POST", "/graphql");
|
|
326
|
+
if (!response.ok) this.failure("POST", "/graphql", response, await response.text());
|
|
327
|
+
const text = await response.text();
|
|
328
|
+
const parsed = JSON.parse(text);
|
|
329
|
+
if (parsed.errors && parsed.errors.length > 0) throw new GitHubApiError(`GitHub API POST /graphql failed: ${parsed.errors.map((e) => e.message ?? "").join("; ")}`, {
|
|
330
|
+
method: "POST",
|
|
331
|
+
path: "/graphql",
|
|
332
|
+
responseBody: text,
|
|
333
|
+
hint: "Ensure the token can read pull-request review threads (pull-requests: read / repo scope)."
|
|
334
|
+
});
|
|
335
|
+
return parsed.data;
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Return the database IDs of review comments that belong to a **resolved**
|
|
339
|
+
* review thread. GitHub's REST comment endpoints omit thread-resolution state;
|
|
340
|
+
* it is only exposed via GraphQL `reviewThreads.isResolved`. Callers use this
|
|
341
|
+
* set to mark normalized notes resolved so resolved threads are excluded from
|
|
342
|
+
* summary carry-over and prior-thread context. Paginates over threads.
|
|
343
|
+
*/
|
|
344
|
+
async listResolvedReviewCommentIds(owner, repo, pull) {
|
|
345
|
+
const resolved = /* @__PURE__ */ new Set();
|
|
346
|
+
let cursor = null;
|
|
347
|
+
let hasNext = true;
|
|
348
|
+
while (hasNext) {
|
|
349
|
+
const threads = (await this.graphql(REVIEW_THREADS_QUERY, {
|
|
350
|
+
owner,
|
|
351
|
+
repo,
|
|
352
|
+
pull,
|
|
353
|
+
cursor
|
|
354
|
+
})).repository?.pullRequest?.reviewThreads;
|
|
355
|
+
if (!threads) break;
|
|
356
|
+
for (const thread of threads.nodes ?? []) {
|
|
357
|
+
if (!thread.isResolved) continue;
|
|
358
|
+
for (const comment of thread.comments?.nodes ?? []) if (typeof comment.databaseId === "number") resolved.add(comment.databaseId);
|
|
359
|
+
}
|
|
360
|
+
hasNext = threads.pageInfo?.hasNextPage ?? false;
|
|
361
|
+
cursor = threads.pageInfo?.endCursor ?? null;
|
|
362
|
+
if (!cursor) hasNext = false;
|
|
363
|
+
}
|
|
364
|
+
return resolved;
|
|
365
|
+
}
|
|
293
366
|
};
|
|
294
367
|
//#endregion
|
|
295
368
|
//#region src/fingerprints.ts
|
|
@@ -470,7 +543,7 @@ function buildSummaryBody(summary, costFooter, options = {}) {
|
|
|
470
543
|
return `${withFooter}\n\n${buildSummaryHistoryBlock(historyEntries)}`;
|
|
471
544
|
}
|
|
472
545
|
function buildReviewedCommitFooter(commitSha) {
|
|
473
|
-
return `Reviewed by ${PRODUCT_LINK} v0.8.
|
|
546
|
+
return `Reviewed by ${PRODUCT_LINK} v0.8.3 for commit ${commitSha}.`;
|
|
474
547
|
}
|
|
475
548
|
function extractReviewedCommitSha(body) {
|
|
476
549
|
return REVIEWED_COMMIT_FOOTER_PATTERN.exec(body)?.[1] ?? null;
|
|
@@ -4836,7 +4909,7 @@ async function loadDefaultRuntime() {
|
|
|
4836
4909
|
const [sdkNode, resources, semconv] = modules;
|
|
4837
4910
|
const serviceResource = resources.resourceFromAttributes({
|
|
4838
4911
|
[semconv.ATTR_SERVICE_NAME ?? "service.name"]: SERVICE_NAME,
|
|
4839
|
-
[semconv.ATTR_SERVICE_VERSION ?? "service.version"]: "0.8.
|
|
4912
|
+
[semconv.ATTR_SERVICE_VERSION ?? "service.version"]: "0.8.3"
|
|
4840
4913
|
});
|
|
4841
4914
|
process.env.OTEL_METRICS_EXPORTER = process.env.OTEL_METRICS_EXPORTER ?? "otlp";
|
|
4842
4915
|
process.env.OTEL_LOGS_EXPORTER = process.env.OTEL_LOGS_EXPORTER ?? "otlp";
|
|
@@ -5268,7 +5341,7 @@ function boldCommentTitle(body) {
|
|
|
5268
5341
|
*/
|
|
5269
5342
|
function buildCommentBody(body, commitSha, confidence) {
|
|
5270
5343
|
const confidenceLine = `_Confidence: ${confidence}._`;
|
|
5271
|
-
const footer = `<sub>Reviewed by ${PRODUCT_LINK} v0.8.
|
|
5344
|
+
const footer = `<sub>Reviewed by ${PRODUCT_LINK} v0.8.3 for commit ${commitSha}.</sub>`;
|
|
5272
5345
|
return `${boldCommentTitle(body.trim())}\n\n${confidenceLine}\n\n---\n\n${footer}`;
|
|
5273
5346
|
}
|
|
5274
5347
|
function buildPayload(comment, body, refs, resolved) {
|
|
@@ -5431,8 +5504,12 @@ function reviewCommentPosition(comment) {
|
|
|
5431
5504
|
* The fingerprint markers, summary marker, and reviewed-commit footer are HTML
|
|
5432
5505
|
* comments that render identically on GitHub, so `extractExistingFingerprints`,
|
|
5433
5506
|
* `findExistingSummaryNote`, and the reviewed-commit scan all work as-is.
|
|
5507
|
+
*
|
|
5508
|
+
* `resolvedCommentIds` carries the database ids of comments in resolved review
|
|
5509
|
+
* threads (from the GraphQL `reviewThreads` query, since REST omits resolution),
|
|
5510
|
+
* so each note gets a `resolved` flag mirroring GitLab's per-note field.
|
|
5434
5511
|
*/
|
|
5435
|
-
function normalizeGitHubDiscussions(reviewComments, issueComments) {
|
|
5512
|
+
function normalizeGitHubDiscussions(reviewComments, issueComments, resolvedCommentIds = /* @__PURE__ */ new Set()) {
|
|
5436
5513
|
const threads = /* @__PURE__ */ new Map();
|
|
5437
5514
|
const order = [];
|
|
5438
5515
|
for (const comment of reviewComments) {
|
|
@@ -5446,6 +5523,7 @@ function normalizeGitHubDiscussions(reviewComments, issueComments) {
|
|
|
5446
5523
|
notes.push({
|
|
5447
5524
|
id: comment.id,
|
|
5448
5525
|
body: comment.body ?? "",
|
|
5526
|
+
resolved: resolvedCommentIds.has(comment.id),
|
|
5449
5527
|
position: reviewCommentPosition(comment)
|
|
5450
5528
|
});
|
|
5451
5529
|
}
|
|
@@ -5512,8 +5590,12 @@ var GitHubPlatform = class {
|
|
|
5512
5590
|
return refs;
|
|
5513
5591
|
}
|
|
5514
5592
|
async getDiscussions() {
|
|
5515
|
-
const [reviewComments, issueComments] = await Promise.all([
|
|
5516
|
-
|
|
5593
|
+
const [reviewComments, issueComments, resolvedCommentIds] = await Promise.all([
|
|
5594
|
+
this.client.listReviewComments(this.owner, this.repo, this.pull),
|
|
5595
|
+
this.client.listIssueComments(this.owner, this.repo, this.pull),
|
|
5596
|
+
this.client.listResolvedReviewCommentIds(this.owner, this.repo, this.pull)
|
|
5597
|
+
]);
|
|
5598
|
+
return normalizeGitHubDiscussions(reviewComments, issueComments, resolvedCommentIds);
|
|
5517
5599
|
}
|
|
5518
5600
|
buildComments(comments, diff, refs, existingFingerprints) {
|
|
5519
5601
|
this.commitId = refs.head_sha;
|
|
@@ -6346,10 +6428,10 @@ async function main(argv = process.argv.slice(2)) {
|
|
|
6346
6428
|
return;
|
|
6347
6429
|
}
|
|
6348
6430
|
if (argv.includes("--version") || argv.includes("-v")) {
|
|
6349
|
-
console.log("0.8.
|
|
6431
|
+
console.log("0.8.3");
|
|
6350
6432
|
return;
|
|
6351
6433
|
}
|
|
6352
|
-
process.stderr.write(`[code-review] @weareikko/code-review v0.8.
|
|
6434
|
+
process.stderr.write(`[code-review] @weareikko/code-review v0.8.3\n`);
|
|
6353
6435
|
assertNodeVersion();
|
|
6354
6436
|
applyCodeReviewEnvPrefix();
|
|
6355
6437
|
applyDefaultCacheRetention();
|
|
@@ -6372,4 +6454,4 @@ if (isDirectRun()) main().catch((error) => {
|
|
|
6372
6454
|
//#endregion
|
|
6373
6455
|
export { normalizeBody as $, SUMMARY_HISTORY_END as A, buildSummaryHistoryEntries as B, createDiagnosticContext as C, traceDiagnosticPhase as D, traceDiagnostic as E, SUMMARY_MARKER as F, findExistingSummaryNoteId as G, extractSummaryHistoryEntries as H, buildArchivedSummaryEntry as I, upsertSummaryNote as J, stripSummaryHistory as K, buildReviewedCommitFooter as L, SUMMARY_HISTORY_ENTRY_START as M, SUMMARY_HISTORY_LIMIT as N, normalizeSeverity as O, SUMMARY_HISTORY_START as P, fingerprints as Q, buildSizeNoticeBlock as R, DIAGNOSTIC_CHANNEL_PREFIX as S, diagnosticChannels as T, findExistingReviewedCommitSha as U, extractReviewedCommitSha as V, findExistingSummaryNote as W, extractDiffHunkContext as X, appendFingerprintMarkers as Y, extractExistingFingerprints as Z, resolveNpmSkillDir as _, main as a, parseReviewMarkdownWithWarnings as b, buildGeneratedComments as c, startOtelBridge as d, sha256 as et, filterDiff as f, parseSkillSpec as g, loadNamedSkill as h, formatUsageLine as i, SUMMARY_HISTORY_ENTRY_END as j, toGitLabReviewSeverity as k, buildPayload as l, gitSkillCacheKey as m, formatPerModelUsage as n, run as o, runReview as p, stripSummaryMarker as q, formatSkillsFooter as r, withHttpStamping as s, countPostedBySeverity as t, isOtelEnabled as u, resolveSkillCacheDir as v, createDiagnosticRunId as w, DIAGNOSTIC_CHANNEL_NAMES as x, parseReviewMarkdown as y, buildSummaryBody as z };
|
|
6374
6456
|
|
|
6375
|
-
//# sourceMappingURL=cli-
|
|
6457
|
+
//# sourceMappingURL=cli-CICuhytH.js.map
|