@kevinrabun/judges 3.3.0 → 3.5.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/README.md +310 -1
- package/dist/ast/tree-sitter-ast.js +2 -4
- package/dist/ast/tree-sitter-ast.js.map +1 -1
- package/dist/cli.d.ts +8 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +438 -12
- package/dist/cli.js.map +1 -1
- package/dist/commands/baseline.d.ts +2 -0
- package/dist/commands/baseline.d.ts.map +1 -0
- package/dist/commands/baseline.js +126 -0
- package/dist/commands/baseline.js.map +1 -0
- package/dist/commands/ci-templates.d.ts +10 -0
- package/dist/commands/ci-templates.d.ts.map +1 -0
- package/dist/commands/ci-templates.js +90 -0
- package/dist/commands/ci-templates.js.map +1 -0
- package/dist/commands/completions.d.ts +2 -0
- package/dist/commands/completions.d.ts.map +1 -0
- package/dist/commands/completions.js +226 -0
- package/dist/commands/completions.js.map +1 -0
- package/dist/commands/deps.d.ts +6 -0
- package/dist/commands/deps.d.ts.map +1 -0
- package/dist/commands/deps.js +123 -0
- package/dist/commands/deps.js.map +1 -0
- package/dist/commands/diff.d.ts +7 -0
- package/dist/commands/diff.d.ts.map +1 -0
- package/dist/commands/diff.js +209 -0
- package/dist/commands/diff.js.map +1 -0
- package/dist/commands/docs.d.ts +2 -0
- package/dist/commands/docs.d.ts.map +1 -0
- package/dist/commands/docs.js +157 -0
- package/dist/commands/docs.js.map +1 -0
- package/dist/commands/fix.d.ts +21 -0
- package/dist/commands/fix.d.ts.map +1 -0
- package/dist/commands/fix.js +189 -0
- package/dist/commands/fix.js.map +1 -0
- package/dist/commands/hook.d.ts +9 -0
- package/dist/commands/hook.d.ts.map +1 -0
- package/dist/commands/hook.js +149 -0
- package/dist/commands/hook.js.map +1 -0
- package/dist/commands/init.d.ts +11 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +266 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/report.d.ts +13 -0
- package/dist/commands/report.d.ts.map +1 -0
- package/dist/commands/report.js +140 -0
- package/dist/commands/report.js.map +1 -0
- package/dist/commands/watch.d.ts +18 -0
- package/dist/commands/watch.d.ts.map +1 -0
- package/dist/commands/watch.js +183 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/formatters/badge.d.ts +17 -0
- package/dist/formatters/badge.d.ts.map +1 -0
- package/dist/formatters/badge.js +79 -0
- package/dist/formatters/badge.js.map +1 -0
- package/dist/formatters/codeclimate.d.ts +25 -0
- package/dist/formatters/codeclimate.d.ts.map +1 -0
- package/dist/formatters/codeclimate.js +81 -0
- package/dist/formatters/codeclimate.js.map +1 -0
- package/dist/formatters/html.d.ts +13 -0
- package/dist/formatters/html.d.ts.map +1 -0
- package/dist/formatters/html.js +219 -0
- package/dist/formatters/html.js.map +1 -0
- package/dist/formatters/junit.d.ts +7 -0
- package/dist/formatters/junit.d.ts.map +1 -0
- package/dist/formatters/junit.js +69 -0
- package/dist/formatters/junit.js.map +1 -0
- package/dist/index.js +23 -3
- package/dist/index.js.map +1 -1
- package/dist/presets.d.ts +22 -0
- package/dist/presets.d.ts.map +1 -0
- package/dist/presets.js +115 -0
- package/dist/presets.js.map +1 -0
- package/judgesrc.schema.json +74 -0
- package/package.json +14 -1
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
// ─── Diff Command ────────────────────────────────────────────────────────────
|
|
2
|
+
// Evaluate only changed lines from a unified diff or git diff output.
|
|
3
|
+
//
|
|
4
|
+
// Usage:
|
|
5
|
+
// git diff HEAD~1 | judges diff --language typescript
|
|
6
|
+
// judges diff --file changes.patch --language typescript
|
|
7
|
+
// ──────────────────────────────────────────────────────────────────────────────
|
|
8
|
+
import { readFileSync, existsSync } from "fs";
|
|
9
|
+
import { resolve, extname } from "path";
|
|
10
|
+
import { evaluateDiff } from "../evaluators/index.js";
|
|
11
|
+
/**
|
|
12
|
+
* Parse a unified diff into hunks with changed line information.
|
|
13
|
+
* Handles `git diff` and standard `diff -u` output.
|
|
14
|
+
*/
|
|
15
|
+
function parseUnifiedDiff(diffText) {
|
|
16
|
+
const hunks = [];
|
|
17
|
+
const lines = diffText.split("\n");
|
|
18
|
+
let currentFile;
|
|
19
|
+
let newLines = [];
|
|
20
|
+
let changedLineNumbers = [];
|
|
21
|
+
let newLineNum = 0;
|
|
22
|
+
function flushFile() {
|
|
23
|
+
if (currentFile && (newLines.length > 0 || changedLineNumbers.length > 0)) {
|
|
24
|
+
hunks.push({
|
|
25
|
+
filePath: currentFile,
|
|
26
|
+
newContent: newLines.join("\n"),
|
|
27
|
+
changedLines: changedLineNumbers,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
newLines = [];
|
|
31
|
+
changedLineNumbers = [];
|
|
32
|
+
newLineNum = 0;
|
|
33
|
+
}
|
|
34
|
+
for (const line of lines) {
|
|
35
|
+
// New file header: +++ b/path/to/file.ts
|
|
36
|
+
if (line.startsWith("+++ ")) {
|
|
37
|
+
const path = line.slice(4).replace(/^b\//, "").trim();
|
|
38
|
+
if (path !== "/dev/null") {
|
|
39
|
+
flushFile();
|
|
40
|
+
currentFile = path;
|
|
41
|
+
}
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
// Skip --- header
|
|
45
|
+
if (line.startsWith("--- "))
|
|
46
|
+
continue;
|
|
47
|
+
// Hunk header: @@ -10,5 +20,8 @@
|
|
48
|
+
const hunkMatch = line.match(/^@@ -\d+(?:,\d+)? \+(\d+)(?:,\d+)? @@/);
|
|
49
|
+
if (hunkMatch) {
|
|
50
|
+
newLineNum = parseInt(hunkMatch[1], 10) - 1; // will increment on first line
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
// diff --git header — skip
|
|
54
|
+
if (line.startsWith("diff --git ") || line.startsWith("index "))
|
|
55
|
+
continue;
|
|
56
|
+
// Context line (starts with space or is empty in diff)
|
|
57
|
+
if (line.startsWith(" ") || (line === "" && newLineNum > 0)) {
|
|
58
|
+
newLineNum++;
|
|
59
|
+
newLines.push(line.startsWith(" ") ? line.slice(1) : line);
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
// Added line
|
|
63
|
+
if (line.startsWith("+")) {
|
|
64
|
+
newLineNum++;
|
|
65
|
+
changedLineNumbers.push(newLineNum);
|
|
66
|
+
newLines.push(line.slice(1));
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
// Removed line — skip (not in new content)
|
|
70
|
+
if (line.startsWith("-")) {
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
flushFile();
|
|
75
|
+
return hunks;
|
|
76
|
+
}
|
|
77
|
+
// ─── Language Detection ─────────────────────────────────────────────────────
|
|
78
|
+
const EXT_TO_LANG = {
|
|
79
|
+
".ts": "typescript",
|
|
80
|
+
".tsx": "typescript",
|
|
81
|
+
".js": "javascript",
|
|
82
|
+
".jsx": "javascript",
|
|
83
|
+
".mjs": "javascript",
|
|
84
|
+
".cjs": "javascript",
|
|
85
|
+
".py": "python",
|
|
86
|
+
".rs": "rust",
|
|
87
|
+
".go": "go",
|
|
88
|
+
".java": "java",
|
|
89
|
+
".cs": "csharp",
|
|
90
|
+
".rb": "ruby",
|
|
91
|
+
".php": "php",
|
|
92
|
+
".swift": "swift",
|
|
93
|
+
".kt": "kotlin",
|
|
94
|
+
".scala": "scala",
|
|
95
|
+
".c": "c",
|
|
96
|
+
".cpp": "cpp",
|
|
97
|
+
".h": "c",
|
|
98
|
+
".hpp": "cpp",
|
|
99
|
+
".yaml": "yaml",
|
|
100
|
+
".yml": "yaml",
|
|
101
|
+
".json": "json",
|
|
102
|
+
".tf": "terraform",
|
|
103
|
+
".hcl": "terraform",
|
|
104
|
+
".sh": "bash",
|
|
105
|
+
".bash": "bash",
|
|
106
|
+
};
|
|
107
|
+
function detectLanguage(filePath) {
|
|
108
|
+
const ext = extname(filePath.toLowerCase());
|
|
109
|
+
if (filePath.toLowerCase().includes("dockerfile"))
|
|
110
|
+
return "dockerfile";
|
|
111
|
+
return EXT_TO_LANG[ext];
|
|
112
|
+
}
|
|
113
|
+
// ─── CLI Entry Point ────────────────────────────────────────────────────────
|
|
114
|
+
export function parseDiffArgs(argv) {
|
|
115
|
+
let file;
|
|
116
|
+
let language;
|
|
117
|
+
let format = "text";
|
|
118
|
+
for (let i = 3; i < argv.length; i++) {
|
|
119
|
+
const arg = argv[i];
|
|
120
|
+
switch (arg) {
|
|
121
|
+
case "--file":
|
|
122
|
+
case "-f":
|
|
123
|
+
file = argv[++i];
|
|
124
|
+
break;
|
|
125
|
+
case "--language":
|
|
126
|
+
case "-l":
|
|
127
|
+
language = argv[++i];
|
|
128
|
+
break;
|
|
129
|
+
case "--format":
|
|
130
|
+
case "-o":
|
|
131
|
+
format = argv[++i];
|
|
132
|
+
break;
|
|
133
|
+
default:
|
|
134
|
+
if (!arg.startsWith("-") && !file)
|
|
135
|
+
file = arg;
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return { file, language, format };
|
|
140
|
+
}
|
|
141
|
+
export function runDiff(argv) {
|
|
142
|
+
const args = parseDiffArgs(argv);
|
|
143
|
+
// Read diff from file or stdin
|
|
144
|
+
let diffText;
|
|
145
|
+
if (args.file) {
|
|
146
|
+
const abs = resolve(args.file);
|
|
147
|
+
if (!existsSync(abs)) {
|
|
148
|
+
console.error(`Error: File not found: ${abs}`);
|
|
149
|
+
process.exit(1);
|
|
150
|
+
}
|
|
151
|
+
diffText = readFileSync(abs, "utf-8");
|
|
152
|
+
}
|
|
153
|
+
else if (!process.stdin.isTTY) {
|
|
154
|
+
try {
|
|
155
|
+
diffText = readFileSync(0, "utf-8");
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
console.error("Error: Could not read diff from stdin");
|
|
159
|
+
process.exit(1);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
console.error("Usage: git diff | judges diff --language <lang>");
|
|
164
|
+
console.error(" judges diff --file changes.patch");
|
|
165
|
+
process.exit(1);
|
|
166
|
+
return; // unreachable but satisfies TS
|
|
167
|
+
}
|
|
168
|
+
const hunks = parseUnifiedDiff(diffText);
|
|
169
|
+
if (hunks.length === 0) {
|
|
170
|
+
console.log("No changed files found in diff.");
|
|
171
|
+
process.exit(0);
|
|
172
|
+
}
|
|
173
|
+
let totalFindings = 0;
|
|
174
|
+
let worstScore = 100;
|
|
175
|
+
const allResults = [];
|
|
176
|
+
for (const hunk of hunks) {
|
|
177
|
+
if (hunk.changedLines.length === 0)
|
|
178
|
+
continue;
|
|
179
|
+
const lang = args.language || detectLanguage(hunk.filePath) || "typescript";
|
|
180
|
+
const verdict = evaluateDiff(hunk.newContent, lang, hunk.changedLines);
|
|
181
|
+
totalFindings += verdict.findings.length;
|
|
182
|
+
if (verdict.score < worstScore)
|
|
183
|
+
worstScore = verdict.score;
|
|
184
|
+
allResults.push({ file: hunk.filePath, verdict });
|
|
185
|
+
}
|
|
186
|
+
if (args.format === "json") {
|
|
187
|
+
console.log(JSON.stringify({ files: allResults, totalFindings, worstScore }, null, 2));
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
// Text output
|
|
191
|
+
console.log("");
|
|
192
|
+
console.log("╔══════════════════════════════════════════════════════════════╗");
|
|
193
|
+
console.log("║ Judges Panel — Diff Analysis ║");
|
|
194
|
+
console.log("╚══════════════════════════════════════════════════════════════╝");
|
|
195
|
+
console.log("");
|
|
196
|
+
for (const { file, verdict } of allResults) {
|
|
197
|
+
const icon = verdict.verdict === "pass" ? "✅" : verdict.verdict === "warning" ? "⚠️ " : "❌";
|
|
198
|
+
console.log(` ${icon} ${file} — ${verdict.score}/100 (${verdict.findings.length} findings, ${verdict.linesAnalyzed} lines changed)`);
|
|
199
|
+
for (const f of verdict.findings) {
|
|
200
|
+
console.log(` [${f.severity.toUpperCase().padEnd(8)}] ${f.ruleId}: ${f.title}`);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
console.log("");
|
|
204
|
+
console.log(` Total: ${totalFindings} finding(s) across ${allResults.length} file(s), worst score: ${worstScore}/100`);
|
|
205
|
+
console.log("");
|
|
206
|
+
}
|
|
207
|
+
process.exit(totalFindings > 0 && worstScore < 50 ? 1 : 0);
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=diff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/commands/diff.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../../src/commands/docs.ts"],"names":[],"mappings":"AAuHA,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAkE5C"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
// ─── Rule Documentation Generator ────────────────────────────────────────────
|
|
2
|
+
// Generate per-judge/per-rule documentation in Markdown format.
|
|
3
|
+
//
|
|
4
|
+
// Usage:
|
|
5
|
+
// judges docs # output all judge docs to stdout
|
|
6
|
+
// judges docs --output docs/rules/ # write individual files
|
|
7
|
+
// judges docs --judge cybersecurity # single judge
|
|
8
|
+
// ──────────────────────────────────────────────────────────────────────────────
|
|
9
|
+
import { writeFileSync, mkdirSync, existsSync } from "fs";
|
|
10
|
+
import { join, resolve } from "path";
|
|
11
|
+
import { JUDGES, getJudge } from "../judges/index.js";
|
|
12
|
+
function extractRulesFromPrompt(judge) {
|
|
13
|
+
const rules = [];
|
|
14
|
+
const prompt = judge.systemPrompt;
|
|
15
|
+
// Typically rules are documented in the system prompt with patterns like:
|
|
16
|
+
// SEC-001: Title — Description
|
|
17
|
+
// or SEC-001 | Title | Description
|
|
18
|
+
const rulePattern = new RegExp(`(${judge.rulePrefix}-\\d{3})[:\\s|]+([^\\n|]+?)(?:\\s*[—|]\\s*([^\\n]+))?$`, "gm");
|
|
19
|
+
let match;
|
|
20
|
+
while ((match = rulePattern.exec(prompt)) !== null) {
|
|
21
|
+
rules.push({
|
|
22
|
+
ruleId: match[1],
|
|
23
|
+
title: match[2].trim(),
|
|
24
|
+
description: match[3]?.trim() || match[2].trim(),
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
return rules;
|
|
28
|
+
}
|
|
29
|
+
// ─── Generate Documentation ─────────────────────────────────────────────────
|
|
30
|
+
function generateJudgeDoc(judge) {
|
|
31
|
+
const rules = extractRulesFromPrompt(judge);
|
|
32
|
+
const lines = [];
|
|
33
|
+
lines.push(`# ${judge.name}`);
|
|
34
|
+
lines.push("");
|
|
35
|
+
lines.push(`**Domain:** ${judge.domain}`);
|
|
36
|
+
lines.push(`**Rule Prefix:** \`${judge.rulePrefix}\``);
|
|
37
|
+
lines.push(`**Judge ID:** \`${judge.id}\``);
|
|
38
|
+
lines.push("");
|
|
39
|
+
lines.push("## Description");
|
|
40
|
+
lines.push("");
|
|
41
|
+
lines.push(judge.description);
|
|
42
|
+
lines.push("");
|
|
43
|
+
if (rules.length > 0) {
|
|
44
|
+
lines.push("## Rules");
|
|
45
|
+
lines.push("");
|
|
46
|
+
lines.push("| Rule ID | Title | Description |");
|
|
47
|
+
lines.push("|---------|-------|-------------|");
|
|
48
|
+
for (const rule of rules) {
|
|
49
|
+
lines.push(`| \`${rule.ruleId}\` | ${rule.title} | ${rule.description} |`);
|
|
50
|
+
}
|
|
51
|
+
lines.push("");
|
|
52
|
+
}
|
|
53
|
+
lines.push("## Usage");
|
|
54
|
+
lines.push("");
|
|
55
|
+
lines.push("```bash");
|
|
56
|
+
lines.push(`# Evaluate with this judge only`);
|
|
57
|
+
lines.push(`judges eval --judge ${judge.id} --file <path>`);
|
|
58
|
+
lines.push("");
|
|
59
|
+
lines.push("# As part of the full tribunal");
|
|
60
|
+
lines.push("judges eval --file <path>");
|
|
61
|
+
lines.push("```");
|
|
62
|
+
lines.push("");
|
|
63
|
+
return lines.join("\n");
|
|
64
|
+
}
|
|
65
|
+
function generateIndexDoc() {
|
|
66
|
+
const lines = [];
|
|
67
|
+
lines.push("# Judges Panel — Rule Reference");
|
|
68
|
+
lines.push("");
|
|
69
|
+
lines.push(`The Judges Panel includes **${JUDGES.length}** specialized judges that evaluate AI-generated code.`);
|
|
70
|
+
lines.push("");
|
|
71
|
+
lines.push("## Judges");
|
|
72
|
+
lines.push("");
|
|
73
|
+
lines.push("| Judge | Domain | Rule Prefix | Description |");
|
|
74
|
+
lines.push("|-------|--------|-------------|-------------|");
|
|
75
|
+
for (const judge of JUDGES) {
|
|
76
|
+
lines.push(`| [${judge.name}](${judge.id}.md) | ${judge.domain} | \`${judge.rulePrefix}\` | ${judge.description} |`);
|
|
77
|
+
}
|
|
78
|
+
lines.push("");
|
|
79
|
+
lines.push("## Quick Start");
|
|
80
|
+
lines.push("");
|
|
81
|
+
lines.push("```bash");
|
|
82
|
+
lines.push("# Evaluate a file with all judges");
|
|
83
|
+
lines.push("judges eval --file src/app.ts");
|
|
84
|
+
lines.push("");
|
|
85
|
+
lines.push("# Evaluate with a specific judge");
|
|
86
|
+
lines.push("judges eval --judge cybersecurity --file src/app.ts");
|
|
87
|
+
lines.push("");
|
|
88
|
+
lines.push("# List all available judges");
|
|
89
|
+
lines.push("judges list");
|
|
90
|
+
lines.push("```");
|
|
91
|
+
lines.push("");
|
|
92
|
+
return lines.join("\n");
|
|
93
|
+
}
|
|
94
|
+
// ─── CLI Entry Point ────────────────────────────────────────────────────────
|
|
95
|
+
export function runDocs(argv) {
|
|
96
|
+
let output;
|
|
97
|
+
let judgeId;
|
|
98
|
+
for (let i = 3; i < argv.length; i++) {
|
|
99
|
+
const arg = argv[i];
|
|
100
|
+
switch (arg) {
|
|
101
|
+
case "--output":
|
|
102
|
+
case "-o":
|
|
103
|
+
output = argv[++i];
|
|
104
|
+
break;
|
|
105
|
+
case "--judge":
|
|
106
|
+
case "-j":
|
|
107
|
+
judgeId = argv[++i];
|
|
108
|
+
break;
|
|
109
|
+
case "--help":
|
|
110
|
+
case "-h":
|
|
111
|
+
console.log(`
|
|
112
|
+
Judges Panel — Rule Documentation Generator
|
|
113
|
+
|
|
114
|
+
USAGE:
|
|
115
|
+
judges docs Print all docs to stdout
|
|
116
|
+
judges docs --output docs/rules/ Write per-judge .md files
|
|
117
|
+
judges docs --judge cybersecurity Show single judge documentation
|
|
118
|
+
|
|
119
|
+
OPTIONS:
|
|
120
|
+
--output, -o <dir> Output directory for .md files
|
|
121
|
+
--judge, -j <id> Generate docs for a single judge
|
|
122
|
+
`);
|
|
123
|
+
process.exit(0);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
if (judgeId) {
|
|
127
|
+
const judge = getJudge(judgeId);
|
|
128
|
+
if (!judge) {
|
|
129
|
+
console.error(`Unknown judge: ${judgeId}`);
|
|
130
|
+
console.error('Run "judges list" to see available judges.');
|
|
131
|
+
process.exit(1);
|
|
132
|
+
}
|
|
133
|
+
console.log(generateJudgeDoc(judge));
|
|
134
|
+
process.exit(0);
|
|
135
|
+
}
|
|
136
|
+
if (output) {
|
|
137
|
+
const dir = resolve(output);
|
|
138
|
+
if (!existsSync(dir))
|
|
139
|
+
mkdirSync(dir, { recursive: true });
|
|
140
|
+
// Write index
|
|
141
|
+
writeFileSync(join(dir, "README.md"), generateIndexDoc(), "utf-8");
|
|
142
|
+
// Write per-judge docs
|
|
143
|
+
for (const judge of JUDGES) {
|
|
144
|
+
writeFileSync(join(dir, `${judge.id}.md`), generateJudgeDoc(judge), "utf-8");
|
|
145
|
+
}
|
|
146
|
+
console.log(`✅ Generated documentation for ${JUDGES.length} judges in ${dir}`);
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
// Print everything to stdout
|
|
150
|
+
console.log(generateIndexDoc());
|
|
151
|
+
for (const judge of JUDGES) {
|
|
152
|
+
console.log(generateJudgeDoc(judge));
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
process.exit(0);
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=docs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs.js","sourceRoot":"","sources":["../../src/commands/docs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `judges fix` — Apply auto-fix patches from findings.
|
|
3
|
+
*
|
|
4
|
+
* Evaluates code with the full tribunal, collects findings with patches,
|
|
5
|
+
* and either previews or applies the fixes.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* judges fix src/app.ts # Preview fixes (dry-run)
|
|
9
|
+
* judges fix src/app.ts --apply # Apply fixes in-place
|
|
10
|
+
* judges fix src/app.ts --judge cyber # Fixes from one judge only
|
|
11
|
+
*/
|
|
12
|
+
interface FixArgs {
|
|
13
|
+
file: string | undefined;
|
|
14
|
+
language: string | undefined;
|
|
15
|
+
judge: string | undefined;
|
|
16
|
+
apply: boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare function parseFixArgs(argv: string[]): FixArgs;
|
|
19
|
+
export declare function runFix(argv: string[]): void;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=fix.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fix.d.ts","sourceRoot":"","sources":["../../src/commands/fix.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAsFH,UAAU,OAAO;IACf,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAoCpD;AAID,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAsF3C"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `judges fix` — Apply auto-fix patches from findings.
|
|
3
|
+
*
|
|
4
|
+
* Evaluates code with the full tribunal, collects findings with patches,
|
|
5
|
+
* and either previews or applies the fixes.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* judges fix src/app.ts # Preview fixes (dry-run)
|
|
9
|
+
* judges fix src/app.ts --apply # Apply fixes in-place
|
|
10
|
+
* judges fix src/app.ts --judge cyber # Fixes from one judge only
|
|
11
|
+
*/
|
|
12
|
+
import { existsSync, readFileSync, writeFileSync } from "fs";
|
|
13
|
+
import { resolve, extname } from "path";
|
|
14
|
+
import { evaluateWithTribunal, evaluateWithJudge } from "../evaluators/index.js";
|
|
15
|
+
import { getJudge } from "../judges/index.js";
|
|
16
|
+
// ─── Language Detection (shared with cli.ts) ────────────────────────────────
|
|
17
|
+
const EXT_TO_LANG = {
|
|
18
|
+
".ts": "typescript",
|
|
19
|
+
".tsx": "typescript",
|
|
20
|
+
".js": "javascript",
|
|
21
|
+
".jsx": "javascript",
|
|
22
|
+
".mjs": "javascript",
|
|
23
|
+
".cjs": "javascript",
|
|
24
|
+
".py": "python",
|
|
25
|
+
".rs": "rust",
|
|
26
|
+
".go": "go",
|
|
27
|
+
".java": "java",
|
|
28
|
+
".cs": "csharp",
|
|
29
|
+
".cpp": "cpp",
|
|
30
|
+
".cc": "cpp",
|
|
31
|
+
".cxx": "cpp",
|
|
32
|
+
".h": "c",
|
|
33
|
+
".hpp": "cpp",
|
|
34
|
+
};
|
|
35
|
+
function detectLanguage(filePath) {
|
|
36
|
+
const base = filePath.toLowerCase();
|
|
37
|
+
if (base.endsWith("dockerfile") || base.includes("dockerfile."))
|
|
38
|
+
return "dockerfile";
|
|
39
|
+
const ext = extname(base);
|
|
40
|
+
return EXT_TO_LANG[ext] || "typescript";
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Sort patches bottom-to-top (by startLine descending) to avoid line offsets.
|
|
44
|
+
*/
|
|
45
|
+
function sortPatchesBottomUp(patches) {
|
|
46
|
+
return [...patches].sort((a, b) => b.patch.startLine - a.patch.startLine);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Apply patches to source code. Patches are applied bottom-to-top so that
|
|
50
|
+
* earlier line numbers remain stable.
|
|
51
|
+
*/
|
|
52
|
+
function applyPatches(code, patches) {
|
|
53
|
+
const lines = code.split("\n");
|
|
54
|
+
const sorted = sortPatchesBottomUp(patches);
|
|
55
|
+
let applied = 0;
|
|
56
|
+
let skipped = 0;
|
|
57
|
+
for (const p of sorted) {
|
|
58
|
+
const { patch } = p;
|
|
59
|
+
// Validate the old text matches what we expect
|
|
60
|
+
const regionLines = lines.slice(patch.startLine - 1, patch.endLine);
|
|
61
|
+
const regionText = regionLines.join("\n");
|
|
62
|
+
if (regionText.includes(patch.oldText) || regionText.trim() === patch.oldText.trim()) {
|
|
63
|
+
// Apply the replacement
|
|
64
|
+
const newRegionText = regionText.replace(patch.oldText, patch.newText);
|
|
65
|
+
const newLines = newRegionText.split("\n");
|
|
66
|
+
lines.splice(patch.startLine - 1, patch.endLine - patch.startLine + 1, ...newLines);
|
|
67
|
+
applied++;
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
skipped++;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return { result: lines.join("\n"), applied, skipped };
|
|
74
|
+
}
|
|
75
|
+
export function parseFixArgs(argv) {
|
|
76
|
+
const args = {
|
|
77
|
+
file: undefined,
|
|
78
|
+
language: undefined,
|
|
79
|
+
judge: undefined,
|
|
80
|
+
apply: false,
|
|
81
|
+
};
|
|
82
|
+
for (let i = 3; i < argv.length; i++) {
|
|
83
|
+
// skip node, script, "fix"
|
|
84
|
+
const arg = argv[i];
|
|
85
|
+
switch (arg) {
|
|
86
|
+
case "--apply":
|
|
87
|
+
case "-a":
|
|
88
|
+
args.apply = true;
|
|
89
|
+
break;
|
|
90
|
+
case "--language":
|
|
91
|
+
case "-l":
|
|
92
|
+
args.language = argv[++i];
|
|
93
|
+
break;
|
|
94
|
+
case "--judge":
|
|
95
|
+
case "-j":
|
|
96
|
+
args.judge = argv[++i];
|
|
97
|
+
break;
|
|
98
|
+
case "--file":
|
|
99
|
+
case "-f":
|
|
100
|
+
args.file = argv[++i];
|
|
101
|
+
break;
|
|
102
|
+
default:
|
|
103
|
+
if (!arg.startsWith("-") && !args.file) {
|
|
104
|
+
args.file = arg;
|
|
105
|
+
}
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return args;
|
|
110
|
+
}
|
|
111
|
+
// ─── Main Fix Command ──────────────────────────────────────────────────────
|
|
112
|
+
export function runFix(argv) {
|
|
113
|
+
const args = parseFixArgs(argv);
|
|
114
|
+
if (!args.file) {
|
|
115
|
+
console.error("Error: No file specified.");
|
|
116
|
+
console.error("Usage: judges fix <file> [--apply]");
|
|
117
|
+
process.exit(1);
|
|
118
|
+
}
|
|
119
|
+
const filePath = resolve(args.file);
|
|
120
|
+
if (!existsSync(filePath)) {
|
|
121
|
+
console.error(`Error: File not found: ${filePath}`);
|
|
122
|
+
process.exit(1);
|
|
123
|
+
}
|
|
124
|
+
const code = readFileSync(filePath, "utf-8");
|
|
125
|
+
const language = args.language || detectLanguage(filePath);
|
|
126
|
+
// Run evaluation
|
|
127
|
+
let findings;
|
|
128
|
+
if (args.judge) {
|
|
129
|
+
const judge = getJudge(args.judge);
|
|
130
|
+
if (!judge) {
|
|
131
|
+
console.error(`Error: Unknown judge "${args.judge}"`);
|
|
132
|
+
process.exit(1);
|
|
133
|
+
}
|
|
134
|
+
const evaluation = evaluateWithJudge(judge, code, language);
|
|
135
|
+
findings = evaluation.findings;
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
const verdict = evaluateWithTribunal(code, language);
|
|
139
|
+
findings = verdict.evaluations.flatMap((e) => e.findings);
|
|
140
|
+
}
|
|
141
|
+
// Collect fixable findings (those with patches)
|
|
142
|
+
const fixable = findings
|
|
143
|
+
.filter((f) => f.patch)
|
|
144
|
+
.map((f) => ({
|
|
145
|
+
ruleId: f.ruleId,
|
|
146
|
+
title: f.title,
|
|
147
|
+
severity: f.severity,
|
|
148
|
+
patch: f.patch,
|
|
149
|
+
lineNumbers: f.lineNumbers,
|
|
150
|
+
}));
|
|
151
|
+
console.log("");
|
|
152
|
+
console.log("╔══════════════════════════════════════════════════════════════╗");
|
|
153
|
+
console.log("║ Judges Panel — Auto-Fix ║");
|
|
154
|
+
console.log("╚══════════════════════════════════════════════════════════════╝");
|
|
155
|
+
console.log("");
|
|
156
|
+
console.log(` File : ${args.file}`);
|
|
157
|
+
console.log(` Language : ${language}`);
|
|
158
|
+
console.log(` Findings : ${findings.length} total, ${fixable.length} auto-fixable`);
|
|
159
|
+
console.log("");
|
|
160
|
+
if (fixable.length === 0) {
|
|
161
|
+
console.log(" No auto-fixable findings. Nothing to do.\n");
|
|
162
|
+
process.exit(0);
|
|
163
|
+
}
|
|
164
|
+
// Show preview
|
|
165
|
+
console.log(" Fixes available:");
|
|
166
|
+
console.log(" " + "─".repeat(60));
|
|
167
|
+
for (const p of fixable) {
|
|
168
|
+
const line = p.lineNumbers?.[0] ?? p.patch.startLine;
|
|
169
|
+
console.log(` [${p.severity.toUpperCase().padEnd(8)}] ${p.ruleId}: ${p.title}`);
|
|
170
|
+
console.log(` Line ${line}: "${p.patch.oldText.slice(0, 50)}" → "${p.patch.newText.slice(0, 50)}"`);
|
|
171
|
+
}
|
|
172
|
+
console.log("");
|
|
173
|
+
if (!args.apply) {
|
|
174
|
+
console.log(" Dry run — no changes made.");
|
|
175
|
+
console.log(" Run with --apply to write fixes:\n");
|
|
176
|
+
console.log(` judges fix ${args.file} --apply\n`);
|
|
177
|
+
process.exit(0);
|
|
178
|
+
}
|
|
179
|
+
// Apply patches
|
|
180
|
+
const { result, applied, skipped } = applyPatches(code, fixable);
|
|
181
|
+
writeFileSync(filePath, result, "utf-8");
|
|
182
|
+
console.log(` ✅ Applied ${applied} fix(es) to ${args.file}`);
|
|
183
|
+
if (skipped > 0) {
|
|
184
|
+
console.log(` ⏭ Skipped ${skipped} fix(es) (source text changed)`);
|
|
185
|
+
}
|
|
186
|
+
console.log("");
|
|
187
|
+
console.log(" Run 'judges eval' to verify the remaining findings.\n");
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=fix.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fix.js","sourceRoot":"","sources":["../../src/commands/fix.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `judges hook` — Install/uninstall pre-commit git hooks.
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* judges hook install # Install pre-commit hook
|
|
6
|
+
* judges hook uninstall # Remove pre-commit hook
|
|
7
|
+
*/
|
|
8
|
+
export declare function runHook(argv: string[]): void;
|
|
9
|
+
//# sourceMappingURL=hook.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../src/commands/hook.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAuDH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAa5C"}
|