smart-commit-copilot-cli 0.1.8 → 0.1.9
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/CHANGELOG.md +18 -0
- package/docs/publish.md +1 -1
- package/docs/releases/0.1.9-draft.md +69 -0
- package/out/output.js +1 -4
- package/out/output.js.map +1 -1
- package/out/review/detailLocator.js +268 -0
- package/out/review/detailLocator.js.map +1 -0
- package/out/review/index.js +4 -3
- package/out/review/index.js.map +1 -1
- package/out/review/parser.js +14 -1
- package/out/review/parser.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,24 @@ The format is based on Keep a Changelog, and this project follows Semantic Versi
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.1.9] - 2026-05-22
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- review detail locator to align review findings with diff file paths and line numbers via code snippets, message prefixes, and added-line matching
|
|
14
|
+
- localized report time window `displayRangeLabel` for `en`, `zh-cn`, and `zh-tw` output languages
|
|
15
|
+
- review response parser now extracts JSON from fenced code blocks and surrounding object text when model output is not pure JSON
|
|
16
|
+
- regression coverage for detail locator matching, fenced JSON review parsing, localized report windows, and full secret redaction
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
|
|
20
|
+
- config secret redaction now fully replaces `connection.apiKey` and `pullRequest.authToken` with `[REDACTED]` instead of partial masking that could leak trailing characters
|
|
21
|
+
- publish guidance now points to the `0.1.9` release draft during pre-publish review
|
|
22
|
+
|
|
23
|
+
### Security
|
|
24
|
+
|
|
25
|
+
- rendered config output no longer exposes partial API keys or auth tokens after redaction
|
|
26
|
+
|
|
9
27
|
## [0.1.8] - 2026-05-21
|
|
10
28
|
|
|
11
29
|
### Added
|
package/docs/publish.md
CHANGED
|
@@ -21,7 +21,7 @@ Current package name:
|
|
|
21
21
|
3. Run `npm run pack:dry-run`
|
|
22
22
|
4. Review [`CHANGELOG.md`](../CHANGELOG.md)
|
|
23
23
|
5. Review [`docs/release-checklist.md`](./release-checklist.md)
|
|
24
|
-
6. Review the matching release draft in [`docs/releases/0.1.
|
|
24
|
+
6. Review the matching release draft in [`docs/releases/0.1.9-draft.md`](./releases/0.1.9-draft.md)
|
|
25
25
|
|
|
26
26
|
## Recommended Release Order
|
|
27
27
|
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# `smart-commit-copilot-cli` 0.1.9 Draft Release Notes
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
`smart-commit-copilot-cli` 0.1.9 improves review result quality, report presentation, and secret handling for automation consumers.
|
|
6
|
+
|
|
7
|
+
This release focuses on making review findings easier to act on, accepting more LLM response formats, localizing report time window labels, and fully redacting secrets in rendered config output.
|
|
8
|
+
|
|
9
|
+
## Highlights
|
|
10
|
+
|
|
11
|
+
- review findings are now aligned with diff file paths and line numbers via a new detail locator
|
|
12
|
+
- review JSON parsing accepts fenced code blocks and JSON embedded in surrounding text
|
|
13
|
+
- report `displayRangeLabel` is localized for `en`, `zh-cn`, and `zh-tw`
|
|
14
|
+
- config secret redaction now uses full `[REDACTED]` replacement instead of partial masking
|
|
15
|
+
|
|
16
|
+
## Why This Release Matters
|
|
17
|
+
|
|
18
|
+
This version closes several quality gaps for teams using review and reporting in hooks or agents:
|
|
19
|
+
|
|
20
|
+
- review details are more likely to include actionable file and line metadata even when the model only returns message text or inline code snippets
|
|
21
|
+
- report headings and period labels read naturally in the configured output language
|
|
22
|
+
- rendered config output no longer leaks trailing characters from API keys or auth tokens
|
|
23
|
+
|
|
24
|
+
## Notable Behavior Updates
|
|
25
|
+
|
|
26
|
+
### Review detail locator
|
|
27
|
+
|
|
28
|
+
- after parsing a review response, the CLI attempts to map each detail to added diff lines using message prefixes, fenced code snippets, and fuzzy content matching
|
|
29
|
+
- when a line match is found, `filePath` and `lineNumber` are populated and the message prefix is normalized
|
|
30
|
+
- when only a file can be inferred, `filePath` is set without forcing a line number
|
|
31
|
+
|
|
32
|
+
### Review response parsing
|
|
33
|
+
|
|
34
|
+
- `parseReviewResponse` now extracts JSON from ```json fenced blocks when present
|
|
35
|
+
- if no fenced block is found, it falls back to the first `{ ... }` object span in the raw text
|
|
36
|
+
- this reduces correction retries when providers wrap JSON in markdown
|
|
37
|
+
|
|
38
|
+
### Report time window labels
|
|
39
|
+
|
|
40
|
+
- `resolveReportTimeWindow` accepts an output `language` and localizes `displayRangeLabel`
|
|
41
|
+
- Chinese labels use natural month, quarter, and year phrasing; English labels use month names and `Qn` quarter notation
|
|
42
|
+
- report aggregation passes the configured reporting language through to time window resolution
|
|
43
|
+
|
|
44
|
+
### Secret redaction
|
|
45
|
+
|
|
46
|
+
- `redactCliConfig` now replaces non-empty `connection.apiKey` and `pullRequest.authToken` values with `[REDACTED]`
|
|
47
|
+
- partial masking such as `sk-****1234` is no longer used in rendered config output
|
|
48
|
+
|
|
49
|
+
## Verification Coverage Added Or Strengthened
|
|
50
|
+
|
|
51
|
+
The project now has stronger regression protection for:
|
|
52
|
+
|
|
53
|
+
1. detail locator file and line matching against unified diffs
|
|
54
|
+
2. fenced JSON and embedded-object review response parsing
|
|
55
|
+
3. localized report window labels for English and Chinese output languages
|
|
56
|
+
4. full secret redaction without leaking original token characters in JSON output
|
|
57
|
+
|
|
58
|
+
## Suggested Upgrade Path
|
|
59
|
+
|
|
60
|
+
1. update to `0.1.9`
|
|
61
|
+
2. run `npm test`
|
|
62
|
+
3. run `npm run smoke:test`
|
|
63
|
+
4. run `npm run pack:dry-run`
|
|
64
|
+
5. publish only after all three checks pass
|
|
65
|
+
|
|
66
|
+
## Known Follow-Up Areas
|
|
67
|
+
|
|
68
|
+
- broader real-provider validation for review detail locator edge cases on large or heavily chunked diffs
|
|
69
|
+
- optional Traditional Chinese label variants if teams need locale-specific wording beyond the current shared Chinese formatter
|
package/out/output.js
CHANGED
|
@@ -19,9 +19,6 @@ function redactSecret(value) {
|
|
|
19
19
|
if (!trimmed) {
|
|
20
20
|
return "";
|
|
21
21
|
}
|
|
22
|
-
|
|
23
|
-
return "*".repeat(trimmed.length);
|
|
24
|
-
}
|
|
25
|
-
return `${"*".repeat(Math.max(4, trimmed.length - 4))}${trimmed.slice(-4)}`;
|
|
22
|
+
return "[REDACTED]";
|
|
26
23
|
}
|
|
27
24
|
//# sourceMappingURL=output.js.map
|
package/out/output.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":";;AAaA,0CAYC;AAZD,SAAgB,eAAe,CAAC,MAAiB;IAC/C,OAAO;QACL,GAAG,MAAM;QACT,UAAU,EAAE;YACV,GAAG,MAAM,CAAC,UAAU;YACpB,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;SAC/C;QACD,WAAW,EAAE;YACX,GAAG,MAAM,CAAC,WAAW;YACrB,SAAS,EAAE,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC;SACtD;KACF,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":";;AAaA,0CAYC;AAZD,SAAgB,eAAe,CAAC,MAAiB;IAC/C,OAAO;QACL,GAAG,MAAM;QACT,UAAU,EAAE;YACV,GAAG,MAAM,CAAC,UAAU;YACpB,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;SAC/C;QACD,WAAW,EAAE;YACX,GAAG,MAAM,CAAC,WAAW;YACrB,SAAS,EAAE,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC;SACtD;KACF,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC"}
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.alignReviewResultWithDiff = alignReviewResultWithDiff;
|
|
4
|
+
const chunkPrefixPattern = /^(\[chunk \d+\]\s*)/i;
|
|
5
|
+
const locationPattern = /^(?:\[|【)([^\]】:]+(?:\/[^\]】:]+)*)(?::([^\]】]+))?(?:\]|】)\s*/;
|
|
6
|
+
function alignReviewResultWithDiff(result, diff) {
|
|
7
|
+
if (result.details.length === 0 || !diff.trim()) {
|
|
8
|
+
return result;
|
|
9
|
+
}
|
|
10
|
+
const index = buildAddedLineIndex(diff);
|
|
11
|
+
if (index.size === 0) {
|
|
12
|
+
return result;
|
|
13
|
+
}
|
|
14
|
+
return {
|
|
15
|
+
...result,
|
|
16
|
+
details: result.details.map((detail) => alignDetailWithDiff(detail, index))
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
function alignDetailWithDiff(detail, index) {
|
|
20
|
+
const parsed = parseDetailPrefix(detail);
|
|
21
|
+
const snippets = extractSnippets(parsed.message);
|
|
22
|
+
const match = snippets.length > 0 ? findBestMatch(parsed, snippets, index) : undefined;
|
|
23
|
+
if (match) {
|
|
24
|
+
return {
|
|
25
|
+
...detail,
|
|
26
|
+
filePath: match.filePath,
|
|
27
|
+
lineNumber: match.lineNumber,
|
|
28
|
+
message: buildNormalizedMessage(parsed)
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
const fallbackLocation = buildFallbackLocation(parsed, index);
|
|
32
|
+
if (fallbackLocation) {
|
|
33
|
+
return {
|
|
34
|
+
...detail,
|
|
35
|
+
filePath: fallbackLocation.filePath,
|
|
36
|
+
lineNumber: undefined,
|
|
37
|
+
message: buildNormalizedMessage(parsed)
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
const normalizedMessage = buildNormalizedMessage(parsed);
|
|
41
|
+
return normalizedMessage === detail.message
|
|
42
|
+
? detail
|
|
43
|
+
: {
|
|
44
|
+
...detail,
|
|
45
|
+
message: normalizedMessage
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
function parseDetailPrefix(detail) {
|
|
49
|
+
let rest = detail.message.trim();
|
|
50
|
+
let chunkPrefix = "";
|
|
51
|
+
const chunkMatch = rest.match(chunkPrefixPattern);
|
|
52
|
+
if (chunkMatch) {
|
|
53
|
+
chunkPrefix = chunkMatch[1] ?? "";
|
|
54
|
+
rest = rest.slice(chunkPrefix.length);
|
|
55
|
+
}
|
|
56
|
+
const locationMatch = rest.match(locationPattern);
|
|
57
|
+
if (!locationMatch) {
|
|
58
|
+
return {
|
|
59
|
+
chunkPrefix,
|
|
60
|
+
filePath: detail.filePath,
|
|
61
|
+
lineNumber: detail.lineNumber,
|
|
62
|
+
message: rest
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
chunkPrefix,
|
|
67
|
+
filePath: detail.filePath ?? locationMatch[1],
|
|
68
|
+
lineNumber: detail.lineNumber ?? parseLooseLineNumber(locationMatch[2]),
|
|
69
|
+
message: rest.slice(locationMatch[0].length).trimStart()
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
function extractSnippets(message) {
|
|
73
|
+
const fencedSnippets = [...message.matchAll(/`([^`]+)`/g)].map((match) => match[1]?.trim() ?? "");
|
|
74
|
+
const inferredSnippets = [
|
|
75
|
+
...message.matchAll(/\b[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*)*\([^()\n]{0,120}\)/g)
|
|
76
|
+
].map((match) => match[0]?.trim() ?? "");
|
|
77
|
+
const snippets = [...fencedSnippets, ...inferredSnippets]
|
|
78
|
+
.filter((snippet) => isInformativeSnippet(snippet))
|
|
79
|
+
.filter((snippet) => snippet.length > 0)
|
|
80
|
+
.sort((left, right) => right.length - left.length);
|
|
81
|
+
return [...new Set(snippets)];
|
|
82
|
+
}
|
|
83
|
+
function buildFallbackLocation(detail, index) {
|
|
84
|
+
if (!detail.filePath) {
|
|
85
|
+
return undefined;
|
|
86
|
+
}
|
|
87
|
+
const candidates = getCandidateFiles(detail.filePath, index);
|
|
88
|
+
const resolvedFilePath = candidates.length === 1 ? candidates[0] : detail.filePath;
|
|
89
|
+
return {
|
|
90
|
+
filePath: resolvedFilePath
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
function findBestMatch(detail, snippets, index) {
|
|
94
|
+
const requestedFiles = getCandidateFiles(detail.filePath, index);
|
|
95
|
+
const fileGroups = requestedFiles.length > 0
|
|
96
|
+
? requestedFiles.map((filePath) => ({
|
|
97
|
+
filePath,
|
|
98
|
+
fileScore: scoreFileMatch(detail.filePath, filePath),
|
|
99
|
+
lines: index.get(filePath) ?? []
|
|
100
|
+
}))
|
|
101
|
+
: [...index.entries()].map(([filePath, lines]) => ({
|
|
102
|
+
filePath,
|
|
103
|
+
fileScore: 0,
|
|
104
|
+
lines
|
|
105
|
+
}));
|
|
106
|
+
const candidates = [];
|
|
107
|
+
for (const snippet of snippets) {
|
|
108
|
+
const normalizedSnippet = normalizeSnippet(snippet);
|
|
109
|
+
if (!normalizedSnippet) {
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
for (const group of fileGroups) {
|
|
113
|
+
for (const addedLine of group.lines) {
|
|
114
|
+
if (!isSnippetMatch(normalizedSnippet, addedLine.normalizedContent)) {
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
candidates.push({
|
|
118
|
+
addedLine,
|
|
119
|
+
fileScore: group.fileScore,
|
|
120
|
+
snippetLength: normalizedSnippet.length,
|
|
121
|
+
lineDistance: detail.lineNumber === undefined ? 0 : Math.abs(addedLine.lineNumber - detail.lineNumber)
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
if (candidates.length === 0) {
|
|
127
|
+
return undefined;
|
|
128
|
+
}
|
|
129
|
+
candidates.sort((left, right) => {
|
|
130
|
+
if (left.fileScore !== right.fileScore) {
|
|
131
|
+
return right.fileScore - left.fileScore;
|
|
132
|
+
}
|
|
133
|
+
if (left.snippetLength !== right.snippetLength) {
|
|
134
|
+
return right.snippetLength - left.snippetLength;
|
|
135
|
+
}
|
|
136
|
+
if (left.lineDistance !== right.lineDistance) {
|
|
137
|
+
return left.lineDistance - right.lineDistance;
|
|
138
|
+
}
|
|
139
|
+
if (left.addedLine.filePath !== right.addedLine.filePath) {
|
|
140
|
+
return left.addedLine.filePath.localeCompare(right.addedLine.filePath);
|
|
141
|
+
}
|
|
142
|
+
return left.addedLine.lineNumber - right.addedLine.lineNumber;
|
|
143
|
+
});
|
|
144
|
+
return candidates[0]?.addedLine;
|
|
145
|
+
}
|
|
146
|
+
function getCandidateFiles(filePath, index) {
|
|
147
|
+
if (!filePath) {
|
|
148
|
+
return [];
|
|
149
|
+
}
|
|
150
|
+
if (index.has(filePath)) {
|
|
151
|
+
return [filePath];
|
|
152
|
+
}
|
|
153
|
+
return [...index.keys()].filter((candidate) => candidate === filePath || candidate.endsWith(`/${filePath}`));
|
|
154
|
+
}
|
|
155
|
+
function scoreFileMatch(requestedFilePath, actualFilePath) {
|
|
156
|
+
if (!requestedFilePath) {
|
|
157
|
+
return 0;
|
|
158
|
+
}
|
|
159
|
+
if (requestedFilePath === actualFilePath) {
|
|
160
|
+
return 2;
|
|
161
|
+
}
|
|
162
|
+
if (actualFilePath.endsWith(`/${requestedFilePath}`)) {
|
|
163
|
+
return 1;
|
|
164
|
+
}
|
|
165
|
+
return 0;
|
|
166
|
+
}
|
|
167
|
+
function buildAddedLineIndex(diff) {
|
|
168
|
+
const index = new Map();
|
|
169
|
+
const lines = diff.split(/\r?\n/);
|
|
170
|
+
let currentFilePath;
|
|
171
|
+
let currentNewLine = 0;
|
|
172
|
+
let inHunk = false;
|
|
173
|
+
for (const line of lines) {
|
|
174
|
+
if (line.startsWith("diff --git ")) {
|
|
175
|
+
currentFilePath = extractFilePathFromDiffHeader(line);
|
|
176
|
+
inHunk = false;
|
|
177
|
+
continue;
|
|
178
|
+
}
|
|
179
|
+
if (line.startsWith("+++ ")) {
|
|
180
|
+
currentFilePath = extractFilePathFromPlusHeader(line) ?? currentFilePath;
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
183
|
+
const hunkMatch = line.match(/^@@ -\d+(?:,\d+)? \+(\d+)(?:,\d+)? @@/);
|
|
184
|
+
if (hunkMatch) {
|
|
185
|
+
currentNewLine = Number(hunkMatch[1]);
|
|
186
|
+
inHunk = true;
|
|
187
|
+
continue;
|
|
188
|
+
}
|
|
189
|
+
if (!inHunk || !currentFilePath) {
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
if (line.startsWith("+") && !line.startsWith("+++")) {
|
|
193
|
+
const content = line.slice(1);
|
|
194
|
+
pushAddedLine(index, currentFilePath, currentNewLine, content);
|
|
195
|
+
currentNewLine += 1;
|
|
196
|
+
continue;
|
|
197
|
+
}
|
|
198
|
+
if (line.startsWith("-") && !line.startsWith("---")) {
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
201
|
+
if (line.startsWith(" ")) {
|
|
202
|
+
currentNewLine += 1;
|
|
203
|
+
continue;
|
|
204
|
+
}
|
|
205
|
+
if (line.startsWith("\\")) {
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
208
|
+
inHunk = false;
|
|
209
|
+
}
|
|
210
|
+
return index;
|
|
211
|
+
}
|
|
212
|
+
function pushAddedLine(index, filePath, lineNumber, content) {
|
|
213
|
+
const normalizedContent = normalizeSnippet(content);
|
|
214
|
+
if (!normalizedContent) {
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
const bucket = index.get(filePath) ?? [];
|
|
218
|
+
bucket.push({
|
|
219
|
+
filePath,
|
|
220
|
+
lineNumber,
|
|
221
|
+
content,
|
|
222
|
+
normalizedContent
|
|
223
|
+
});
|
|
224
|
+
index.set(filePath, bucket);
|
|
225
|
+
}
|
|
226
|
+
function extractFilePathFromDiffHeader(line) {
|
|
227
|
+
const match = line.match(/^diff --git a\/(.+?) b\/(.+)$/);
|
|
228
|
+
if (!match) {
|
|
229
|
+
return undefined;
|
|
230
|
+
}
|
|
231
|
+
return match[2];
|
|
232
|
+
}
|
|
233
|
+
function extractFilePathFromPlusHeader(line) {
|
|
234
|
+
const match = line.match(/^\+\+\+ b\/(.+)$/);
|
|
235
|
+
if (!match) {
|
|
236
|
+
return undefined;
|
|
237
|
+
}
|
|
238
|
+
return match[1];
|
|
239
|
+
}
|
|
240
|
+
function normalizeSnippet(value) {
|
|
241
|
+
return value.replace(/\s+/g, " ").trim();
|
|
242
|
+
}
|
|
243
|
+
function isSnippetMatch(normalizedSnippet, normalizedLine) {
|
|
244
|
+
return normalizedLine.includes(normalizedSnippet) || normalizedSnippet.includes(normalizedLine);
|
|
245
|
+
}
|
|
246
|
+
function isInformativeSnippet(snippet) {
|
|
247
|
+
const normalizedSnippet = normalizeSnippet(snippet);
|
|
248
|
+
if (normalizedSnippet.length < 2) {
|
|
249
|
+
return false;
|
|
250
|
+
}
|
|
251
|
+
const identifierLikeChars = normalizedSnippet.match(/[\p{L}\p{N}_$]/gu) ?? [];
|
|
252
|
+
return identifierLikeChars.length >= 2;
|
|
253
|
+
}
|
|
254
|
+
function buildNormalizedMessage(detail) {
|
|
255
|
+
return `${detail.chunkPrefix}${detail.message}`.trim();
|
|
256
|
+
}
|
|
257
|
+
function parseLooseLineNumber(raw) {
|
|
258
|
+
if (!raw) {
|
|
259
|
+
return undefined;
|
|
260
|
+
}
|
|
261
|
+
const match = raw.match(/\d+/);
|
|
262
|
+
if (!match) {
|
|
263
|
+
return undefined;
|
|
264
|
+
}
|
|
265
|
+
const lineNumber = Number(match[0]);
|
|
266
|
+
return Number.isFinite(lineNumber) ? lineNumber : undefined;
|
|
267
|
+
}
|
|
268
|
+
//# sourceMappingURL=detailLocator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detailLocator.js","sourceRoot":"","sources":["../../src/review/detailLocator.ts"],"names":[],"mappings":"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"}
|
package/out/review/index.js
CHANGED
|
@@ -17,6 +17,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
17
17
|
exports.runReviewExecution = runReviewExecution;
|
|
18
18
|
const responseCorrection_1 = require("../llm/responseCorrection");
|
|
19
19
|
const openaiProvider_1 = require("./openaiProvider");
|
|
20
|
+
const detailLocator_1 = require("./detailLocator");
|
|
20
21
|
const parser_1 = require("./parser");
|
|
21
22
|
const mockProvider_1 = require("./mockProvider");
|
|
22
23
|
__exportStar(require("./types"), exports);
|
|
@@ -28,7 +29,7 @@ async function runReviewExecution(input, options) {
|
|
|
28
29
|
initialResponse: rawReview,
|
|
29
30
|
maxCorrectionRetries: options.config.connection.llmResponseCorrectionRetryCount,
|
|
30
31
|
validateResponse: async (response) => {
|
|
31
|
-
const parsed = tryParseAndValidate(response, provider.name, input.reviewLanguage, input.threshold);
|
|
32
|
+
const parsed = tryParseAndValidate(response, provider.name, input.reviewLanguage, input.threshold, input.diff);
|
|
32
33
|
if (!parsed.ok) {
|
|
33
34
|
throw new ReviewResponseValidationError(parsed.issues);
|
|
34
35
|
}
|
|
@@ -50,9 +51,9 @@ function resolveProviderMode() {
|
|
|
50
51
|
function createProvider(config, mode, mockMode) {
|
|
51
52
|
return mode === "mock" ? (0, mockProvider_1.createMockReviewProvider)({ mode: mockMode }) : (0, openaiProvider_1.createOpenAICompatibleReviewProvider)(config);
|
|
52
53
|
}
|
|
53
|
-
function tryParseAndValidate(raw, providerName, reviewLanguage, threshold) {
|
|
54
|
+
function tryParseAndValidate(raw, providerName, reviewLanguage, threshold, diff) {
|
|
54
55
|
try {
|
|
55
|
-
const result = (0, parser_1.parseReviewResponse)(raw, providerName);
|
|
56
|
+
const result = (0, detailLocator_1.alignReviewResultWithDiff)((0, parser_1.parseReviewResponse)(raw, providerName), diff);
|
|
56
57
|
const issues = [
|
|
57
58
|
...(0, parser_1.validateReviewResult)(result, threshold),
|
|
58
59
|
...(0, parser_1.validateReviewContentLanguage)(result, reviewLanguage)
|
package/out/review/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/review/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/review/index.ts"],"names":[],"mappings":"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"}
|
package/out/review/parser.js
CHANGED
|
@@ -8,9 +8,10 @@ const protocol_1 = require("../commitMessage/protocol");
|
|
|
8
8
|
const validSeverities = new Set(["P0", "P1", "P2", "P3", "OTHER"]);
|
|
9
9
|
function parseReviewResponse(raw, provider) {
|
|
10
10
|
const trimmed = raw.trim();
|
|
11
|
+
const jsonText = extractJsonPayload(trimmed);
|
|
11
12
|
let payload;
|
|
12
13
|
try {
|
|
13
|
-
payload = JSON.parse(
|
|
14
|
+
payload = JSON.parse(jsonText);
|
|
14
15
|
}
|
|
15
16
|
catch (error) {
|
|
16
17
|
const message = error instanceof Error ? error.message : String(error);
|
|
@@ -102,4 +103,16 @@ function parseReviewDetails(value) {
|
|
|
102
103
|
}
|
|
103
104
|
return details;
|
|
104
105
|
}
|
|
106
|
+
function extractJsonPayload(raw) {
|
|
107
|
+
const fencedMatch = raw.match(/```(?:json)?\s*([\s\S]*?)```/i);
|
|
108
|
+
if (fencedMatch?.[1]) {
|
|
109
|
+
return fencedMatch[1].trim();
|
|
110
|
+
}
|
|
111
|
+
const objectStart = raw.indexOf("{");
|
|
112
|
+
const objectEnd = raw.lastIndexOf("}");
|
|
113
|
+
if (objectStart >= 0 && objectEnd > objectStart) {
|
|
114
|
+
return raw.slice(objectStart, objectEnd + 1);
|
|
115
|
+
}
|
|
116
|
+
return raw;
|
|
117
|
+
}
|
|
105
118
|
//# sourceMappingURL=parser.js.map
|
package/out/review/parser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/review/parser.ts"],"names":[],"mappings":";;AAaA,
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/review/parser.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED