@kevinrabun/judges 3.40.0 → 3.41.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/CHANGELOG.md +22 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +63 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/auto-calibrate.d.ts +15 -0
- package/dist/commands/auto-calibrate.d.ts.map +1 -0
- package/dist/commands/auto-calibrate.js +107 -0
- package/dist/commands/auto-calibrate.js.map +1 -0
- package/dist/commands/config-migrate.d.ts +44 -0
- package/dist/commands/config-migrate.d.ts.map +1 -0
- package/dist/commands/config-migrate.js +241 -0
- package/dist/commands/config-migrate.js.map +1 -0
- package/dist/commands/dedup-report.d.ts +13 -0
- package/dist/commands/dedup-report.d.ts.map +1 -0
- package/dist/commands/dedup-report.js +138 -0
- package/dist/commands/dedup-report.js.map +1 -0
- package/dist/commands/dep-audit.d.ts +53 -0
- package/dist/commands/dep-audit.d.ts.map +1 -0
- package/dist/commands/dep-audit.js +278 -0
- package/dist/commands/dep-audit.js.map +1 -0
- package/dist/commands/deprecated.d.ts +48 -0
- package/dist/commands/deprecated.d.ts.map +1 -0
- package/dist/commands/deprecated.js +202 -0
- package/dist/commands/deprecated.js.map +1 -0
- package/dist/commands/fix-pr.d.ts +23 -0
- package/dist/commands/fix-pr.d.ts.map +1 -0
- package/dist/commands/fix-pr.js +323 -0
- package/dist/commands/fix-pr.js.map +1 -0
- package/dist/commands/interactive-fix.d.ts +23 -0
- package/dist/commands/interactive-fix.d.ts.map +1 -0
- package/dist/commands/interactive-fix.js +140 -0
- package/dist/commands/interactive-fix.js.map +1 -0
- package/dist/commands/monorepo.d.ts +38 -0
- package/dist/commands/monorepo.d.ts.map +1 -0
- package/dist/commands/monorepo.js +233 -0
- package/dist/commands/monorepo.js.map +1 -0
- package/dist/commands/notify.d.ts +79 -0
- package/dist/commands/notify.d.ts.map +1 -0
- package/dist/commands/notify.js +325 -0
- package/dist/commands/notify.js.map +1 -0
- package/dist/commands/quality-gate.d.ts +70 -0
- package/dist/commands/quality-gate.d.ts.map +1 -0
- package/dist/commands/quality-gate.js +264 -0
- package/dist/commands/quality-gate.js.map +1 -0
- package/dist/evaluators/framework-rules.d.ts +59 -0
- package/dist/evaluators/framework-rules.d.ts.map +1 -0
- package/dist/evaluators/framework-rules.js +292 -0
- package/dist/evaluators/framework-rules.js.map +1 -0
- package/dist/parallel.d.ts +53 -0
- package/dist/parallel.d.ts.map +1 -0
- package/dist/parallel.js +170 -0
- package/dist/parallel.js.map +1 -0
- package/package.json +1 -1
- package/server.json +2 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notify.js","sourceRoot":"","sources":["../../src/commands/notify.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `judges quality-gate` — Configurable composite quality gates.
|
|
3
|
+
*
|
|
4
|
+
* Defines and evaluates multi-dimensional quality gates for CI pipelines.
|
|
5
|
+
* Goes beyond simple severity counts — supports score thresholds, specific
|
|
6
|
+
* rule requirements, trend-based gates, and custom composite conditions.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* judges quality-gate --file src/app.ts # Evaluate default gate
|
|
10
|
+
* judges quality-gate --file src/app.ts --gate strict # Named gate definition
|
|
11
|
+
* judges quality-gate --file src/app.ts --json # JSON output
|
|
12
|
+
*
|
|
13
|
+
* Configuration in .judgesrc:
|
|
14
|
+
* ```json
|
|
15
|
+
* {
|
|
16
|
+
* "qualityGates": {
|
|
17
|
+
* "default": {
|
|
18
|
+
* "maxFindings": { "critical": 0, "high": 2 },
|
|
19
|
+
* "minScore": 70,
|
|
20
|
+
* "requiredJudges": ["cybersecurity", "data-security"],
|
|
21
|
+
* "maxFpRate": 0.3
|
|
22
|
+
* },
|
|
23
|
+
* "strict": {
|
|
24
|
+
* "maxFindings": { "critical": 0, "high": 0, "medium": 5 },
|
|
25
|
+
* "minScore": 85,
|
|
26
|
+
* "requiredJudges": ["cybersecurity", "data-security", "authentication"]
|
|
27
|
+
* }
|
|
28
|
+
* }
|
|
29
|
+
* }
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
import type { Severity, TribunalVerdict } from "../types.js";
|
|
33
|
+
export interface QualityGateDefinition {
|
|
34
|
+
/** Maximum allowed findings by severity — exceeding any triggers failure */
|
|
35
|
+
maxFindings?: Partial<Record<Severity, number>>;
|
|
36
|
+
/** Minimum aggregated score (0-100) */
|
|
37
|
+
minScore?: number;
|
|
38
|
+
/** Judge IDs that must participate in evaluation */
|
|
39
|
+
requiredJudges?: string[];
|
|
40
|
+
/** Maximum false-positive rate allowed (0-1) — requires feedback data */
|
|
41
|
+
maxFpRate?: number;
|
|
42
|
+
/** Required rules that must not be violated — listing a rule ID means zero violations */
|
|
43
|
+
blockerRules?: string[];
|
|
44
|
+
/** Minimum percentage of findings that must have auto-fix patches */
|
|
45
|
+
minFixRate?: number;
|
|
46
|
+
/** Minimum average confidence score for findings (0-1) */
|
|
47
|
+
minConfidence?: number;
|
|
48
|
+
}
|
|
49
|
+
export interface QualityGateResult {
|
|
50
|
+
/** Overall pass/fail */
|
|
51
|
+
passed: boolean;
|
|
52
|
+
/** Named gate that was evaluated */
|
|
53
|
+
gateName: string;
|
|
54
|
+
/** Individual check results */
|
|
55
|
+
checks: QualityGateCheck[];
|
|
56
|
+
/** Verdict summary */
|
|
57
|
+
summary: string;
|
|
58
|
+
}
|
|
59
|
+
export interface QualityGateCheck {
|
|
60
|
+
/** Check name */
|
|
61
|
+
name: string;
|
|
62
|
+
/** Pass/fail */
|
|
63
|
+
passed: boolean;
|
|
64
|
+
/** Descriptive message */
|
|
65
|
+
message: string;
|
|
66
|
+
}
|
|
67
|
+
export declare function evaluateQualityGate(gate: QualityGateDefinition, gateName: string, verdict: TribunalVerdict, fpRateByRule?: Map<string, number>): QualityGateResult;
|
|
68
|
+
export declare function parseQualityGateConfig(obj: Record<string, unknown>): Record<string, QualityGateDefinition> | undefined;
|
|
69
|
+
export declare function runQualityGate(argv: string[]): void;
|
|
70
|
+
//# sourceMappingURL=quality-gate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quality-gate.d.ts","sourceRoot":"","sources":["../../src/commands/quality-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAKH,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAI7D,MAAM,WAAW,qBAAqB;IACpC,4EAA4E;IAC5E,WAAW,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IAChD,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oDAAoD;IACpD,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yFAAyF;IACzF,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,wBAAwB;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,oCAAoC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,sBAAsB;IACtB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,0BAA0B;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,qBAAqB,EAC3B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,eAAe,EACxB,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC,iBAAiB,CAsGnB;AAID,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,GAAG,SAAS,CA2BnD;AAiBD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAgGnD"}
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `judges quality-gate` — Configurable composite quality gates.
|
|
3
|
+
*
|
|
4
|
+
* Defines and evaluates multi-dimensional quality gates for CI pipelines.
|
|
5
|
+
* Goes beyond simple severity counts — supports score thresholds, specific
|
|
6
|
+
* rule requirements, trend-based gates, and custom composite conditions.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* judges quality-gate --file src/app.ts # Evaluate default gate
|
|
10
|
+
* judges quality-gate --file src/app.ts --gate strict # Named gate definition
|
|
11
|
+
* judges quality-gate --file src/app.ts --json # JSON output
|
|
12
|
+
*
|
|
13
|
+
* Configuration in .judgesrc:
|
|
14
|
+
* ```json
|
|
15
|
+
* {
|
|
16
|
+
* "qualityGates": {
|
|
17
|
+
* "default": {
|
|
18
|
+
* "maxFindings": { "critical": 0, "high": 2 },
|
|
19
|
+
* "minScore": 70,
|
|
20
|
+
* "requiredJudges": ["cybersecurity", "data-security"],
|
|
21
|
+
* "maxFpRate": 0.3
|
|
22
|
+
* },
|
|
23
|
+
* "strict": {
|
|
24
|
+
* "maxFindings": { "critical": 0, "high": 0, "medium": 5 },
|
|
25
|
+
* "minScore": 85,
|
|
26
|
+
* "requiredJudges": ["cybersecurity", "data-security", "authentication"]
|
|
27
|
+
* }
|
|
28
|
+
* }
|
|
29
|
+
* }
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
import { existsSync, readFileSync } from "fs";
|
|
33
|
+
import { extname } from "path";
|
|
34
|
+
import { evaluateWithTribunal } from "../evaluators/index.js";
|
|
35
|
+
// ─── Gate Evaluation ────────────────────────────────────────────────────────
|
|
36
|
+
const SEVERITY_LEVELS = ["critical", "high", "medium", "low", "info"];
|
|
37
|
+
export function evaluateQualityGate(gate, gateName, verdict, fpRateByRule) {
|
|
38
|
+
const checks = [];
|
|
39
|
+
// Check max findings by severity
|
|
40
|
+
if (gate.maxFindings) {
|
|
41
|
+
const counts = { critical: 0, high: 0, medium: 0, low: 0, info: 0 };
|
|
42
|
+
for (const f of verdict.findings) {
|
|
43
|
+
counts[f.severity] = (counts[f.severity] || 0) + 1;
|
|
44
|
+
}
|
|
45
|
+
for (const sev of SEVERITY_LEVELS) {
|
|
46
|
+
const max = gate.maxFindings[sev];
|
|
47
|
+
if (max !== undefined) {
|
|
48
|
+
const actual = counts[sev];
|
|
49
|
+
checks.push({
|
|
50
|
+
name: `max-${sev}`,
|
|
51
|
+
passed: actual <= max,
|
|
52
|
+
message: `${sev} findings: ${actual}/${max} allowed`,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Check minimum score
|
|
58
|
+
if (gate.minScore !== undefined) {
|
|
59
|
+
checks.push({
|
|
60
|
+
name: "min-score",
|
|
61
|
+
passed: verdict.overallScore >= gate.minScore,
|
|
62
|
+
message: `Score: ${verdict.overallScore}/${gate.minScore} required`,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
// Check required judges participated
|
|
66
|
+
if (gate.requiredJudges) {
|
|
67
|
+
const participatingJudges = new Set(verdict.evaluations.map((e) => e.judgeId));
|
|
68
|
+
for (const required of gate.requiredJudges) {
|
|
69
|
+
checks.push({
|
|
70
|
+
name: `required-judge-${required}`,
|
|
71
|
+
passed: participatingJudges.has(required),
|
|
72
|
+
message: `Judge "${required}": ${participatingJudges.has(required) ? "participated" : "MISSING"}`,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Check blocker rules
|
|
77
|
+
if (gate.blockerRules) {
|
|
78
|
+
const violatedRules = new Set(verdict.findings.map((f) => f.ruleId));
|
|
79
|
+
for (const rule of gate.blockerRules) {
|
|
80
|
+
const violated = violatedRules.has(rule);
|
|
81
|
+
checks.push({
|
|
82
|
+
name: `blocker-${rule}`,
|
|
83
|
+
passed: !violated,
|
|
84
|
+
message: `Blocker rule ${rule}: ${violated ? "VIOLATED" : "clear"}`,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// Check max FP rate
|
|
89
|
+
if (gate.maxFpRate !== undefined && fpRateByRule) {
|
|
90
|
+
const avgFpRate = fpRateByRule.size > 0 ? Array.from(fpRateByRule.values()).reduce((sum, r) => sum + r, 0) / fpRateByRule.size : 0;
|
|
91
|
+
checks.push({
|
|
92
|
+
name: "max-fp-rate",
|
|
93
|
+
passed: avgFpRate <= gate.maxFpRate,
|
|
94
|
+
message: `FP rate: ${(avgFpRate * 100).toFixed(1)}%/${(gate.maxFpRate * 100).toFixed(1)}% allowed`,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
// Check min fix rate
|
|
98
|
+
if (gate.minFixRate !== undefined) {
|
|
99
|
+
const fixable = verdict.findings.filter((f) => f.patch).length;
|
|
100
|
+
const total = verdict.findings.length;
|
|
101
|
+
const fixRate = total > 0 ? fixable / total : 1;
|
|
102
|
+
checks.push({
|
|
103
|
+
name: "min-fix-rate",
|
|
104
|
+
passed: fixRate >= gate.minFixRate,
|
|
105
|
+
message: `Fix rate: ${(fixRate * 100).toFixed(1)}%/${(gate.minFixRate * 100).toFixed(1)}% required`,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
// Check min confidence
|
|
109
|
+
if (gate.minConfidence !== undefined) {
|
|
110
|
+
const confidences = verdict.findings.filter((f) => f.confidence !== undefined).map((f) => f.confidence);
|
|
111
|
+
const avgConf = confidences.length > 0 ? confidences.reduce((s, c) => s + c, 0) / confidences.length : 1;
|
|
112
|
+
checks.push({
|
|
113
|
+
name: "min-confidence",
|
|
114
|
+
passed: avgConf >= gate.minConfidence,
|
|
115
|
+
message: `Avg confidence: ${(avgConf * 100).toFixed(1)}%/${(gate.minConfidence * 100).toFixed(1)}% required`,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
const passed = checks.every((c) => c.passed);
|
|
119
|
+
const failed = checks.filter((c) => !c.passed);
|
|
120
|
+
return {
|
|
121
|
+
passed,
|
|
122
|
+
gateName,
|
|
123
|
+
checks,
|
|
124
|
+
summary: passed
|
|
125
|
+
? `Quality gate "${gateName}" PASSED — all ${checks.length} check(s) passed`
|
|
126
|
+
: `Quality gate "${gateName}" FAILED — ${failed.length}/${checks.length} check(s) failed`,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
// ─── Config Parsing ─────────────────────────────────────────────────────────
|
|
130
|
+
export function parseQualityGateConfig(obj) {
|
|
131
|
+
if (!obj.qualityGates)
|
|
132
|
+
return undefined;
|
|
133
|
+
const raw = obj.qualityGates;
|
|
134
|
+
if (typeof raw !== "object" || raw === null || Array.isArray(raw))
|
|
135
|
+
return undefined;
|
|
136
|
+
const gates = {};
|
|
137
|
+
for (const [name, def] of Object.entries(raw)) {
|
|
138
|
+
if (typeof def !== "object" || def === null)
|
|
139
|
+
continue;
|
|
140
|
+
const d = def;
|
|
141
|
+
const gate = {};
|
|
142
|
+
if (d.maxFindings && typeof d.maxFindings === "object") {
|
|
143
|
+
gate.maxFindings = d.maxFindings;
|
|
144
|
+
}
|
|
145
|
+
if (typeof d.minScore === "number")
|
|
146
|
+
gate.minScore = d.minScore;
|
|
147
|
+
if (Array.isArray(d.requiredJudges))
|
|
148
|
+
gate.requiredJudges = d.requiredJudges;
|
|
149
|
+
if (typeof d.maxFpRate === "number")
|
|
150
|
+
gate.maxFpRate = d.maxFpRate;
|
|
151
|
+
if (Array.isArray(d.blockerRules))
|
|
152
|
+
gate.blockerRules = d.blockerRules;
|
|
153
|
+
if (typeof d.minFixRate === "number")
|
|
154
|
+
gate.minFixRate = d.minFixRate;
|
|
155
|
+
if (typeof d.minConfidence === "number")
|
|
156
|
+
gate.minConfidence = d.minConfidence;
|
|
157
|
+
gates[name] = gate;
|
|
158
|
+
}
|
|
159
|
+
return Object.keys(gates).length > 0 ? gates : undefined;
|
|
160
|
+
}
|
|
161
|
+
// ─── CLI Runner ─────────────────────────────────────────────────────────────
|
|
162
|
+
const EXT_TO_LANG = {
|
|
163
|
+
".ts": "typescript",
|
|
164
|
+
".tsx": "typescript",
|
|
165
|
+
".js": "javascript",
|
|
166
|
+
".jsx": "javascript",
|
|
167
|
+
".py": "python",
|
|
168
|
+
".rs": "rust",
|
|
169
|
+
".go": "go",
|
|
170
|
+
".java": "java",
|
|
171
|
+
".cs": "csharp",
|
|
172
|
+
".cpp": "cpp",
|
|
173
|
+
};
|
|
174
|
+
export function runQualityGate(argv) {
|
|
175
|
+
if (argv.includes("--help") || argv.includes("-h")) {
|
|
176
|
+
console.log(`
|
|
177
|
+
judges quality-gate — Evaluate configurable quality gates
|
|
178
|
+
|
|
179
|
+
Usage:
|
|
180
|
+
judges quality-gate --file <path> Evaluate default gate
|
|
181
|
+
judges quality-gate --file <path> --gate <name> Use a named gate definition
|
|
182
|
+
judges quality-gate --json JSON output
|
|
183
|
+
|
|
184
|
+
Configuration (.judgesrc):
|
|
185
|
+
"qualityGates": {
|
|
186
|
+
"default": {
|
|
187
|
+
"maxFindings": { "critical": 0, "high": 2 },
|
|
188
|
+
"minScore": 70,
|
|
189
|
+
"requiredJudges": ["cybersecurity"],
|
|
190
|
+
"blockerRules": ["SEC-001", "AUTH-001"]
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
Options:
|
|
195
|
+
--file, -f <path> File to evaluate
|
|
196
|
+
--gate <name> Gate name (default: "default")
|
|
197
|
+
--json JSON output
|
|
198
|
+
--help, -h Show this help
|
|
199
|
+
`);
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
const file = argv.find((_a, i) => argv[i - 1] === "--file" || argv[i - 1] === "-f");
|
|
203
|
+
const gateName = argv.find((_a, i) => argv[i - 1] === "--gate") || "default";
|
|
204
|
+
const jsonFormat = argv.includes("--json");
|
|
205
|
+
if (!file) {
|
|
206
|
+
console.error("Error: --file is required.");
|
|
207
|
+
process.exit(1);
|
|
208
|
+
}
|
|
209
|
+
if (!existsSync(file)) {
|
|
210
|
+
console.error(`Error: File not found: ${file}`);
|
|
211
|
+
process.exit(1);
|
|
212
|
+
}
|
|
213
|
+
// Load quality gate config from .judgesrc
|
|
214
|
+
let gates;
|
|
215
|
+
for (const name of [".judgesrc", ".judgesrc.json"]) {
|
|
216
|
+
if (existsSync(name)) {
|
|
217
|
+
try {
|
|
218
|
+
const raw = JSON.parse(readFileSync(name, "utf-8"));
|
|
219
|
+
gates = parseQualityGateConfig(raw);
|
|
220
|
+
}
|
|
221
|
+
catch {
|
|
222
|
+
// Skip invalid config
|
|
223
|
+
}
|
|
224
|
+
break;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
// Use a sensible default gate if none configured
|
|
228
|
+
const gate = gates?.[gateName] ?? {
|
|
229
|
+
maxFindings: { critical: 0, high: 3 },
|
|
230
|
+
minScore: 60,
|
|
231
|
+
};
|
|
232
|
+
// Evaluate
|
|
233
|
+
const code = readFileSync(file, "utf-8");
|
|
234
|
+
const lang = EXT_TO_LANG[extname(file)] || "typescript";
|
|
235
|
+
const verdict = evaluateWithTribunal(code, lang);
|
|
236
|
+
// Load FP rates if available
|
|
237
|
+
let fpRateByRule;
|
|
238
|
+
try {
|
|
239
|
+
const { loadFeedbackStore, getFpRateByRule: getFpRate } = require("./feedback.js");
|
|
240
|
+
const store = loadFeedbackStore();
|
|
241
|
+
const rates = getFpRate(store);
|
|
242
|
+
fpRateByRule = rates instanceof Map ? rates : new Map(Object.entries(rates));
|
|
243
|
+
}
|
|
244
|
+
catch {
|
|
245
|
+
// Feedback data not available
|
|
246
|
+
}
|
|
247
|
+
const result = evaluateQualityGate(gate, gateName, verdict, fpRateByRule);
|
|
248
|
+
if (jsonFormat) {
|
|
249
|
+
console.log(JSON.stringify(result, null, 2));
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
const icon = result.passed ? "✅" : "❌";
|
|
253
|
+
console.log(`\n ${icon} ${result.summary}\n`);
|
|
254
|
+
for (const check of result.checks) {
|
|
255
|
+
const checkIcon = check.passed ? " ✓" : " ✗";
|
|
256
|
+
console.log(` ${checkIcon} ${check.message}`);
|
|
257
|
+
}
|
|
258
|
+
console.log("");
|
|
259
|
+
}
|
|
260
|
+
if (!result.passed) {
|
|
261
|
+
process.exit(1);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
//# sourceMappingURL=quality-gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quality-gate.js","sourceRoot":"","sources":["../../src/commands/quality-gate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Framework-aware detection module.
|
|
3
|
+
*
|
|
4
|
+
* Detects which framework(s) are in use and provides framework-specific
|
|
5
|
+
* pattern adjustments to reduce false positives. For example:
|
|
6
|
+
* - React: hooks ordering rules, JSX injection awareness
|
|
7
|
+
* - Express/Fastify: middleware chain analysis
|
|
8
|
+
* - Django: ORM injection patterns
|
|
9
|
+
* - Spring: security annotation awareness
|
|
10
|
+
* - Next.js: server-component vs client-component context
|
|
11
|
+
*
|
|
12
|
+
* This module is used by evaluators to adjust their confidence scores
|
|
13
|
+
* and disable irrelevant rules based on framework context.
|
|
14
|
+
*/
|
|
15
|
+
import type { Finding, Severity } from "../types.js";
|
|
16
|
+
export type FrameworkId = "react" | "nextjs" | "angular" | "vue" | "express" | "fastify" | "nestjs" | "django" | "flask" | "fastapi" | "spring" | "rails" | "actix" | "gin" | "echo";
|
|
17
|
+
export interface FrameworkProfile {
|
|
18
|
+
/** Framework identifier */
|
|
19
|
+
id: FrameworkId;
|
|
20
|
+
/** Human-readable name */
|
|
21
|
+
name: string;
|
|
22
|
+
/** Languages this framework applies to */
|
|
23
|
+
languages: string[];
|
|
24
|
+
/** Import/require patterns that identify this framework */
|
|
25
|
+
detectPatterns: RegExp[];
|
|
26
|
+
/** Rule IDs that are typically false positives in this framework */
|
|
27
|
+
fpProne: string[];
|
|
28
|
+
/** Rules whose severity should be adjusted in this framework context */
|
|
29
|
+
severityAdjustments: Array<{
|
|
30
|
+
rulePattern: string;
|
|
31
|
+
adjustment: "downgrade" | "upgrade";
|
|
32
|
+
reason: string;
|
|
33
|
+
}>;
|
|
34
|
+
/** Additional patterns to check for framework-specific issues */
|
|
35
|
+
frameworkRules: Array<{
|
|
36
|
+
id: string;
|
|
37
|
+
pattern: RegExp;
|
|
38
|
+
severity: Severity;
|
|
39
|
+
title: string;
|
|
40
|
+
description: string;
|
|
41
|
+
}>;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Detect which frameworks are present in the given code.
|
|
45
|
+
*/
|
|
46
|
+
export declare function detectFrameworks(code: string, language: string): FrameworkProfile[];
|
|
47
|
+
/**
|
|
48
|
+
* Adjust findings based on detected framework context.
|
|
49
|
+
* - Downgrades severity for FP-prone rules in the framework
|
|
50
|
+
* - Applies framework-specific severity adjustments
|
|
51
|
+
* - Tags adjusted findings with provenance
|
|
52
|
+
*/
|
|
53
|
+
export declare function adjustFindingsForFramework(findings: Finding[], frameworks: FrameworkProfile[]): Finding[];
|
|
54
|
+
/**
|
|
55
|
+
* Run framework-specific rules against code.
|
|
56
|
+
* Returns additional findings from framework-aware patterns.
|
|
57
|
+
*/
|
|
58
|
+
export declare function evaluateFrameworkRules(code: string, language: string): Finding[];
|
|
59
|
+
//# sourceMappingURL=framework-rules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"framework-rules.d.ts","sourceRoot":"","sources":["../../src/evaluators/framework-rules.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAIrD,MAAM,MAAM,WAAW,GACnB,OAAO,GACP,QAAQ,GACR,SAAS,GACT,KAAK,GACL,SAAS,GACT,SAAS,GACT,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,SAAS,GACT,QAAQ,GACR,OAAO,GACP,OAAO,GACP,KAAK,GACL,MAAM,CAAC;AAEX,MAAM,WAAW,gBAAgB;IAC/B,2BAA2B;IAC3B,EAAE,EAAE,WAAW,CAAC;IAChB,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,2DAA2D;IAC3D,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,oEAAoE;IACpE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,wEAAwE;IACxE,mBAAmB,EAAE,KAAK,CAAC;QACzB,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,WAAW,GAAG,SAAS,CAAC;QACpC,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;IACH,iEAAiE;IACjE,cAAc,EAAE,KAAK,CAAC;QACpB,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,QAAQ,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;CACJ;AA0MD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAKnF;AAOD;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,gBAAgB,EAAE,GAAG,OAAO,EAAE,CAqCzG;AAID;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,EAAE,CAwBhF"}
|