@kevinrabun/judges 3.106.0 → 3.107.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.
Files changed (42) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +63 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/finding-auto-fix-suggest.d.ts +2 -0
  6. package/dist/commands/finding-auto-fix-suggest.d.ts.map +1 -0
  7. package/dist/commands/finding-auto-fix-suggest.js +77 -0
  8. package/dist/commands/finding-auto-fix-suggest.js.map +1 -0
  9. package/dist/commands/finding-batch-triage.d.ts +2 -0
  10. package/dist/commands/finding-batch-triage.d.ts.map +1 -0
  11. package/dist/commands/finding-batch-triage.js +91 -0
  12. package/dist/commands/finding-batch-triage.js.map +1 -0
  13. package/dist/commands/finding-confidence-boost.d.ts +2 -0
  14. package/dist/commands/finding-confidence-boost.d.ts.map +1 -0
  15. package/dist/commands/finding-confidence-boost.js +89 -0
  16. package/dist/commands/finding-confidence-boost.js.map +1 -0
  17. package/dist/commands/finding-noise-reduce.d.ts +2 -0
  18. package/dist/commands/finding-noise-reduce.d.ts.map +1 -0
  19. package/dist/commands/finding-noise-reduce.js +82 -0
  20. package/dist/commands/finding-noise-reduce.js.map +1 -0
  21. package/dist/commands/finding-scope-filter.d.ts +2 -0
  22. package/dist/commands/finding-scope-filter.d.ts.map +1 -0
  23. package/dist/commands/finding-scope-filter.js +78 -0
  24. package/dist/commands/finding-scope-filter.js.map +1 -0
  25. package/dist/commands/review-code-ownership.d.ts +2 -0
  26. package/dist/commands/review-code-ownership.d.ts.map +1 -0
  27. package/dist/commands/review-code-ownership.js +89 -0
  28. package/dist/commands/review-code-ownership.js.map +1 -0
  29. package/dist/commands/review-pr-label-suggest.d.ts +2 -0
  30. package/dist/commands/review-pr-label-suggest.d.ts.map +1 -0
  31. package/dist/commands/review-pr-label-suggest.js +78 -0
  32. package/dist/commands/review-pr-label-suggest.js.map +1 -0
  33. package/dist/commands/review-release-gate.d.ts +2 -0
  34. package/dist/commands/review-release-gate.d.ts.map +1 -0
  35. package/dist/commands/review-release-gate.js +82 -0
  36. package/dist/commands/review-release-gate.js.map +1 -0
  37. package/dist/commands/review-review-cadence.d.ts +2 -0
  38. package/dist/commands/review-review-cadence.d.ts.map +1 -0
  39. package/dist/commands/review-review-cadence.js +86 -0
  40. package/dist/commands/review-review-cadence.js.map +1 -0
  41. package/package.json +1 -1
  42. package/server.json +2 -2
