@kevinrabun/judges 3.45.0 → 3.47.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/adoption-report.d.ts +8 -0
- package/dist/commands/adoption-report.d.ts.map +1 -0
- package/dist/commands/adoption-report.js +219 -0
- package/dist/commands/adoption-report.js.map +1 -0
- package/dist/commands/ai-model-trust.d.ts +17 -0
- package/dist/commands/ai-model-trust.d.ts.map +1 -0
- package/dist/commands/ai-model-trust.js +235 -0
- package/dist/commands/ai-model-trust.js.map +1 -0
- package/dist/commands/ai-prompt-audit.d.ts +23 -0
- package/dist/commands/ai-prompt-audit.d.ts.map +1 -0
- package/dist/commands/ai-prompt-audit.js +255 -0
- package/dist/commands/ai-prompt-audit.js.map +1 -0
- 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/code-owner-suggest.d.ts +17 -0
- package/dist/commands/code-owner-suggest.d.ts.map +1 -0
- package/dist/commands/code-owner-suggest.js +215 -0
- package/dist/commands/code-owner-suggest.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/cost-forecast.d.ts +19 -0
- package/dist/commands/cost-forecast.d.ts.map +1 -0
- package/dist/commands/cost-forecast.js +194 -0
- package/dist/commands/cost-forecast.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/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/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/pr-quality-gate.d.ts +29 -0
- package/dist/commands/pr-quality-gate.d.ts.map +1 -0
- package/dist/commands/pr-quality-gate.js +208 -0
- package/dist/commands/pr-quality-gate.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/team-leaderboard.d.ts +25 -0
- package/dist/commands/team-leaderboard.d.ts.map +1 -0
- package/dist/commands/team-leaderboard.js +228 -0
- package/dist/commands/team-leaderboard.js.map +1 -0
- package/dist/commands/team-rules-sync.d.ts +8 -0
- package/dist/commands/team-rules-sync.d.ts.map +1 -0
- package/dist/commands/team-rules-sync.js +251 -0
- package/dist/commands/team-rules-sync.js.map +1 -0
- package/package.json +1 -1
- package/server.json +2 -2
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PR quality gate — automated pass/fail gate for PRs with
|
|
3
|
+
* configurable thresholds for auto-approval.
|
|
4
|
+
*
|
|
5
|
+
* All decisions are local — integrates via output format.
|
|
6
|
+
*/
|
|
7
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
|
|
8
|
+
import { join } from "path";
|
|
9
|
+
const GATE_DIR = ".judges-quality-gate";
|
|
10
|
+
const GATE_FILE = join(GATE_DIR, "gate-history.json");
|
|
11
|
+
const POLICY_FILE = join(GATE_DIR, "policy.json");
|
|
12
|
+
const DEFAULT_POLICY = {
|
|
13
|
+
maxCritical: 0,
|
|
14
|
+
maxHigh: 2,
|
|
15
|
+
maxTotal: 20,
|
|
16
|
+
requireTestCoverage: false,
|
|
17
|
+
autoApproveBelow: 80,
|
|
18
|
+
};
|
|
19
|
+
// ─── Core ───────────────────────────────────────────────────────────────────
|
|
20
|
+
function ensureDir() {
|
|
21
|
+
if (!existsSync(GATE_DIR))
|
|
22
|
+
mkdirSync(GATE_DIR, { recursive: true });
|
|
23
|
+
}
|
|
24
|
+
function loadPolicy() {
|
|
25
|
+
if (!existsSync(POLICY_FILE))
|
|
26
|
+
return { ...DEFAULT_POLICY };
|
|
27
|
+
try {
|
|
28
|
+
return { ...DEFAULT_POLICY, ...JSON.parse(readFileSync(POLICY_FILE, "utf-8")) };
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return { ...DEFAULT_POLICY };
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
function savePolicy(policy) {
|
|
35
|
+
ensureDir();
|
|
36
|
+
writeFileSync(POLICY_FILE, JSON.stringify(policy, null, 2));
|
|
37
|
+
}
|
|
38
|
+
function loadHistory() {
|
|
39
|
+
if (!existsSync(GATE_FILE))
|
|
40
|
+
return { results: [], updatedAt: new Date().toISOString() };
|
|
41
|
+
try {
|
|
42
|
+
return JSON.parse(readFileSync(GATE_FILE, "utf-8"));
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return { results: [], updatedAt: new Date().toISOString() };
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
function saveHistory(history) {
|
|
49
|
+
ensureDir();
|
|
50
|
+
history.updatedAt = new Date().toISOString();
|
|
51
|
+
writeFileSync(GATE_FILE, JSON.stringify(history, null, 2));
|
|
52
|
+
}
|
|
53
|
+
export function evaluateGate(critical, high, medium, low, score) {
|
|
54
|
+
const policy = loadPolicy();
|
|
55
|
+
const total = critical + high + medium + low;
|
|
56
|
+
let passed = true;
|
|
57
|
+
let reason = "All checks passed";
|
|
58
|
+
if (critical > policy.maxCritical) {
|
|
59
|
+
passed = false;
|
|
60
|
+
reason = `Critical findings (${critical}) exceed limit (${policy.maxCritical})`;
|
|
61
|
+
}
|
|
62
|
+
else if (high > policy.maxHigh) {
|
|
63
|
+
passed = false;
|
|
64
|
+
reason = `High findings (${high}) exceed limit (${policy.maxHigh})`;
|
|
65
|
+
}
|
|
66
|
+
else if (total > policy.maxTotal) {
|
|
67
|
+
passed = false;
|
|
68
|
+
reason = `Total findings (${total}) exceed limit (${policy.maxTotal})`;
|
|
69
|
+
}
|
|
70
|
+
else if (score < policy.autoApproveBelow) {
|
|
71
|
+
passed = false;
|
|
72
|
+
reason = `Score (${score}) below threshold (${policy.autoApproveBelow})`;
|
|
73
|
+
}
|
|
74
|
+
const result = {
|
|
75
|
+
passed,
|
|
76
|
+
reason,
|
|
77
|
+
critical,
|
|
78
|
+
high,
|
|
79
|
+
medium,
|
|
80
|
+
low,
|
|
81
|
+
total,
|
|
82
|
+
score,
|
|
83
|
+
policy,
|
|
84
|
+
timestamp: new Date().toISOString(),
|
|
85
|
+
};
|
|
86
|
+
// Record
|
|
87
|
+
const history = loadHistory();
|
|
88
|
+
history.results.push(result);
|
|
89
|
+
if (history.results.length > 200)
|
|
90
|
+
history.results = history.results.slice(-200);
|
|
91
|
+
saveHistory(history);
|
|
92
|
+
return result;
|
|
93
|
+
}
|
|
94
|
+
// ─── CLI ────────────────────────────────────────────────────────────────────
|
|
95
|
+
export function runPrQualityGate(argv) {
|
|
96
|
+
if (argv.includes("--help") || argv.includes("-h")) {
|
|
97
|
+
console.log(`
|
|
98
|
+
judges pr-quality-gate — Automated PR pass/fail quality gate
|
|
99
|
+
|
|
100
|
+
Usage:
|
|
101
|
+
judges pr-quality-gate --check --critical 0 --high 1 --medium 5 --low 10 --score 85
|
|
102
|
+
judges pr-quality-gate --policy
|
|
103
|
+
judges pr-quality-gate --set-policy --max-critical 0 --max-high 3 --max-total 25
|
|
104
|
+
judges pr-quality-gate --history
|
|
105
|
+
|
|
106
|
+
Options:
|
|
107
|
+
--check Evaluate against policy (exit code 1 = fail)
|
|
108
|
+
--critical <n> Critical finding count
|
|
109
|
+
--high <n> High finding count
|
|
110
|
+
--medium <n> Medium finding count
|
|
111
|
+
--low <n> Low finding count
|
|
112
|
+
--score <n> Overall score (0-100)
|
|
113
|
+
--policy Show current policy
|
|
114
|
+
--set-policy Update policy thresholds
|
|
115
|
+
--max-critical <n> Set max critical threshold
|
|
116
|
+
--max-high <n> Set max high threshold
|
|
117
|
+
--max-total <n> Set max total threshold
|
|
118
|
+
--auto-approve <n> Set auto-approve score threshold
|
|
119
|
+
--history Show gate decision history
|
|
120
|
+
--format json JSON output
|
|
121
|
+
--help, -h Show this help
|
|
122
|
+
`);
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
|
|
126
|
+
// Show policy
|
|
127
|
+
if (argv.includes("--policy") && !argv.includes("--set-policy")) {
|
|
128
|
+
const policy = loadPolicy();
|
|
129
|
+
if (format === "json") {
|
|
130
|
+
console.log(JSON.stringify(policy, null, 2));
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
console.log(`\n PR Quality Gate Policy\n ──────────────────────────`);
|
|
134
|
+
console.log(` Max critical: ${policy.maxCritical}`);
|
|
135
|
+
console.log(` Max high: ${policy.maxHigh}`);
|
|
136
|
+
console.log(` Max total: ${policy.maxTotal}`);
|
|
137
|
+
console.log(` Auto-approve >= ${policy.autoApproveBelow} score`);
|
|
138
|
+
console.log(` Require tests: ${policy.requireTestCoverage}`);
|
|
139
|
+
console.log("");
|
|
140
|
+
}
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
// Set policy
|
|
144
|
+
if (argv.includes("--set-policy")) {
|
|
145
|
+
const policy = loadPolicy();
|
|
146
|
+
const mc = argv.find((_a, i) => argv[i - 1] === "--max-critical");
|
|
147
|
+
const mh = argv.find((_a, i) => argv[i - 1] === "--max-high");
|
|
148
|
+
const mt = argv.find((_a, i) => argv[i - 1] === "--max-total");
|
|
149
|
+
const aa = argv.find((_a, i) => argv[i - 1] === "--auto-approve");
|
|
150
|
+
if (mc)
|
|
151
|
+
policy.maxCritical = parseInt(mc, 10);
|
|
152
|
+
if (mh)
|
|
153
|
+
policy.maxHigh = parseInt(mh, 10);
|
|
154
|
+
if (mt)
|
|
155
|
+
policy.maxTotal = parseInt(mt, 10);
|
|
156
|
+
if (aa)
|
|
157
|
+
policy.autoApproveBelow = parseInt(aa, 10);
|
|
158
|
+
savePolicy(policy);
|
|
159
|
+
console.log(` ✅ Policy updated`);
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
// History
|
|
163
|
+
if (argv.includes("--history")) {
|
|
164
|
+
const history = loadHistory();
|
|
165
|
+
if (format === "json") {
|
|
166
|
+
console.log(JSON.stringify(history, null, 2));
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
const passRate = history.results.length > 0
|
|
170
|
+
? Math.round((history.results.filter((r) => r.passed).length / history.results.length) * 100)
|
|
171
|
+
: 0;
|
|
172
|
+
console.log(`\n Gate History (${history.results.length} checks, ${passRate}% pass rate)\n ──────────────────────────`);
|
|
173
|
+
for (const r of history.results.slice(-15)) {
|
|
174
|
+
const icon = r.passed ? "✅" : "❌";
|
|
175
|
+
console.log(` ${icon} ${r.timestamp.slice(0, 16)} score:${r.score} C:${r.critical} H:${r.high} — ${r.reason}`);
|
|
176
|
+
}
|
|
177
|
+
console.log("");
|
|
178
|
+
}
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
// Check
|
|
182
|
+
if (argv.includes("--check")) {
|
|
183
|
+
const critical = parseInt(argv.find((_a, i) => argv[i - 1] === "--critical") || "0", 10);
|
|
184
|
+
const high = parseInt(argv.find((_a, i) => argv[i - 1] === "--high") || "0", 10);
|
|
185
|
+
const medium = parseInt(argv.find((_a, i) => argv[i - 1] === "--medium") || "0", 10);
|
|
186
|
+
const low = parseInt(argv.find((_a, i) => argv[i - 1] === "--low") || "0", 10);
|
|
187
|
+
const score = parseInt(argv.find((_a, i) => argv[i - 1] === "--score") || "100", 10);
|
|
188
|
+
const result = evaluateGate(critical, high, medium, low, score);
|
|
189
|
+
if (format === "json") {
|
|
190
|
+
console.log(JSON.stringify(result, null, 2));
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
const icon = result.passed ? "✅ PASSED" : "❌ FAILED";
|
|
194
|
+
console.log(`\n PR Quality Gate: ${icon}`);
|
|
195
|
+
console.log(` ──────────────────────────`);
|
|
196
|
+
console.log(` Score: ${result.score}/100`);
|
|
197
|
+
console.log(` Findings: C:${result.critical} H:${result.high} M:${result.medium} L:${result.low} (total: ${result.total})`);
|
|
198
|
+
console.log(` Reason: ${result.reason}`);
|
|
199
|
+
console.log("");
|
|
200
|
+
}
|
|
201
|
+
if (!result.passed) {
|
|
202
|
+
process.exitCode = 1;
|
|
203
|
+
}
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
console.error(" Use --check, --policy, --set-policy, or --history. --help for usage.");
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=pr-quality-gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pr-quality-gate.js","sourceRoot":"","sources":["../../src/commands/pr-quality-gate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Regulatory change monitor — track security standards versions
|
|
3
|
+
* and map coverage changes to the current rule set.
|
|
4
|
+
*
|
|
5
|
+
* Uses local versioned data files in .judges-reg-watch.json.
|
|
6
|
+
*/
|
|
7
|
+
interface StandardVersion {
|
|
8
|
+
standard: string;
|
|
9
|
+
version: string;
|
|
10
|
+
lastChecked: string;
|
|
11
|
+
items: {
|
|
12
|
+
id: string;
|
|
13
|
+
title: string;
|
|
14
|
+
covered: boolean;
|
|
15
|
+
coveredBy?: string;
|
|
16
|
+
}[];
|
|
17
|
+
}
|
|
18
|
+
export declare function updateWatch(standards: string[]): StandardVersion[];
|
|
19
|
+
export declare function runRegWatch(argv: string[]): void;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=reg-watch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reg-watch.d.ts","sourceRoot":"","sources":["../../src/commands/reg-watch.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,UAAU,eAAe;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC9E;AA4HD,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,eAAe,EAAE,CAgBlE;AAID,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAuGhD"}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Regulatory change monitor — track security standards versions
|
|
3
|
+
* and map coverage changes to the current rule set.
|
|
4
|
+
*
|
|
5
|
+
* Uses local versioned data files in .judges-reg-watch.json.
|
|
6
|
+
*/
|
|
7
|
+
import { readFileSync, writeFileSync, existsSync } from "fs";
|
|
8
|
+
const REG_FILE = ".judges-reg-watch.json";
|
|
9
|
+
// ─── Built-in standards ─────────────────────────────────────────────────────
|
|
10
|
+
const STANDARDS = {
|
|
11
|
+
"owasp-top10": {
|
|
12
|
+
version: "2021",
|
|
13
|
+
items: [
|
|
14
|
+
{ id: "A01", title: "Broken Access Control", rulePrefix: "AUTH" },
|
|
15
|
+
{ id: "A02", title: "Cryptographic Failures", rulePrefix: "CRYPTO" },
|
|
16
|
+
{ id: "A03", title: "Injection", rulePrefix: "INJECT" },
|
|
17
|
+
{ id: "A04", title: "Insecure Design", rulePrefix: "SEC" },
|
|
18
|
+
{ id: "A05", title: "Security Misconfiguration", rulePrefix: "SEC" },
|
|
19
|
+
{ id: "A06", title: "Vulnerable Components", rulePrefix: "DEP" },
|
|
20
|
+
{ id: "A07", title: "Authentication Failures", rulePrefix: "AUTH" },
|
|
21
|
+
{ id: "A08", title: "Software Integrity Failures", rulePrefix: "SEC" },
|
|
22
|
+
{ id: "A09", title: "Logging & Monitoring Failures", rulePrefix: "ERR" },
|
|
23
|
+
{ id: "A10", title: "Server-Side Request Forgery", rulePrefix: "SSRF" },
|
|
24
|
+
],
|
|
25
|
+
},
|
|
26
|
+
"cwe-top25": {
|
|
27
|
+
version: "2024",
|
|
28
|
+
items: [
|
|
29
|
+
{ id: "CWE-787", title: "Out-of-bounds Write", rulePrefix: "MEM" },
|
|
30
|
+
{ id: "CWE-79", title: "Cross-site Scripting (XSS)", rulePrefix: "INJECT" },
|
|
31
|
+
{ id: "CWE-89", title: "SQL Injection", rulePrefix: "INJECT" },
|
|
32
|
+
{ id: "CWE-416", title: "Use After Free", rulePrefix: "MEM" },
|
|
33
|
+
{ id: "CWE-78", title: "OS Command Injection", rulePrefix: "INJECT" },
|
|
34
|
+
{ id: "CWE-20", title: "Improper Input Validation", rulePrefix: "SEC" },
|
|
35
|
+
{ id: "CWE-125", title: "Out-of-bounds Read", rulePrefix: "MEM" },
|
|
36
|
+
{ id: "CWE-22", title: "Path Traversal", rulePrefix: "SEC" },
|
|
37
|
+
{ id: "CWE-352", title: "Cross-Site Request Forgery", rulePrefix: "SEC" },
|
|
38
|
+
{ id: "CWE-434", title: "Unrestricted Upload", rulePrefix: "SEC" },
|
|
39
|
+
{ id: "CWE-862", title: "Missing Authorization", rulePrefix: "AUTH" },
|
|
40
|
+
{ id: "CWE-476", title: "NULL Pointer Dereference", rulePrefix: "ERR" },
|
|
41
|
+
{ id: "CWE-287", title: "Improper Authentication", rulePrefix: "AUTH" },
|
|
42
|
+
{ id: "CWE-190", title: "Integer Overflow", rulePrefix: "SEC" },
|
|
43
|
+
{ id: "CWE-502", title: "Deserialization of Untrusted Data", rulePrefix: "SEC" },
|
|
44
|
+
{ id: "CWE-77", title: "Command Injection", rulePrefix: "INJECT" },
|
|
45
|
+
{ id: "CWE-119", title: "Buffer Overflow", rulePrefix: "MEM" },
|
|
46
|
+
{ id: "CWE-798", title: "Hardcoded Credentials", rulePrefix: "AUTH" },
|
|
47
|
+
{ id: "CWE-918", title: "Server-Side Request Forgery", rulePrefix: "SSRF" },
|
|
48
|
+
{ id: "CWE-306", title: "Missing Authentication", rulePrefix: "AUTH" },
|
|
49
|
+
{ id: "CWE-362", title: "Race Condition", rulePrefix: "CONCUR" },
|
|
50
|
+
{ id: "CWE-269", title: "Improper Privilege Management", rulePrefix: "AUTH" },
|
|
51
|
+
{ id: "CWE-94", title: "Code Injection", rulePrefix: "INJECT" },
|
|
52
|
+
{ id: "CWE-863", title: "Incorrect Authorization", rulePrefix: "AUTH" },
|
|
53
|
+
{ id: "CWE-276", title: "Incorrect Default Permissions", rulePrefix: "SEC" },
|
|
54
|
+
],
|
|
55
|
+
},
|
|
56
|
+
"nist-ssdf": {
|
|
57
|
+
version: "1.1",
|
|
58
|
+
items: [
|
|
59
|
+
{ id: "PO.1", title: "Define Security Requirements", rulePrefix: "SEC" },
|
|
60
|
+
{ id: "PS.1", title: "Protect Software", rulePrefix: "SEC" },
|
|
61
|
+
{ id: "PS.2", title: "Protect Development Environment", rulePrefix: "SEC" },
|
|
62
|
+
{ id: "PW.1", title: "Design for Security", rulePrefix: "SEC" },
|
|
63
|
+
{ id: "PW.5", title: "Create Source Code with Security Practices", rulePrefix: "SEC" },
|
|
64
|
+
{ id: "PW.6", title: "Configure the Build to Find Issues", rulePrefix: "SEC" },
|
|
65
|
+
{ id: "PW.7", title: "Review and Audit Software", rulePrefix: "SEC" },
|
|
66
|
+
{ id: "PW.8", title: "Test Executable Code", rulePrefix: "SEC" },
|
|
67
|
+
{ id: "RV.1", title: "Identify and Confirm Vulnerabilities", rulePrefix: "SEC" },
|
|
68
|
+
{ id: "RV.2", title: "Assess, Prioritize, and Remediate", rulePrefix: "SEC" },
|
|
69
|
+
],
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
// ─── Core ───────────────────────────────────────────────────────────────────
|
|
73
|
+
function loadDb() {
|
|
74
|
+
if (!existsSync(REG_FILE))
|
|
75
|
+
return { standards: [], lastUpdated: "" };
|
|
76
|
+
return JSON.parse(readFileSync(REG_FILE, "utf-8"));
|
|
77
|
+
}
|
|
78
|
+
function saveDb(db) {
|
|
79
|
+
writeFileSync(REG_FILE, JSON.stringify(db, null, 2));
|
|
80
|
+
}
|
|
81
|
+
function checkCoverage(standard) {
|
|
82
|
+
const std = STANDARDS[standard];
|
|
83
|
+
if (!std)
|
|
84
|
+
return null;
|
|
85
|
+
// Check which rules are covered via config
|
|
86
|
+
let config = {};
|
|
87
|
+
if (existsSync(".judgesrc")) {
|
|
88
|
+
try {
|
|
89
|
+
config = JSON.parse(readFileSync(".judgesrc", "utf-8"));
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
/* empty */
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
const disabledRules = new Set(config.disabledRules || []);
|
|
96
|
+
const _disabledJudges = new Set(config.disabledJudges || []);
|
|
97
|
+
const items = std.items.map((item) => {
|
|
98
|
+
// Check if the rule prefix is disabled
|
|
99
|
+
const isDisabled = [...disabledRules].some((r) => r.startsWith(item.rulePrefix));
|
|
100
|
+
const judgeMapped = !["MEM", "CONCUR", "SSRF", "DEP"].includes(item.rulePrefix);
|
|
101
|
+
const covered = judgeMapped && !isDisabled;
|
|
102
|
+
return {
|
|
103
|
+
id: item.id,
|
|
104
|
+
title: item.title,
|
|
105
|
+
covered,
|
|
106
|
+
coveredBy: covered ? `${item.rulePrefix}*` : undefined,
|
|
107
|
+
};
|
|
108
|
+
});
|
|
109
|
+
return {
|
|
110
|
+
standard,
|
|
111
|
+
version: std.version,
|
|
112
|
+
lastChecked: new Date().toISOString(),
|
|
113
|
+
items,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
export function updateWatch(standards) {
|
|
117
|
+
const db = loadDb();
|
|
118
|
+
const results = [];
|
|
119
|
+
for (const std of standards) {
|
|
120
|
+
const result = checkCoverage(std);
|
|
121
|
+
if (result) {
|
|
122
|
+
db.standards = db.standards.filter((s) => s.standard !== std);
|
|
123
|
+
db.standards.push(result);
|
|
124
|
+
results.push(result);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
db.lastUpdated = new Date().toISOString();
|
|
128
|
+
saveDb(db);
|
|
129
|
+
return results;
|
|
130
|
+
}
|
|
131
|
+
// ─── CLI ────────────────────────────────────────────────────────────────────
|
|
132
|
+
export function runRegWatch(argv) {
|
|
133
|
+
if (argv.includes("--help") || argv.includes("-h")) {
|
|
134
|
+
console.log(`
|
|
135
|
+
judges reg-watch — Regulatory change monitoring
|
|
136
|
+
|
|
137
|
+
Usage:
|
|
138
|
+
judges reg-watch --standards owasp-top10,cwe-top25
|
|
139
|
+
judges reg-watch --check owasp-top10
|
|
140
|
+
judges reg-watch --list
|
|
141
|
+
judges reg-watch --status
|
|
142
|
+
|
|
143
|
+
Options:
|
|
144
|
+
--standards <csv> Check coverage for standards (comma-separated)
|
|
145
|
+
--check <name> Check single standard coverage
|
|
146
|
+
--list List available standards
|
|
147
|
+
--status Show last check status
|
|
148
|
+
--format json JSON output
|
|
149
|
+
--help, -h Show this help
|
|
150
|
+
|
|
151
|
+
Available standards:
|
|
152
|
+
owasp-top10 OWASP Top 10 (2021)
|
|
153
|
+
cwe-top25 CWE Top 25 (2024)
|
|
154
|
+
nist-ssdf NIST SSDF v1.1
|
|
155
|
+
`);
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
|
|
159
|
+
// List standards
|
|
160
|
+
if (argv.includes("--list")) {
|
|
161
|
+
if (format === "json") {
|
|
162
|
+
console.log(JSON.stringify(Object.entries(STANDARDS).map(([k, v]) => ({ name: k, version: v.version, items: v.items.length })), null, 2));
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
console.log("\n Available Standards\n ───────────────────");
|
|
166
|
+
for (const [name, std] of Object.entries(STANDARDS)) {
|
|
167
|
+
console.log(` ${name.padEnd(15)} v${std.version} (${std.items.length} items)`);
|
|
168
|
+
}
|
|
169
|
+
console.log("");
|
|
170
|
+
}
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
// Check standards
|
|
174
|
+
const standardsStr = argv.find((_a, i) => argv[i - 1] === "--standards");
|
|
175
|
+
const singleCheck = argv.find((_a, i) => argv[i - 1] === "--check");
|
|
176
|
+
const toCheck = standardsStr ? standardsStr.split(",") : singleCheck ? [singleCheck] : [];
|
|
177
|
+
if (toCheck.length > 0) {
|
|
178
|
+
const results = updateWatch(toCheck);
|
|
179
|
+
for (const result of results) {
|
|
180
|
+
const covered = result.items.filter((i) => i.covered).length;
|
|
181
|
+
const total = result.items.length;
|
|
182
|
+
const pct = Math.round((covered / total) * 100);
|
|
183
|
+
if (format === "json") {
|
|
184
|
+
console.log(JSON.stringify(result, null, 2));
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
console.log(`\n ${result.standard} v${result.version} — Coverage: ${pct}% (${covered}/${total})\n ──────────────────────────────────────`);
|
|
188
|
+
for (const item of result.items) {
|
|
189
|
+
const icon = item.covered ? "✅" : "❌";
|
|
190
|
+
console.log(` ${icon} ${item.id.padEnd(10)} ${item.title.padEnd(40)} ${item.coveredBy || "NOT COVERED"}`);
|
|
191
|
+
}
|
|
192
|
+
console.log("");
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
// Status
|
|
198
|
+
if (argv.includes("--status")) {
|
|
199
|
+
const db = loadDb();
|
|
200
|
+
if (db.standards.length === 0) {
|
|
201
|
+
console.log("\n No standards monitored. Use --standards to start.\n");
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
if (format === "json") {
|
|
205
|
+
console.log(JSON.stringify(db, null, 2));
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
console.log(`\n Regulatory Watch Status\n ───────────────────────`);
|
|
209
|
+
console.log(` Last updated: ${db.lastUpdated}`);
|
|
210
|
+
for (const s of db.standards) {
|
|
211
|
+
const covered = s.items.filter((i) => i.covered).length;
|
|
212
|
+
console.log(` ${s.standard.padEnd(15)} v${s.version} — ${covered}/${s.items.length} covered (${s.lastChecked.split("T")[0]})`);
|
|
213
|
+
}
|
|
214
|
+
console.log("");
|
|
215
|
+
}
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
console.log(" Use --standards or --check to monitor. --help for usage.");
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=reg-watch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reg-watch.js","sourceRoot":"","sources":["../../src/commands/reg-watch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Security incident retrospective — analyze whether Judges would have
|
|
3
|
+
* caught a specific vulnerability by running evaluation against
|
|
4
|
+
* historical code state.
|
|
5
|
+
*
|
|
6
|
+
* Uses local git history and evaluation results.
|
|
7
|
+
*/
|
|
8
|
+
import type { Finding } from "../types.js";
|
|
9
|
+
interface RetroResult {
|
|
10
|
+
file: string;
|
|
11
|
+
commit?: string;
|
|
12
|
+
cve?: string;
|
|
13
|
+
wouldCatch: boolean;
|
|
14
|
+
matchingFindings: Finding[];
|
|
15
|
+
configWouldSuppress: boolean;
|
|
16
|
+
suppressedBy?: string[];
|
|
17
|
+
recommendedConfig?: Record<string, unknown>;
|
|
18
|
+
analysis: string;
|
|
19
|
+
}
|
|
20
|
+
export declare function runRetroAnalysis(file: string, commit?: string, cve?: string): RetroResult;
|
|
21
|
+
export declare function runRetro(argv: string[]): void;
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=retro.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retro.d.ts","sourceRoot":"","sources":["../../src/commands/retro.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAI3C,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,gBAAgB,EAAE,OAAO,EAAE,CAAC;IAC5B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAkDD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,WAAW,CAiGzF;AAID,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAgF7C"}
|