@kevinrabun/judges 3.110.0 → 3.112.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 +26 -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-auto-priority.d.ts +2 -0
- package/dist/commands/finding-auto-priority.d.ts.map +1 -0
- package/dist/commands/finding-auto-priority.js +101 -0
- package/dist/commands/finding-auto-priority.js.map +1 -0
- package/dist/commands/finding-cluster-summary.d.ts +2 -0
- package/dist/commands/finding-cluster-summary.d.ts.map +1 -0
- package/dist/commands/finding-cluster-summary.js +86 -0
- package/dist/commands/finding-cluster-summary.js.map +1 -0
- package/dist/commands/finding-context-link.d.ts +2 -0
- package/dist/commands/finding-context-link.d.ts.map +1 -0
- package/dist/commands/finding-context-link.js +95 -0
- package/dist/commands/finding-context-link.js.map +1 -0
- package/dist/commands/finding-dependency-impact.d.ts +2 -0
- package/dist/commands/finding-dependency-impact.d.ts.map +1 -0
- package/dist/commands/finding-dependency-impact.js +98 -0
- package/dist/commands/finding-dependency-impact.js.map +1 -0
- package/dist/commands/finding-fix-estimate.d.ts +2 -0
- package/dist/commands/finding-fix-estimate.d.ts.map +1 -0
- package/dist/commands/finding-fix-estimate.js +96 -0
- package/dist/commands/finding-fix-estimate.js.map +1 -0
- package/dist/commands/finding-noise-score.d.ts +2 -0
- package/dist/commands/finding-noise-score.d.ts.map +1 -0
- package/dist/commands/finding-noise-score.js +94 -0
- package/dist/commands/finding-noise-score.js.map +1 -0
- package/dist/commands/finding-repeat-detect.d.ts +2 -0
- package/dist/commands/finding-repeat-detect.d.ts.map +1 -0
- package/dist/commands/finding-repeat-detect.js +93 -0
- package/dist/commands/finding-repeat-detect.js.map +1 -0
- package/dist/commands/finding-resolution-workflow.d.ts +2 -0
- package/dist/commands/finding-resolution-workflow.d.ts.map +1 -0
- package/dist/commands/finding-resolution-workflow.js +92 -0
- package/dist/commands/finding-resolution-workflow.js.map +1 -0
- package/dist/commands/finding-scope-impact.d.ts +2 -0
- package/dist/commands/finding-scope-impact.d.ts.map +1 -0
- package/dist/commands/finding-scope-impact.js +84 -0
- package/dist/commands/finding-scope-impact.js.map +1 -0
- package/dist/commands/finding-top-offender.d.ts +2 -0
- package/dist/commands/finding-top-offender.d.ts.map +1 -0
- package/dist/commands/finding-top-offender.js +76 -0
- package/dist/commands/finding-top-offender.js.map +1 -0
- package/dist/commands/review-health-trend.d.ts +2 -0
- package/dist/commands/review-health-trend.d.ts.map +1 -0
- package/dist/commands/review-health-trend.js +108 -0
- package/dist/commands/review-health-trend.js.map +1 -0
- package/dist/commands/review-mentor-suggest.d.ts +2 -0
- package/dist/commands/review-mentor-suggest.d.ts.map +1 -0
- package/dist/commands/review-mentor-suggest.js +113 -0
- package/dist/commands/review-mentor-suggest.js.map +1 -0
- package/dist/commands/review-quality-baseline.d.ts +2 -0
- package/dist/commands/review-quality-baseline.d.ts.map +1 -0
- package/dist/commands/review-quality-baseline.js +135 -0
- package/dist/commands/review-quality-baseline.js.map +1 -0
- package/dist/commands/review-readiness-check.d.ts +2 -0
- package/dist/commands/review-readiness-check.d.ts.map +1 -0
- package/dist/commands/review-readiness-check.js +99 -0
- package/dist/commands/review-readiness-check.js.map +1 -0
- package/dist/commands/review-retrospective.d.ts +2 -0
- package/dist/commands/review-retrospective.d.ts.map +1 -0
- package/dist/commands/review-retrospective.js +119 -0
- package/dist/commands/review-retrospective.js.map +1 -0
- package/dist/commands/review-team-skill-map.d.ts +2 -0
- package/dist/commands/review-team-skill-map.d.ts.map +1 -0
- package/dist/commands/review-team-skill-map.js +103 -0
- package/dist/commands/review-team-skill-map.js.map +1 -0
- package/dist/commands/review-team-velocity.d.ts +2 -0
- package/dist/commands/review-team-velocity.d.ts.map +1 -0
- package/dist/commands/review-team-velocity.js +104 -0
- package/dist/commands/review-team-velocity.js.map +1 -0
- package/dist/commands/review-workflow-suggest.d.ts +2 -0
- package/dist/commands/review-workflow-suggest.d.ts.map +1 -0
- package/dist/commands/review-workflow-suggest.js +130 -0
- package/dist/commands/review-workflow-suggest.js.map +1 -0
- package/package.json +1 -1
- package/server.json +2 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-team-skill-map.js","sourceRoot":"","sources":["../../src/commands/review-team-skill-map.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-team-velocity.d.ts","sourceRoot":"","sources":["../../src/commands/review-team-velocity.ts"],"names":[],"mappings":"AA2FA,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAsD1D"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { readFileSync, existsSync, readdirSync } from "fs";
|
|
2
|
+
import { join } from "path";
|
|
3
|
+
function computeVelocity(historyDir) {
|
|
4
|
+
const empty = {
|
|
5
|
+
totalReviews: 0,
|
|
6
|
+
periods: [],
|
|
7
|
+
avgReviewsPerPeriod: 0,
|
|
8
|
+
acceleration: "unknown",
|
|
9
|
+
};
|
|
10
|
+
if (!existsSync(historyDir))
|
|
11
|
+
return empty;
|
|
12
|
+
const files = readdirSync(historyDir)
|
|
13
|
+
.filter((f) => typeof f === "string" && f.endsWith(".json"))
|
|
14
|
+
.sort();
|
|
15
|
+
if (files.length === 0)
|
|
16
|
+
return empty;
|
|
17
|
+
// Group by month from timestamps
|
|
18
|
+
const monthMap = new Map();
|
|
19
|
+
for (const file of files) {
|
|
20
|
+
try {
|
|
21
|
+
const data = JSON.parse(readFileSync(join(historyDir, file), "utf-8"));
|
|
22
|
+
const ts = data.timestamp ?? file.replace(".json", "");
|
|
23
|
+
const month = ts.slice(0, 7) || "unknown";
|
|
24
|
+
const entry = monthMap.get(month) ?? { reviews: 0, findings: 0, scores: [], passes: 0 };
|
|
25
|
+
entry.reviews++;
|
|
26
|
+
entry.findings += (data.findings ?? []).length;
|
|
27
|
+
entry.scores.push(data.overallScore ?? 0);
|
|
28
|
+
if (data.overallVerdict === "pass")
|
|
29
|
+
entry.passes++;
|
|
30
|
+
monthMap.set(month, entry);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
// Skip
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
const periods = [];
|
|
37
|
+
for (const [month, data] of monthMap) {
|
|
38
|
+
const avgScore = data.scores.length > 0 ? Math.round(data.scores.reduce((a, b) => a + b, 0) / data.scores.length) : 0;
|
|
39
|
+
periods.push({
|
|
40
|
+
period: month,
|
|
41
|
+
reviews: data.reviews,
|
|
42
|
+
findings: data.findings,
|
|
43
|
+
avgScore,
|
|
44
|
+
passRate: data.reviews > 0 ? Math.round((data.passes / data.reviews) * 100) : 0,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
periods.sort((a, b) => a.period.localeCompare(b.period));
|
|
48
|
+
const totalReviews = periods.reduce((s, p) => s + p.reviews, 0);
|
|
49
|
+
const avgPerPeriod = periods.length > 0 ? Math.round(totalReviews / periods.length) : 0;
|
|
50
|
+
let acceleration = "stable";
|
|
51
|
+
if (periods.length >= 2) {
|
|
52
|
+
const firstHalf = periods.slice(0, Math.floor(periods.length / 2));
|
|
53
|
+
const secondHalf = periods.slice(Math.floor(periods.length / 2));
|
|
54
|
+
const firstAvg = firstHalf.reduce((s, p) => s + p.reviews, 0) / firstHalf.length;
|
|
55
|
+
const secondAvg = secondHalf.reduce((s, p) => s + p.reviews, 0) / secondHalf.length;
|
|
56
|
+
if (secondAvg > firstAvg * 1.1)
|
|
57
|
+
acceleration = "accelerating";
|
|
58
|
+
else if (secondAvg < firstAvg * 0.9)
|
|
59
|
+
acceleration = "decelerating";
|
|
60
|
+
}
|
|
61
|
+
return { totalReviews, periods, avgReviewsPerPeriod: avgPerPeriod, acceleration };
|
|
62
|
+
}
|
|
63
|
+
export function runReviewTeamVelocity(argv) {
|
|
64
|
+
if (argv.includes("--help") || argv.includes("-h")) {
|
|
65
|
+
console.log(`Usage: judges review-team-velocity [options]
|
|
66
|
+
|
|
67
|
+
Track team review velocity metrics.
|
|
68
|
+
|
|
69
|
+
Options:
|
|
70
|
+
--history <path> Path to review history directory
|
|
71
|
+
--format <fmt> Output format: table (default) or json
|
|
72
|
+
-h, --help Show this help message`);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const formatIdx = argv.indexOf("--format");
|
|
76
|
+
const format = formatIdx !== -1 && argv[formatIdx + 1] ? argv[formatIdx + 1] : "table";
|
|
77
|
+
const histIdx = argv.indexOf("--history");
|
|
78
|
+
const historyDir = histIdx !== -1 && argv[histIdx + 1]
|
|
79
|
+
? join(process.cwd(), argv[histIdx + 1])
|
|
80
|
+
: join(process.cwd(), ".judges", "history");
|
|
81
|
+
const report = computeVelocity(historyDir);
|
|
82
|
+
if (format === "json") {
|
|
83
|
+
console.log(JSON.stringify(report, null, 2));
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
console.log(`\n=== Team Velocity (${report.totalReviews} reviews, ${report.acceleration}) ===\n`);
|
|
87
|
+
if (report.periods.length === 0) {
|
|
88
|
+
console.log("No review history found.");
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
console.log(" " + "Period".padEnd(12) + "Reviews".padEnd(10) + "Findings".padEnd(10) + "Avg Score".padEnd(12) + "Pass Rate");
|
|
92
|
+
console.log(" " + "-".repeat(55));
|
|
93
|
+
for (const p of report.periods) {
|
|
94
|
+
console.log(" " +
|
|
95
|
+
p.period.padEnd(12) +
|
|
96
|
+
String(p.reviews).padEnd(10) +
|
|
97
|
+
String(p.findings).padEnd(10) +
|
|
98
|
+
String(p.avgScore).padEnd(12) +
|
|
99
|
+
`${p.passRate}%`);
|
|
100
|
+
}
|
|
101
|
+
console.log(`\n Avg Reviews/Period: ${report.avgReviewsPerPeriod}`);
|
|
102
|
+
console.log(` Trend: ${report.acceleration}`);
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=review-team-velocity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-team-velocity.js","sourceRoot":"","sources":["../../src/commands/review-team-velocity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-workflow-suggest.d.ts","sourceRoot":"","sources":["../../src/commands/review-workflow-suggest.ts"],"names":[],"mappings":"AA8HA,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAkC7D"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { readFileSync, existsSync, readdirSync } from "fs";
|
|
2
|
+
import { join } from "path";
|
|
3
|
+
function buildSuggestions(baseDir) {
|
|
4
|
+
const suggestions = [];
|
|
5
|
+
const configPath = join(baseDir, ".judgesrc.json");
|
|
6
|
+
if (!existsSync(configPath)) {
|
|
7
|
+
suggestions.push({
|
|
8
|
+
area: "Configuration",
|
|
9
|
+
suggestion: "Create .judgesrc.json with judges init",
|
|
10
|
+
priority: "high",
|
|
11
|
+
reason: "No config file found — using defaults may produce noisy results",
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
const baselinePath = join(baseDir, ".judges", "baseline.json");
|
|
15
|
+
if (!existsSync(baselinePath)) {
|
|
16
|
+
suggestions.push({
|
|
17
|
+
area: "Baseline",
|
|
18
|
+
suggestion: "Generate a baseline to suppress known findings",
|
|
19
|
+
priority: "high",
|
|
20
|
+
reason: "Without a baseline, existing issues flood every review",
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
const historyDir = join(baseDir, ".judges", "history");
|
|
24
|
+
let historyCount = 0;
|
|
25
|
+
if (existsSync(historyDir)) {
|
|
26
|
+
const files = readdirSync(historyDir);
|
|
27
|
+
historyCount = files.filter((f) => String(f).endsWith(".json")).length;
|
|
28
|
+
}
|
|
29
|
+
if (historyCount === 0) {
|
|
30
|
+
suggestions.push({
|
|
31
|
+
area: "Review cadence",
|
|
32
|
+
suggestion: "Start with weekly reviews, then move to per-PR",
|
|
33
|
+
priority: "medium",
|
|
34
|
+
reason: "No review history — establish a rhythm before scaling up",
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
else if (historyCount < 5) {
|
|
38
|
+
suggestions.push({
|
|
39
|
+
area: "Review cadence",
|
|
40
|
+
suggestion: "Consider integrating into CI for automatic PR reviews",
|
|
41
|
+
priority: "medium",
|
|
42
|
+
reason: `Only ${historyCount} reviews on file — automate to increase coverage`,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
const lastVerdictPath = join(baseDir, ".judges", "last-verdict.json");
|
|
46
|
+
if (existsSync(lastVerdictPath)) {
|
|
47
|
+
try {
|
|
48
|
+
const raw = readFileSync(lastVerdictPath, "utf-8");
|
|
49
|
+
const verdict = JSON.parse(raw);
|
|
50
|
+
const findings = verdict.findings ?? [];
|
|
51
|
+
const criticals = findings.filter((f) => f.severity === "critical").length;
|
|
52
|
+
const highs = findings.filter((f) => f.severity === "high").length;
|
|
53
|
+
if (criticals > 5) {
|
|
54
|
+
suggestions.push({
|
|
55
|
+
area: "Security focus",
|
|
56
|
+
suggestion: "Enable focused security judge preset",
|
|
57
|
+
priority: "high",
|
|
58
|
+
reason: `${criticals} critical findings — prioritise security review`,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
if (highs > 10) {
|
|
62
|
+
suggestions.push({
|
|
63
|
+
area: "Severity tuning",
|
|
64
|
+
suggestion: "Review minSeverity setting to reduce noise",
|
|
65
|
+
priority: "medium",
|
|
66
|
+
reason: `${highs} high-severity findings may cause alert fatigue`,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
if (findings.length > 50) {
|
|
70
|
+
suggestions.push({
|
|
71
|
+
area: "Scope",
|
|
72
|
+
suggestion: "Use diff-only mode to review only changed code",
|
|
73
|
+
priority: "medium",
|
|
74
|
+
reason: `${findings.length} findings — full-scan mode may overwhelm developers`,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
const patchable = findings.filter((f) => f.patch !== undefined && f.patch !== null).length;
|
|
78
|
+
if (patchable > 0) {
|
|
79
|
+
suggestions.push({
|
|
80
|
+
area: "Autofix",
|
|
81
|
+
suggestion: "Enable auto-fix to apply available patches automatically",
|
|
82
|
+
priority: "low",
|
|
83
|
+
reason: `${patchable} findings have patches — auto-apply saves time`,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
/* skip if parse fails */
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
if (suggestions.length === 0) {
|
|
92
|
+
suggestions.push({
|
|
93
|
+
area: "General",
|
|
94
|
+
suggestion: "Current workflow looks good — continue iterating",
|
|
95
|
+
priority: "low",
|
|
96
|
+
reason: "No obvious improvements detected",
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
return suggestions;
|
|
100
|
+
}
|
|
101
|
+
export function runReviewWorkflowSuggest(argv) {
|
|
102
|
+
if (argv.includes("--help") || argv.includes("-h")) {
|
|
103
|
+
console.log(`Usage: judges review-workflow-suggest [options]
|
|
104
|
+
|
|
105
|
+
Suggest optimal review workflows based on project characteristics.
|
|
106
|
+
|
|
107
|
+
Options:
|
|
108
|
+
--dir <path> Project directory (default: cwd)
|
|
109
|
+
--format <fmt> Output format: table (default) or json
|
|
110
|
+
-h, --help Show this help message`);
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
const formatIdx = argv.indexOf("--format");
|
|
114
|
+
const format = formatIdx !== -1 && argv[formatIdx + 1] ? argv[formatIdx + 1] : "table";
|
|
115
|
+
const dirIdx = argv.indexOf("--dir");
|
|
116
|
+
const baseDir = dirIdx !== -1 && argv[dirIdx + 1] ? join(process.cwd(), argv[dirIdx + 1]) : process.cwd();
|
|
117
|
+
const suggestions = buildSuggestions(baseDir);
|
|
118
|
+
if (format === "json") {
|
|
119
|
+
console.log(JSON.stringify(suggestions, null, 2));
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
console.log(`\n=== Workflow Suggestions (${suggestions.length}) ===\n`);
|
|
123
|
+
for (const s of suggestions) {
|
|
124
|
+
console.log(` [${s.priority.toUpperCase()}] ${s.area}`);
|
|
125
|
+
console.log(` ${s.suggestion}`);
|
|
126
|
+
console.log(` Reason: ${s.reason}`);
|
|
127
|
+
console.log();
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=review-workflow-suggest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-workflow-suggest.js","sourceRoot":"","sources":["../../src/commands/review-workflow-suggest.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/server.json
CHANGED
|
@@ -7,12 +7,12 @@
|
|
|
7
7
|
"url": "https://github.com/kevinrabun/judges",
|
|
8
8
|
"source": "github"
|
|
9
9
|
},
|
|
10
|
-
"version": "3.
|
|
10
|
+
"version": "3.112.0",
|
|
11
11
|
"packages": [
|
|
12
12
|
{
|
|
13
13
|
"registryType": "npm",
|
|
14
14
|
"identifier": "@kevinrabun/judges",
|
|
15
|
-
"version": "3.
|
|
15
|
+
"version": "3.112.0",
|
|
16
16
|
"transport": {
|
|
17
17
|
"type": "stdio"
|
|
18
18
|
}
|