@weareikko/code-review 0.8.1 → 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 +61 -24
- package/dist/{cli-7RGxyNy6.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-7RGxyNy6.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,14 +83,16 @@ 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.
|
|
89
|
-
- **Full git history:**
|
|
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).
|
|
90
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).
|
|
91
97
|
|
|
92
98
|
```yml
|
|
@@ -102,10 +108,9 @@ jobs:
|
|
|
102
108
|
review:
|
|
103
109
|
runs-on: ubuntu-latest
|
|
104
110
|
steps:
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
- uses: weareikko/code-review@main # pin to a release tag in production
|
|
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
|
|
109
114
|
with:
|
|
110
115
|
model: anthropic/claude-sonnet-4-5
|
|
111
116
|
api-key: ${{ secrets.ANTHROPIC_API_KEY }}
|
|
@@ -113,12 +118,42 @@ jobs:
|
|
|
113
118
|
# args: --min-severity warn --dry-run
|
|
114
119
|
```
|
|
115
120
|
|
|
116
|
-
Inputs: `model` (required), `api-key`, `github-token` (default `${{ github.token }}`), `version` (npm dist-tag/version, default `latest`), `node-version` (default `24`), `working-directory`,
|
|
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).
|
|
117
122
|
|
|
118
|
-
|
|
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.
|
|
124
|
+
|
|
125
|
+
### Reusable workflow (same org/enterprise)
|
|
126
|
+
|
|
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:
|
|
119
128
|
|
|
120
129
|
```yml
|
|
121
|
-
|
|
130
|
+
name: code-review
|
|
131
|
+
on:
|
|
132
|
+
pull_request:
|
|
133
|
+
|
|
134
|
+
permissions:
|
|
135
|
+
contents: read
|
|
136
|
+
pull-requests: write
|
|
137
|
+
|
|
138
|
+
jobs:
|
|
139
|
+
review:
|
|
140
|
+
uses: weareikko/code-review/.github/workflows/code-review.yml@0.8.2 # pin to a release tag
|
|
141
|
+
secrets: inherit
|
|
142
|
+
```
|
|
143
|
+
|
|
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`.
|
|
145
|
+
|
|
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:
|
|
151
|
+
|
|
152
|
+
```yml
|
|
153
|
+
- uses: actions/checkout@v5
|
|
154
|
+
with:
|
|
155
|
+
fetch-depth: 0
|
|
156
|
+
- uses: actions/setup-node@v5
|
|
122
157
|
with:
|
|
123
158
|
node-version: 24
|
|
124
159
|
- run: npx @weareikko/code-review
|
|
@@ -137,17 +172,17 @@ The README covers getting started. Reference material lives in [`docs/`](https:/
|
|
|
137
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.
|
|
138
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`.
|
|
139
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).
|
|
140
|
-
- [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.
|
|
141
176
|
|
|
142
177
|
## Configuration
|
|
143
178
|
|
|
144
|
-
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:
|
|
145
180
|
|
|
146
181
|
```bash
|
|
147
182
|
code-review --model anthropic/claude-sonnet-4-5 --api-key "$ANTHROPIC_API_KEY"
|
|
148
183
|
```
|
|
149
184
|
|
|
150
|
-
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).
|
|
151
186
|
|
|
152
187
|
## Providers
|
|
153
188
|
|
|
@@ -160,7 +195,7 @@ Equivalently, set `CODE_REVIEW_MODEL` and the provider's key (e.g. `ANTHROPIC_AP
|
|
|
160
195
|
- parsed comment payload
|
|
161
196
|
- computed fingerprints
|
|
162
197
|
- duplicate status
|
|
163
|
-
- final GitLab discussion payload
|
|
198
|
+
- final platform-specific posting payload (a GitLab discussion payload, or a GitHub review-comment payload)
|
|
164
199
|
- `review-usage.json`: token and cost breakdown for the run (`tokens.{input,output,cacheRead,cacheWrite,total}`, `cost.{input,output,cacheRead,cacheWrite,total}`, `model`)
|
|
165
200
|
|
|
166
201
|
The CLI also prints a one-line summary at the end of the run:
|
|
@@ -176,15 +211,17 @@ Use these files for CI debugging and auditing.
|
|
|
176
211
|
- **`Node.js >=24 is required`**
|
|
177
212
|
- Use `node:24` (or newer) in CI.
|
|
178
213
|
- **`Missing required configuration`**
|
|
179
|
-
- 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.
|
|
180
217
|
- **`--min-severity must be one of: info, warn, critical`**
|
|
181
218
|
- Fix `--min-severity` or `CODE_REVIEW_MIN_SEVERITY`.
|
|
182
219
|
- **Git history errors / merge-base failures**
|
|
183
|
-
-
|
|
220
|
+
- Fetch full history: `GIT_DEPTH: 0` on GitLab, `fetch-depth: 0` on `actions/checkout` (the composite action does this by default).
|
|
184
221
|
- Ensure source and target branches are fetchable from `origin`.
|
|
185
|
-
- **
|
|
186
|
-
-
|
|
187
|
-
-
|
|
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).
|
|
188
225
|
- **No comments posted**
|
|
189
226
|
- Check `review-comments.json` for `duplicate: true` or empty parsed comments.
|
|
190
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
|