@kevinrabun/judges 3.44.0 → 3.46.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 +24 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +112 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/audit-bundle.d.ts +29 -0
- package/dist/commands/audit-bundle.d.ts.map +1 -0
- package/dist/commands/audit-bundle.js +235 -0
- package/dist/commands/audit-bundle.js.map +1 -0
- package/dist/commands/compare-runs.d.ts +38 -0
- package/dist/commands/compare-runs.d.ts.map +1 -0
- package/dist/commands/compare-runs.js +229 -0
- package/dist/commands/compare-runs.js.map +1 -0
- package/dist/commands/config-drift.d.ts +25 -0
- package/dist/commands/config-drift.d.ts.map +1 -0
- package/dist/commands/config-drift.js +214 -0
- package/dist/commands/config-drift.js.map +1 -0
- package/dist/commands/correlate.d.ts +28 -0
- package/dist/commands/correlate.d.ts.map +1 -0
- package/dist/commands/correlate.js +242 -0
- package/dist/commands/correlate.js.map +1 -0
- package/dist/commands/dev-score.d.ts +37 -0
- package/dist/commands/dev-score.d.ts.map +1 -0
- package/dist/commands/dev-score.js +204 -0
- package/dist/commands/dev-score.js.map +1 -0
- package/dist/commands/digest.d.ts +20 -0
- package/dist/commands/digest.d.ts.map +1 -0
- package/dist/commands/digest.js +222 -0
- package/dist/commands/digest.js.map +1 -0
- package/dist/commands/explain-finding.d.ts +8 -0
- package/dist/commands/explain-finding.d.ts.map +1 -0
- package/dist/commands/explain-finding.js +279 -0
- package/dist/commands/explain-finding.js.map +1 -0
- package/dist/commands/generate.d.ts +8 -0
- package/dist/commands/generate.d.ts.map +1 -0
- package/dist/commands/generate.js +404 -0
- package/dist/commands/generate.js.map +1 -0
- package/dist/commands/judge-reputation.d.ts +29 -0
- package/dist/commands/judge-reputation.d.ts.map +1 -0
- package/dist/commands/judge-reputation.js +199 -0
- package/dist/commands/judge-reputation.js.map +1 -0
- package/dist/commands/learn.d.ts +27 -0
- package/dist/commands/learn.d.ts.map +1 -0
- package/dist/commands/learn.js +289 -0
- package/dist/commands/learn.js.map +1 -0
- package/dist/commands/model-risk.d.ts +28 -0
- package/dist/commands/model-risk.d.ts.map +1 -0
- package/dist/commands/model-risk.js +221 -0
- package/dist/commands/model-risk.js.map +1 -0
- package/dist/commands/query.d.ts +20 -0
- package/dist/commands/query.d.ts.map +1 -0
- package/dist/commands/query.js +230 -0
- package/dist/commands/query.js.map +1 -0
- package/dist/commands/reg-watch.d.ts +21 -0
- package/dist/commands/reg-watch.d.ts.map +1 -0
- package/dist/commands/reg-watch.js +220 -0
- package/dist/commands/reg-watch.js.map +1 -0
- package/dist/commands/retro.d.ts +23 -0
- package/dist/commands/retro.d.ts.map +1 -0
- package/dist/commands/retro.js +217 -0
- package/dist/commands/retro.js.map +1 -0
- package/dist/commands/rule-share.d.ts +35 -0
- package/dist/commands/rule-share.d.ts.map +1 -0
- package/dist/commands/rule-share.js +203 -0
- package/dist/commands/rule-share.js.map +1 -0
- package/dist/commands/vote.d.ts +32 -0
- package/dist/commands/vote.d.ts.map +1 -0
- package/dist/commands/vote.js +201 -0
- package/dist/commands/vote.js.map +1 -0
- package/package.json +1 -1
- package/server.json +2 -2
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Detailed finding explanation — provide rich context, references,
|
|
3
|
+
* and remediation guidance for individual findings.
|
|
4
|
+
*/
|
|
5
|
+
import { readFileSync, existsSync } from "fs";
|
|
6
|
+
// ─── Knowledge base ─────────────────────────────────────────────────────────
|
|
7
|
+
const EXPLANATIONS = {
|
|
8
|
+
SEC: {
|
|
9
|
+
category: "Security",
|
|
10
|
+
whyItMatters: "Security vulnerabilities can lead to data breaches, unauthorized access, and compliance violations.",
|
|
11
|
+
commonCauses: [
|
|
12
|
+
"Insufficient input validation",
|
|
13
|
+
"Missing authentication checks",
|
|
14
|
+
"Hardcoded credentials",
|
|
15
|
+
"Insecure deserialization",
|
|
16
|
+
],
|
|
17
|
+
remediationSteps: [
|
|
18
|
+
"Validate all user input",
|
|
19
|
+
"Use parameterized queries",
|
|
20
|
+
"Implement proper authentication",
|
|
21
|
+
"Follow principle of least privilege",
|
|
22
|
+
],
|
|
23
|
+
references: ["OWASP Top 10: https://owasp.org/www-project-top-ten/", "CWE: https://cwe.mitre.org/"],
|
|
24
|
+
},
|
|
25
|
+
AUTH: {
|
|
26
|
+
category: "Authentication",
|
|
27
|
+
whyItMatters: "Authentication flaws allow attackers to impersonate legitimate users or bypass access controls.",
|
|
28
|
+
commonCauses: ["Weak password policies", "Missing MFA", "Session fixation", "Token leakage"],
|
|
29
|
+
remediationSteps: [
|
|
30
|
+
"Implement multi-factor authentication",
|
|
31
|
+
"Use secure session management",
|
|
32
|
+
"Hash passwords with bcrypt/argon2",
|
|
33
|
+
"Set proper token expiry",
|
|
34
|
+
],
|
|
35
|
+
references: [
|
|
36
|
+
"OWASP Authentication: https://cheatsheetseries.owasp.org/cheatsheets/Authentication_Cheat_Sheet.html",
|
|
37
|
+
],
|
|
38
|
+
},
|
|
39
|
+
CRYPTO: {
|
|
40
|
+
category: "Cryptography",
|
|
41
|
+
whyItMatters: "Weak cryptography exposes sensitive data and undermines data protection guarantees.",
|
|
42
|
+
commonCauses: [
|
|
43
|
+
"Using deprecated algorithms (MD5, SHA1)",
|
|
44
|
+
"Hardcoded keys",
|
|
45
|
+
"Insufficient key length",
|
|
46
|
+
"Missing encryption at rest",
|
|
47
|
+
],
|
|
48
|
+
remediationSteps: [
|
|
49
|
+
"Use AES-256 for symmetric encryption",
|
|
50
|
+
"Use RSA-2048+ or ECDSA for asymmetric",
|
|
51
|
+
"Rotate keys regularly",
|
|
52
|
+
"Use proper random number generators",
|
|
53
|
+
],
|
|
54
|
+
references: ["NIST Crypto Guidelines: https://csrc.nist.gov/"],
|
|
55
|
+
},
|
|
56
|
+
INJECT: {
|
|
57
|
+
category: "Injection",
|
|
58
|
+
whyItMatters: "Injection attacks can execute arbitrary code, access/modify data, or take control of systems.",
|
|
59
|
+
commonCauses: [
|
|
60
|
+
"String concatenation in queries",
|
|
61
|
+
"Unsanitized template rendering",
|
|
62
|
+
"eval() usage",
|
|
63
|
+
"Command injection via user input",
|
|
64
|
+
],
|
|
65
|
+
remediationSteps: [
|
|
66
|
+
"Use parameterized queries/prepared statements",
|
|
67
|
+
"Sanitize HTML output",
|
|
68
|
+
"Avoid eval/exec",
|
|
69
|
+
"Use allowlists for command arguments",
|
|
70
|
+
],
|
|
71
|
+
references: ["CWE-89 SQL Injection: https://cwe.mitre.org/data/definitions/89.html"],
|
|
72
|
+
},
|
|
73
|
+
PERF: {
|
|
74
|
+
category: "Performance",
|
|
75
|
+
whyItMatters: "Performance issues degrade user experience, increase costs, and can lead to denial-of-service.",
|
|
76
|
+
commonCauses: ["N+1 queries", "Missing indexes", "Unbounded loops", "Memory leaks", "Synchronous blocking"],
|
|
77
|
+
remediationSteps: [
|
|
78
|
+
"Profile and benchmark",
|
|
79
|
+
"Add database indexes",
|
|
80
|
+
"Use pagination",
|
|
81
|
+
"Implement caching",
|
|
82
|
+
"Use async patterns",
|
|
83
|
+
],
|
|
84
|
+
references: [],
|
|
85
|
+
},
|
|
86
|
+
ERR: {
|
|
87
|
+
category: "Error Handling",
|
|
88
|
+
whyItMatters: "Poor error handling causes crashes, data loss, and can leak sensitive information.",
|
|
89
|
+
commonCauses: [
|
|
90
|
+
"Empty catch blocks",
|
|
91
|
+
"Missing error boundaries",
|
|
92
|
+
"Information leakage in error messages",
|
|
93
|
+
"Unchecked return values",
|
|
94
|
+
],
|
|
95
|
+
remediationSteps: [
|
|
96
|
+
"Log errors with context",
|
|
97
|
+
"Return safe error messages to users",
|
|
98
|
+
"Implement error boundaries",
|
|
99
|
+
"Handle all error cases",
|
|
100
|
+
],
|
|
101
|
+
references: [],
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
// ─── Core ───────────────────────────────────────────────────────────────────
|
|
105
|
+
function getRulePrefix(ruleId) {
|
|
106
|
+
const match = ruleId.match(/^([A-Z]+)/);
|
|
107
|
+
return match ? match[1] : "";
|
|
108
|
+
}
|
|
109
|
+
export function explainFinding(finding) {
|
|
110
|
+
const prefix = getRulePrefix(finding.ruleId);
|
|
111
|
+
const info = EXPLANATIONS[prefix];
|
|
112
|
+
const lines = [];
|
|
113
|
+
lines.push(`# Finding: ${finding.ruleId}`);
|
|
114
|
+
lines.push(`**${finding.title}**\n`);
|
|
115
|
+
lines.push(`## Description`);
|
|
116
|
+
lines.push(finding.description);
|
|
117
|
+
lines.push("");
|
|
118
|
+
lines.push(`## Severity: ${finding.severity.toUpperCase()}`);
|
|
119
|
+
if (finding.confidence !== undefined) {
|
|
120
|
+
lines.push(`## Confidence: ${(finding.confidence * 100).toFixed(0)}%`);
|
|
121
|
+
}
|
|
122
|
+
lines.push("");
|
|
123
|
+
lines.push(`## Recommendation`);
|
|
124
|
+
lines.push(finding.recommendation);
|
|
125
|
+
lines.push("");
|
|
126
|
+
if (finding.patch) {
|
|
127
|
+
lines.push(`## Suggested Patch`);
|
|
128
|
+
lines.push("```");
|
|
129
|
+
lines.push(String(finding.patch));
|
|
130
|
+
lines.push("```");
|
|
131
|
+
lines.push("");
|
|
132
|
+
}
|
|
133
|
+
if (finding.reference) {
|
|
134
|
+
lines.push(`## Reference`);
|
|
135
|
+
lines.push(finding.reference);
|
|
136
|
+
lines.push("");
|
|
137
|
+
}
|
|
138
|
+
if (info) {
|
|
139
|
+
lines.push(`## Category: ${info.category}`);
|
|
140
|
+
lines.push("");
|
|
141
|
+
lines.push(`### Why It Matters`);
|
|
142
|
+
lines.push(info.whyItMatters);
|
|
143
|
+
lines.push("");
|
|
144
|
+
lines.push(`### Common Causes`);
|
|
145
|
+
for (const cause of info.commonCauses) {
|
|
146
|
+
lines.push(`- ${cause}`);
|
|
147
|
+
}
|
|
148
|
+
lines.push("");
|
|
149
|
+
lines.push(`### Remediation Steps`);
|
|
150
|
+
for (const step of info.remediationSteps) {
|
|
151
|
+
lines.push(`1. ${step}`);
|
|
152
|
+
}
|
|
153
|
+
lines.push("");
|
|
154
|
+
if (info.references.length > 0) {
|
|
155
|
+
lines.push(`### Further Reading`);
|
|
156
|
+
for (const ref of info.references) {
|
|
157
|
+
lines.push(`- ${ref}`);
|
|
158
|
+
}
|
|
159
|
+
lines.push("");
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
if (finding.lineNumbers && finding.lineNumbers.length > 0) {
|
|
163
|
+
lines.push(`## Location`);
|
|
164
|
+
lines.push(`Lines: ${finding.lineNumbers.join(", ")}`);
|
|
165
|
+
lines.push("");
|
|
166
|
+
}
|
|
167
|
+
return lines.join("\n");
|
|
168
|
+
}
|
|
169
|
+
// ─── CLI ────────────────────────────────────────────────────────────────────
|
|
170
|
+
export function runExplainFinding(argv) {
|
|
171
|
+
if (argv.includes("--help") || argv.includes("-h")) {
|
|
172
|
+
console.log(`
|
|
173
|
+
judges explain-finding — Detailed finding explanation with context
|
|
174
|
+
|
|
175
|
+
Usage:
|
|
176
|
+
judges explain-finding --rule SEC001 --title "SQL Injection" --severity critical
|
|
177
|
+
judges explain-finding --from-results --index 0
|
|
178
|
+
judges explain-finding --category SEC
|
|
179
|
+
|
|
180
|
+
Options:
|
|
181
|
+
--rule <id> Rule ID
|
|
182
|
+
--title <text> Finding title
|
|
183
|
+
--severity <level> Finding severity
|
|
184
|
+
--description <text> Finding description
|
|
185
|
+
--from-results Load finding from .judges-results.json
|
|
186
|
+
--index <n> Finding index (0-based)
|
|
187
|
+
--category <prefix> Explain a category (SEC, AUTH, CRYPTO, etc.)
|
|
188
|
+
--output <file> Write explanation to file
|
|
189
|
+
--format json JSON output
|
|
190
|
+
--help, -h Show this help
|
|
191
|
+
`);
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
|
|
195
|
+
// Explain category
|
|
196
|
+
const category = argv.find((_a, i) => argv[i - 1] === "--category");
|
|
197
|
+
if (category) {
|
|
198
|
+
const info = EXPLANATIONS[category.toUpperCase()];
|
|
199
|
+
if (!info) {
|
|
200
|
+
console.error(` ❌ Unknown category: ${category}. Known: ${Object.keys(EXPLANATIONS).join(", ")}`);
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
if (format === "json") {
|
|
204
|
+
console.log(JSON.stringify(info, null, 2));
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
console.log(`\n Category: ${info.category}`);
|
|
208
|
+
console.log(` ──────────────────────`);
|
|
209
|
+
console.log(` ${info.whyItMatters}\n`);
|
|
210
|
+
console.log(` Common causes:`);
|
|
211
|
+
for (const c of info.commonCauses)
|
|
212
|
+
console.log(` • ${c}`);
|
|
213
|
+
console.log(`\n Remediation:`);
|
|
214
|
+
for (const s of info.remediationSteps)
|
|
215
|
+
console.log(` 1. ${s}`);
|
|
216
|
+
if (info.references.length > 0) {
|
|
217
|
+
console.log(`\n References:`);
|
|
218
|
+
for (const r of info.references)
|
|
219
|
+
console.log(` ${r}`);
|
|
220
|
+
}
|
|
221
|
+
console.log("");
|
|
222
|
+
}
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
// From results file
|
|
226
|
+
if (argv.includes("--from-results")) {
|
|
227
|
+
const resultsFile = ".judges-results.json";
|
|
228
|
+
if (!existsSync(resultsFile)) {
|
|
229
|
+
console.error(" ❌ No .judges-results.json found.");
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
const data = JSON.parse(readFileSync(resultsFile, "utf-8"));
|
|
233
|
+
const findings = Array.isArray(data) ? data : data.findings || [];
|
|
234
|
+
const idxStr = argv.find((_a, i) => argv[i - 1] === "--index");
|
|
235
|
+
const idx = idxStr ? parseInt(idxStr, 10) : 0;
|
|
236
|
+
if (idx < 0 || idx >= findings.length) {
|
|
237
|
+
console.error(` ❌ Index ${idx} out of range (0–${findings.length - 1})`);
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
240
|
+
const explanation = explainFinding(findings[idx]);
|
|
241
|
+
const outputFile = argv.find((_a, i) => argv[i - 1] === "--output");
|
|
242
|
+
if (outputFile) {
|
|
243
|
+
const { writeFileSync: wfs } = require("fs");
|
|
244
|
+
wfs(outputFile, explanation);
|
|
245
|
+
console.log(` ✅ Explanation written to ${outputFile}`);
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
console.log(explanation);
|
|
249
|
+
}
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
// Manual finding
|
|
253
|
+
const ruleId = argv.find((_a, i) => argv[i - 1] === "--rule");
|
|
254
|
+
const title = argv.find((_a, i) => argv[i - 1] === "--title");
|
|
255
|
+
const severity = argv.find((_a, i) => argv[i - 1] === "--severity") || "medium";
|
|
256
|
+
const description = argv.find((_a, i) => argv[i - 1] === "--description") || "";
|
|
257
|
+
if (!ruleId) {
|
|
258
|
+
console.error(" ❌ Provide --rule or --from-results. Use --help for usage.");
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
const finding = {
|
|
262
|
+
ruleId,
|
|
263
|
+
title: title || ruleId,
|
|
264
|
+
severity: severity,
|
|
265
|
+
description: description || `Finding for rule ${ruleId}`,
|
|
266
|
+
recommendation: `Review and remediate ${ruleId} findings`,
|
|
267
|
+
};
|
|
268
|
+
const explanation = explainFinding(finding);
|
|
269
|
+
const outputFile = argv.find((_a, i) => argv[i - 1] === "--output");
|
|
270
|
+
if (outputFile) {
|
|
271
|
+
const { writeFileSync: wfs } = require("fs");
|
|
272
|
+
wfs(outputFile, explanation);
|
|
273
|
+
console.log(` ✅ Explanation written to ${outputFile}`);
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
console.log(explanation);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
//# sourceMappingURL=explain-finding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"explain-finding.js","sourceRoot":"","sources":["../../src/commands/explain-finding.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Secure code template generator — pre-hardened templates
|
|
3
|
+
* for common patterns with Judges findings pre-mitigated.
|
|
4
|
+
*
|
|
5
|
+
* All output is generated locally — no data transmitted.
|
|
6
|
+
*/
|
|
7
|
+
export declare function runGenerate(argv: string[]): void;
|
|
8
|
+
//# sourceMappingURL=generate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAwUH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAgGhD"}
|