@kevinrabun/judges 3.23.6 → 3.23.8
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 +40 -0
- package/README.md +1 -1
- package/dist/api.d.ts +6 -1
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +6 -1
- package/dist/api.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +123 -5
- package/dist/cli.js.map +1 -1
- package/dist/commands/benchmark.d.ts.map +1 -1
- package/dist/commands/benchmark.js +556 -0
- package/dist/commands/benchmark.js.map +1 -1
- package/dist/commands/diff.d.ts.map +1 -1
- package/dist/commands/diff.js +17 -1
- package/dist/commands/diff.js.map +1 -1
- package/dist/commands/fix.d.ts +27 -1
- package/dist/commands/fix.d.ts.map +1 -1
- package/dist/commands/fix.js +137 -13
- package/dist/commands/fix.js.map +1 -1
- package/dist/commands/lsp.d.ts +24 -0
- package/dist/commands/lsp.d.ts.map +1 -0
- package/dist/commands/lsp.js +287 -0
- package/dist/commands/lsp.js.map +1 -0
- package/dist/commands/review.d.ts +37 -0
- package/dist/commands/review.d.ts.map +1 -0
- package/dist/commands/review.js +539 -0
- package/dist/commands/review.js.map +1 -0
- package/dist/commands/scaffold-plugin.d.ts +16 -0
- package/dist/commands/scaffold-plugin.d.ts.map +1 -0
- package/dist/commands/scaffold-plugin.js +271 -0
- package/dist/commands/scaffold-plugin.js.map +1 -0
- package/dist/commands/tune.d.ts +25 -0
- package/dist/commands/tune.d.ts.map +1 -0
- package/dist/commands/tune.js +408 -0
- package/dist/commands/tune.js.map +1 -0
- package/dist/config.d.ts +12 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +128 -0
- package/dist/config.js.map +1 -1
- package/dist/disk-cache.d.ts +40 -0
- package/dist/disk-cache.d.ts.map +1 -0
- package/dist/disk-cache.js +196 -0
- package/dist/disk-cache.js.map +1 -0
- package/dist/evaluators/index.d.ts.map +1 -1
- package/dist/evaluators/index.js +50 -3
- package/dist/evaluators/index.js.map +1 -1
- package/dist/evaluators/v2.d.ts.map +1 -1
- package/dist/evaluators/v2.js +2 -2
- package/dist/evaluators/v2.js.map +1 -1
- package/dist/finding-lifecycle.d.ts +93 -0
- package/dist/finding-lifecycle.d.ts.map +1 -0
- package/dist/finding-lifecycle.js +214 -0
- package/dist/finding-lifecycle.js.map +1 -0
- package/dist/formatters/github-actions.d.ts +7 -0
- package/dist/formatters/github-actions.d.ts.map +1 -0
- package/dist/formatters/github-actions.js +69 -0
- package/dist/formatters/github-actions.js.map +1 -0
- package/dist/patches/index.d.ts.map +1 -1
- package/dist/patches/index.js +127 -0
- package/dist/patches/index.js.map +1 -1
- package/dist/presets.d.ts.map +1 -1
- package/dist/presets.js +103 -0
- package/dist/presets.js.map +1 -1
- package/dist/scoring.d.ts +8 -0
- package/dist/scoring.d.ts.map +1 -1
- package/dist/scoring.js +66 -26
- package/dist/scoring.js.map +1 -1
- package/dist/tools/register-evaluation.d.ts +1 -1
- package/dist/tools/register-evaluation.d.ts.map +1 -1
- package/dist/tools/register-evaluation.js +90 -1
- package/dist/tools/register-evaluation.js.map +1 -1
- package/dist/tools/register-workflow.d.ts.map +1 -1
- package/dist/tools/register-workflow.js +23 -20
- package/dist/tools/register-workflow.js.map +1 -1
- package/dist/types.d.ts +36 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/server.json +2 -2
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LSP Server — Language Server Protocol implementation for Judges
|
|
3
|
+
*
|
|
4
|
+
* Provides real-time code analysis diagnostics over stdio using the
|
|
5
|
+
* JSON-RPC / LSP protocol. Compatible with any LSP-capable editor:
|
|
6
|
+
* VS Code, Neovim, Emacs, Helix, etc.
|
|
7
|
+
*
|
|
8
|
+
* Usage: judges lsp [--stdio]
|
|
9
|
+
*
|
|
10
|
+
* The server supports:
|
|
11
|
+
* - textDocument/didOpen → full evaluation
|
|
12
|
+
* - textDocument/didChange → debounced re-evaluation
|
|
13
|
+
* - textDocument/didSave → full re-evaluation
|
|
14
|
+
* - textDocument/didClose → clear diagnostics
|
|
15
|
+
* - textDocument/codeAction → quick-fix patches
|
|
16
|
+
*/
|
|
17
|
+
import { evaluateWithTribunal } from "../evaluators/index.js";
|
|
18
|
+
import { findingToDiagnostic, findingsToCodeActions, } from "../formatters/diagnostics.js";
|
|
19
|
+
import { loadCascadingConfig } from "../config.js";
|
|
20
|
+
function sendMessage(msg) {
|
|
21
|
+
const body = JSON.stringify(msg);
|
|
22
|
+
const header = `Content-Length: ${Buffer.byteLength(body)}\r\n\r\n`;
|
|
23
|
+
process.stdout.write(header + body);
|
|
24
|
+
}
|
|
25
|
+
function sendResponse(id, result) {
|
|
26
|
+
sendMessage({ jsonrpc: "2.0", id, result });
|
|
27
|
+
}
|
|
28
|
+
function sendNotification(method, params) {
|
|
29
|
+
sendMessage({ jsonrpc: "2.0", method, params });
|
|
30
|
+
}
|
|
31
|
+
function publishDiagnostics(uri, diagnostics) {
|
|
32
|
+
sendNotification("textDocument/publishDiagnostics", { uri, diagnostics });
|
|
33
|
+
}
|
|
34
|
+
// ─── Document Store ─────────────────────────────────────────────────────────
|
|
35
|
+
const documents = new Map();
|
|
36
|
+
const pendingTimers = new Map();
|
|
37
|
+
function uriToFilePath(uri) {
|
|
38
|
+
if (uri.startsWith("file:///")) {
|
|
39
|
+
// Windows: file:///c%3A/... → c:/...
|
|
40
|
+
const decoded = decodeURIComponent(uri.slice(8));
|
|
41
|
+
return decoded.replace(/\//g, "/");
|
|
42
|
+
}
|
|
43
|
+
return uri;
|
|
44
|
+
}
|
|
45
|
+
function detectLanguageFromUri(uri) {
|
|
46
|
+
const ext = uri.split(".").pop()?.toLowerCase() ?? "";
|
|
47
|
+
const extMap = {
|
|
48
|
+
ts: "typescript",
|
|
49
|
+
tsx: "typescript",
|
|
50
|
+
js: "javascript",
|
|
51
|
+
jsx: "javascript",
|
|
52
|
+
py: "python",
|
|
53
|
+
rs: "rust",
|
|
54
|
+
go: "go",
|
|
55
|
+
java: "java",
|
|
56
|
+
cs: "csharp",
|
|
57
|
+
cpp: "cpp",
|
|
58
|
+
cc: "cpp",
|
|
59
|
+
cxx: "cpp",
|
|
60
|
+
c: "cpp",
|
|
61
|
+
h: "cpp",
|
|
62
|
+
hpp: "cpp",
|
|
63
|
+
php: "php",
|
|
64
|
+
rb: "ruby",
|
|
65
|
+
kt: "kotlin",
|
|
66
|
+
kts: "kotlin",
|
|
67
|
+
swift: "swift",
|
|
68
|
+
ps1: "powershell",
|
|
69
|
+
psm1: "powershell",
|
|
70
|
+
tf: "terraform",
|
|
71
|
+
bicep: "bicep",
|
|
72
|
+
};
|
|
73
|
+
return extMap[ext] ?? "unknown";
|
|
74
|
+
}
|
|
75
|
+
// ─── Evaluation Pipeline ────────────────────────────────────────────────────
|
|
76
|
+
const DEBOUNCE_MS = 500;
|
|
77
|
+
async function evaluateDocument(uri) {
|
|
78
|
+
const doc = documents.get(uri);
|
|
79
|
+
if (!doc)
|
|
80
|
+
return;
|
|
81
|
+
try {
|
|
82
|
+
const filePath = uriToFilePath(uri);
|
|
83
|
+
const config = loadCascadingConfig(filePath);
|
|
84
|
+
const options = {
|
|
85
|
+
filePath,
|
|
86
|
+
config,
|
|
87
|
+
minConfidence: 0.4,
|
|
88
|
+
};
|
|
89
|
+
const verdict = evaluateWithTribunal(doc.content, doc.language, "", options);
|
|
90
|
+
const diagnostics = verdict.findings.map((f) => findingToDiagnostic(f, uri));
|
|
91
|
+
publishDiagnostics(uri, diagnostics);
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
// Evaluation failure — clear diagnostics silently
|
|
95
|
+
publishDiagnostics(uri, []);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
function scheduleEvaluation(uri) {
|
|
99
|
+
const existing = pendingTimers.get(uri);
|
|
100
|
+
if (existing)
|
|
101
|
+
clearTimeout(existing);
|
|
102
|
+
pendingTimers.set(uri, setTimeout(() => {
|
|
103
|
+
pendingTimers.delete(uri);
|
|
104
|
+
evaluateDocument(uri).catch(() => { });
|
|
105
|
+
}, DEBOUNCE_MS));
|
|
106
|
+
}
|
|
107
|
+
// ─── LSP Request Handlers ───────────────────────────────────────────────────
|
|
108
|
+
let initialized = false;
|
|
109
|
+
// Cache of latest findings per URI for code-action requests
|
|
110
|
+
const findingsCache = new Map();
|
|
111
|
+
function handleInitialize(id) {
|
|
112
|
+
sendResponse(id, {
|
|
113
|
+
capabilities: {
|
|
114
|
+
textDocumentSync: {
|
|
115
|
+
openClose: true,
|
|
116
|
+
change: 2, // Incremental (we take full content anyway)
|
|
117
|
+
save: { includeText: true },
|
|
118
|
+
},
|
|
119
|
+
codeActionProvider: true,
|
|
120
|
+
diagnosticProvider: {
|
|
121
|
+
interFileDependencies: false,
|
|
122
|
+
workspaceDiagnostics: false,
|
|
123
|
+
},
|
|
124
|
+
},
|
|
125
|
+
serverInfo: {
|
|
126
|
+
name: "judges-lsp",
|
|
127
|
+
version: "1.0.0",
|
|
128
|
+
},
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
function handleInitialized() {
|
|
132
|
+
initialized = true;
|
|
133
|
+
}
|
|
134
|
+
function handleShutdown(id) {
|
|
135
|
+
sendResponse(id, null);
|
|
136
|
+
}
|
|
137
|
+
function handleDidOpen(params) {
|
|
138
|
+
const { uri, languageId, version, text } = params.textDocument;
|
|
139
|
+
const language = languageId || detectLanguageFromUri(uri);
|
|
140
|
+
documents.set(uri, { content: text, version, language });
|
|
141
|
+
// Immediate evaluation on open
|
|
142
|
+
evaluateDocument(uri)
|
|
143
|
+
.then(() => {
|
|
144
|
+
// Cache findings for code actions
|
|
145
|
+
const doc = documents.get(uri);
|
|
146
|
+
if (doc) {
|
|
147
|
+
const filePath = uriToFilePath(uri);
|
|
148
|
+
const config = loadCascadingConfig(filePath);
|
|
149
|
+
const verdict = evaluateWithTribunal(doc.content, doc.language, "", { filePath, config });
|
|
150
|
+
findingsCache.set(uri, verdict.findings);
|
|
151
|
+
}
|
|
152
|
+
})
|
|
153
|
+
.catch(() => { });
|
|
154
|
+
}
|
|
155
|
+
function handleDidChange(params) {
|
|
156
|
+
const { uri, version } = params.textDocument;
|
|
157
|
+
const doc = documents.get(uri);
|
|
158
|
+
if (!doc)
|
|
159
|
+
return;
|
|
160
|
+
// Take the full content from the last change event
|
|
161
|
+
const lastChange = params.contentChanges[params.contentChanges.length - 1];
|
|
162
|
+
if (lastChange) {
|
|
163
|
+
doc.content = lastChange.text;
|
|
164
|
+
doc.version = version;
|
|
165
|
+
}
|
|
166
|
+
scheduleEvaluation(uri);
|
|
167
|
+
}
|
|
168
|
+
function handleDidSave(params) {
|
|
169
|
+
const uri = params.textDocument.uri;
|
|
170
|
+
const doc = documents.get(uri);
|
|
171
|
+
if (doc && params.text) {
|
|
172
|
+
doc.content = params.text;
|
|
173
|
+
}
|
|
174
|
+
// Re-evaluate immediately on save
|
|
175
|
+
evaluateDocument(uri).catch(() => { });
|
|
176
|
+
}
|
|
177
|
+
function handleDidClose(params) {
|
|
178
|
+
const uri = params.textDocument.uri;
|
|
179
|
+
documents.delete(uri);
|
|
180
|
+
findingsCache.delete(uri);
|
|
181
|
+
const timer = pendingTimers.get(uri);
|
|
182
|
+
if (timer) {
|
|
183
|
+
clearTimeout(timer);
|
|
184
|
+
pendingTimers.delete(uri);
|
|
185
|
+
}
|
|
186
|
+
// Clear diagnostics for the closed file
|
|
187
|
+
publishDiagnostics(uri, []);
|
|
188
|
+
}
|
|
189
|
+
function handleCodeAction(id, params) {
|
|
190
|
+
const uri = params.textDocument.uri;
|
|
191
|
+
const findings = findingsCache.get(uri) ?? [];
|
|
192
|
+
const actions = findingsToCodeActions(findings, uri);
|
|
193
|
+
sendResponse(id, actions);
|
|
194
|
+
}
|
|
195
|
+
// ─── Message Dispatch ────────────────────────────────────────────────────────
|
|
196
|
+
function dispatch(msg) {
|
|
197
|
+
const method = msg.method;
|
|
198
|
+
const id = msg.id;
|
|
199
|
+
switch (method) {
|
|
200
|
+
case "initialize":
|
|
201
|
+
if (id !== undefined)
|
|
202
|
+
handleInitialize(id);
|
|
203
|
+
break;
|
|
204
|
+
case "initialized":
|
|
205
|
+
handleInitialized();
|
|
206
|
+
break;
|
|
207
|
+
case "shutdown":
|
|
208
|
+
if (id !== undefined)
|
|
209
|
+
handleShutdown(id);
|
|
210
|
+
break;
|
|
211
|
+
case "exit":
|
|
212
|
+
process.exit(initialized ? 0 : 1);
|
|
213
|
+
break;
|
|
214
|
+
case "textDocument/didOpen":
|
|
215
|
+
handleDidOpen(msg.params);
|
|
216
|
+
break;
|
|
217
|
+
case "textDocument/didChange":
|
|
218
|
+
handleDidChange(msg.params);
|
|
219
|
+
break;
|
|
220
|
+
case "textDocument/didSave":
|
|
221
|
+
handleDidSave(msg.params);
|
|
222
|
+
break;
|
|
223
|
+
case "textDocument/didClose":
|
|
224
|
+
handleDidClose(msg.params);
|
|
225
|
+
break;
|
|
226
|
+
case "textDocument/codeAction":
|
|
227
|
+
if (id !== undefined)
|
|
228
|
+
handleCodeAction(id, msg.params);
|
|
229
|
+
break;
|
|
230
|
+
default:
|
|
231
|
+
// Unknown method — respond with MethodNotFound for requests
|
|
232
|
+
if (id !== undefined) {
|
|
233
|
+
sendMessage({
|
|
234
|
+
jsonrpc: "2.0",
|
|
235
|
+
id,
|
|
236
|
+
error: { code: -32601, message: `Method not found: ${method}` },
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
// ─── Stdio Transport ─────────────────────────────────────────────────────────
|
|
242
|
+
/**
|
|
243
|
+
* Start the LSP server on stdio.
|
|
244
|
+
*
|
|
245
|
+
* Reads Content-Length-framed JSON-RPC messages from stdin
|
|
246
|
+
* and writes responses to stdout.
|
|
247
|
+
*/
|
|
248
|
+
export function runLsp(_argv) {
|
|
249
|
+
let buffer = "";
|
|
250
|
+
let contentLength = -1;
|
|
251
|
+
process.stdin.setEncoding("utf-8");
|
|
252
|
+
process.stdin.on("data", (chunk) => {
|
|
253
|
+
buffer += chunk;
|
|
254
|
+
while (true) {
|
|
255
|
+
if (contentLength === -1) {
|
|
256
|
+
// Parse headers
|
|
257
|
+
const headerEnd = buffer.indexOf("\r\n\r\n");
|
|
258
|
+
if (headerEnd === -1)
|
|
259
|
+
break;
|
|
260
|
+
const headers = buffer.slice(0, headerEnd);
|
|
261
|
+
const match = headers.match(/Content-Length:\s*(\d+)/i);
|
|
262
|
+
if (!match) {
|
|
263
|
+
buffer = buffer.slice(headerEnd + 4);
|
|
264
|
+
continue;
|
|
265
|
+
}
|
|
266
|
+
contentLength = parseInt(match[1], 10);
|
|
267
|
+
buffer = buffer.slice(headerEnd + 4);
|
|
268
|
+
}
|
|
269
|
+
if (buffer.length < contentLength)
|
|
270
|
+
break;
|
|
271
|
+
const body = buffer.slice(0, contentLength);
|
|
272
|
+
buffer = buffer.slice(contentLength);
|
|
273
|
+
contentLength = -1;
|
|
274
|
+
try {
|
|
275
|
+
const msg = JSON.parse(body);
|
|
276
|
+
dispatch(msg);
|
|
277
|
+
}
|
|
278
|
+
catch {
|
|
279
|
+
// Malformed JSON — skip
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
});
|
|
283
|
+
process.stdin.on("end", () => {
|
|
284
|
+
process.exit(0);
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
//# sourceMappingURL=lsp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lsp.js","sourceRoot":"","sources":["../../src/commands/lsp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `judges review` — Post inline review comments on a GitHub pull request.
|
|
3
|
+
*
|
|
4
|
+
* Evaluates changed files in a PR and posts findings as inline review comments.
|
|
5
|
+
* Designed to be the primary (or only) code reviewer for AI-generated code.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* judges review --pr 42 # Review PR #42 in current repo
|
|
9
|
+
* judges review --pr 42 --repo owner/repo # Review PR in specific repo
|
|
10
|
+
* judges review --pr 42 --approve # Auto-approve if no critical/high
|
|
11
|
+
* judges review --pr 42 --dry-run # Preview comments without posting
|
|
12
|
+
* judges review --pr 42 --min-severity high # Only post high+ findings
|
|
13
|
+
*
|
|
14
|
+
* Requires: GITHUB_TOKEN environment variable (or gh CLI authenticated).
|
|
15
|
+
*/
|
|
16
|
+
import type { Finding, Severity } from "../types.js";
|
|
17
|
+
interface ReviewArgs {
|
|
18
|
+
pr: number;
|
|
19
|
+
repo: string | undefined;
|
|
20
|
+
approve: boolean;
|
|
21
|
+
dryRun: boolean;
|
|
22
|
+
minSeverity: Severity;
|
|
23
|
+
format: "text" | "json";
|
|
24
|
+
maxComments: number;
|
|
25
|
+
token: string | undefined;
|
|
26
|
+
}
|
|
27
|
+
interface DiffHunk {
|
|
28
|
+
filePath: string;
|
|
29
|
+
newContent: string;
|
|
30
|
+
changedLines: number[];
|
|
31
|
+
}
|
|
32
|
+
export declare function parsePatchToHunk(filePath: string, patch: string): DiffHunk;
|
|
33
|
+
export declare function findingToCommentBody(finding: Finding): string;
|
|
34
|
+
export declare function parseReviewArgs(argv: string[]): ReviewArgs;
|
|
35
|
+
export declare function runReview(argv: string[]): void;
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=review.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAIrD,UAAU,UAAU;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,QAAQ,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B;AAeD,UAAU,QAAQ;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAmDD,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,CAsC1E;AAiKD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAqB7D;AA2ID,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAiD1D;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAoI9C"}
|