nfunc-mcp 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +88 -43
- package/dist/index.js +23 -4
- package/dist/index.js.map +1 -1
- package/dist/mappers/a11yDedupe.d.ts +25 -0
- package/dist/mappers/a11yDedupe.js +95 -0
- package/dist/mappers/a11yDedupe.js.map +1 -0
- package/dist/mappers/compositeScore.d.ts +23 -0
- package/dist/mappers/compositeScore.js +107 -0
- package/dist/mappers/compositeScore.js.map +1 -0
- package/dist/mappers/correlator.js +94 -33
- package/dist/mappers/correlator.js.map +1 -1
- package/dist/mappers/defectFormatter.js +129 -15
- package/dist/mappers/defectFormatter.js.map +1 -1
- package/dist/mappers/priorityMapper.d.ts +38 -0
- package/dist/mappers/priorityMapper.js +126 -0
- package/dist/mappers/priorityMapper.js.map +1 -1
- package/dist/tools/accessibility.js +72 -31
- package/dist/tools/accessibility.js.map +1 -1
- package/dist/tools/lighthouse.d.ts +14 -0
- package/dist/tools/lighthouse.js +134 -34
- package/dist/tools/lighthouse.js.map +1 -1
- package/dist/tools/qaGate.js +117 -70
- package/dist/tools/qaGate.js.map +1 -1
- package/dist/tools/staticAnalysis.js +15 -67
- package/dist/tools/staticAnalysis.js.map +1 -1
- package/dist/utils/eslintConfigDetector.d.ts +13 -0
- package/dist/utils/eslintConfigDetector.js +65 -2
- package/dist/utils/eslintConfigDetector.js.map +1 -1
- package/dist/utils/eslintRunner.d.ts +9 -0
- package/dist/utils/eslintRunner.js +103 -0
- package/dist/utils/eslintRunner.js.map +1 -0
- package/dist/utils/outputParsers.d.ts +25 -0
- package/dist/utils/outputParsers.js +42 -0
- package/dist/utils/outputParsers.js.map +1 -1
- package/package.json +2 -2
package/dist/tools/qaGate.js
CHANGED
|
@@ -1,21 +1,28 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { fileURLToPath } from "url";
|
|
3
2
|
import { resolve } from "path";
|
|
4
3
|
import { runShell } from "../utils/shellRunner.js";
|
|
5
|
-
import { parseLighthouseJSON, parsePa11yJSON,
|
|
4
|
+
import { parseLighthouseJSON, parsePa11yJSON, parseSemgrepJSON, } from "../utils/outputParsers.js";
|
|
6
5
|
import { formatLighthouseFinding, formatA11yFinding, formatStaticAnalysisFinding, } from "../mappers/defectFormatter.js";
|
|
7
|
-
import {
|
|
6
|
+
import { dedupeA11yFindings } from "../mappers/a11yDedupe.js";
|
|
7
|
+
import { lighthouseSubScore, a11ySubScore, staticSubScore, compositeScore, } from "../mappers/compositeScore.js";
|
|
8
|
+
import { formFactorArgs } from "./lighthouse.js";
|
|
9
|
+
import { runESLint } from "../utils/eslintRunner.js";
|
|
8
10
|
import { correlate, } from "../mappers/correlator.js";
|
|
9
11
|
import { generateHtmlReport } from "../utils/reportGenerator.js";
|
|
10
|
-
const BASELINE_CONFIG_PATH = fileURLToPath(new URL("../config/qa-mcp-baseline.eslint.config.js", import.meta.url));
|
|
11
12
|
const PRIORITY_ORDER = { P1: 0, P2: 1, P3: 2 };
|
|
12
13
|
// ---------------------------------------------------------------------------
|
|
13
14
|
// Per-tool runners — each returns a structured result and never throws.
|
|
14
15
|
// Errors are surfaced as the `error` field so a partial failure in one tool
|
|
15
16
|
// doesn't prevent the other two from contributing findings.
|
|
16
17
|
// ---------------------------------------------------------------------------
|
|
17
|
-
async function runLighthouse(url) {
|
|
18
|
-
const result = await runShell("lighthouse", [
|
|
18
|
+
async function runLighthouse(url, formFactor) {
|
|
19
|
+
const result = await runShell("lighthouse", [
|
|
20
|
+
url,
|
|
21
|
+
"--output=json",
|
|
22
|
+
"--quiet",
|
|
23
|
+
"--chrome-flags=--headless",
|
|
24
|
+
...formFactorArgs(formFactor),
|
|
25
|
+
], { timeoutMs: 180_000 });
|
|
19
26
|
if (result.exitCode === -1 && !result.stdout && !result.stderr) {
|
|
20
27
|
return { scores: {}, ttfb_ms: null, findings: [], error: "Lighthouse is not installed or not found in PATH." };
|
|
21
28
|
}
|
|
@@ -39,25 +46,30 @@ async function runLighthouse(url) {
|
|
|
39
46
|
};
|
|
40
47
|
}
|
|
41
48
|
}
|
|
42
|
-
async function runA11y(url) {
|
|
43
|
-
const
|
|
44
|
-
if (
|
|
49
|
+
async function runA11y(url, engines) {
|
|
50
|
+
const results = await Promise.all(engines.map((e) => runShell("pa11y", [url, "--reporter", "json", "--standard", "WCAG2AA", "--runner", e], { timeoutMs: 120_000 })));
|
|
51
|
+
if (results.every((r) => r.exitCode === -1 && !r.stdout && !r.stderr)) {
|
|
45
52
|
return { violation_count: 0, findings: [], error: "pa11y is not installed or not found in PATH." };
|
|
46
53
|
}
|
|
47
54
|
// pa11y exits 2 when violations are found — that is a successful run.
|
|
48
|
-
const
|
|
49
|
-
if (
|
|
50
|
-
|
|
55
|
+
const usable = results.filter((r) => (r.exitCode === 0 || r.exitCode === 2) && r.stdout);
|
|
56
|
+
if (usable.length === 0) {
|
|
57
|
+
const r = results[0];
|
|
58
|
+
return { violation_count: 0, findings: [], error: `pa11y failed (exit ${r.exitCode}): ${r.stderr.slice(0, 300)}` };
|
|
51
59
|
}
|
|
52
60
|
try {
|
|
53
|
-
const
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
61
|
+
const rawFindings = [];
|
|
62
|
+
for (const result of usable) {
|
|
63
|
+
for (const v of parsePa11yJSON(result.stdout).violations) {
|
|
64
|
+
const f = formatA11yFinding(v);
|
|
65
|
+
if (f)
|
|
66
|
+
rawFindings.push(f);
|
|
67
|
+
}
|
|
59
68
|
}
|
|
60
|
-
|
|
69
|
+
// Dedup before the findings reach the correlator and the composite score —
|
|
70
|
+
// 35 copies of one defect otherwise floor the score and swamp all_findings.
|
|
71
|
+
const { findings, rawCount } = dedupeA11yFindings(rawFindings);
|
|
72
|
+
return { violation_count: findings.length, raw_violation_count: rawCount, findings };
|
|
61
73
|
}
|
|
62
74
|
catch (err) {
|
|
63
75
|
return {
|
|
@@ -67,42 +79,16 @@ async function runA11y(url) {
|
|
|
67
79
|
}
|
|
68
80
|
}
|
|
69
81
|
async function runStatic(absPath) {
|
|
70
|
-
const { hasConfig } = detectESLintConfig(absPath);
|
|
71
|
-
const eslintConfigUsed = hasConfig ? "project" : "qa-mcp-baseline";
|
|
72
|
-
const eslintArgs = [
|
|
73
|
-
".", "--format", "json",
|
|
74
|
-
"--ignore-pattern", "node_modules",
|
|
75
|
-
"--ignore-pattern", "dist",
|
|
76
|
-
];
|
|
77
|
-
if (!hasConfig)
|
|
78
|
-
eslintArgs.push("--config", BASELINE_CONFIG_PATH);
|
|
79
82
|
const semgrepArgs = [
|
|
80
83
|
"--config=p/javascript", "--config=p/typescript",
|
|
81
84
|
"--json", "--exclude", "node_modules", ".",
|
|
82
85
|
];
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
runShell("eslint", eslintArgs, { timeoutMs: 120_000, cwd: absPath }),
|
|
86
|
+
const [eslintRun, semgrepResult] = await Promise.all([
|
|
87
|
+
runESLint(absPath),
|
|
86
88
|
runShell("semgrep", semgrepArgs, { timeoutMs: 180_000, cwd: absPath }),
|
|
87
89
|
]);
|
|
88
|
-
const allIssues = [];
|
|
89
|
-
const warnings = [];
|
|
90
|
-
if (eslintResult.exitCode === -1 && !eslintResult.stdout && !eslintResult.stderr) {
|
|
91
|
-
warnings.push("ESLint not installed — ESLint analysis skipped.");
|
|
92
|
-
}
|
|
93
|
-
else if (eslintResult.exitCode === 2) {
|
|
94
|
-
warnings.push(`ESLint configuration error: ${eslintResult.stderr.slice(0, 200)}`);
|
|
95
|
-
}
|
|
96
|
-
else if (eslintResult.stdout) {
|
|
97
|
-
try {
|
|
98
|
-
for (const issue of parseESLintJSON(eslintResult.stdout).issues) {
|
|
99
|
-
allIssues.push({ source: "eslint", file: issue.filePath, line: issue.line, column: issue.column, ruleId: issue.ruleId, message: issue.message, severity: issue.severity });
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
catch {
|
|
103
|
-
warnings.push("ESLint output could not be parsed.");
|
|
104
|
-
}
|
|
105
|
-
}
|
|
90
|
+
const allIssues = [...eslintRun.issues];
|
|
91
|
+
const warnings = [...eslintRun.warnings];
|
|
106
92
|
if (semgrepResult.exitCode === -1 && !semgrepResult.stdout && !semgrepResult.stderr) {
|
|
107
93
|
warnings.push("Semgrep not installed — Semgrep analysis skipped.");
|
|
108
94
|
}
|
|
@@ -116,7 +102,7 @@ async function runStatic(absPath) {
|
|
|
116
102
|
warnings.push("Semgrep output could not be parsed.");
|
|
117
103
|
}
|
|
118
104
|
}
|
|
119
|
-
// Deduplicate by file:line
|
|
105
|
+
// Deduplicate by file:line.
|
|
120
106
|
const dedupMap = new Map();
|
|
121
107
|
for (const issue of allIssues) {
|
|
122
108
|
const f = formatStaticAnalysisFinding(issue);
|
|
@@ -129,7 +115,7 @@ async function runStatic(absPath) {
|
|
|
129
115
|
}
|
|
130
116
|
}
|
|
131
117
|
const findings = Array.from(dedupMap.values());
|
|
132
|
-
return { issue_count: findings.length, eslint_config_used:
|
|
118
|
+
return { issue_count: findings.length, eslint_config_used: eslintRun.config_used, findings, warnings };
|
|
133
119
|
}
|
|
134
120
|
// ---------------------------------------------------------------------------
|
|
135
121
|
// Report assembly helpers
|
|
@@ -144,18 +130,14 @@ function buildVerdict(findings) {
|
|
|
144
130
|
return "ADVISORY";
|
|
145
131
|
return "CLEAR";
|
|
146
132
|
}
|
|
147
|
-
//
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
else
|
|
156
|
-
score -= 3;
|
|
157
|
-
}
|
|
158
|
-
return Math.max(0, score);
|
|
133
|
+
// Composite score. See src/mappers/compositeScore.ts for why this is a
|
|
134
|
+
// weighted mean of per-tool sub-scores rather than one global subtraction.
|
|
135
|
+
function buildSubScores(lhData, a11yData, staticData) {
|
|
136
|
+
return {
|
|
137
|
+
lighthouse: lhData && !lhData.error ? lighthouseSubScore(lhData.scores) : null,
|
|
138
|
+
pa11y: a11yData && !a11yData.error ? a11ySubScore(a11yData.findings) : null,
|
|
139
|
+
static: staticData ? staticSubScore(staticData.findings) : null,
|
|
140
|
+
};
|
|
159
141
|
}
|
|
160
142
|
// Option 3: compact per-tool scorecard
|
|
161
143
|
// Any argument may be null when the caller did not supply the corresponding
|
|
@@ -190,10 +172,14 @@ function buildScorecard(lhData, a11yData, staticData) {
|
|
|
190
172
|
else {
|
|
191
173
|
const hasP1 = a11yData.findings.some((f) => f.priority === "P1");
|
|
192
174
|
const hasP2 = a11yData.findings.some((f) => f.priority === "P2");
|
|
175
|
+
const raw = a11yData.raw_violation_count;
|
|
193
176
|
entries.push({
|
|
194
177
|
tool: "pa11y",
|
|
195
178
|
gate: hasP1 ? "FAIL" : hasP2 ? "WARN" : "PASS",
|
|
196
179
|
issues: a11yData.violation_count,
|
|
180
|
+
...(raw !== undefined && raw > a11yData.violation_count
|
|
181
|
+
? { raw_issues: raw }
|
|
182
|
+
: {}),
|
|
197
183
|
});
|
|
198
184
|
}
|
|
199
185
|
if (staticData === null) {
|
|
@@ -255,6 +241,21 @@ const inputShape = {
|
|
|
255
241
|
.optional()
|
|
256
242
|
.describe("Optional free-text context about the project (e.g. 'React SPA', 'checkout flow', " +
|
|
257
243
|
"'marketing site'). Pass anything the user mentions about what the app is or does."),
|
|
244
|
+
form_factor: z
|
|
245
|
+
.enum(["mobile", "desktop", "both"])
|
|
246
|
+
.optional()
|
|
247
|
+
.describe("Lighthouse device profile: 'desktop' (default, unthrottled), 'mobile' " +
|
|
248
|
+
"(throttled slow 4G with a 4x CPU slowdown, which scores far lower for " +
|
|
249
|
+
"the same page), or 'both'. The profiles render different DOM and find " +
|
|
250
|
+
"different accessibility and SEO defects, so 'both' is the thorough " +
|
|
251
|
+
"choice; it runs concurrently and costs little extra wall time."),
|
|
252
|
+
a11y_runner: z
|
|
253
|
+
.enum(["htmlcs", "axe", "both"])
|
|
254
|
+
.optional()
|
|
255
|
+
.describe("pa11y engine: 'htmlcs' (default) for WCAG techniques, structure, " +
|
|
256
|
+
"labels and forms; 'axe' for materially better ARIA and computed " +
|
|
257
|
+
"contrast coverage; 'both' to merge them. Choose 'axe' or 'both' when " +
|
|
258
|
+
"the code under test involves ARIA or a component library."),
|
|
258
259
|
};
|
|
259
260
|
export function registerQaGateTool(server) {
|
|
260
261
|
server.registerTool("run_qa_gate", {
|
|
@@ -280,7 +281,7 @@ export function registerQaGateTool(server) {
|
|
|
280
281
|
"If any individual tool is not installed, the report is still produced from the others — " +
|
|
281
282
|
"it never fails completely.",
|
|
282
283
|
inputSchema: inputShape,
|
|
283
|
-
}, async ({ url, path: targetPath }) => {
|
|
284
|
+
}, async ({ url, path: targetPath, form_factor, a11y_runner }) => {
|
|
284
285
|
if (!url && !targetPath) {
|
|
285
286
|
return {
|
|
286
287
|
content: [{ type: "text", text: JSON.stringify({
|
|
@@ -290,13 +291,55 @@ export function registerQaGateTool(server) {
|
|
|
290
291
|
isError: true,
|
|
291
292
|
};
|
|
292
293
|
}
|
|
294
|
+
const requestedFF = form_factor ?? "desktop";
|
|
295
|
+
const factors = requestedFF === "both" ? ["mobile", "desktop"] : [requestedFF];
|
|
296
|
+
const requestedRunner = a11y_runner ?? "htmlcs";
|
|
297
|
+
const engines = requestedRunner === "both" ? ["htmlcs", "axe"] : [requestedRunner];
|
|
293
298
|
// Only run the tools we have inputs for. null means deliberately skipped,
|
|
294
299
|
// not a failure — the scorecard will show SKIPPED for those entries.
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
url
|
|
300
|
+
// Every leg — including each Lighthouse form factor — runs concurrently.
|
|
301
|
+
const [lhRuns, a11yData, staticData] = await Promise.all([
|
|
302
|
+
url
|
|
303
|
+
? Promise.all(factors.map(async (ff) => ({ ff, data: await runLighthouse(url, ff) })))
|
|
304
|
+
: null,
|
|
305
|
+
url ? runA11y(url, engines) : null,
|
|
298
306
|
targetPath ? runStatic(resolve(targetPath)) : null,
|
|
299
307
|
]);
|
|
308
|
+
// Collapse the form factors into one Lighthouse view for the rest of the
|
|
309
|
+
// report. Findings are merged on audit_id and tagged with the form
|
|
310
|
+
// factors they affect; scores keep the worst per category, since a page
|
|
311
|
+
// is only as healthy as its weaker profile.
|
|
312
|
+
const lhOk = lhRuns?.filter((r) => !r.data.error) ?? [];
|
|
313
|
+
const lhData = !lhRuns
|
|
314
|
+
? null
|
|
315
|
+
: lhOk.length === 0
|
|
316
|
+
? lhRuns[0].data
|
|
317
|
+
: (() => {
|
|
318
|
+
const scores = {};
|
|
319
|
+
for (const { data } of lhOk) {
|
|
320
|
+
for (const [k, v] of Object.entries(data.scores)) {
|
|
321
|
+
scores[k] = k in scores ? Math.min(scores[k], v) : v;
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
const merged = new Map();
|
|
325
|
+
for (const { ff, data } of lhOk) {
|
|
326
|
+
for (const f of data.findings) {
|
|
327
|
+
const key = String(f.evidence["audit_id"]);
|
|
328
|
+
const hit = merged.get(key);
|
|
329
|
+
if (hit)
|
|
330
|
+
hit._ff.push(ff);
|
|
331
|
+
else
|
|
332
|
+
merged.set(key, { ...f, _ff: [ff] });
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
const findings = Array.from(merged.values()).map(({ _ff, ...f }) => ({
|
|
336
|
+
...f,
|
|
337
|
+
evidence: factors.length > 1
|
|
338
|
+
? { ...f.evidence, affects_form_factors: _ff, form_factor_specific: _ff.length === 1 }
|
|
339
|
+
: f.evidence,
|
|
340
|
+
}));
|
|
341
|
+
return { scores, ttfb_ms: lhOk[0].data.ttfb_ms, findings };
|
|
342
|
+
})();
|
|
300
343
|
// Surface tool errors but don't abort — partial reports are still useful.
|
|
301
344
|
const errors = [];
|
|
302
345
|
if (lhData?.error)
|
|
@@ -339,12 +382,16 @@ export function registerQaGateTool(server) {
|
|
|
339
382
|
...(staticData ? ["eslint", "semgrep"] : []),
|
|
340
383
|
];
|
|
341
384
|
const readiness = buildVerdict(allFindings);
|
|
342
|
-
const
|
|
385
|
+
const subScores = buildSubScores(lhData, a11yData, staticData);
|
|
386
|
+
const composite = compositeScore(subScores);
|
|
343
387
|
const scorecard = buildScorecard(lhData, a11yData, staticData);
|
|
344
388
|
const summary = buildSummary(allFindings, toolsRan, readiness, correlations_count);
|
|
345
389
|
const report = {
|
|
346
390
|
release_readiness: readiness,
|
|
347
|
-
composite_score:
|
|
391
|
+
composite_score: composite,
|
|
392
|
+
// Per-tool 0–100 health, so a low composite is attributable rather than
|
|
393
|
+
// just low. Null means the tool did not run or did not produce a score.
|
|
394
|
+
sub_scores: subScores,
|
|
348
395
|
scorecard,
|
|
349
396
|
...(staticData ? { eslint_config_used: staticData.eslint_config_used } : {}),
|
|
350
397
|
summary,
|
|
@@ -361,7 +408,7 @@ export function registerQaGateTool(server) {
|
|
|
361
408
|
url,
|
|
362
409
|
path: targetPath,
|
|
363
410
|
release_readiness: readiness,
|
|
364
|
-
composite_score:
|
|
411
|
+
composite_score: composite ?? 0,
|
|
365
412
|
scorecard,
|
|
366
413
|
summary,
|
|
367
414
|
corroborated_findings: corroboratedFindings,
|
package/dist/tools/qaGate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qaGate.js","sourceRoot":"","sources":["../../src/tools/qaGate.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"qaGate.js","sourceRoot":"","sources":["../../src/tools/qaGate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,20 +1,16 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { fileURLToPath } from "url";
|
|
3
2
|
import { resolve } from "path";
|
|
4
3
|
import { runShell } from "../utils/shellRunner.js";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
4
|
+
import { parseSemgrepJSON } from "../utils/outputParsers.js";
|
|
5
|
+
import { runESLint } from "../utils/eslintRunner.js";
|
|
7
6
|
import { formatStaticAnalysisFinding, } from "../mappers/defectFormatter.js";
|
|
8
|
-
const BASELINE_CONFIG_PATH = fileURLToPath(new URL("../config/qa-mcp-baseline.eslint.config.js", import.meta.url));
|
|
9
7
|
const PRIORITY_ORDER = { P1: 0, P2: 1, P3: 2 };
|
|
10
8
|
function higherPriority(a, b) {
|
|
11
9
|
return PRIORITY_ORDER[a.priority] <= PRIORITY_ORDER[b.priority] ? a : b;
|
|
12
10
|
}
|
|
13
|
-
function
|
|
11
|
+
function isSemgrepNotInstalled(stderr, stdout, exitCode) {
|
|
14
12
|
if (exitCode !== -1)
|
|
15
13
|
return false;
|
|
16
|
-
// When execa fails with ENOENT (command not found), the process never starts
|
|
17
|
-
// so stderr is an empty string — we can't rely on string-matching alone.
|
|
18
14
|
if (!stderr && !stdout)
|
|
19
15
|
return true;
|
|
20
16
|
return (stderr.includes("ENOENT") ||
|
|
@@ -40,72 +36,23 @@ export function registerStaticAnalysisTool(server) {
|
|
|
40
36
|
inputSchema: inputShape,
|
|
41
37
|
}, async ({ path: targetPath, ruleset }) => {
|
|
42
38
|
const absPath = resolve(targetPath);
|
|
43
|
-
// --- Decide ESLint config strategy ---
|
|
44
|
-
const { hasConfig } = detectESLintConfig(absPath);
|
|
45
|
-
const eslintConfigUsed = hasConfig ? "project" : "qa-mcp-baseline";
|
|
46
|
-
// ESLint flat config resolves `files` globs relative to cwd, not the
|
|
47
|
-
// config file location. Always lint "." and run from absPath so that
|
|
48
|
-
// "**/*.js" correctly matches files inside the target directory.
|
|
49
|
-
const eslintArgs = [".", "--format", "json"];
|
|
50
|
-
if (!hasConfig) {
|
|
51
|
-
eslintArgs.push("--config", BASELINE_CONFIG_PATH);
|
|
52
|
-
}
|
|
53
|
-
eslintArgs.push("--ignore-pattern", "node_modules", "--ignore-pattern", "dist");
|
|
54
39
|
// --- Semgrep args ---
|
|
55
40
|
const semgrepRulesets = ruleset
|
|
56
41
|
? [`--config=${ruleset}`]
|
|
57
42
|
: ["--config=p/javascript", "--config=p/typescript"];
|
|
58
|
-
const semgrepArgs = [
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
"node_modules",
|
|
63
|
-
".",
|
|
64
|
-
];
|
|
65
|
-
// Run both tools in parallel, rooted at the target directory.
|
|
66
|
-
const [eslintResult, semgrepResult] = await Promise.all([
|
|
67
|
-
runShell("eslint", eslintArgs, { timeoutMs: 120_000, cwd: absPath }),
|
|
43
|
+
const semgrepArgs = [...semgrepRulesets, "--json", "--exclude", "node_modules", "."];
|
|
44
|
+
// Run ESLint (per-package aware) and Semgrep in parallel.
|
|
45
|
+
const [eslintRun, semgrepResult] = await Promise.all([
|
|
46
|
+
runESLint(absPath),
|
|
68
47
|
runShell("semgrep", semgrepArgs, { timeoutMs: 180_000, cwd: absPath }),
|
|
69
48
|
]);
|
|
70
49
|
const toolsRun = [];
|
|
71
|
-
const warnings = [];
|
|
72
|
-
const allIssues = [];
|
|
73
|
-
|
|
74
|
-
// Exit 0 = no issues, exit 1 = issues found, exit 2 = config/fatal error.
|
|
75
|
-
// Exit -1 = tool not found or timeout.
|
|
76
|
-
if (isNotInstalled(eslintResult.stderr, eslintResult.stdout, eslintResult.exitCode)) {
|
|
77
|
-
warnings.push("ESLint is not installed or not found in PATH — skipping ESLint analysis.");
|
|
78
|
-
}
|
|
79
|
-
else if (eslintResult.exitCode === 2) {
|
|
80
|
-
warnings.push(`ESLint configuration error: ${eslintResult.stderr.slice(0, 500)}`);
|
|
81
|
-
}
|
|
82
|
-
else if (eslintResult.stdout) {
|
|
83
|
-
try {
|
|
84
|
-
const parsed = parseESLintJSON(eslintResult.stdout);
|
|
85
|
-
for (const issue of parsed.issues) {
|
|
86
|
-
allIssues.push({
|
|
87
|
-
source: "eslint",
|
|
88
|
-
file: issue.filePath,
|
|
89
|
-
line: issue.line,
|
|
90
|
-
column: issue.column,
|
|
91
|
-
ruleId: issue.ruleId,
|
|
92
|
-
message: issue.message,
|
|
93
|
-
severity: issue.severity,
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
toolsRun.push("eslint");
|
|
97
|
-
}
|
|
98
|
-
catch {
|
|
99
|
-
warnings.push("Failed to parse ESLint JSON output.");
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
else {
|
|
103
|
-
// Exit 0 with no stdout = no files matched (e.g. only TS files with JS-only baseline).
|
|
50
|
+
const warnings = [...eslintRun.warnings];
|
|
51
|
+
const allIssues = [...eslintRun.issues];
|
|
52
|
+
if (eslintRun.ran)
|
|
104
53
|
toolsRun.push("eslint");
|
|
105
|
-
}
|
|
106
54
|
// --- Semgrep ---
|
|
107
|
-
|
|
108
|
-
if (isNotInstalled(semgrepResult.stderr, semgrepResult.stdout, semgrepResult.exitCode)) {
|
|
55
|
+
if (isSemgrepNotInstalled(semgrepResult.stderr, semgrepResult.stdout, semgrepResult.exitCode)) {
|
|
109
56
|
warnings.push("Semgrep is not installed or not found in PATH — skipping Semgrep analysis.");
|
|
110
57
|
}
|
|
111
58
|
else if (semgrepResult.exitCode === 2) {
|
|
@@ -113,8 +60,7 @@ export function registerStaticAnalysisTool(server) {
|
|
|
113
60
|
}
|
|
114
61
|
else if (semgrepResult.stdout) {
|
|
115
62
|
try {
|
|
116
|
-
const
|
|
117
|
-
for (const finding of parsed.findings) {
|
|
63
|
+
for (const finding of parseSemgrepJSON(semgrepResult.stdout).findings) {
|
|
118
64
|
allIssues.push({
|
|
119
65
|
source: "semgrep",
|
|
120
66
|
file: finding.filePath,
|
|
@@ -158,10 +104,12 @@ export function registerStaticAnalysisTool(server) {
|
|
|
158
104
|
const report = {
|
|
159
105
|
path: absPath,
|
|
160
106
|
tools_run: toolsRun,
|
|
161
|
-
eslint_config_used:
|
|
107
|
+
eslint_config_used: eslintRun.config_used,
|
|
162
108
|
issue_count: findings.length,
|
|
163
109
|
findings,
|
|
164
110
|
};
|
|
111
|
+
if (eslintRun.packages.length > 0)
|
|
112
|
+
report["eslint_packages"] = eslintRun.packages;
|
|
165
113
|
if (warnings.length > 0)
|
|
166
114
|
report["warnings"] = warnings;
|
|
167
115
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"staticAnalysis.js","sourceRoot":"","sources":["../../src/tools/staticAnalysis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"staticAnalysis.js","sourceRoot":"","sources":["../../src/tools/staticAnalysis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EACL,2BAA2B,GAE5B,MAAM,+BAA+B,CAAC;AAIvC,MAAM,cAAc,GAA6B,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAEzE,SAAS,cAAc,CAAC,CAAU,EAAE,CAAU;IAC5C,OAAO,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,qBAAqB,CAAC,MAAc,EAAE,MAAc,EAAE,QAAgB;IAC7E,IAAI,QAAQ,KAAK,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAClC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACpC,OAAO,CACL,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACzB,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC5B,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QACpC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAChC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,GAAG;IACjB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uDAAuD,CAAC;IAClF,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,iEAAiE,CAAC;IAC9E,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;CAC9E,CAAC;AAEF,MAAM,UAAU,0BAA0B,CAAC,MAAiB;IAC1D,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,WAAW,EACT,8EAA8E;YAC9E,wDAAwD;YACxD,uDAAuD;YACvD,0FAA0F;YAC1F,4EAA4E;QAC9E,WAAW,EAAE,UAAU;KACxB,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,EAAE;QACtC,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;QAEpC,uBAAuB;QACvB,MAAM,eAAe,GAAG,OAAO;YAC7B,CAAC,CAAC,CAAC,YAAY,OAAO,EAAE,CAAC;YACzB,CAAC,CAAC,CAAC,uBAAuB,EAAE,uBAAuB,CAAC,CAAC;QACvD,MAAM,WAAW,GAAG,CAAC,GAAG,eAAe,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC;QAErF,0DAA0D;QAC1D,MAAM,CAAC,SAAS,EAAE,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACnD,SAAS,CAAC,OAAO,CAAC;YAClB,QAAQ,CAAC,SAAS,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;SACvE,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAa,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;QACnD,MAAM,SAAS,GAA0B,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QAE/D,IAAI,SAAS,CAAC,GAAG;YAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE3C,kBAAkB;QAClB,IAAI,qBAAqB,CAAC,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9F,QAAQ,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAC;QAC9F,CAAC;aAAM,IAAI,aAAa,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YACxC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QACxE,CAAC;aAAM,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;YAChC,IAAI,CAAC;gBACH,KAAK,MAAM,OAAO,IAAI,gBAAgB,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;oBACtE,SAAS,CAAC,IAAI,CAAC;wBACb,MAAM,EAAE,SAAS;wBACjB,IAAI,EAAE,OAAO,CAAC,QAAQ;wBACtB,IAAI,EAAE,OAAO,CAAC,IAAI;wBAClB,MAAM,EAAE,OAAO,CAAC,MAAM;wBACtB,OAAO,EAAE,OAAO,CAAC,OAAO;wBACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ;wBAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;qBAC3B,CAAC,CAAC;gBACL,CAAC;gBACD,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC3B,CAAC;YAAC,MAAM,CAAC;gBACP,QAAQ,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;QAED,0BAA0B;QAC1B,MAAM,SAAS,GAAc,EAAE,CAAC;QAChC,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;YACnD,IAAI,OAAO;gBAAE,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvC,CAAC;QAED,8DAA8D;QAC9D,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAmB,CAAC;QAC5C,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;YAC1E,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACnC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChE,CAAC;QAED,+CAA+C;QAC/C,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC3D,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YACtE,IAAI,KAAK,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAC;YAC9B,OAAO,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC9E,CAAC,CAAC,CAAC;QAEH,MAAM,MAAM,GAA4B;YACtC,IAAI,EAAE,OAAO;YACb,SAAS,EAAE,QAAQ;YACnB,kBAAkB,EAAE,SAAS,CAAC,WAAW;YACzC,WAAW,EAAE,QAAQ,CAAC,MAAM;YAC5B,QAAQ;SACT,CAAC;QACF,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,CAAC,iBAAiB,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC;QAClF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC;QAEvD,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SACnE,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -3,3 +3,16 @@ export interface ESLintConfigResult {
|
|
|
3
3
|
configFile: string | null;
|
|
4
4
|
}
|
|
5
5
|
export declare function detectESLintConfig(targetPath: string): ESLintConfigResult;
|
|
6
|
+
/**
|
|
7
|
+
* Recursively discovers subdirectories (up to maxDepth) that have their own
|
|
8
|
+
* ESLint config. Does not recurse into a directory that already has a config —
|
|
9
|
+
* ESLint handles nested configs from that point on.
|
|
10
|
+
*/
|
|
11
|
+
export declare function discoverESLintPackages(rootPath: string, maxDepth?: number): string[];
|
|
12
|
+
/**
|
|
13
|
+
* Resolves the nearest local ESLint binary by walking up from startPath.
|
|
14
|
+
* Using a local binary avoids version mismatches (e.g. project uses v8 but
|
|
15
|
+
* the global ESLint is v9/v10 which dropped .eslintrc.* support).
|
|
16
|
+
* Falls back to the global "eslint" command if no local binary is found.
|
|
17
|
+
*/
|
|
18
|
+
export declare function resolveESLintBinary(startPath: string): string;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { existsSync } from "fs";
|
|
2
|
-
import { join } from "path";
|
|
1
|
+
import { existsSync, readdirSync, statSync } from "fs";
|
|
2
|
+
import { join, resolve } from "path";
|
|
3
3
|
// Checked in priority order: flat config first, then legacy formats.
|
|
4
4
|
const CONFIG_FILES = [
|
|
5
5
|
"eslint.config.js",
|
|
@@ -10,6 +10,10 @@ const CONFIG_FILES = [
|
|
|
10
10
|
".eslintrc.yaml",
|
|
11
11
|
".eslintrc",
|
|
12
12
|
];
|
|
13
|
+
const SKIP_DIRS = new Set([
|
|
14
|
+
"node_modules", "dist", ".git", ".next", "build", "out", "coverage",
|
|
15
|
+
".turbo", ".cache", ".vercel", "__pycache__",
|
|
16
|
+
]);
|
|
13
17
|
export function detectESLintConfig(targetPath) {
|
|
14
18
|
for (const file of CONFIG_FILES) {
|
|
15
19
|
if (existsSync(join(targetPath, file))) {
|
|
@@ -18,4 +22,63 @@ export function detectESLintConfig(targetPath) {
|
|
|
18
22
|
}
|
|
19
23
|
return { hasConfig: false, configFile: null };
|
|
20
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* Recursively discovers subdirectories (up to maxDepth) that have their own
|
|
27
|
+
* ESLint config. Does not recurse into a directory that already has a config —
|
|
28
|
+
* ESLint handles nested configs from that point on.
|
|
29
|
+
*/
|
|
30
|
+
export function discoverESLintPackages(rootPath, maxDepth = 3) {
|
|
31
|
+
const packages = [];
|
|
32
|
+
function walk(dir, depth) {
|
|
33
|
+
if (depth > maxDepth)
|
|
34
|
+
return;
|
|
35
|
+
let entries;
|
|
36
|
+
try {
|
|
37
|
+
entries = readdirSync(dir);
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
for (const entry of entries) {
|
|
43
|
+
if (SKIP_DIRS.has(entry))
|
|
44
|
+
continue;
|
|
45
|
+
const full = join(dir, entry);
|
|
46
|
+
try {
|
|
47
|
+
if (!statSync(full).isDirectory())
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
if (detectESLintConfig(full).hasConfig) {
|
|
54
|
+
packages.push(full);
|
|
55
|
+
// Stop descending — ESLint resolves nested configs from here.
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
walk(full, depth + 1);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
walk(rootPath, 1);
|
|
63
|
+
return packages;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Resolves the nearest local ESLint binary by walking up from startPath.
|
|
67
|
+
* Using a local binary avoids version mismatches (e.g. project uses v8 but
|
|
68
|
+
* the global ESLint is v9/v10 which dropped .eslintrc.* support).
|
|
69
|
+
* Falls back to the global "eslint" command if no local binary is found.
|
|
70
|
+
*/
|
|
71
|
+
export function resolveESLintBinary(startPath) {
|
|
72
|
+
let dir = resolve(startPath);
|
|
73
|
+
for (let i = 0; i < 7; i++) {
|
|
74
|
+
const candidate = join(dir, "node_modules", ".bin", "eslint");
|
|
75
|
+
if (existsSync(candidate))
|
|
76
|
+
return candidate;
|
|
77
|
+
const parent = resolve(join(dir, ".."));
|
|
78
|
+
if (parent === dir)
|
|
79
|
+
break;
|
|
80
|
+
dir = parent;
|
|
81
|
+
}
|
|
82
|
+
return "eslint";
|
|
83
|
+
}
|
|
21
84
|
//# sourceMappingURL=eslintConfigDetector.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eslintConfigDetector.js","sourceRoot":"","sources":["../../src/utils/eslintConfigDetector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"eslintConfigDetector.js","sourceRoot":"","sources":["../../src/utils/eslintConfigDetector.ts"],"names":[],"mappings":"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"}
|