@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.
Files changed (78) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/README.md +1 -1
  3. package/dist/api.d.ts +6 -1
  4. package/dist/api.d.ts.map +1 -1
  5. package/dist/api.js +6 -1
  6. package/dist/api.js.map +1 -1
  7. package/dist/cli.d.ts.map +1 -1
  8. package/dist/cli.js +123 -5
  9. package/dist/cli.js.map +1 -1
  10. package/dist/commands/benchmark.d.ts.map +1 -1
  11. package/dist/commands/benchmark.js +556 -0
  12. package/dist/commands/benchmark.js.map +1 -1
  13. package/dist/commands/diff.d.ts.map +1 -1
  14. package/dist/commands/diff.js +17 -1
  15. package/dist/commands/diff.js.map +1 -1
  16. package/dist/commands/fix.d.ts +27 -1
  17. package/dist/commands/fix.d.ts.map +1 -1
  18. package/dist/commands/fix.js +137 -13
  19. package/dist/commands/fix.js.map +1 -1
  20. package/dist/commands/lsp.d.ts +24 -0
  21. package/dist/commands/lsp.d.ts.map +1 -0
  22. package/dist/commands/lsp.js +287 -0
  23. package/dist/commands/lsp.js.map +1 -0
  24. package/dist/commands/review.d.ts +37 -0
  25. package/dist/commands/review.d.ts.map +1 -0
  26. package/dist/commands/review.js +539 -0
  27. package/dist/commands/review.js.map +1 -0
  28. package/dist/commands/scaffold-plugin.d.ts +16 -0
  29. package/dist/commands/scaffold-plugin.d.ts.map +1 -0
  30. package/dist/commands/scaffold-plugin.js +271 -0
  31. package/dist/commands/scaffold-plugin.js.map +1 -0
  32. package/dist/commands/tune.d.ts +25 -0
  33. package/dist/commands/tune.d.ts.map +1 -0
  34. package/dist/commands/tune.js +408 -0
  35. package/dist/commands/tune.js.map +1 -0
  36. package/dist/config.d.ts +12 -0
  37. package/dist/config.d.ts.map +1 -1
  38. package/dist/config.js +128 -0
  39. package/dist/config.js.map +1 -1
  40. package/dist/disk-cache.d.ts +40 -0
  41. package/dist/disk-cache.d.ts.map +1 -0
  42. package/dist/disk-cache.js +196 -0
  43. package/dist/disk-cache.js.map +1 -0
  44. package/dist/evaluators/index.d.ts.map +1 -1
  45. package/dist/evaluators/index.js +50 -3
  46. package/dist/evaluators/index.js.map +1 -1
  47. package/dist/evaluators/v2.d.ts.map +1 -1
  48. package/dist/evaluators/v2.js +2 -2
  49. package/dist/evaluators/v2.js.map +1 -1
  50. package/dist/finding-lifecycle.d.ts +93 -0
  51. package/dist/finding-lifecycle.d.ts.map +1 -0
  52. package/dist/finding-lifecycle.js +214 -0
  53. package/dist/finding-lifecycle.js.map +1 -0
  54. package/dist/formatters/github-actions.d.ts +7 -0
  55. package/dist/formatters/github-actions.d.ts.map +1 -0
  56. package/dist/formatters/github-actions.js +69 -0
  57. package/dist/formatters/github-actions.js.map +1 -0
  58. package/dist/patches/index.d.ts.map +1 -1
  59. package/dist/patches/index.js +127 -0
  60. package/dist/patches/index.js.map +1 -1
  61. package/dist/presets.d.ts.map +1 -1
  62. package/dist/presets.js +103 -0
  63. package/dist/presets.js.map +1 -1
  64. package/dist/scoring.d.ts +8 -0
  65. package/dist/scoring.d.ts.map +1 -1
  66. package/dist/scoring.js +66 -26
  67. package/dist/scoring.js.map +1 -1
  68. package/dist/tools/register-evaluation.d.ts +1 -1
  69. package/dist/tools/register-evaluation.d.ts.map +1 -1
  70. package/dist/tools/register-evaluation.js +90 -1
  71. package/dist/tools/register-evaluation.js.map +1 -1
  72. package/dist/tools/register-workflow.d.ts.map +1 -1
  73. package/dist/tools/register-workflow.js +23 -20
  74. package/dist/tools/register-workflow.js.map +1 -1
  75. package/dist/types.d.ts +36 -2
  76. package/dist/types.d.ts.map +1 -1
  77. package/package.json +1 -1
  78. 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"}