@@ -0,0 +1,2 @@
1
+ export declare function runFindingAutoFixSuggest(argv: string[]): void;
2
+ //# sourceMappingURL=finding-auto-fix-suggest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finding-auto-fix-suggest.d.ts","sourceRoot":"","sources":["../../src/commands/finding-auto-fix-suggest.ts"],"names":[],"mappings":"AAsDA,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAiD7D"}
@@ -0,0 +1,77 @@
1
+ import { readFileSync, existsSync } from "fs";
2
+ import { join } from "path";
3
+ function suggestFixes(findings) {
4
+ const suggestions = [];
5
+ for (const f of findings) {
6
+ const hasPatch = f.patch !== undefined && f.patch !== null;
7
+ let effort;
8
+ if (hasPatch) {
9
+ effort = "Auto-fixable";
10
+ }
11
+ else if (f.severity === "info" || f.severity === "low") {
12
+ effort = "Quick fix";
13
+ }
14
+ else {
15
+ effort = "Manual review needed";
16
+ }
17
+ const suggestion = hasPatch ? `Apply patch: ${String(f.patch).slice(0, 80)}` : f.recommendation;
18
+ suggestions.push({
19
+ ruleId: f.ruleId,
20
+ title: f.title,
21
+ severity: f.severity,
22
+ hasPatch,
23
+ suggestion,
24
+ effort,
25
+ });
26
+ }
27
+ suggestions.sort((a, b) => {
28
+ if (a.hasPatch && !b.hasPatch)
29
+ return -1;
30
+ if (!a.hasPatch && b.hasPatch)
31
+ return 1;
32
+ return 0;
33
+ });
34
+ return suggestions;
35
+ }
36
+ export function runFindingAutoFixSuggest(argv) {
37
+ if (argv.includes("--help") || argv.includes("-h")) {
38
+ console.log(`Usage: judges finding-auto-fix-suggest [options]
39
+
40
+ Suggest automated fixes for findings.
41
+
42
+ Options:
43
+ --report <path> Path to verdict JSON file
44
+ --format <fmt> Output format: table (default) or json
45
+ -h, --help Show this help message`);
46
+ return;
47
+ }
48
+ const formatIdx = argv.indexOf("--format");
49
+ const format = formatIdx !== -1 && argv[formatIdx + 1] ? argv[formatIdx + 1] : "table";
50
+ const reportIdx = argv.indexOf("--report");
51
+ const reportPath = reportIdx !== -1 && argv[reportIdx + 1]
52
+ ? join(process.cwd(), argv[reportIdx + 1])
53
+ : join(process.cwd(), ".judges", "last-verdict.json");
54
+ if (!existsSync(reportPath)) {
55
+ console.log(`No report found at: ${reportPath}`);
56
+ return;
57
+ }
58
+ const data = JSON.parse(readFileSync(reportPath, "utf-8"));
59
+ const findings = data.findings ?? [];
60
+ if (findings.length === 0) {
61
+ console.log("No findings — nothing to fix.");
62
+ return;
63
+ }
64
+ const suggestions = suggestFixes(findings);
65
+ const autoFixable = suggestions.filter((s) => s.hasPatch).length;
66
+ if (format === "json") {
67
+ console.log(JSON.stringify({ autoFixable, total: suggestions.length, suggestions }, null, 2));
68
+ return;
69
+ }
70
+ console.log(`\n=== Fix Suggestions (${autoFixable} auto-fixable of ${suggestions.length}) ===\n`);
71
+ for (const s of suggestions) {
72
+ console.log(`[${s.effort}] ${s.ruleId}: ${s.title}`);
73
+ console.log(` ${s.suggestion}`);
74
+ console.log();
75
+ }
76
+ }
77
+ //# sourceMappingURL=finding-auto-fix-suggest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finding-auto-fix-suggest.js","sourceRoot":"","sources":["../../src/commands/finding-auto-fix-suggest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function runFindingBatchTriage(argv: string[]): void;
2
+ //# sourceMappingURL=finding-batch-triage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finding-batch-triage.d.ts","sourceRoot":"","sources":["../../src/commands/finding-batch-triage.ts"],"names":[],"mappings":"AAwDA,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA4D1D"}
@@ -0,0 +1,91 @@
1
+ import { readFileSync, existsSync, writeFileSync, mkdirSync } from "fs";
2
+ import { join } from "path";
3
+ function triageFindings(findings) {
4
+ const decisions = [];
5
+ const now = new Date().toISOString().slice(0, 10);
6
+ for (const f of findings) {
7
+ let action;
8
+ let assignedTo;
9
+ if (f.severity === "critical") {
10
+ action = "Fix immediately";
11
+ assignedTo = "security-lead";
12
+ }
13
+ else if (f.severity === "high") {
14
+ action = "Fix before release";
15
+ assignedTo = "team-lead";
16
+ }
17
+ else if (f.severity === "medium") {
18
+ action = "Schedule fix";
19
+ assignedTo = "developer";
20
+ }
21
+ else if (f.severity === "low") {
22
+ action = "Backlog";
23
+ assignedTo = "developer";
24
+ }
25
+ else {
26
+ action = "Acknowledge";
27
+ assignedTo = "any";
28
+ }
29
+ decisions.push({
30
+ ruleId: f.ruleId,
31
+ title: f.title,
32
+ severity: f.severity,
33
+ action,
34
+ assignedTo,
35
+ triagedAt: now,
36
+ });
37
+ }
38
+ return decisions;
39
+ }
40
+ export function runFindingBatchTriage(argv) {
41
+ if (argv.includes("--help") || argv.includes("-h")) {
42
+ console.log(`Usage: judges finding-batch-triage [options]
43
+
44
+ Batch triage findings with auto-assigned actions.
45
+
46
+ Options:
47
+ --report <path> Path to verdict JSON file
48
+ --save Save triage decisions to ledger
49
+ --format <fmt> Output format: table (default) or json
50
+ -h, --help Show this help message`);
51
+ return;
52
+ }
53
+ const formatIdx = argv.indexOf("--format");
54
+ const format = formatIdx !== -1 && argv[formatIdx + 1] ? argv[formatIdx + 1] : "table";
55
+ const save = argv.includes("--save");
56
+ const reportIdx = argv.indexOf("--report");
57
+ const reportPath = reportIdx !== -1 && argv[reportIdx + 1]
58
+ ? join(process.cwd(), argv[reportIdx + 1])
59
+ : join(process.cwd(), ".judges", "last-verdict.json");
60
+ if (!existsSync(reportPath)) {
61
+ console.log(`No report found at: ${reportPath}`);
62
+ return;
63
+ }
64
+ const data = JSON.parse(readFileSync(reportPath, "utf-8"));
65
+ const findings = data.findings ?? [];
66
+ if (findings.length === 0) {
67
+ console.log("No findings to triage.");
68
+ return;
69
+ }
70
+ const decisions = triageFindings(findings);
71
+ if (save) {
72
+ const triageDir = join(process.cwd(), ".judges");
73
+ if (!existsSync(triageDir)) {
74
+ mkdirSync(triageDir, { recursive: true });
75
+ }
76
+ const triagePath = join(triageDir, "triage-decisions.json");
77
+ writeFileSync(triagePath, JSON.stringify({ decisions }, null, 2), "utf-8");
78
+ console.log(`Triage decisions saved to: ${triagePath}`);
79
+ }
80
+ if (format === "json") {
81
+ console.log(JSON.stringify({ total: decisions.length, decisions }, null, 2));
82
+ return;
83
+ }
84
+ console.log(`\n=== Batch Triage (${decisions.length} findings) ===\n`);
85
+ for (const d of decisions) {
86
+ console.log(`[${d.severity.toUpperCase()}] ${d.ruleId}: ${d.title}`);
87
+ console.log(` Action: ${d.action} | Assigned: ${d.assignedTo}`);
88
+ console.log();
89
+ }
90
+ }
91
+ //# sourceMappingURL=finding-batch-triage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finding-batch-triage.js","sourceRoot":"","sources":["../../src/commands/finding-batch-triage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAiB5B,SAAS,cAAc,CAAC,QAAmB;IACzC,MAAM,SAAS,GAAqB,EAAE,CAAC;IACvC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAElD,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,MAAc,CAAC;QACnB,IAAI,UAAkB,CAAC;QAEvB,IAAI,CAAC,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;YAC9B,MAAM,GAAG,iBAAiB,CAAC;YAC3B,UAAU,GAAG,eAAe,CAAC;QAC/B,CAAC;aAAM,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;YACjC,MAAM,GAAG,oBAAoB,CAAC;YAC9B,UAAU,GAAG,WAAW,CAAC;QAC3B,CAAC;aAAM,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACnC,MAAM,GAAG,cAAc,CAAC;YACxB,UAAU,GAAG,WAAW,CAAC;QAC3B,CAAC;aAAM,IAAI,CAAC,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;YAChC,MAAM,GAAG,SAAS,CAAC;YACnB,UAAU,GAAG,WAAW,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,aAAa,CAAC;YACvB,UAAU,GAAG,KAAK,CAAC;QACrB,CAAC;QAED,SAAS,CAAC,IAAI,CAAC;YACb,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,MAAM;YACN,UAAU;YACV,SAAS,EAAE,GAAG;SACf,CAAC,CAAC;IACL,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAc;IAClD,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC;;;;;;;;8CAQ8B,CAAC,CAAC;QAC5C,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,SAAS,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IACvF,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAErC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,UAAU,GACd,SAAS,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACrC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;QAC1C,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,mBAAmB,CAAC,CAAC;IAE1D,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,uBAAuB,UAAU,EAAE,CAAC,CAAC;QACjD,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAoB,CAAC;IAC9E,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;IAErC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACtC,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAE3C,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;QACjD,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3B,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAC;QAC5D,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC3E,OAAO,CAAC,GAAG,CAAC,8BAA8B,UAAU,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7E,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,uBAAuB,SAAS,CAAC,MAAM,kBAAkB,CAAC,CAAC;IACvE,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,MAAM,gBAAgB,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function runFindingConfidenceBoost(argv: string[]): void;
2
+ //# sourceMappingURL=finding-confidence-boost.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finding-confidence-boost.d.ts","sourceRoot":"","sources":["../../src/commands/finding-confidence-boost.ts"],"names":[],"mappings":"AAoEA,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAoD9D"}
@@ -0,0 +1,89 @@
1
+ import { readFileSync, existsSync } from "fs";
2
+ import { join } from "path";
3
+ function boostConfidence(findings) {
4
+ // Build a map of rule occurrences for corroboration
5
+ const ruleCounts = new Map();
6
+ for (const f of findings) {
7
+ const prefix = f.ruleId.split("-")[0];
8
+ ruleCounts.set(prefix, (ruleCounts.get(prefix) ?? 0) + 1);
9
+ }
10
+ const boosts = [];
11
+ for (const f of findings) {
12
+ const original = f.confidence ?? 0.5;
13
+ let boosted = original;
14
+ const reasons = [];
15
+ // Multiple findings from same domain = corroboration
16
+ const prefix = f.ruleId.split("-")[0];
17
+ const domainCount = ruleCounts.get(prefix) ?? 0;
18
+ if (domainCount >= 3) {
19
+ boosted = Math.min(1, boosted + 0.1);
20
+ reasons.push(`${domainCount} corroborating findings in domain`);
21
+ }
22
+ // Has patch = higher confidence the issue is real
23
+ if (f.patch !== undefined && f.patch !== null) {
24
+ boosted = Math.min(1, boosted + 0.05);
25
+ reasons.push("patch available confirms issue");
26
+ }
27
+ // High severity + evidence = boost
28
+ if ((f.severity === "critical" || f.severity === "high") && f.evidenceBasis) {
29
+ boosted = Math.min(1, boosted + 0.05);
30
+ reasons.push("evidence-backed high severity");
31
+ }
32
+ if (reasons.length > 0) {
33
+ boosts.push({
34
+ ruleId: f.ruleId,
35
+ title: f.title,
36
+ originalConfidence: Math.round(original * 100),
37
+ boostedConfidence: Math.round(boosted * 100),
38
+ boostReasons: reasons,
39
+ });
40
+ }
41
+ }
42
+ boosts.sort((a, b) => b.boostedConfidence - b.originalConfidence - (a.boostedConfidence - a.originalConfidence));
43
+ return boosts;
44
+ }
45
+ export function runFindingConfidenceBoost(argv) {
46
+ if (argv.includes("--help") || argv.includes("-h")) {
47
+ console.log(`Usage: judges finding-confidence-boost [options]
48
+
49
+ Identify findings eligible for confidence boost.
50
+
51
+ Options:
52
+ --report <path> Path to verdict JSON file
53
+ --format <fmt> Output format: table (default) or json
54
+ -h, --help Show this help message`);
55
+ return;
56
+ }
57
+ const formatIdx = argv.indexOf("--format");
58
+ const format = formatIdx !== -1 && argv[formatIdx + 1] ? argv[formatIdx + 1] : "table";
59
+ const reportIdx = argv.indexOf("--report");
60
+ const reportPath = reportIdx !== -1 && argv[reportIdx + 1]
61
+ ? join(process.cwd(), argv[reportIdx + 1])
62
+ : join(process.cwd(), ".judges", "last-verdict.json");
63
+ if (!existsSync(reportPath)) {
64
+ console.log(`No report found at: ${reportPath}`);
65
+ return;
66
+ }
67
+ const data = JSON.parse(readFileSync(reportPath, "utf-8"));
68
+ const findings = data.findings ?? [];
69
+ if (findings.length === 0) {
70
+ console.log("No findings to analyze.");
71
+ return;
72
+ }
73
+ const boosts = boostConfidence(findings);
74
+ if (format === "json") {
75
+ console.log(JSON.stringify(boosts, null, 2));
76
+ return;
77
+ }
78
+ console.log(`\n=== Confidence Boost Analysis (${boosts.length} eligible) ===\n`);
79
+ for (const b of boosts) {
80
+ const delta = b.boostedConfidence - b.originalConfidence;
81
+ console.log(`${b.ruleId}: ${b.title}`);
82
+ console.log(` ${b.originalConfidence}% → ${b.boostedConfidence}% (+${delta}%)`);
83
+ for (const r of b.boostReasons) {
84
+ console.log(` • ${r}`);
85
+ }
86
+ console.log();
87
+ }
88
+ }
89
+ //# sourceMappingURL=finding-confidence-boost.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finding-confidence-boost.js","sourceRoot":"","sources":["../../src/commands/finding-confidence-boost.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function runFindingNoiseReduce(argv: string[]): void;
2
+ //# sourceMappingURL=finding-noise-reduce.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finding-noise-reduce.d.ts","sourceRoot":"","sources":["../../src/commands/finding-noise-reduce.ts"],"names":[],"mappings":"AAqEA,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAkD1D"}
@@ -0,0 +1,82 @@
1
+ import { readFileSync, existsSync } from "fs";
2
+ import { join } from "path";
3
+ function identifyNoise(findings) {
4
+ const candidates = [];
5
+ // Count rule occurrences for duplicate detection
6
+ const ruleCounts = new Map();
7
+ for (const f of findings) {
8
+ ruleCounts.set(f.ruleId, (ruleCounts.get(f.ruleId) ?? 0) + 1);
9
+ }
10
+ for (const f of findings) {
11
+ const conf = f.confidence ?? 0.5;
12
+ const reasons = [];
13
+ if (conf < 0.3) {
14
+ reasons.push("very low confidence");
15
+ }
16
+ if (f.severity === "info") {
17
+ reasons.push("informational only");
18
+ }
19
+ if ((ruleCounts.get(f.ruleId) ?? 0) > 3) {
20
+ reasons.push("repeated pattern");
21
+ }
22
+ if (reasons.length > 0) {
23
+ candidates.push({
24
+ ruleId: f.ruleId,
25
+ title: f.title,
26
+ severity: f.severity,
27
+ confidence: Math.round(conf * 100),
28
+ reason: reasons.join(", "),
29
+ });
30
+ }
31
+ }
32
+ const noisePct = findings.length > 0 ? Math.round((candidates.length / findings.length) * 100) : 0;
33
+ return {
34
+ totalFindings: findings.length,
35
+ noiseCount: candidates.length,
36
+ noisePct,
37
+ candidates,
38
+ };
39
+ }
40
+ export function runFindingNoiseReduce(argv) {
41
+ if (argv.includes("--help") || argv.includes("-h")) {
42
+ console.log(`Usage: judges finding-noise-reduce [options]
43
+
44
+ Identify and reduce noisy findings.
45
+
46
+ Options:
47
+ --report <path> Path to verdict JSON file
48
+ --format <fmt> Output format: table (default) or json
49
+ -h, --help Show this help message`);
50
+ return;
51
+ }
52
+ const formatIdx = argv.indexOf("--format");
53
+ const format = formatIdx !== -1 && argv[formatIdx + 1] ? argv[formatIdx + 1] : "table";
54
+ const reportIdx = argv.indexOf("--report");
55
+ const reportPath = reportIdx !== -1 && argv[reportIdx + 1]
56
+ ? join(process.cwd(), argv[reportIdx + 1])
57
+ : join(process.cwd(), ".judges", "last-verdict.json");
58
+ if (!existsSync(reportPath)) {
59
+ console.log(`No report found at: ${reportPath}`);
60
+ return;
61
+ }
62
+ const data = JSON.parse(readFileSync(reportPath, "utf-8"));
63
+ const findings = data.findings ?? [];
64
+ const report = identifyNoise(findings);
65
+ if (format === "json") {
66
+ console.log(JSON.stringify(report, null, 2));
67
+ return;
68
+ }
69
+ console.log(`\n=== Noise Analysis ===\n`);
70
+ console.log(`Total findings: ${report.totalFindings}`);
71
+ console.log(`Noise candidates: ${report.noiseCount} (${report.noisePct}%)\n`);
72
+ if (report.candidates.length === 0) {
73
+ console.log("No noisy findings detected — signal is clean.");
74
+ return;
75
+ }
76
+ for (const c of report.candidates) {
77
+ console.log(` ${c.ruleId}: ${c.title}`);
78
+ console.log(` ${c.severity} | ${c.confidence}% conf | ${c.reason}`);
79
+ }
80
+ console.log("\nConsider suppressing these rules to reduce noise.");
81
+ }
82
+ //# sourceMappingURL=finding-noise-reduce.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finding-noise-reduce.js","sourceRoot":"","sources":["../../src/commands/finding-noise-reduce.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function runFindingScopeFilter(argv: string[]): void;
2
+ //# sourceMappingURL=finding-scope-filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finding-scope-filter.d.ts","sourceRoot":"","sources":["../../src/commands/finding-scope-filter.ts"],"names":[],"mappings":"AAwCA,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA2D1D"}
@@ -0,0 +1,78 @@
1
+ import { readFileSync, existsSync } from "fs";
2
+ import { join } from "path";
3
+ /* ── finding-scope-filter ───────────────────────────────────────────
4
+ Filter findings by scope — rule prefix, severity, confidence,
5
+ or keyword — to focus on relevant subsets during triage.
6
+ ─────────────────────────────────────────────────────────────────── */
7
+ function filterFindings(findings, opts) {
8
+ let result = findings;
9
+ if (opts.rule) {
10
+ const prefix = opts.rule.toUpperCase();
11
+ result = result.filter((f) => f.ruleId.toUpperCase().startsWith(prefix));
12
+ }
13
+ if (opts.severity) {
14
+ const sev = opts.severity.toLowerCase();
15
+ result = result.filter((f) => f.severity === sev);
16
+ }
17
+ if (opts.minConfidence !== undefined) {
18
+ result = result.filter((f) => (f.confidence ?? 0) >= opts.minConfidence);
19
+ }
20
+ if (opts.keyword) {
21
+ const kw = opts.keyword.toLowerCase();
22
+ result = result.filter((f) => {
23
+ const text = `${f.ruleId} ${f.title} ${f.description}`.toLowerCase();
24
+ return text.includes(kw);
25
+ });
26
+ }
27
+ return result;
28
+ }
29
+ export function runFindingScopeFilter(argv) {
30
+ if (argv.includes("--help") || argv.includes("-h")) {
31
+ console.log(`Usage: judges finding-scope-filter [options]
32
+
33
+ Filter findings by scope criteria.
34
+
35
+ Options:
36
+ --report <path> Path to verdict JSON file
37
+ --rule <prefix> Filter by rule prefix (e.g., SEC, PERF)
38
+ --severity <level> Filter by severity
39
+ --min-confidence <n> Minimum confidence (0-1)
40
+ --keyword <text> Filter by keyword in title/description
41
+ --format <fmt> Output format: table (default) or json
42
+ -h, --help Show this help message`);
43
+ return;
44
+ }
45
+ const formatIdx = argv.indexOf("--format");
46
+ const format = formatIdx !== -1 && argv[formatIdx + 1] ? argv[formatIdx + 1] : "table";
47
+ const reportIdx = argv.indexOf("--report");
48
+ const reportPath = reportIdx !== -1 && argv[reportIdx + 1]
49
+ ? join(process.cwd(), argv[reportIdx + 1])
50
+ : join(process.cwd(), ".judges", "last-verdict.json");
51
+ const ruleIdx = argv.indexOf("--rule");
52
+ const rule = ruleIdx !== -1 && argv[ruleIdx + 1] ? argv[ruleIdx + 1] : undefined;
53
+ const sevIdx = argv.indexOf("--severity");
54
+ const severity = sevIdx !== -1 && argv[sevIdx + 1] ? argv[sevIdx + 1] : undefined;
55
+ const confIdx = argv.indexOf("--min-confidence");
56
+ const minConfidence = confIdx !== -1 && argv[confIdx + 1] ? parseFloat(argv[confIdx + 1]) : undefined;
57
+ const kwIdx = argv.indexOf("--keyword");
58
+ const keyword = kwIdx !== -1 && argv[kwIdx + 1] ? argv[kwIdx + 1] : undefined;
59
+ if (!existsSync(reportPath)) {
60
+ console.log(`No report found at: ${reportPath}`);
61
+ return;
62
+ }
63
+ const data = JSON.parse(readFileSync(reportPath, "utf-8"));
64
+ const findings = data.findings ?? [];
65
+ const filtered = filterFindings(findings, { rule, severity, minConfidence, keyword });
66
+ if (format === "json") {
67
+ console.log(JSON.stringify({ total: findings.length, filtered: filtered.length, findings: filtered }, null, 2));
68
+ return;
69
+ }
70
+ console.log(`\n=== Filtered Findings: ${filtered.length} of ${findings.length} ===\n`);
71
+ for (const f of filtered) {
72
+ console.log(`[${f.severity.toUpperCase()}] ${f.ruleId}: ${f.title}`);
73
+ }
74
+ if (filtered.length === 0) {
75
+ console.log("No findings match the filter criteria.");
76
+ }
77
+ }
78
+ //# sourceMappingURL=finding-scope-filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finding-scope-filter.js","sourceRoot":"","sources":["../../src/commands/finding-scope-filter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function runReviewCodeOwnership(argv: string[]): void;
2
+ //# sourceMappingURL=review-code-ownership.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-code-ownership.d.ts","sourceRoot":"","sources":["../../src/commands/review-code-ownership.ts"],"names":[],"mappings":"AAyDA,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAgE3D"}
@@ -0,0 +1,89 @@
1
+ import { readFileSync, existsSync } from "fs";
2
+ import { join } from "path";
3
+ function matchOwner(ruleId, rules) {
4
+ for (const rule of rules) {
5
+ if (ruleId.toUpperCase().startsWith(rule.pattern.toUpperCase())) {
6
+ return rule.owners;
7
+ }
8
+ }
9
+ return ["unassigned"];
10
+ }
11
+ function mapOwnership(findings, ownerRules) {
12
+ const ownerMap = new Map();
13
+ for (const f of findings) {
14
+ const owners = matchOwner(f.ruleId, ownerRules);
15
+ for (const owner of owners) {
16
+ const list = ownerMap.get(owner) ?? [];
17
+ list.push({ ruleId: f.ruleId, title: f.title, severity: f.severity });
18
+ ownerMap.set(owner, list);
19
+ }
20
+ }
21
+ const mappings = [];
22
+ for (const [owner, ownerFindings] of ownerMap) {
23
+ const criticalCount = ownerFindings.filter((f) => f.severity === "critical").length;
24
+ mappings.push({
25
+ owner,
26
+ findingCount: ownerFindings.length,
27
+ criticalCount,
28
+ findings: ownerFindings,
29
+ });
30
+ }
31
+ mappings.sort((a, b) => b.findingCount - a.findingCount);
32
+ return mappings;
33
+ }
34
+ export function runReviewCodeOwnership(argv) {
35
+ if (argv.includes("--help") || argv.includes("-h")) {
36
+ console.log(`Usage: judges review-code-ownership [options]
37
+
38
+ Map findings to code owners.
39
+
40
+ Options:
41
+ --report <path> Path to verdict JSON file
42
+ --owners <path> Path to ownership rules JSON
43
+ --format <fmt> Output format: table (default) or json
44
+ -h, --help Show this help message`);
45
+ return;
46
+ }
47
+ const formatIdx = argv.indexOf("--format");
48
+ const format = formatIdx !== -1 && argv[formatIdx + 1] ? argv[formatIdx + 1] : "table";
49
+ const reportIdx = argv.indexOf("--report");
50
+ const reportPath = reportIdx !== -1 && argv[reportIdx + 1]
51
+ ? join(process.cwd(), argv[reportIdx + 1])
52
+ : join(process.cwd(), ".judges", "last-verdict.json");
53
+ const ownIdx = argv.indexOf("--owners");
54
+ const ownPath = ownIdx !== -1 && argv[ownIdx + 1]
55
+ ? join(process.cwd(), argv[ownIdx + 1])
56
+ : join(process.cwd(), ".judges", "code-owners.json");
57
+ if (!existsSync(reportPath)) {
58
+ console.log(`No report found at: ${reportPath}`);
59
+ return;
60
+ }
61
+ const data = JSON.parse(readFileSync(reportPath, "utf-8"));
62
+ const findings = data.findings ?? [];
63
+ let ownerRules;
64
+ if (existsSync(ownPath)) {
65
+ const ownData = JSON.parse(readFileSync(ownPath, "utf-8"));
66
+ ownerRules = ownData.rules ?? [];
67
+ }
68
+ else {
69
+ ownerRules = [
70
+ { pattern: "SEC", owners: ["security-team"] },
71
+ { pattern: "PERF", owners: ["performance-team"] },
72
+ ];
73
+ console.log(`No ownership config found. Using defaults.\nCreate ${ownPath} for custom mappings.\n`);
74
+ }
75
+ const mappings = mapOwnership(findings, ownerRules);
76
+ if (format === "json") {
77
+ console.log(JSON.stringify(mappings, null, 2));
78
+ return;
79
+ }
80
+ console.log("\n=== Code Ownership ===\n");
81
+ for (const m of mappings) {
82
+ console.log(`${m.owner}: ${m.findingCount} findings (${m.criticalCount} critical)`);
83
+ for (const f of m.findings) {
84
+ console.log(` [${f.severity.toUpperCase()}] ${f.ruleId}: ${f.title}`);
85
+ }
86
+ console.log();
87
+ }
88
+ }
89
+ //# sourceMappingURL=review-code-ownership.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-code-ownership.js","sourceRoot":"","sources":["../../src/commands/review-code-ownership.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function runReviewPrLabelSuggest(argv: string[]): void;
2
+ //# sourceMappingURL=review-pr-label-suggest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-pr-label-suggest.d.ts","sourceRoot":"","sources":["../../src/commands/review-pr-label-suggest.ts"],"names":[],"mappings":"AA4DA,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAwC5D"}