codeloop-mcp-server 0.1.57 → 0.1.61
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/dist/auth/critical_floors.d.ts.map +1 -1
- package/dist/auth/critical_floors.js +8 -0
- package/dist/auth/critical_floors.js.map +1 -1
- package/dist/evidence/backend_verification.d.ts +64 -0
- package/dist/evidence/backend_verification.d.ts.map +1 -0
- package/dist/evidence/backend_verification.js +94 -0
- package/dist/evidence/backend_verification.js.map +1 -0
- package/dist/evidence/deep_internal.d.ts +45 -0
- package/dist/evidence/deep_internal.d.ts.map +1 -0
- package/dist/evidence/deep_internal.js +99 -0
- package/dist/evidence/deep_internal.js.map +1 -0
- package/dist/evidence/runtime_log_scan.d.ts +43 -0
- package/dist/evidence/runtime_log_scan.d.ts.map +1 -0
- package/dist/evidence/runtime_log_scan.js +112 -0
- package/dist/evidence/runtime_log_scan.js.map +1 -0
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -1
- package/dist/runners/backend_runtime.d.ts +40 -0
- package/dist/runners/backend_runtime.d.ts.map +1 -0
- package/dist/runners/backend_runtime.js +399 -0
- package/dist/runners/backend_runtime.js.map +1 -0
- package/dist/runners/coverage.d.ts +66 -0
- package/dist/runners/coverage.d.ts.map +1 -0
- package/dist/runners/coverage.js +380 -0
- package/dist/runners/coverage.js.map +1 -0
- package/dist/runners/static_analysis.d.ts +72 -0
- package/dist/runners/static_analysis.d.ts.map +1 -0
- package/dist/runners/static_analysis.js +248 -0
- package/dist/runners/static_analysis.js.map +1 -0
- package/dist/tools/diagnose.d.ts.map +1 -1
- package/dist/tools/diagnose.js +143 -0
- package/dist/tools/diagnose.js.map +1 -1
- package/dist/tools/gate_check.d.ts.map +1 -1
- package/dist/tools/gate_check.js +116 -0
- package/dist/tools/gate_check.js.map +1 -1
- package/dist/tools/verify.d.ts.map +1 -1
- package/dist/tools/verify.js +83 -0
- package/dist/tools/verify.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,380 @@
|
|
|
1
|
+
import { existsSync, readFileSync, readdirSync, statSync } from "fs";
|
|
2
|
+
import { join } from "path";
|
|
3
|
+
import { runCommand, checkToolAvailable } from "./base.js";
|
|
4
|
+
// ── Pure parsers (unit-tested) ──────────────────────────────────────
|
|
5
|
+
/** Parse an lcov.info file into a CoverageMap. */
|
|
6
|
+
export function parseLcov(text) {
|
|
7
|
+
const map = {};
|
|
8
|
+
let current = null;
|
|
9
|
+
for (const raw of text.split("\n")) {
|
|
10
|
+
const line = raw.trim();
|
|
11
|
+
if (line.startsWith("SF:")) {
|
|
12
|
+
current = line.slice(3).trim();
|
|
13
|
+
if (!map[current])
|
|
14
|
+
map[current] = {};
|
|
15
|
+
}
|
|
16
|
+
else if (line.startsWith("DA:") && current) {
|
|
17
|
+
const rest = line.slice(3);
|
|
18
|
+
const comma = rest.indexOf(",");
|
|
19
|
+
if (comma > 0) {
|
|
20
|
+
const ln = parseInt(rest.slice(0, comma), 10);
|
|
21
|
+
const hits = parseInt(rest.slice(comma + 1), 10);
|
|
22
|
+
if (!Number.isNaN(ln) && !Number.isNaN(hits))
|
|
23
|
+
map[current][ln] = hits;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
else if (line === "end_of_record") {
|
|
27
|
+
current = null;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return map;
|
|
31
|
+
}
|
|
32
|
+
/** Parse a Cobertura XML coverage report into a CoverageMap. */
|
|
33
|
+
export function parseCobertura(xml) {
|
|
34
|
+
const map = {};
|
|
35
|
+
// <class ... filename="path"> ... <line number="N" hits="H" .../> ...
|
|
36
|
+
const classRe = /<class\b[^>]*\bfilename="([^"]+)"[^>]*>([\s\S]*?)<\/class>/g;
|
|
37
|
+
let cm;
|
|
38
|
+
while ((cm = classRe.exec(xml)) !== null) {
|
|
39
|
+
const file = cm[1];
|
|
40
|
+
if (!map[file])
|
|
41
|
+
map[file] = {};
|
|
42
|
+
const body = cm[2];
|
|
43
|
+
const lineRe = /<line\b[^>]*\bnumber="(\d+)"[^>]*\bhits="(\d+)"/g;
|
|
44
|
+
let lm;
|
|
45
|
+
while ((lm = lineRe.exec(body)) !== null) {
|
|
46
|
+
const ln = parseInt(lm[1], 10);
|
|
47
|
+
const hits = parseInt(lm[2], 10);
|
|
48
|
+
if (!Number.isNaN(ln))
|
|
49
|
+
map[file][ln] = (map[file][ln] ?? 0) + hits;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return map;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Parse a unified `git diff` into added line numbers per file (new-file
|
|
56
|
+
* line numbering). Only `+` lines that are not the `+++` header are counted.
|
|
57
|
+
*/
|
|
58
|
+
export function parseGitDiffAddedLines(diff) {
|
|
59
|
+
const result = {};
|
|
60
|
+
let file = null;
|
|
61
|
+
let newLine = 0;
|
|
62
|
+
for (const raw of diff.split("\n")) {
|
|
63
|
+
if (raw.startsWith("+++ ")) {
|
|
64
|
+
// "+++ b/path/to/file" or "+++ /dev/null"
|
|
65
|
+
const p = raw.slice(4).trim();
|
|
66
|
+
if (p === "/dev/null") {
|
|
67
|
+
file = null;
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
file = p.replace(/^b\//, "");
|
|
71
|
+
if (!result[file])
|
|
72
|
+
result[file] = [];
|
|
73
|
+
}
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
if (raw.startsWith("@@")) {
|
|
77
|
+
// @@ -a,b +c,d @@
|
|
78
|
+
const m = raw.match(/\+(\d+)(?:,\d+)?/);
|
|
79
|
+
newLine = m ? parseInt(m[1], 10) : 0;
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
if (file === null)
|
|
83
|
+
continue;
|
|
84
|
+
if (raw.startsWith("+++"))
|
|
85
|
+
continue;
|
|
86
|
+
if (raw.startsWith("+")) {
|
|
87
|
+
result[file].push(newLine);
|
|
88
|
+
newLine += 1;
|
|
89
|
+
}
|
|
90
|
+
else if (raw.startsWith("-")) {
|
|
91
|
+
// deleted line — does not advance new-file numbering
|
|
92
|
+
}
|
|
93
|
+
else if (raw.startsWith(" ")) {
|
|
94
|
+
newLine += 1;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return result;
|
|
98
|
+
}
|
|
99
|
+
/** Source extensions whose changed lines we hold to the coverage bar. */
|
|
100
|
+
const COVERAGE_SOURCE_EXT = /\.(ts|tsx|js|jsx|mjs|cjs|py|cs|rs|dart|go|java|kt|kts|swift)$/i;
|
|
101
|
+
/** Test / generated / config files are excluded from the changed-line bar. */
|
|
102
|
+
const COVERAGE_EXCLUDE = /(\.(test|spec)\.|__tests__|\.d\.ts$|\.g\.dart$|\.freezed\.dart$|migrations?\/|\.designer\.cs$)/i;
|
|
103
|
+
function normalizePath(p) {
|
|
104
|
+
return p.replace(/\\/g, "/").replace(/^\.\//, "");
|
|
105
|
+
}
|
|
106
|
+
/** Match a diff file path against a coverage-map key by suffix. */
|
|
107
|
+
function findCoverageEntry(coverage, file) {
|
|
108
|
+
const target = normalizePath(file);
|
|
109
|
+
if (coverage[target])
|
|
110
|
+
return coverage[target];
|
|
111
|
+
for (const key of Object.keys(coverage)) {
|
|
112
|
+
const nk = normalizePath(key);
|
|
113
|
+
if (nk === target || nk.endsWith("/" + target) || target.endsWith("/" + nk)) {
|
|
114
|
+
return coverage[key];
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Compute changed-line coverage by intersecting added source lines with the
|
|
121
|
+
* coverage map. Files with no coverage entry are counted as fully UNcovered
|
|
122
|
+
* (their added lines are all uncovered) ONLY when at least one changed file
|
|
123
|
+
* IS present in the coverage map — otherwise the report is for a different
|
|
124
|
+
* stack and we treat coverage as not-applicable.
|
|
125
|
+
*/
|
|
126
|
+
export function computeChangedLineCoverage(coverage, addedLines, opts) {
|
|
127
|
+
const sourceExt = opts?.sourceExt ?? COVERAGE_SOURCE_EXT;
|
|
128
|
+
const exclude = opts?.exclude ?? COVERAGE_EXCLUDE;
|
|
129
|
+
const eligible = Object.entries(addedLines).filter(([f, lines]) => lines.length > 0 && sourceExt.test(f) && !exclude.test(normalizePath(f)));
|
|
130
|
+
if (eligible.length === 0) {
|
|
131
|
+
return { applicable: false, covered: 0, total: 0, pct: 1, uncovered_files: [], reason: "No changed source lines to score" };
|
|
132
|
+
}
|
|
133
|
+
// Does the coverage report cover this stack at all? Require at least one
|
|
134
|
+
// eligible file to be present in the map; otherwise the report is for an
|
|
135
|
+
// unrelated stack and changed-line coverage is not applicable here.
|
|
136
|
+
const anyPresent = eligible.some(([f]) => findCoverageEntry(coverage, f) !== null);
|
|
137
|
+
if (!anyPresent) {
|
|
138
|
+
return {
|
|
139
|
+
applicable: false,
|
|
140
|
+
covered: 0,
|
|
141
|
+
total: 0,
|
|
142
|
+
pct: 1,
|
|
143
|
+
uncovered_files: [],
|
|
144
|
+
reason: "Coverage report does not include any changed source file (different stack or report not generated for these files)",
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
let covered = 0;
|
|
148
|
+
let total = 0;
|
|
149
|
+
const uncovered_files = [];
|
|
150
|
+
for (const [file, lines] of eligible) {
|
|
151
|
+
const entry = findCoverageEntry(coverage, file);
|
|
152
|
+
const uncovered = [];
|
|
153
|
+
for (const ln of lines) {
|
|
154
|
+
// A changed line counts toward the bar only if the coverage tool
|
|
155
|
+
// tracked it (instrumentable). Lines the tool never reports (blank,
|
|
156
|
+
// comment, brace) are skipped.
|
|
157
|
+
if (entry && Object.prototype.hasOwnProperty.call(entry, ln)) {
|
|
158
|
+
total += 1;
|
|
159
|
+
if (entry[ln] > 0)
|
|
160
|
+
covered += 1;
|
|
161
|
+
else
|
|
162
|
+
uncovered.push(ln);
|
|
163
|
+
}
|
|
164
|
+
else if (!entry) {
|
|
165
|
+
// File absent from report => treat its instrumentable changed lines
|
|
166
|
+
// as uncovered, but only count lines that look like code is hard
|
|
167
|
+
// without the report; count them all as uncovered+total.
|
|
168
|
+
total += 1;
|
|
169
|
+
uncovered.push(ln);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
if (uncovered.length > 0)
|
|
173
|
+
uncovered_files.push({ file: normalizePath(file), uncovered_lines: uncovered });
|
|
174
|
+
}
|
|
175
|
+
const pct = total === 0 ? 1 : covered / total;
|
|
176
|
+
return {
|
|
177
|
+
applicable: total > 0,
|
|
178
|
+
covered,
|
|
179
|
+
total,
|
|
180
|
+
pct,
|
|
181
|
+
uncovered_files,
|
|
182
|
+
reason: total === 0 ? "No instrumentable changed lines" : undefined,
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
function findRecentFile(root, matcher, maxDepth) {
|
|
186
|
+
const skip = new Set(["node_modules", ".git", "obj", "bin", "dist", "build", ".codeloop", "artifacts"]);
|
|
187
|
+
const found = [];
|
|
188
|
+
const walk = (dir, depth) => {
|
|
189
|
+
if (depth < 0)
|
|
190
|
+
return;
|
|
191
|
+
let entries;
|
|
192
|
+
try {
|
|
193
|
+
entries = readdirSync(dir);
|
|
194
|
+
}
|
|
195
|
+
catch {
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
for (const e of entries) {
|
|
199
|
+
if (skip.has(e))
|
|
200
|
+
continue;
|
|
201
|
+
const full = join(dir, e);
|
|
202
|
+
let st;
|
|
203
|
+
try {
|
|
204
|
+
st = statSync(full);
|
|
205
|
+
}
|
|
206
|
+
catch {
|
|
207
|
+
continue;
|
|
208
|
+
}
|
|
209
|
+
if (st.isDirectory()) {
|
|
210
|
+
walk(full, depth - 1);
|
|
211
|
+
}
|
|
212
|
+
else if (matcher(e)) {
|
|
213
|
+
found.push({ path: full, mtime: st.mtimeMs });
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
};
|
|
217
|
+
walk(root, maxDepth);
|
|
218
|
+
if (found.length === 0)
|
|
219
|
+
return null;
|
|
220
|
+
found.sort((a, b) => b.mtime - a.mtime);
|
|
221
|
+
return found[0].path;
|
|
222
|
+
}
|
|
223
|
+
function discoverReport(cwd) {
|
|
224
|
+
const lcovCandidates = [
|
|
225
|
+
join(cwd, "coverage", "lcov.info"),
|
|
226
|
+
join(cwd, "lcov.info"),
|
|
227
|
+
join(cwd, "coverage", "coverage.lcov"),
|
|
228
|
+
];
|
|
229
|
+
for (const p of lcovCandidates)
|
|
230
|
+
if (existsSync(p))
|
|
231
|
+
return { path: p, kind: "lcov" };
|
|
232
|
+
const cobCandidates = [
|
|
233
|
+
join(cwd, "coverage", "cobertura-coverage.xml"),
|
|
234
|
+
join(cwd, "coverage.xml"),
|
|
235
|
+
join(cwd, "coverage", "coverage.cobertura.xml"),
|
|
236
|
+
];
|
|
237
|
+
for (const p of cobCandidates)
|
|
238
|
+
if (existsSync(p))
|
|
239
|
+
return { path: p, kind: "cobertura" };
|
|
240
|
+
// .NET XPlat coverage lands under TestResults/<guid>/coverage.cobertura.xml
|
|
241
|
+
const dotnetCob = findRecentFile(join(cwd, "TestResults"), (n) => /coverage\.cobertura\.xml$/i.test(n), 3);
|
|
242
|
+
if (dotnetCob)
|
|
243
|
+
return { path: dotnetCob, kind: "cobertura" };
|
|
244
|
+
// Generic deep search for an lcov.info as a last resort.
|
|
245
|
+
const anyLcov = findRecentFile(cwd, (n) => n === "lcov.info", 4);
|
|
246
|
+
if (anyLcov)
|
|
247
|
+
return { path: anyLcov, kind: "lcov" };
|
|
248
|
+
return null;
|
|
249
|
+
}
|
|
250
|
+
function pkgHasDep(cwd, names) {
|
|
251
|
+
try {
|
|
252
|
+
const pkg = JSON.parse(readFileSync(join(cwd, "package.json"), "utf-8"));
|
|
253
|
+
const deps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
254
|
+
return names.some((n) => n in deps);
|
|
255
|
+
}
|
|
256
|
+
catch {
|
|
257
|
+
return false;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
/** Try to GENERATE a coverage report for the detected stack. Best-effort. */
|
|
261
|
+
async function generateReport(cwd, logDir) {
|
|
262
|
+
const log = join(logDir, "coverage_generate.log");
|
|
263
|
+
// Node: vitest or jest with a coverage provider.
|
|
264
|
+
if (existsSync(join(cwd, "package.json")) && (await checkToolAvailable("npx"))) {
|
|
265
|
+
if (pkgHasDep(cwd, ["vitest", "@vitest/coverage-v8", "@vitest/coverage-istanbul"])) {
|
|
266
|
+
await runCommand("npx", ["--no-install", "vitest", "run", "--coverage", "--coverage.reporter=lcovonly", "--coverage.reportsDirectory=coverage"], cwd, log, undefined, 300000);
|
|
267
|
+
}
|
|
268
|
+
else if (pkgHasDep(cwd, ["jest"])) {
|
|
269
|
+
await runCommand("npx", ["--no-install", "jest", "--coverage", "--coverageReporters=lcovonly", "--coverageDirectory=coverage"], cwd, log, undefined, 300000);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
// Python: pytest with pytest-cov.
|
|
273
|
+
if (existsSync(join(cwd, "pyproject.toml")) || existsSync(join(cwd, "pytest.ini")) || existsSync(join(cwd, "setup.cfg"))) {
|
|
274
|
+
if (await checkToolAvailable("pytest")) {
|
|
275
|
+
await runCommand("pytest", ["--cov", "--cov-report=xml:coverage.xml"], cwd, log, undefined, 300000);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
// Flutter.
|
|
279
|
+
if (existsSync(join(cwd, "pubspec.yaml")) && (await checkToolAvailable("flutter"))) {
|
|
280
|
+
await runCommand("flutter", ["test", "--coverage"], cwd, log, undefined, 300000);
|
|
281
|
+
}
|
|
282
|
+
// Rust via cargo-llvm-cov.
|
|
283
|
+
if (existsSync(join(cwd, "Cargo.toml")) && (await checkToolAvailable("cargo"))) {
|
|
284
|
+
await runCommand("cargo", ["llvm-cov", "--lcov", "--output-path", "coverage/lcov.info"], cwd, log, undefined, 360000);
|
|
285
|
+
}
|
|
286
|
+
// .NET XPlat coverage.
|
|
287
|
+
try {
|
|
288
|
+
if (readdirSync(cwd).some((f) => /\.(sln|csproj)$/i.test(f)) && (await checkToolAvailable("dotnet"))) {
|
|
289
|
+
await runCommand("dotnet", ["test", "--collect:XPlat Code Coverage", "--nologo"], cwd, log, undefined, 360000);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
catch {
|
|
293
|
+
/* ignore */
|
|
294
|
+
}
|
|
295
|
+
const found = discoverReport(cwd);
|
|
296
|
+
return found?.path;
|
|
297
|
+
}
|
|
298
|
+
/** Compute overall covered fraction from a coverage map. */
|
|
299
|
+
function overallPct(coverage) {
|
|
300
|
+
let covered = 0;
|
|
301
|
+
let total = 0;
|
|
302
|
+
for (const lines of Object.values(coverage)) {
|
|
303
|
+
for (const hits of Object.values(lines)) {
|
|
304
|
+
total += 1;
|
|
305
|
+
if (hits > 0)
|
|
306
|
+
covered += 1;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
return total === 0 ? 0 : covered / total;
|
|
310
|
+
}
|
|
311
|
+
/** Resolve added source lines via git diff against the verified SHA / HEAD. */
|
|
312
|
+
async function resolveAddedLines(cwd, verifiedSha) {
|
|
313
|
+
if (!(await checkToolAvailable("git")))
|
|
314
|
+
return {};
|
|
315
|
+
const base = verifiedSha && verifiedSha.length >= 7 ? verifiedSha : "HEAD";
|
|
316
|
+
// Tracked changes vs base (includes uncommitted because no second ref).
|
|
317
|
+
const tracked = await runCommand("git", ["diff", "--unified=0", base], cwd, undefined, undefined, 30000);
|
|
318
|
+
let added = {};
|
|
319
|
+
if (tracked.exit_code === 0)
|
|
320
|
+
added = parseGitDiffAddedLines(tracked.stdout);
|
|
321
|
+
// Untracked files: every line is "added".
|
|
322
|
+
const untracked = await runCommand("git", ["ls-files", "--others", "--exclude-standard"], cwd, undefined, undefined, 15000);
|
|
323
|
+
if (untracked.exit_code === 0) {
|
|
324
|
+
for (const f of untracked.stdout.split("\n").map((s) => s.trim()).filter(Boolean)) {
|
|
325
|
+
if (!COVERAGE_SOURCE_EXT.test(f))
|
|
326
|
+
continue;
|
|
327
|
+
try {
|
|
328
|
+
const lineCount = readFileSync(join(cwd, f), "utf-8").split("\n").length;
|
|
329
|
+
added[f] = Array.from({ length: lineCount }, (_, i) => i + 1);
|
|
330
|
+
}
|
|
331
|
+
catch {
|
|
332
|
+
/* ignore unreadable */
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
return added;
|
|
337
|
+
}
|
|
338
|
+
export async function runCoverage(cwd, logDir, verifiedSha) {
|
|
339
|
+
// 1. Find or generate a report.
|
|
340
|
+
let report = discoverReport(cwd);
|
|
341
|
+
if (!report) {
|
|
342
|
+
const generated = await generateReport(cwd, logDir);
|
|
343
|
+
if (generated) {
|
|
344
|
+
report = generated.endsWith(".xml") ? { path: generated, kind: "cobertura" } : { path: generated, kind: "lcov" };
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
if (!report) {
|
|
348
|
+
return {
|
|
349
|
+
applicable: false,
|
|
350
|
+
tool: "none",
|
|
351
|
+
changed_line_coverage: { applicable: false, covered: 0, total: 0, pct: 1, uncovered_files: [], reason: "No coverage report found or generatable" },
|
|
352
|
+
reason: "No coverage report (install a coverage provider, e.g. @vitest/coverage-v8 / pytest-cov / coverlet)",
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
let coverage = {};
|
|
356
|
+
try {
|
|
357
|
+
const text = readFileSync(report.path, "utf-8");
|
|
358
|
+
coverage = report.kind === "lcov" ? parseLcov(text) : parseCobertura(text);
|
|
359
|
+
}
|
|
360
|
+
catch {
|
|
361
|
+
return {
|
|
362
|
+
applicable: false,
|
|
363
|
+
tool: report.kind,
|
|
364
|
+
report_path: report.path,
|
|
365
|
+
changed_line_coverage: { applicable: false, covered: 0, total: 0, pct: 1, uncovered_files: [], reason: "Coverage report unreadable" },
|
|
366
|
+
reason: "Coverage report could not be parsed",
|
|
367
|
+
};
|
|
368
|
+
}
|
|
369
|
+
const addedLines = await resolveAddedLines(cwd, verifiedSha);
|
|
370
|
+
const changed = computeChangedLineCoverage(coverage, addedLines);
|
|
371
|
+
return {
|
|
372
|
+
applicable: changed.applicable,
|
|
373
|
+
tool: report.kind,
|
|
374
|
+
report_path: report.path,
|
|
375
|
+
overall_pct: overallPct(coverage),
|
|
376
|
+
changed_line_coverage: changed,
|
|
377
|
+
reason: changed.applicable ? undefined : changed.reason,
|
|
378
|
+
};
|
|
379
|
+
}
|
|
380
|
+
//# sourceMappingURL=coverage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coverage.js","sourceRoot":"","sources":["../../src/runners/coverage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 0.1.58 Phase 1 — Deep internal verification: static analysis.
|
|
3
|
+
*
|
|
4
|
+
* Pre-0.1.58 the only static-analysis CodeLoop ran was `flutter analyze`;
|
|
5
|
+
* the Node runner literally just ran `npm test`. Type errors, lint errors,
|
|
6
|
+
* unused-symbol bugs, and "compiles-but-broken" code all shipped to
|
|
7
|
+
* ready_for_review unchallenged. This runner adds real per-stack static
|
|
8
|
+
* analysis whose ERRORS (not warnings) feed the `static_analysis_passes`
|
|
9
|
+
* blocker gate.
|
|
10
|
+
*
|
|
11
|
+
* Design: applicable-or-n/a. Each check runs ONLY when its config /
|
|
12
|
+
* tooling is present (tsconfig + tsc, an eslint config, ruff/mypy config,
|
|
13
|
+
* Cargo.toml + clippy, a .csproj + dotnet, pubspec + flutter). When nothing
|
|
14
|
+
* applies the result is `applicable: false` and the gate passes as n/a —
|
|
15
|
+
* so a plain CLI script or a stack we don't lint is never punished.
|
|
16
|
+
*
|
|
17
|
+
* Errors-only: we count *errors*, never warnings, toward the blocker.
|
|
18
|
+
* Warnings are surfaced for the dev report but do not block the gate, so a
|
|
19
|
+
* project with a noisy lint config can still reach ready_for_review.
|
|
20
|
+
*/
|
|
21
|
+
export interface StaticCheck {
|
|
22
|
+
tool: string;
|
|
23
|
+
available: boolean;
|
|
24
|
+
errors: number;
|
|
25
|
+
warnings: number;
|
|
26
|
+
log_path: string;
|
|
27
|
+
/** Short human-readable detail (summary line or skip reason). */
|
|
28
|
+
detail: string;
|
|
29
|
+
}
|
|
30
|
+
export interface StaticAnalysisResult {
|
|
31
|
+
applicable: boolean;
|
|
32
|
+
checks: StaticCheck[];
|
|
33
|
+
total_errors: number;
|
|
34
|
+
total_warnings: number;
|
|
35
|
+
}
|
|
36
|
+
/** tsc --noEmit prints `path(line,col): error TS####: msg` per diagnostic. */
|
|
37
|
+
export declare function parseTscOutput(output: string): {
|
|
38
|
+
errors: number;
|
|
39
|
+
warnings: number;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* ESLint "stylish" formatter prints a trailing summary:
|
|
43
|
+
* "✖ 7 problems (2 errors, 5 warnings)".
|
|
44
|
+
* Fall back to counting the per-line severities when the summary is absent
|
|
45
|
+
* (e.g. some custom formatters).
|
|
46
|
+
*/
|
|
47
|
+
export declare function parseEslintOutput(output: string): {
|
|
48
|
+
errors: number;
|
|
49
|
+
warnings: number;
|
|
50
|
+
};
|
|
51
|
+
/** ruff prints "Found N error(s)." (and may print "fixable" lines). */
|
|
52
|
+
export declare function parseRuffOutput(output: string): {
|
|
53
|
+
errors: number;
|
|
54
|
+
warnings: number;
|
|
55
|
+
};
|
|
56
|
+
/** mypy prints "Found N errors in M files" or "Success: no issues found". */
|
|
57
|
+
export declare function parseMypyOutput(output: string): {
|
|
58
|
+
errors: number;
|
|
59
|
+
warnings: number;
|
|
60
|
+
};
|
|
61
|
+
/** flutter analyze prints "error • msg" per error and "N issues found". */
|
|
62
|
+
export declare function parseFlutterAnalyzeOutput(output: string): {
|
|
63
|
+
errors: number;
|
|
64
|
+
warnings: number;
|
|
65
|
+
};
|
|
66
|
+
/** cargo clippy with -D warnings promotes warnings to errors; count `error[`/`error:`. */
|
|
67
|
+
export declare function parseClippyOutput(output: string): {
|
|
68
|
+
errors: number;
|
|
69
|
+
warnings: number;
|
|
70
|
+
};
|
|
71
|
+
export declare function runStaticAnalysis(cwd: string, logDir: string): Promise<StaticAnalysisResult>;
|
|
72
|
+
//# sourceMappingURL=static_analysis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static_analysis.d.ts","sourceRoot":"","sources":["../../src/runners/static_analysis.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;CACxB;AAID,8EAA8E;AAC9E,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAInF;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAQtF;AAED,uEAAuE;AACvE,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAMpF;AAED,6EAA6E;AAC7E,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAOpF;AAED,2EAA2E;AAC3E,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAK9F;AAED,0FAA0F;AAC1F,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAItF;AAyED,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAiIlG"}
|