nfunc-mcp 0.1.0 → 0.2.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 +41 -38
- package/dist/index.js +0 -0
- package/dist/tools/qaGate.js +8 -36
- 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/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
#
|
|
1
|
+
# nfunc-mcp
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/nfunc-mcp)
|
|
2
4
|
|
|
3
5
|
A local MCP server that gives Claude (or any MCP client) a full non-functional QA toolkit. Run Lighthouse, WCAG accessibility checks, and static code analysis — individually or all at once — and get back structured, prioritised findings you can act on immediately.
|
|
4
6
|
|
|
@@ -28,7 +30,7 @@ A local MCP server that gives Claude (or any MCP client) a full non-functional Q
|
|
|
28
30
|
|
|
29
31
|
## What it does
|
|
30
32
|
|
|
31
|
-
`
|
|
33
|
+
`nfunc-mcp` wires four QA tools into Claude's tool-use loop:
|
|
32
34
|
|
|
33
35
|
| Capability | Tools | What it checks |
|
|
34
36
|
|---|---|---|
|
|
@@ -45,14 +47,14 @@ The `run_qa_gate` orchestrator runs all of them in parallel, cross-correlates fi
|
|
|
45
47
|
|
|
46
48
|
## Prerequisites
|
|
47
49
|
|
|
48
|
-
|
|
50
|
+
`nfunc-mcp` is a thin wrapper around four CLI tools. Install the ones you need before registering the server:
|
|
49
51
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
npm install -g
|
|
53
|
-
npm install -g
|
|
54
|
-
|
|
55
|
-
|
|
52
|
+
| Tool | Install | Used by |
|
|
53
|
+
|---|---|---|
|
|
54
|
+
| Lighthouse | `npm install -g lighthouse` | `run_lighthouse`, `run_qa_gate` (URL) |
|
|
55
|
+
| pa11y | `npm install -g pa11y` | `run_accessibility_check`, `run_qa_gate` (URL) |
|
|
56
|
+
| ESLint | `npm install -g eslint` | `run_static_analysis`, `run_qa_gate` (path) |
|
|
57
|
+
| Semgrep | `brew install semgrep` or `pip install semgrep` | `run_static_analysis`, `run_qa_gate` (path) |
|
|
56
58
|
|
|
57
59
|
Verify each is reachable:
|
|
58
60
|
|
|
@@ -63,56 +65,57 @@ eslint --version
|
|
|
63
65
|
semgrep --version
|
|
64
66
|
```
|
|
65
67
|
|
|
66
|
-
If a tool is missing, the gate still runs — that tool's scorecard entry
|
|
68
|
+
**You don't need all four.** If a tool is missing or not installed, the gate still runs — that tool's scorecard entry shows `UNAVAILABLE` and its findings are skipped. URL-only runs only need Lighthouse and pa11y; path-only runs only need ESLint and Semgrep.
|
|
67
69
|
|
|
68
70
|
---
|
|
69
71
|
|
|
70
|
-
## Install &
|
|
71
|
-
|
|
72
|
-
```bash
|
|
73
|
-
git clone <repo-url>
|
|
74
|
-
cd qa-mcp
|
|
75
|
-
npm install
|
|
76
|
-
npm run build
|
|
77
|
-
```
|
|
72
|
+
## Install & register
|
|
78
73
|
|
|
79
|
-
###
|
|
80
|
-
|
|
81
|
-
| Script | Purpose |
|
|
82
|
-
|---|---|
|
|
83
|
-
| `npm run build` | Compile TypeScript → `dist/` |
|
|
84
|
-
| `npm start` | Run the compiled server |
|
|
85
|
-
| `npm run dev` | Run from source with hot reload (`tsx watch`) |
|
|
86
|
-
|
|
87
|
-
---
|
|
88
|
-
|
|
89
|
-
## Register with Claude Code
|
|
90
|
-
|
|
91
|
-
### Option A — CLI (recommended)
|
|
74
|
+
### Option A — npm (recommended, no cloning needed)
|
|
92
75
|
|
|
93
76
|
```bash
|
|
94
|
-
claude mcp add
|
|
77
|
+
claude mcp add nfunc-mcp -- npx -y nfunc-mcp
|
|
95
78
|
```
|
|
96
79
|
|
|
97
|
-
|
|
80
|
+
That's it. `npx` downloads and runs the server on your machine automatically. No repo clone, no build step.
|
|
81
|
+
|
|
82
|
+
### Option B — Manual config (npm)
|
|
98
83
|
|
|
99
84
|
Add to `~/.claude.json` under `mcpServers`:
|
|
100
85
|
|
|
101
86
|
```json
|
|
102
87
|
{
|
|
103
88
|
"mcpServers": {
|
|
104
|
-
"
|
|
105
|
-
"command": "
|
|
106
|
-
"args": ["
|
|
89
|
+
"nfunc-mcp": {
|
|
90
|
+
"command": "npx",
|
|
91
|
+
"args": ["-y", "nfunc-mcp"]
|
|
107
92
|
}
|
|
108
93
|
}
|
|
109
94
|
}
|
|
110
95
|
```
|
|
111
96
|
|
|
97
|
+
### Option C — From source (contributors / local dev)
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
git clone https://github.com/Hiddensound/NFunc_MCP.git
|
|
101
|
+
cd NFunc_MCP
|
|
102
|
+
npm install
|
|
103
|
+
npm run build
|
|
104
|
+
claude mcp add nfunc-mcp -- node /absolute/path/to/NFunc_MCP/dist/index.js
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Scripts (source only)
|
|
108
|
+
|
|
109
|
+
| Script | Purpose |
|
|
110
|
+
|---|---|
|
|
111
|
+
| `npm run build` | Compile TypeScript → `dist/` |
|
|
112
|
+
| `npm start` | Run the compiled server |
|
|
113
|
+
| `npm run dev` | Run from source with hot reload (`tsx watch`) |
|
|
114
|
+
|
|
112
115
|
### Verify the connection
|
|
113
116
|
|
|
114
|
-
1. Run `/mcp` in Claude Code — `
|
|
115
|
-
2. Ask Claude: *"Call the
|
|
117
|
+
1. Run `/mcp` in Claude Code — `nfunc-mcp` should show as `connected`.
|
|
118
|
+
2. Ask Claude: *"Call the nfunc-mcp ping tool."*
|
|
116
119
|
3. Expected response:
|
|
117
120
|
```json
|
|
118
121
|
{ "status": "ok", "timestamp": "2026-05-20T12:00:00.000Z" }
|
package/dist/index.js
CHANGED
|
File without changes
|
package/dist/tools/qaGate.js
CHANGED
|
@@ -1,13 +1,11 @@
|
|
|
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 { runESLint } from "../utils/eslintRunner.js";
|
|
8
7
|
import { correlate, } from "../mappers/correlator.js";
|
|
9
8
|
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
9
|
const PRIORITY_ORDER = { P1: 0, P2: 1, P3: 2 };
|
|
12
10
|
// ---------------------------------------------------------------------------
|
|
13
11
|
// Per-tool runners — each returns a structured result and never throws.
|
|
@@ -67,42 +65,16 @@ async function runA11y(url) {
|
|
|
67
65
|
}
|
|
68
66
|
}
|
|
69
67
|
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
68
|
const semgrepArgs = [
|
|
80
69
|
"--config=p/javascript", "--config=p/typescript",
|
|
81
70
|
"--json", "--exclude", "node_modules", ".",
|
|
82
71
|
];
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
runShell("eslint", eslintArgs, { timeoutMs: 120_000, cwd: absPath }),
|
|
72
|
+
const [eslintRun, semgrepResult] = await Promise.all([
|
|
73
|
+
runESLint(absPath),
|
|
86
74
|
runShell("semgrep", semgrepArgs, { timeoutMs: 180_000, cwd: absPath }),
|
|
87
75
|
]);
|
|
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
|
-
}
|
|
76
|
+
const allIssues = [...eslintRun.issues];
|
|
77
|
+
const warnings = [...eslintRun.warnings];
|
|
106
78
|
if (semgrepResult.exitCode === -1 && !semgrepResult.stdout && !semgrepResult.stderr) {
|
|
107
79
|
warnings.push("Semgrep not installed — Semgrep analysis skipped.");
|
|
108
80
|
}
|
|
@@ -116,7 +88,7 @@ async function runStatic(absPath) {
|
|
|
116
88
|
warnings.push("Semgrep output could not be parsed.");
|
|
117
89
|
}
|
|
118
90
|
}
|
|
119
|
-
// Deduplicate by file:line
|
|
91
|
+
// Deduplicate by file:line.
|
|
120
92
|
const dedupMap = new Map();
|
|
121
93
|
for (const issue of allIssues) {
|
|
122
94
|
const f = formatStaticAnalysisFinding(issue);
|
|
@@ -129,7 +101,7 @@ async function runStatic(absPath) {
|
|
|
129
101
|
}
|
|
130
102
|
}
|
|
131
103
|
const findings = Array.from(dedupMap.values());
|
|
132
|
-
return { issue_count: findings.length, eslint_config_used:
|
|
104
|
+
return { issue_count: findings.length, eslint_config_used: eslintRun.config_used, findings, warnings };
|
|
133
105
|
}
|
|
134
106
|
// ---------------------------------------------------------------------------
|
|
135
107
|
// Report assembly helpers
|
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":"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"}
|
|
@@ -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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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { StaticAnalysisIssue } from "../mappers/defectFormatter.js";
|
|
2
|
+
export interface ESLintRunResult {
|
|
3
|
+
issues: StaticAnalysisIssue[];
|
|
4
|
+
config_used: string;
|
|
5
|
+
packages: string[];
|
|
6
|
+
warnings: string[];
|
|
7
|
+
ran: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare function runESLint(absPath: string): Promise<ESLintRunResult>;
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { fileURLToPath } from "url";
|
|
2
|
+
import { relative } from "path";
|
|
3
|
+
import { runShell } from "./shellRunner.js";
|
|
4
|
+
import { parseESLintJSON } from "./outputParsers.js";
|
|
5
|
+
import { detectESLintConfig, discoverESLintPackages, resolveESLintBinary, } from "./eslintConfigDetector.js";
|
|
6
|
+
const BASELINE_CONFIG_PATH = fileURLToPath(new URL("../config/qa-mcp-baseline.eslint.config.js", import.meta.url));
|
|
7
|
+
function buildSpecs(absPath) {
|
|
8
|
+
const { hasConfig } = detectESLintConfig(absPath);
|
|
9
|
+
if (hasConfig) {
|
|
10
|
+
return {
|
|
11
|
+
specs: [{
|
|
12
|
+
binary: resolveESLintBinary(absPath),
|
|
13
|
+
args: [".", "--format", "json"],
|
|
14
|
+
cwd: absPath,
|
|
15
|
+
label: ".",
|
|
16
|
+
}],
|
|
17
|
+
config_used: "project",
|
|
18
|
+
packages: [],
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
const discovered = discoverESLintPackages(absPath);
|
|
22
|
+
if (discovered.length > 0) {
|
|
23
|
+
return {
|
|
24
|
+
specs: discovered.map(pkg => ({
|
|
25
|
+
binary: resolveESLintBinary(pkg),
|
|
26
|
+
args: [".", "--format", "json"],
|
|
27
|
+
cwd: pkg,
|
|
28
|
+
label: relative(absPath, pkg),
|
|
29
|
+
})),
|
|
30
|
+
config_used: `per-package (${discovered.length} packages)`,
|
|
31
|
+
packages: discovered.map(pkg => relative(absPath, pkg)),
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
// No config anywhere — fall back to the QA MCP baseline (JS/JSX only).
|
|
35
|
+
return {
|
|
36
|
+
specs: [{
|
|
37
|
+
binary: resolveESLintBinary(absPath),
|
|
38
|
+
args: [".", "--format", "json", "--config", BASELINE_CONFIG_PATH],
|
|
39
|
+
cwd: absPath,
|
|
40
|
+
label: ".",
|
|
41
|
+
}],
|
|
42
|
+
config_used: "qa-mcp-baseline",
|
|
43
|
+
packages: [],
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
export async function runESLint(absPath) {
|
|
47
|
+
const { specs, config_used, packages } = buildSpecs(absPath);
|
|
48
|
+
const results = await Promise.all(specs.map(s => runShell(s.binary, s.args, { timeoutMs: 120_000, cwd: s.cwd })));
|
|
49
|
+
const issues = [];
|
|
50
|
+
const warnings = [];
|
|
51
|
+
let ran = false;
|
|
52
|
+
let notInstalled = false;
|
|
53
|
+
for (let i = 0; i < results.length; i++) {
|
|
54
|
+
const r = results[i];
|
|
55
|
+
const spec = specs[i];
|
|
56
|
+
// Tool not found: exitCode -1 with no output.
|
|
57
|
+
if (r.exitCode === -1 && !r.stdout && !r.stderr) {
|
|
58
|
+
notInstalled = true;
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
// Also catch ENOENT in stderr (execa surfaces it there on some platforms).
|
|
62
|
+
if (r.exitCode === -1 &&
|
|
63
|
+
(r.stderr.includes("ENOENT") ||
|
|
64
|
+
r.stderr.includes("not found") ||
|
|
65
|
+
r.stderr.includes("command not found"))) {
|
|
66
|
+
notInstalled = true;
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
// Exit 2 = fatal config or parse error.
|
|
70
|
+
if (r.exitCode === 2) {
|
|
71
|
+
warnings.push(`ESLint config error (${spec.label}): ${r.stderr.slice(0, 300)}`);
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
if (r.stdout) {
|
|
75
|
+
try {
|
|
76
|
+
for (const issue of parseESLintJSON(r.stdout).issues) {
|
|
77
|
+
issues.push({
|
|
78
|
+
source: "eslint",
|
|
79
|
+
file: issue.filePath,
|
|
80
|
+
line: issue.line,
|
|
81
|
+
column: issue.column,
|
|
82
|
+
ruleId: issue.ruleId,
|
|
83
|
+
message: issue.message,
|
|
84
|
+
severity: issue.severity,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
ran = true;
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
warnings.push(`Failed to parse ESLint JSON output (${spec.label}).`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
// Exit 0/1 with no stdout = no matched files or no issues.
|
|
95
|
+
ran = true;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
if (notInstalled) {
|
|
99
|
+
warnings.push("ESLint is not installed or not found in PATH — ESLint analysis skipped.");
|
|
100
|
+
}
|
|
101
|
+
return { issues, config_used, packages, warnings, ran: ran && !notInstalled };
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=eslintRunner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eslintRunner.js","sourceRoot":"","sources":["../../src/utils/eslintRunner.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED