@kevinrabun/judges 3.85.0 → 3.87.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 +29 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +126 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/finding-code-smell.d.ts +5 -0
- package/dist/commands/finding-code-smell.d.ts.map +1 -0
- package/dist/commands/finding-code-smell.js +114 -0
- package/dist/commands/finding-code-smell.js.map +1 -0
- package/dist/commands/finding-context-window.d.ts +5 -0
- package/dist/commands/finding-context-window.d.ts.map +1 -0
- package/dist/commands/finding-context-window.js +127 -0
- package/dist/commands/finding-context-window.js.map +1 -0
- package/dist/commands/finding-owner-assign.d.ts +5 -0
- package/dist/commands/finding-owner-assign.d.ts.map +1 -0
- package/dist/commands/finding-owner-assign.js +134 -0
- package/dist/commands/finding-owner-assign.js.map +1 -0
- package/dist/commands/finding-pattern-library.d.ts +5 -0
- package/dist/commands/finding-pattern-library.d.ts.map +1 -0
- package/dist/commands/finding-pattern-library.js +146 -0
- package/dist/commands/finding-pattern-library.js.map +1 -0
- package/dist/commands/finding-quality-gate.d.ts +5 -0
- package/dist/commands/finding-quality-gate.d.ts.map +1 -0
- package/dist/commands/finding-quality-gate.js +108 -0
- package/dist/commands/finding-quality-gate.js.map +1 -0
- package/dist/commands/finding-reachability.d.ts +5 -0
- package/dist/commands/finding-reachability.d.ts.map +1 -0
- package/dist/commands/finding-reachability.js +132 -0
- package/dist/commands/finding-reachability.js.map +1 -0
- package/dist/commands/finding-related-rules.d.ts +5 -0
- package/dist/commands/finding-related-rules.d.ts.map +1 -0
- package/dist/commands/finding-related-rules.js +152 -0
- package/dist/commands/finding-related-rules.js.map +1 -0
- package/dist/commands/finding-rule-explain.d.ts +5 -0
- package/dist/commands/finding-rule-explain.d.ts.map +1 -0
- package/dist/commands/finding-rule-explain.js +141 -0
- package/dist/commands/finding-rule-explain.js.map +1 -0
- package/dist/commands/finding-severity-dist.d.ts +5 -0
- package/dist/commands/finding-severity-dist.d.ts.map +1 -0
- package/dist/commands/finding-severity-dist.js +106 -0
- package/dist/commands/finding-severity-dist.js.map +1 -0
- package/dist/commands/review-ignore-pattern.d.ts +6 -0
- package/dist/commands/review-ignore-pattern.d.ts.map +1 -0
- package/dist/commands/review-ignore-pattern.js +140 -0
- package/dist/commands/review-ignore-pattern.js.map +1 -0
- package/dist/commands/review-lock-file.d.ts +5 -0
- package/dist/commands/review-lock-file.d.ts.map +1 -0
- package/dist/commands/review-lock-file.js +154 -0
- package/dist/commands/review-lock-file.js.map +1 -0
- package/dist/commands/review-merge-check.d.ts +5 -0
- package/dist/commands/review-merge-check.d.ts.map +1 -0
- package/dist/commands/review-merge-check.js +102 -0
- package/dist/commands/review-merge-check.js.map +1 -0
- package/dist/commands/review-plugin-config.d.ts +5 -0
- package/dist/commands/review-plugin-config.d.ts.map +1 -0
- package/dist/commands/review-plugin-config.js +168 -0
- package/dist/commands/review-plugin-config.js.map +1 -0
- package/dist/commands/review-plugin-list.d.ts +5 -0
- package/dist/commands/review-plugin-list.d.ts.map +1 -0
- package/dist/commands/review-plugin-list.js +100 -0
- package/dist/commands/review-plugin-list.js.map +1 -0
- package/dist/commands/review-report-merge.d.ts +5 -0
- package/dist/commands/review-report-merge.d.ts.map +1 -0
- package/dist/commands/review-report-merge.js +91 -0
- package/dist/commands/review-report-merge.js.map +1 -0
- package/dist/commands/review-status-badge.d.ts +5 -0
- package/dist/commands/review-status-badge.d.ts.map +1 -0
- package/dist/commands/review-status-badge.js +121 -0
- package/dist/commands/review-status-badge.js.map +1 -0
- package/dist/commands/review-token-budget.d.ts +5 -0
- package/dist/commands/review-token-budget.d.ts.map +1 -0
- package/dist/commands/review-token-budget.js +118 -0
- package/dist/commands/review-token-budget.js.map +1 -0
- package/dist/commands/review-workspace-scan.d.ts +5 -0
- package/dist/commands/review-workspace-scan.d.ts.map +1 -0
- package/dist/commands/review-workspace-scan.js +145 -0
- package/dist/commands/review-workspace-scan.js.map +1 -0
- package/package.json +1 -1
- package/server.json +2 -2
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Finding-code-smell — Detect code-smell indicators among findings.
|
|
3
|
+
*/
|
|
4
|
+
import { readFileSync, existsSync } from "fs";
|
|
5
|
+
// ─── Patterns ───────────────────────────────────────────────────────────────
|
|
6
|
+
const SMELL_KEYWORDS = [
|
|
7
|
+
{ keywords: ["duplicate", "copy", "clone", "repeated"], label: "duplication" },
|
|
8
|
+
{ keywords: ["complex", "nested", "cyclomatic", "branch"], label: "complexity" },
|
|
9
|
+
{ keywords: ["long", "large", "big", "oversized", "bloat"], label: "bloat" },
|
|
10
|
+
{ keywords: ["magic", "hardcod", "literal", "constant"], label: "magic-values" },
|
|
11
|
+
{ keywords: ["dead", "unused", "unreachable", "orphan"], label: "dead-code" },
|
|
12
|
+
{ keywords: ["coupling", "depend", "import", "circular"], label: "coupling" },
|
|
13
|
+
{ keywords: ["naming", "convention", "inconsistent", "style"], label: "naming" },
|
|
14
|
+
{ keywords: ["comment", "todo", "fixme", "hack", "workaround"], label: "tech-debt" },
|
|
15
|
+
];
|
|
16
|
+
function detectSmell(title, desc) {
|
|
17
|
+
const combined = `${title} ${desc}`.toLowerCase();
|
|
18
|
+
for (const s of SMELL_KEYWORDS) {
|
|
19
|
+
const matches = s.keywords.filter((k) => combined.includes(k));
|
|
20
|
+
if (matches.length > 0) {
|
|
21
|
+
return { label: s.label, confidence: Math.min(1, 0.5 + matches.length * 0.2) };
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return { label: "general", confidence: 0.3 };
|
|
25
|
+
}
|
|
26
|
+
// ─── Analysis ───────────────────────────────────────────────────────────────
|
|
27
|
+
function analyzeSmells(verdict) {
|
|
28
|
+
const results = [];
|
|
29
|
+
for (const f of verdict.findings) {
|
|
30
|
+
const { label, confidence } = detectSmell(f.title, f.description);
|
|
31
|
+
results.push({
|
|
32
|
+
ruleId: f.ruleId,
|
|
33
|
+
title: f.title,
|
|
34
|
+
severity: (f.severity || "medium").toLowerCase(),
|
|
35
|
+
smellType: label,
|
|
36
|
+
confidence,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
return results;
|
|
40
|
+
}
|
|
41
|
+
// ─── CLI ────────────────────────────────────────────────────────────────────
|
|
42
|
+
export function runFindingCodeSmell(argv) {
|
|
43
|
+
const fileIdx = argv.indexOf("--file");
|
|
44
|
+
const formatIdx = argv.indexOf("--format");
|
|
45
|
+
const minIdx = argv.indexOf("--min-confidence");
|
|
46
|
+
const filePath = fileIdx >= 0 ? argv[fileIdx + 1] : undefined;
|
|
47
|
+
const format = formatIdx >= 0 ? argv[formatIdx + 1] : "table";
|
|
48
|
+
const minConf = minIdx >= 0 ? parseFloat(argv[minIdx + 1]) : 0;
|
|
49
|
+
if (argv.includes("--help") || argv.includes("-h")) {
|
|
50
|
+
console.log(`
|
|
51
|
+
judges finding-code-smell — Detect code-smell indicators
|
|
52
|
+
|
|
53
|
+
Usage:
|
|
54
|
+
judges finding-code-smell --file <verdict.json> [--format table|json]
|
|
55
|
+
[--min-confidence <0-1>]
|
|
56
|
+
|
|
57
|
+
Options:
|
|
58
|
+
--file <path> Path to verdict JSON file (required)
|
|
59
|
+
--format <fmt> Output format: table (default), json
|
|
60
|
+
--min-confidence <n> Minimum confidence threshold (0-1)
|
|
61
|
+
--help, -h Show this help
|
|
62
|
+
`);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
if (!filePath) {
|
|
66
|
+
console.error("Error: --file required");
|
|
67
|
+
process.exitCode = 1;
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
if (!existsSync(filePath)) {
|
|
71
|
+
console.error(`Error: not found: ${filePath}`);
|
|
72
|
+
process.exitCode = 1;
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
let verdict;
|
|
76
|
+
try {
|
|
77
|
+
verdict = JSON.parse(readFileSync(filePath, "utf-8"));
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
console.error("Error: invalid JSON");
|
|
81
|
+
process.exitCode = 1;
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
let results = analyzeSmells(verdict);
|
|
85
|
+
if (minConf > 0) {
|
|
86
|
+
results = results.filter((r) => r.confidence >= minConf);
|
|
87
|
+
}
|
|
88
|
+
if (format === "json") {
|
|
89
|
+
console.log(JSON.stringify(results, null, 2));
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
// group by smell type
|
|
93
|
+
const byType = new Map();
|
|
94
|
+
for (const r of results) {
|
|
95
|
+
const arr = byType.get(r.smellType) || [];
|
|
96
|
+
arr.push(r);
|
|
97
|
+
byType.set(r.smellType, arr);
|
|
98
|
+
}
|
|
99
|
+
console.log(`\nCode Smell Analysis (${results.length} findings)`);
|
|
100
|
+
console.log("═".repeat(70));
|
|
101
|
+
console.log(`${"Type".padEnd(16)} ${"Count".padEnd(8)} ${"Severity".padEnd(10)} ${"Avg Conf".padEnd(10)}`);
|
|
102
|
+
console.log("─".repeat(70));
|
|
103
|
+
for (const [type, items] of byType) {
|
|
104
|
+
const avgConf = items.reduce((s, i) => s + i.confidence, 0) / items.length;
|
|
105
|
+
const topSev = items.some((i) => i.severity === "critical")
|
|
106
|
+
? "critical"
|
|
107
|
+
: items.some((i) => i.severity === "high")
|
|
108
|
+
? "high"
|
|
109
|
+
: "medium";
|
|
110
|
+
console.log(`${type.padEnd(16)} ${String(items.length).padEnd(8)} ${topSev.padEnd(10)} ${avgConf.toFixed(2).padEnd(10)}`);
|
|
111
|
+
}
|
|
112
|
+
console.log("═".repeat(70));
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=finding-code-smell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"finding-code-smell.js","sourceRoot":"","sources":["../../src/commands/finding-code-smell.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"finding-context-window.d.ts","sourceRoot":"","sources":["../../src/commands/finding-context-window.ts"],"names":[],"mappings":"AAAA;;GAEG;AAqEH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAqF5D"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Finding-context-window — Show findings with surrounding code context.
|
|
3
|
+
*/
|
|
4
|
+
import { readFileSync, existsSync } from "fs";
|
|
5
|
+
// ─── Helpers ────────────────────────────────────────────────────────────────
|
|
6
|
+
function buildContext(verdict, sourceFile, windowSize) {
|
|
7
|
+
const source = readFileSync(sourceFile, "utf-8");
|
|
8
|
+
const sourceLines = source.split("\n");
|
|
9
|
+
const results = [];
|
|
10
|
+
for (const f of verdict.findings) {
|
|
11
|
+
const lineNums = f.lineNumbers || [];
|
|
12
|
+
if (lineNums.length === 0) {
|
|
13
|
+
results.push({
|
|
14
|
+
ruleId: f.ruleId,
|
|
15
|
+
title: f.title,
|
|
16
|
+
severity: (f.severity || "medium").toLowerCase(),
|
|
17
|
+
lines: [],
|
|
18
|
+
context: [],
|
|
19
|
+
});
|
|
20
|
+
continue;
|
|
21
|
+
}
|
|
22
|
+
const contextLines = [];
|
|
23
|
+
const addedLines = new Set();
|
|
24
|
+
for (const ln of lineNums) {
|
|
25
|
+
const start = Math.max(1, ln - windowSize);
|
|
26
|
+
const end = Math.min(sourceLines.length, ln + windowSize);
|
|
27
|
+
for (let i = start; i <= end; i++) {
|
|
28
|
+
if (addedLines.has(i))
|
|
29
|
+
continue;
|
|
30
|
+
addedLines.add(i);
|
|
31
|
+
contextLines.push({
|
|
32
|
+
lineNumber: i,
|
|
33
|
+
code: sourceLines[i - 1],
|
|
34
|
+
isFinding: lineNums.includes(i),
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
contextLines.sort((a, b) => a.lineNumber - b.lineNumber);
|
|
39
|
+
results.push({
|
|
40
|
+
ruleId: f.ruleId,
|
|
41
|
+
title: f.title,
|
|
42
|
+
severity: (f.severity || "medium").toLowerCase(),
|
|
43
|
+
lines: lineNums,
|
|
44
|
+
context: contextLines,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
return results;
|
|
48
|
+
}
|
|
49
|
+
// ─── CLI ────────────────────────────────────────────────────────────────────
|
|
50
|
+
export function runFindingContextWindow(argv) {
|
|
51
|
+
const fileIdx = argv.indexOf("--file");
|
|
52
|
+
const sourceIdx = argv.indexOf("--source");
|
|
53
|
+
const windowIdx = argv.indexOf("--window");
|
|
54
|
+
const formatIdx = argv.indexOf("--format");
|
|
55
|
+
const filePath = fileIdx >= 0 ? argv[fileIdx + 1] : undefined;
|
|
56
|
+
const sourceFile = sourceIdx >= 0 ? argv[sourceIdx + 1] : undefined;
|
|
57
|
+
const windowSize = windowIdx >= 0 ? parseInt(argv[windowIdx + 1], 10) : 3;
|
|
58
|
+
const format = formatIdx >= 0 ? argv[formatIdx + 1] : "table";
|
|
59
|
+
if (argv.includes("--help") || argv.includes("-h")) {
|
|
60
|
+
console.log(`
|
|
61
|
+
judges finding-context-window — Show findings with code context
|
|
62
|
+
|
|
63
|
+
Usage:
|
|
64
|
+
judges finding-context-window --file <verdict.json> --source <src.ts>
|
|
65
|
+
[--window <n>] [--format table|json]
|
|
66
|
+
|
|
67
|
+
Options:
|
|
68
|
+
--file <path> Path to verdict JSON file (required)
|
|
69
|
+
--source <path> Source file for context (required)
|
|
70
|
+
--window <n> Context lines before/after (default: 3)
|
|
71
|
+
--format <fmt> Output format: table (default), json
|
|
72
|
+
--help, -h Show this help
|
|
73
|
+
`);
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
if (!filePath) {
|
|
77
|
+
console.error("Error: --file required");
|
|
78
|
+
process.exitCode = 1;
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
if (!sourceFile) {
|
|
82
|
+
console.error("Error: --source required");
|
|
83
|
+
process.exitCode = 1;
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
if (!existsSync(filePath)) {
|
|
87
|
+
console.error(`Error: not found: ${filePath}`);
|
|
88
|
+
process.exitCode = 1;
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
if (!existsSync(sourceFile)) {
|
|
92
|
+
console.error(`Error: not found: ${sourceFile}`);
|
|
93
|
+
process.exitCode = 1;
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
let verdict;
|
|
97
|
+
try {
|
|
98
|
+
verdict = JSON.parse(readFileSync(filePath, "utf-8"));
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
console.error("Error: invalid JSON");
|
|
102
|
+
process.exitCode = 1;
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
const results = buildContext(verdict, sourceFile, windowSize);
|
|
106
|
+
if (format === "json") {
|
|
107
|
+
console.log(JSON.stringify(results, null, 2));
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
console.log(`\nFinding Context (${results.length} findings, window=${windowSize})`);
|
|
111
|
+
for (const r of results) {
|
|
112
|
+
console.log("\n" + "═".repeat(70));
|
|
113
|
+
console.log(`[${r.severity}] ${r.ruleId}: ${r.title}`);
|
|
114
|
+
if (r.context.length === 0) {
|
|
115
|
+
console.log(" (no line number data)");
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
console.log("─".repeat(70));
|
|
119
|
+
for (const c of r.context) {
|
|
120
|
+
const marker = c.isFinding ? ">>>" : " ";
|
|
121
|
+
const lineStr = String(c.lineNumber).padStart(5);
|
|
122
|
+
console.log(`${marker} ${lineStr} | ${c.code}`);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
console.log("\n" + "═".repeat(70));
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=finding-context-window.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"finding-context-window.js","sourceRoot":"","sources":["../../src/commands/finding-context-window.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"finding-owner-assign.d.ts","sourceRoot":"","sources":["../../src/commands/finding-owner-assign.ts"],"names":[],"mappings":"AAAA;;GAEG;AA6EH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAwF1D"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Finding-owner-assign — Assign ownership of findings based on configurable rules.
|
|
3
|
+
*/
|
|
4
|
+
import { readFileSync, existsSync, writeFileSync } from "fs";
|
|
5
|
+
// ─── Helpers ────────────────────────────────────────────────────────────────
|
|
6
|
+
function loadOwnerRules(configPath) {
|
|
7
|
+
if (!existsSync(configPath))
|
|
8
|
+
return [];
|
|
9
|
+
try {
|
|
10
|
+
const data = JSON.parse(readFileSync(configPath, "utf-8"));
|
|
11
|
+
if (Array.isArray(data.rules)) {
|
|
12
|
+
return data.rules;
|
|
13
|
+
}
|
|
14
|
+
return [];
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return [];
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function assignOwners(verdict, rules) {
|
|
21
|
+
const assignments = [];
|
|
22
|
+
for (const f of verdict.findings) {
|
|
23
|
+
let owner = "unassigned";
|
|
24
|
+
let matchedPattern = "";
|
|
25
|
+
for (const rule of rules) {
|
|
26
|
+
const ruleIdLower = f.ruleId.toLowerCase();
|
|
27
|
+
const titleLower = f.title.toLowerCase();
|
|
28
|
+
const patLower = rule.pattern.toLowerCase();
|
|
29
|
+
if (ruleIdLower.includes(patLower) || titleLower.includes(patLower)) {
|
|
30
|
+
owner = rule.owner;
|
|
31
|
+
matchedPattern = rule.pattern;
|
|
32
|
+
break;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
// fallback: assign by severity
|
|
36
|
+
if (owner === "unassigned") {
|
|
37
|
+
const sev = (f.severity || "medium").toLowerCase();
|
|
38
|
+
if (sev === "critical" || sev === "high") {
|
|
39
|
+
owner = "security-team";
|
|
40
|
+
matchedPattern = `severity:${sev}`;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
assignments.push({
|
|
44
|
+
ruleId: f.ruleId,
|
|
45
|
+
title: f.title,
|
|
46
|
+
severity: (f.severity || "medium").toLowerCase(),
|
|
47
|
+
owner,
|
|
48
|
+
matchedPattern,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
return assignments;
|
|
52
|
+
}
|
|
53
|
+
// ─── CLI ────────────────────────────────────────────────────────────────────
|
|
54
|
+
export function runFindingOwnerAssign(argv) {
|
|
55
|
+
const fileIdx = argv.indexOf("--file");
|
|
56
|
+
const configIdx = argv.indexOf("--config");
|
|
57
|
+
const formatIdx = argv.indexOf("--format");
|
|
58
|
+
const outIdx = argv.indexOf("--output");
|
|
59
|
+
const filePath = fileIdx >= 0 ? argv[fileIdx + 1] : undefined;
|
|
60
|
+
const configPath = configIdx >= 0 ? argv[configIdx + 1] : ".judges-owners.json";
|
|
61
|
+
const format = formatIdx >= 0 ? argv[formatIdx + 1] : "table";
|
|
62
|
+
const outputPath = outIdx >= 0 ? argv[outIdx + 1] : undefined;
|
|
63
|
+
if (argv.includes("--help") || argv.includes("-h")) {
|
|
64
|
+
console.log(`
|
|
65
|
+
judges finding-owner-assign — Assign finding owners
|
|
66
|
+
|
|
67
|
+
Usage:
|
|
68
|
+
judges finding-owner-assign --file <verdict.json> [--config <owners.json>]
|
|
69
|
+
[--format table|json] [--output <file>]
|
|
70
|
+
|
|
71
|
+
Options:
|
|
72
|
+
--file <path> Path to verdict JSON file (required)
|
|
73
|
+
--config <path> Owner rules config (default: .judges-owners.json)
|
|
74
|
+
--format <fmt> Output format: table (default), json
|
|
75
|
+
--output <path> Write assignments to file
|
|
76
|
+
--help, -h Show this help
|
|
77
|
+
|
|
78
|
+
Config format:
|
|
79
|
+
{ "rules": [{ "pattern": "AUTH", "owner": "security-team" }] }
|
|
80
|
+
`);
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
if (!filePath) {
|
|
84
|
+
console.error("Error: --file required");
|
|
85
|
+
process.exitCode = 1;
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
if (!existsSync(filePath)) {
|
|
89
|
+
console.error(`Error: not found: ${filePath}`);
|
|
90
|
+
process.exitCode = 1;
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
let verdict;
|
|
94
|
+
try {
|
|
95
|
+
verdict = JSON.parse(readFileSync(filePath, "utf-8"));
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
console.error("Error: invalid JSON");
|
|
99
|
+
process.exitCode = 1;
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
const rules = loadOwnerRules(configPath);
|
|
103
|
+
const assignments = assignOwners(verdict, rules);
|
|
104
|
+
if (outputPath) {
|
|
105
|
+
writeFileSync(outputPath, JSON.stringify(assignments, null, 2));
|
|
106
|
+
console.log(`Wrote ${assignments.length} assignments to ${outputPath}`);
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
if (format === "json") {
|
|
110
|
+
console.log(JSON.stringify(assignments, null, 2));
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
// group by owner
|
|
114
|
+
const byOwner = new Map();
|
|
115
|
+
for (const a of assignments) {
|
|
116
|
+
const arr = byOwner.get(a.owner) || [];
|
|
117
|
+
arr.push(a);
|
|
118
|
+
byOwner.set(a.owner, arr);
|
|
119
|
+
}
|
|
120
|
+
console.log(`\nFinding Owner Assignments (${assignments.length} findings)`);
|
|
121
|
+
console.log("═".repeat(75));
|
|
122
|
+
for (const [owner, items] of byOwner) {
|
|
123
|
+
console.log(`\n Owner: ${owner} (${items.length} findings)`);
|
|
124
|
+
console.log(" " + "─".repeat(70));
|
|
125
|
+
console.log(` ${"Rule".padEnd(20)} ${"Severity".padEnd(10)} Title`);
|
|
126
|
+
for (const a of items) {
|
|
127
|
+
const rule = a.ruleId.length > 18 ? a.ruleId.slice(0, 18) + "…" : a.ruleId;
|
|
128
|
+
const title = a.title.length > 35 ? a.title.slice(0, 35) + "…" : a.title;
|
|
129
|
+
console.log(` ${rule.padEnd(20)} ${a.severity.padEnd(10)} ${title}`);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
console.log("\n" + "═".repeat(75));
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=finding-owner-assign.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"finding-owner-assign.js","sourceRoot":"","sources":["../../src/commands/finding-owner-assign.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"finding-pattern-library.d.ts","sourceRoot":"","sources":["../../src/commands/finding-pattern-library.ts"],"names":[],"mappings":"AAAA;;GAEG;AA0EH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA6G7D"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Finding-pattern-library — Manage a local library of finding patterns for reuse.
|
|
3
|
+
*/
|
|
4
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
|
|
5
|
+
import { dirname } from "path";
|
|
6
|
+
// ─── Helpers ────────────────────────────────────────────────────────────────
|
|
7
|
+
function loadLibrary(libPath) {
|
|
8
|
+
if (!existsSync(libPath)) {
|
|
9
|
+
return { version: 1, patterns: [] };
|
|
10
|
+
}
|
|
11
|
+
try {
|
|
12
|
+
return JSON.parse(readFileSync(libPath, "utf-8"));
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return { version: 1, patterns: [] };
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function saveLibrary(libPath, lib) {
|
|
19
|
+
const dir = dirname(libPath);
|
|
20
|
+
if (!existsSync(dir)) {
|
|
21
|
+
mkdirSync(dir, { recursive: true });
|
|
22
|
+
}
|
|
23
|
+
writeFileSync(libPath, JSON.stringify(lib, null, 2));
|
|
24
|
+
}
|
|
25
|
+
function importPatterns(lib, verdict) {
|
|
26
|
+
const now = new Date().toISOString();
|
|
27
|
+
let added = 0;
|
|
28
|
+
for (const f of verdict.findings) {
|
|
29
|
+
const existing = lib.patterns.find((p) => p.ruleId === f.ruleId);
|
|
30
|
+
if (existing) {
|
|
31
|
+
existing.occurrences++;
|
|
32
|
+
existing.lastSeen = now;
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
lib.patterns.push({
|
|
36
|
+
ruleId: f.ruleId,
|
|
37
|
+
title: f.title,
|
|
38
|
+
severity: (f.severity || "medium").toLowerCase(),
|
|
39
|
+
description: f.description,
|
|
40
|
+
recommendation: f.recommendation,
|
|
41
|
+
occurrences: 1,
|
|
42
|
+
firstSeen: now,
|
|
43
|
+
lastSeen: now,
|
|
44
|
+
});
|
|
45
|
+
added++;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return added;
|
|
49
|
+
}
|
|
50
|
+
// ─── CLI ────────────────────────────────────────────────────────────────────
|
|
51
|
+
export function runFindingPatternLibrary(argv) {
|
|
52
|
+
const actionIdx = argv.indexOf("--action");
|
|
53
|
+
const fileIdx = argv.indexOf("--file");
|
|
54
|
+
const libIdx = argv.indexOf("--library");
|
|
55
|
+
const formatIdx = argv.indexOf("--format");
|
|
56
|
+
const searchIdx = argv.indexOf("--search");
|
|
57
|
+
const action = actionIdx >= 0 ? argv[actionIdx + 1] : "list";
|
|
58
|
+
const filePath = fileIdx >= 0 ? argv[fileIdx + 1] : undefined;
|
|
59
|
+
const libPath = libIdx >= 0 ? argv[libIdx + 1] : ".judges-patterns.json";
|
|
60
|
+
const format = formatIdx >= 0 ? argv[formatIdx + 1] : "table";
|
|
61
|
+
const searchTerm = searchIdx >= 0 ? argv[searchIdx + 1] : undefined;
|
|
62
|
+
if (argv.includes("--help") || argv.includes("-h")) {
|
|
63
|
+
console.log(`
|
|
64
|
+
judges finding-pattern-library — Manage finding pattern library
|
|
65
|
+
|
|
66
|
+
Usage:
|
|
67
|
+
judges finding-pattern-library --action <action> [options]
|
|
68
|
+
|
|
69
|
+
Actions:
|
|
70
|
+
list List patterns in library (default)
|
|
71
|
+
import Import patterns from verdict file
|
|
72
|
+
search Search patterns by keyword
|
|
73
|
+
|
|
74
|
+
Options:
|
|
75
|
+
--action <act> Action: list, import, search
|
|
76
|
+
--file <path> Verdict JSON file (required for import)
|
|
77
|
+
--library <path> Library file (default: .judges-patterns.json)
|
|
78
|
+
--search <term> Search term (for search action)
|
|
79
|
+
--format <fmt> Output format: table (default), json
|
|
80
|
+
--help, -h Show this help
|
|
81
|
+
`);
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
const lib = loadLibrary(libPath);
|
|
85
|
+
if (action === "import") {
|
|
86
|
+
if (!filePath) {
|
|
87
|
+
console.error("Error: --file required for import");
|
|
88
|
+
process.exitCode = 1;
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
if (!existsSync(filePath)) {
|
|
92
|
+
console.error(`Error: not found: ${filePath}`);
|
|
93
|
+
process.exitCode = 1;
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
let verdict;
|
|
97
|
+
try {
|
|
98
|
+
verdict = JSON.parse(readFileSync(filePath, "utf-8"));
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
console.error("Error: invalid JSON");
|
|
102
|
+
process.exitCode = 1;
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
const added = importPatterns(lib, verdict);
|
|
106
|
+
saveLibrary(libPath, lib);
|
|
107
|
+
console.log(`Imported ${added} new patterns (${lib.patterns.length} total in library)`);
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
if (action === "search") {
|
|
111
|
+
const term = (searchTerm || "").toLowerCase();
|
|
112
|
+
const matches = lib.patterns.filter((p) => p.ruleId.toLowerCase().includes(term) ||
|
|
113
|
+
p.title.toLowerCase().includes(term) ||
|
|
114
|
+
p.description.toLowerCase().includes(term));
|
|
115
|
+
if (format === "json") {
|
|
116
|
+
console.log(JSON.stringify(matches, null, 2));
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
console.log(`\nPattern Search: "${searchTerm}" (${matches.length} matches)`);
|
|
120
|
+
console.log("═".repeat(70));
|
|
121
|
+
for (const p of matches) {
|
|
122
|
+
console.log(` ${p.ruleId.padEnd(20)} ${p.title}`);
|
|
123
|
+
console.log(` Severity: ${p.severity} | Occurrences: ${p.occurrences}`);
|
|
124
|
+
}
|
|
125
|
+
console.log("═".repeat(70));
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
// default: list
|
|
129
|
+
if (format === "json") {
|
|
130
|
+
console.log(JSON.stringify(lib, null, 2));
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
console.log(`\nPattern Library (${lib.patterns.length} patterns)`);
|
|
134
|
+
console.log("═".repeat(75));
|
|
135
|
+
console.log(`${"Rule".padEnd(20)} ${"Severity".padEnd(10)} ${"Seen".padEnd(6)} ${"Last Seen".padEnd(22)} Title`);
|
|
136
|
+
console.log("─".repeat(75));
|
|
137
|
+
const sorted = [...lib.patterns].sort((a, b) => b.occurrences - a.occurrences);
|
|
138
|
+
for (const p of sorted) {
|
|
139
|
+
const rule = p.ruleId.length > 18 ? p.ruleId.slice(0, 18) + "…" : p.ruleId;
|
|
140
|
+
const title = p.title.length > 20 ? p.title.slice(0, 20) + "…" : p.title;
|
|
141
|
+
const lastSeen = p.lastSeen.slice(0, 19);
|
|
142
|
+
console.log(`${rule.padEnd(20)} ${p.severity.padEnd(10)} ${String(p.occurrences).padEnd(6)} ${lastSeen.padEnd(22)} ${title}`);
|
|
143
|
+
}
|
|
144
|
+
console.log("═".repeat(75));
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=finding-pattern-library.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"finding-pattern-library.js","sourceRoot":"","sources":["../../src/commands/finding-pattern-library.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"finding-quality-gate.d.ts","sourceRoot":"","sources":["../../src/commands/finding-quality-gate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAwBH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA8G1D"}
|