@kevinrabun/judges 3.22.1 → 3.23.1
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 +44 -0
- package/dist/api.d.ts +18 -5
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +15 -3
- package/dist/api.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +54 -36
- package/dist/cli.js.map +1 -1
- package/dist/commands/auto-detect.d.ts +62 -0
- package/dist/commands/auto-detect.d.ts.map +1 -0
- package/dist/commands/auto-detect.js +329 -0
- package/dist/commands/auto-detect.js.map +1 -0
- package/dist/commands/baseline.d.ts +46 -0
- package/dist/commands/baseline.d.ts.map +1 -1
- package/dist/commands/baseline.js +290 -27
- package/dist/commands/baseline.js.map +1 -1
- package/dist/commands/benchmark.d.ts +21 -3
- package/dist/commands/benchmark.d.ts.map +1 -1
- package/dist/commands/benchmark.js +365 -6
- package/dist/commands/benchmark.js.map +1 -1
- package/dist/commands/coverage.d.ts +41 -0
- package/dist/commands/coverage.d.ts.map +1 -0
- package/dist/commands/coverage.js +184 -0
- package/dist/commands/coverage.js.map +1 -0
- package/dist/commands/doctor.d.ts +56 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +363 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/feedback.d.ts +42 -0
- package/dist/commands/feedback.d.ts.map +1 -1
- package/dist/commands/feedback.js +129 -0
- package/dist/commands/feedback.js.map +1 -1
- package/dist/commands/rule-metrics.d.ts +44 -0
- package/dist/commands/rule-metrics.d.ts.map +1 -0
- package/dist/commands/rule-metrics.js +114 -0
- package/dist/commands/rule-metrics.js.map +1 -0
- package/dist/commands/rule.d.ts +65 -0
- package/dist/commands/rule.d.ts.map +1 -1
- package/dist/commands/rule.js +94 -0
- package/dist/commands/rule.js.map +1 -1
- package/dist/commands/snapshot.d.ts +81 -0
- package/dist/commands/snapshot.d.ts.map +1 -0
- package/dist/commands/snapshot.js +189 -0
- package/dist/commands/snapshot.js.map +1 -0
- package/dist/config.d.ts +35 -3
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +187 -2
- package/dist/config.js.map +1 -1
- package/dist/dedup.d.ts +35 -0
- package/dist/dedup.d.ts.map +1 -1
- package/dist/dedup.js +96 -0
- package/dist/dedup.js.map +1 -1
- package/dist/evaluators/index.d.ts +22 -2
- package/dist/evaluators/index.d.ts.map +1 -1
- package/dist/evaluators/index.js +144 -52
- package/dist/evaluators/index.js.map +1 -1
- package/dist/patches/index.d.ts.map +1 -1
- package/dist/patches/index.js +426 -0
- package/dist/patches/index.js.map +1 -1
- package/dist/types.d.ts +43 -0
- package/dist/types.d.ts.map +1 -1
- package/judgesrc.schema.json +5 -0
- package/package.json +1 -1
- package/server.json +2 -2
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
// ─── Baseline Command ────────────────────────────────────────────────────────
|
|
2
|
-
// Create
|
|
2
|
+
// Create and update baseline files for suppressing known findings.
|
|
3
3
|
//
|
|
4
4
|
// Usage:
|
|
5
5
|
// judges baseline create --file src/app.ts # baseline one file
|
|
6
|
+
// judges baseline create --dir . # baseline entire project
|
|
7
|
+
// judges baseline update --dir . # re-scan & merge
|
|
6
8
|
// judges baseline create --file src/app.ts -o .judges-baseline.json
|
|
7
9
|
// ──────────────────────────────────────────────────────────────────────────────
|
|
10
|
+
import { createHash } from "crypto";
|
|
8
11
|
import { readFileSync, writeFileSync, existsSync } from "fs";
|
|
9
|
-
import { resolve, extname } from "path";
|
|
12
|
+
import { resolve, extname, relative } from "path";
|
|
10
13
|
import { evaluateWithTribunal } from "../evaluators/index.js";
|
|
14
|
+
import { collectFiles } from "../cli.js";
|
|
11
15
|
// ─── Language Detection ─────────────────────────────────────────────────────
|
|
12
16
|
const EXT_TO_LANG = {
|
|
13
17
|
".ts": "typescript",
|
|
@@ -46,33 +50,271 @@ function detectLanguage(filePath) {
|
|
|
46
50
|
const ext = extname(filePath.toLowerCase());
|
|
47
51
|
return EXT_TO_LANG[ext];
|
|
48
52
|
}
|
|
53
|
+
// ─── Fingerprinting ────────────────────────────────────────────────────────
|
|
54
|
+
// Hash ruleId + title + normalized surrounding source context so that findings
|
|
55
|
+
// survive line-number shifts caused by unrelated edits.
|
|
56
|
+
const DEFAULT_CONTEXT_RADIUS = 3;
|
|
57
|
+
export function computeFindingFingerprint(ruleId, title, sourceCode, lineNumber, contextRadius = DEFAULT_CONTEXT_RADIUS) {
|
|
58
|
+
const lines = sourceCode.split("\n");
|
|
59
|
+
const startIdx = Math.max(0, lineNumber - 1 - contextRadius);
|
|
60
|
+
const endIdx = Math.min(lines.length, lineNumber + contextRadius);
|
|
61
|
+
const contextSlice = lines
|
|
62
|
+
.slice(startIdx, endIdx)
|
|
63
|
+
.map((l) => l.trim())
|
|
64
|
+
.filter((l) => l.length > 0)
|
|
65
|
+
.join("\n");
|
|
66
|
+
const raw = `${ruleId}::${title}::${contextSlice}`;
|
|
67
|
+
return createHash("sha256").update(raw).digest("hex").slice(0, 16);
|
|
68
|
+
}
|
|
69
|
+
// ─── Load / Match Baseline ──────────────────────────────────────────────────
|
|
70
|
+
/** Build a legacy v1 key (ruleId::firstLine::title) */
|
|
71
|
+
function v1Key(f) {
|
|
72
|
+
const line = f.lineNumbers?.[0] ?? 0;
|
|
73
|
+
return `${f.ruleId}::${line}::${f.title}`;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Load a baseline file (v1 or v2) into a unified lookup structure.
|
|
77
|
+
*/
|
|
78
|
+
export function loadBaselineData(baselinePath) {
|
|
79
|
+
const abs = resolve(baselinePath);
|
|
80
|
+
if (!existsSync(abs)) {
|
|
81
|
+
return { version: 0, keys: new Set(), fingerprints: new Set(), fileFingerprints: new Map() };
|
|
82
|
+
}
|
|
83
|
+
try {
|
|
84
|
+
const raw = readFileSync(abs, "utf-8");
|
|
85
|
+
const data = JSON.parse(raw);
|
|
86
|
+
if (data.version === 2) {
|
|
87
|
+
const fingerprints = new Set();
|
|
88
|
+
const fileFingerprints = new Map();
|
|
89
|
+
for (const [filePath, findings] of Object.entries(data.files || {})) {
|
|
90
|
+
const set = new Set();
|
|
91
|
+
for (const f of findings) {
|
|
92
|
+
if (f.status === "active") {
|
|
93
|
+
fingerprints.add(f.fingerprint);
|
|
94
|
+
set.add(f.fingerprint);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
fileFingerprints.set(filePath, set);
|
|
98
|
+
}
|
|
99
|
+
return { version: 2, keys: new Set(), fingerprints, fileFingerprints };
|
|
100
|
+
}
|
|
101
|
+
// V1 fallback
|
|
102
|
+
const keys = new Set();
|
|
103
|
+
if (Array.isArray(data.findings)) {
|
|
104
|
+
for (const f of data.findings) {
|
|
105
|
+
keys.add(v1Key(f));
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return { version: 1, keys, fingerprints: new Set(), fileFingerprints: new Map() };
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
console.error(`Warning: Could not parse baseline file: ${baselinePath}`);
|
|
112
|
+
return { version: 0, keys: new Set(), fingerprints: new Set(), fileFingerprints: new Map() };
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Check whether a finding is suppressed by the loaded baseline.
|
|
117
|
+
*
|
|
118
|
+
* For v1 baselines, uses exact ruleId::line::title matching.
|
|
119
|
+
* For v2 baselines, uses fingerprint matching against source code context.
|
|
120
|
+
*
|
|
121
|
+
* @param filePath - Relative path of the file being evaluated (for v2 per-file lookup)
|
|
122
|
+
*/
|
|
123
|
+
export function isBaselined(finding, baseline, sourceCode, filePath) {
|
|
124
|
+
// V1 matching — exact key lookup
|
|
125
|
+
if (baseline.keys.size > 0) {
|
|
126
|
+
if (baseline.keys.has(v1Key(finding)))
|
|
127
|
+
return true;
|
|
128
|
+
}
|
|
129
|
+
// V2 matching — fingerprint-based
|
|
130
|
+
if (baseline.fingerprints.size > 0) {
|
|
131
|
+
const targetSet = filePath && baseline.fileFingerprints.has(filePath)
|
|
132
|
+
? baseline.fileFingerprints.get(filePath)
|
|
133
|
+
: baseline.fingerprints;
|
|
134
|
+
for (const line of finding.lineNumbers ?? [0]) {
|
|
135
|
+
const fp = computeFindingFingerprint(finding.ruleId, finding.title, sourceCode, line);
|
|
136
|
+
if (targetSet.has(fp))
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
// ─── Baseline Creation Helpers ──────────────────────────────────────────────
|
|
143
|
+
function buildV2Findings(findings, sourceCode) {
|
|
144
|
+
return findings.map((f) => ({
|
|
145
|
+
ruleId: f.ruleId,
|
|
146
|
+
title: f.title,
|
|
147
|
+
fingerprint: computeFindingFingerprint(f.ruleId, f.title, sourceCode, f.lineNumbers?.[0] ?? 1),
|
|
148
|
+
severity: f.severity,
|
|
149
|
+
lineNumbers: f.lineNumbers ?? [],
|
|
150
|
+
status: "active",
|
|
151
|
+
}));
|
|
152
|
+
}
|
|
153
|
+
function createSingleFileBaseline(filePath, code, language) {
|
|
154
|
+
const verdict = evaluateWithTribunal(code, language);
|
|
155
|
+
const relPath = relative(resolve("."), resolve(filePath));
|
|
156
|
+
const now = new Date().toISOString();
|
|
157
|
+
return {
|
|
158
|
+
version: 2,
|
|
159
|
+
createdAt: now,
|
|
160
|
+
updatedAt: now,
|
|
161
|
+
files: {
|
|
162
|
+
[relPath]: buildV2Findings(verdict.findings, code),
|
|
163
|
+
},
|
|
164
|
+
totalFindings: verdict.findings.length,
|
|
165
|
+
resolvedFindings: 0,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
function createProjectBaseline(dir, excludePatterns, includePatterns, maxFiles, language) {
|
|
169
|
+
const files = collectFiles(dir, {
|
|
170
|
+
exclude: excludePatterns,
|
|
171
|
+
include: includePatterns,
|
|
172
|
+
maxFiles,
|
|
173
|
+
});
|
|
174
|
+
if (files.length === 0) {
|
|
175
|
+
console.error(`No supported source files found in: ${dir}`);
|
|
176
|
+
process.exit(1);
|
|
177
|
+
}
|
|
178
|
+
const now = new Date().toISOString();
|
|
179
|
+
const baseline = {
|
|
180
|
+
version: 2,
|
|
181
|
+
createdAt: now,
|
|
182
|
+
updatedAt: now,
|
|
183
|
+
files: {},
|
|
184
|
+
totalFindings: 0,
|
|
185
|
+
resolvedFindings: 0,
|
|
186
|
+
};
|
|
187
|
+
console.log(`Scanning ${files.length} file(s) for baseline…`);
|
|
188
|
+
for (let i = 0; i < files.length; i++) {
|
|
189
|
+
const filePath = files[i];
|
|
190
|
+
const relPath = relative(resolve("."), filePath);
|
|
191
|
+
process.stderr.write(` [${i + 1}/${files.length}] ${relPath}…`);
|
|
192
|
+
try {
|
|
193
|
+
const code = readFileSync(filePath, "utf-8");
|
|
194
|
+
const lang = language || detectLanguage(filePath) || "typescript";
|
|
195
|
+
const verdict = evaluateWithTribunal(code, lang);
|
|
196
|
+
if (verdict.findings.length > 0) {
|
|
197
|
+
baseline.files[relPath] = buildV2Findings(verdict.findings, code);
|
|
198
|
+
baseline.totalFindings += verdict.findings.length;
|
|
199
|
+
}
|
|
200
|
+
process.stderr.write(` ${verdict.findings.length} finding(s)\n`);
|
|
201
|
+
}
|
|
202
|
+
catch (err) {
|
|
203
|
+
process.stderr.write(` error: ${err.message}\n`);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return baseline;
|
|
207
|
+
}
|
|
208
|
+
// ─── Baseline Update (Merge) ────────────────────────────────────────────────
|
|
209
|
+
function updateBaseline(existingPath, dir, excludePatterns, includePatterns, maxFiles, language) {
|
|
210
|
+
// Load existing baseline
|
|
211
|
+
const abs = resolve(existingPath);
|
|
212
|
+
let existing;
|
|
213
|
+
if (existsSync(abs)) {
|
|
214
|
+
try {
|
|
215
|
+
const data = JSON.parse(readFileSync(abs, "utf-8"));
|
|
216
|
+
if (data.version === 2)
|
|
217
|
+
existing = data;
|
|
218
|
+
}
|
|
219
|
+
catch {
|
|
220
|
+
console.error(`Warning: Could not parse existing baseline, creating fresh.`);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
// Scan project
|
|
224
|
+
const fresh = createProjectBaseline(dir, excludePatterns, includePatterns, maxFiles, language);
|
|
225
|
+
if (!existing)
|
|
226
|
+
return fresh;
|
|
227
|
+
// Merge: keep resolved status for fingerprints that no longer appear
|
|
228
|
+
let resolvedCount = 0;
|
|
229
|
+
const merged = {
|
|
230
|
+
version: 2,
|
|
231
|
+
createdAt: existing.createdAt,
|
|
232
|
+
updatedAt: new Date().toISOString(),
|
|
233
|
+
files: {},
|
|
234
|
+
totalFindings: 0,
|
|
235
|
+
resolvedFindings: 0,
|
|
236
|
+
};
|
|
237
|
+
// Build set of all fresh fingerprints
|
|
238
|
+
const freshFingerprints = new Set();
|
|
239
|
+
for (const findings of Object.values(fresh.files)) {
|
|
240
|
+
for (const f of findings)
|
|
241
|
+
freshFingerprints.add(f.fingerprint);
|
|
242
|
+
}
|
|
243
|
+
// Process existing files — mark resolved findings
|
|
244
|
+
for (const [_filePath, existingFindings] of Object.entries(existing.files)) {
|
|
245
|
+
for (const ef of existingFindings) {
|
|
246
|
+
if (ef.status === "active" && !freshFingerprints.has(ef.fingerprint)) {
|
|
247
|
+
ef.status = "resolved";
|
|
248
|
+
resolvedCount++;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
// Merge: start with fresh findings, inherit resolved from existing
|
|
253
|
+
const existingFingerprints = new Set();
|
|
254
|
+
for (const findings of Object.values(existing.files)) {
|
|
255
|
+
for (const f of findings)
|
|
256
|
+
existingFingerprints.add(f.fingerprint);
|
|
257
|
+
}
|
|
258
|
+
// Add all fresh file findings
|
|
259
|
+
for (const [filePath, freshFindings] of Object.entries(fresh.files)) {
|
|
260
|
+
merged.files[filePath] = freshFindings;
|
|
261
|
+
merged.totalFindings += freshFindings.length;
|
|
262
|
+
}
|
|
263
|
+
// Carry over resolved findings from files that still exist
|
|
264
|
+
for (const [filePath, existingFindings] of Object.entries(existing.files)) {
|
|
265
|
+
const resolved = existingFindings.filter((f) => f.status === "resolved");
|
|
266
|
+
if (resolved.length > 0) {
|
|
267
|
+
if (!merged.files[filePath])
|
|
268
|
+
merged.files[filePath] = [];
|
|
269
|
+
merged.files[filePath].push(...resolved);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
merged.resolvedFindings =
|
|
273
|
+
resolvedCount +
|
|
274
|
+
Object.values(merged.files).reduce((sum, findings) => sum + findings.filter((f) => f.status === "resolved").length, 0);
|
|
275
|
+
// Deduplicate resolved count (we added resolvedCount + counted resolved again)
|
|
276
|
+
merged.resolvedFindings = Object.values(merged.files).reduce((sum, findings) => sum + findings.filter((f) => f.status === "resolved").length, 0);
|
|
277
|
+
const newFindings = merged.totalFindings - [...freshFingerprints].filter((fp) => existingFingerprints.has(fp)).length;
|
|
278
|
+
console.log(`\n Merge summary: ${merged.totalFindings} active, ${merged.resolvedFindings} resolved` +
|
|
279
|
+
(newFindings > 0 ? `, ${newFindings} new` : ""));
|
|
280
|
+
return merged;
|
|
281
|
+
}
|
|
49
282
|
// ─── CLI Entry Point ────────────────────────────────────────────────────────
|
|
50
283
|
export function runBaseline(argv) {
|
|
51
|
-
|
|
52
|
-
const subcommand = argv[3]; // "create"
|
|
284
|
+
const subcommand = argv[3]; // "create" | "update"
|
|
53
285
|
if (!subcommand || subcommand === "--help" || subcommand === "-h") {
|
|
54
286
|
console.log(`
|
|
55
287
|
Judges Panel — Baseline Management
|
|
56
288
|
|
|
57
289
|
USAGE:
|
|
58
|
-
judges baseline create --file <path>
|
|
59
|
-
judges baseline create --
|
|
290
|
+
judges baseline create --file <path> Baseline one file (v2)
|
|
291
|
+
judges baseline create --dir . Baseline entire project (v2)
|
|
292
|
+
judges baseline update --dir . Re-scan & merge (mark resolved)
|
|
293
|
+
judges baseline create --file <path> -o baseline.json Custom output path
|
|
60
294
|
|
|
61
295
|
OPTIONS:
|
|
62
296
|
--file, -f <path> File to evaluate for baseline
|
|
297
|
+
--dir, -d <path> Directory to scan for project-wide baseline
|
|
63
298
|
--output, -o <path> Output baseline file (default: .judges-baseline.json)
|
|
64
|
-
--language, -l <lang> Language override
|
|
299
|
+
--language, -l <lang> Language override (auto-detected if omitted)
|
|
300
|
+
--exclude <pattern> Glob patterns to exclude (repeatable)
|
|
301
|
+
--include <pattern> Glob patterns to include (repeatable)
|
|
302
|
+
--max-files <n> Maximum files to scan
|
|
65
303
|
`);
|
|
66
304
|
process.exit(0);
|
|
67
305
|
}
|
|
68
|
-
if (subcommand !== "create") {
|
|
306
|
+
if (subcommand !== "create" && subcommand !== "update") {
|
|
69
307
|
console.error(`Unknown baseline subcommand: ${subcommand}`);
|
|
70
|
-
console.error('Use "judges baseline create
|
|
308
|
+
console.error('Use "judges baseline create" or "judges baseline update"');
|
|
71
309
|
process.exit(1);
|
|
72
310
|
}
|
|
73
311
|
let file;
|
|
312
|
+
let dir;
|
|
74
313
|
let output = ".judges-baseline.json";
|
|
75
314
|
let language;
|
|
315
|
+
const exclude = [];
|
|
316
|
+
const include = [];
|
|
317
|
+
let maxFiles;
|
|
76
318
|
for (let i = 4; i < argv.length; i++) {
|
|
77
319
|
const arg = argv[i];
|
|
78
320
|
switch (arg) {
|
|
@@ -80,6 +322,10 @@ OPTIONS:
|
|
|
80
322
|
case "-f":
|
|
81
323
|
file = argv[++i];
|
|
82
324
|
break;
|
|
325
|
+
case "--dir":
|
|
326
|
+
case "-d":
|
|
327
|
+
dir = argv[++i];
|
|
328
|
+
break;
|
|
83
329
|
case "--output":
|
|
84
330
|
case "-o":
|
|
85
331
|
output = argv[++i];
|
|
@@ -88,14 +334,44 @@ OPTIONS:
|
|
|
88
334
|
case "-l":
|
|
89
335
|
language = argv[++i];
|
|
90
336
|
break;
|
|
337
|
+
case "--exclude":
|
|
338
|
+
exclude.push(argv[++i]);
|
|
339
|
+
break;
|
|
340
|
+
case "--include":
|
|
341
|
+
include.push(argv[++i]);
|
|
342
|
+
break;
|
|
343
|
+
case "--max-files":
|
|
344
|
+
maxFiles = parseInt(argv[++i], 10);
|
|
345
|
+
break;
|
|
91
346
|
default:
|
|
92
|
-
if (!arg.startsWith("-") && !file)
|
|
347
|
+
if (!arg.startsWith("-") && !file && !dir)
|
|
93
348
|
file = arg;
|
|
94
349
|
break;
|
|
95
350
|
}
|
|
96
351
|
}
|
|
352
|
+
// ── Update subcommand ──────────────────────────────────────────────────
|
|
353
|
+
if (subcommand === "update") {
|
|
354
|
+
const targetDir = dir || ".";
|
|
355
|
+
console.log(`Updating baseline from ${targetDir}…`);
|
|
356
|
+
const baseline = updateBaseline(output, targetDir, exclude, include, maxFiles, language);
|
|
357
|
+
const outPath = resolve(output);
|
|
358
|
+
writeFileSync(outPath, JSON.stringify(baseline, null, 2), "utf-8");
|
|
359
|
+
console.log(`✅ Baseline updated: ${outPath} (${baseline.totalFindings} active, ${baseline.resolvedFindings} resolved)`);
|
|
360
|
+
process.exit(0);
|
|
361
|
+
}
|
|
362
|
+
// ── Create subcommand ──────────────────────────────────────────────────
|
|
363
|
+
// Project-wide mode
|
|
364
|
+
if (dir) {
|
|
365
|
+
console.log(`Creating project-wide baseline from ${dir}…`);
|
|
366
|
+
const baseline = createProjectBaseline(dir, exclude, include, maxFiles, language);
|
|
367
|
+
const outPath = resolve(output);
|
|
368
|
+
writeFileSync(outPath, JSON.stringify(baseline, null, 2), "utf-8");
|
|
369
|
+
console.log(`✅ Baseline created: ${outPath} (${baseline.totalFindings} findings across ${Object.keys(baseline.files).length} file(s))`);
|
|
370
|
+
process.exit(0);
|
|
371
|
+
}
|
|
372
|
+
// Single-file mode
|
|
97
373
|
if (!file) {
|
|
98
|
-
console.error("Error: --file is required for baseline create");
|
|
374
|
+
console.error("Error: --file or --dir is required for baseline create");
|
|
99
375
|
process.exit(1);
|
|
100
376
|
}
|
|
101
377
|
const abs = resolve(file);
|
|
@@ -106,23 +382,10 @@ OPTIONS:
|
|
|
106
382
|
const code = readFileSync(abs, "utf-8");
|
|
107
383
|
const lang = language || detectLanguage(file) || "typescript";
|
|
108
384
|
console.log(`Evaluating ${file} to create baseline...`);
|
|
109
|
-
const
|
|
110
|
-
const baselineData = {
|
|
111
|
-
version: 1,
|
|
112
|
-
createdAt: new Date().toISOString(),
|
|
113
|
-
sourceFile: file,
|
|
114
|
-
findings: verdict.findings.map((f) => ({
|
|
115
|
-
ruleId: f.ruleId,
|
|
116
|
-
title: f.title,
|
|
117
|
-
lineNumbers: f.lineNumbers,
|
|
118
|
-
severity: f.severity,
|
|
119
|
-
})),
|
|
120
|
-
totalFindings: verdict.findings.length,
|
|
121
|
-
score: verdict.overallScore,
|
|
122
|
-
};
|
|
385
|
+
const baseline = createSingleFileBaseline(file, code, lang);
|
|
123
386
|
const outPath = resolve(output);
|
|
124
|
-
writeFileSync(outPath, JSON.stringify(
|
|
125
|
-
console.log(`✅ Baseline created: ${outPath} (${
|
|
387
|
+
writeFileSync(outPath, JSON.stringify(baseline, null, 2), "utf-8");
|
|
388
|
+
console.log(`✅ Baseline created: ${outPath} (${baseline.totalFindings} finding(s) captured)`);
|
|
126
389
|
process.exit(0);
|
|
127
390
|
}
|
|
128
391
|
//# sourceMappingURL=baseline.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"baseline.js","sourceRoot":"","sources":["../../src/commands/baseline.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"baseline.js","sourceRoot":"","sources":["../../src/commands/baseline.ts"],"names":[],"mappings":"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"}
|
|
@@ -47,21 +47,39 @@ export interface BenchmarkResult {
|
|
|
47
47
|
falseNegatives: number;
|
|
48
48
|
/** False positives: unexpected findings that were detected */
|
|
49
49
|
falsePositives: number;
|
|
50
|
-
/** Precision: TP / (TP + FP) */
|
|
50
|
+
/** Precision: TP / (TP + FP) — prefix-based matching */
|
|
51
51
|
precision: number;
|
|
52
|
-
/** Recall: TP / (TP + FN) */
|
|
52
|
+
/** Recall: TP / (TP + FN) — prefix-based matching */
|
|
53
53
|
recall: number;
|
|
54
|
-
/** F1 score: harmonic mean of precision and recall */
|
|
54
|
+
/** F1 score: harmonic mean of precision and recall — prefix-based */
|
|
55
55
|
f1Score: number;
|
|
56
56
|
/** Detection rate: cases detected / total cases */
|
|
57
57
|
detectionRate: number;
|
|
58
|
+
/** Strict true positives: exact rule-ID match */
|
|
59
|
+
strictTruePositives: number;
|
|
60
|
+
/** Strict false negatives: exact rule-ID not matched */
|
|
61
|
+
strictFalseNegatives: number;
|
|
62
|
+
/** Strict precision: TP / (TP + FP) using exact rule-ID matching */
|
|
63
|
+
strictPrecision: number;
|
|
64
|
+
/** Strict recall: TP / (TP + FN) using exact rule-ID matching */
|
|
65
|
+
strictRecall: number;
|
|
66
|
+
/** Strict F1 score: exact rule-ID matching */
|
|
67
|
+
strictF1Score: number;
|
|
58
68
|
/** Per-category results */
|
|
59
69
|
perCategory: Record<string, CategoryResult>;
|
|
60
70
|
/** Per-judge results */
|
|
61
71
|
perJudge: Record<string, JudgeBenchmarkResult>;
|
|
72
|
+
/** Per-difficulty breakdown */
|
|
73
|
+
perDifficulty: Record<string, DifficultyResult>;
|
|
62
74
|
/** Individual case results */
|
|
63
75
|
cases: CaseResult[];
|
|
64
76
|
}
|
|
77
|
+
export interface DifficultyResult {
|
|
78
|
+
difficulty: string;
|
|
79
|
+
total: number;
|
|
80
|
+
detected: number;
|
|
81
|
+
detectionRate: number;
|
|
82
|
+
}
|
|
65
83
|
export interface CategoryResult {
|
|
66
84
|
category: string;
|
|
67
85
|
total: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"benchmark.d.ts","sourceRoot":"","sources":["../../src/commands/benchmark.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAUH,MAAM,WAAW,aAAa;IAC5B,2CAA2C;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,mDAAmD;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,mEAAmE;IACnE,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,kEAAkE;IAClE,QAAQ,EAAE,MAAM,CAAC;IACjB,uBAAuB;IACvB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;CACxC;AAED,MAAM,WAAW,eAAe;IAC9B,uBAAuB;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,2BAA2B;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,CAAC;IACjB,gDAAgD;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,aAAa,EAAE,MAAM,CAAC;IACtB,2DAA2D;IAC3D,aAAa,EAAE,MAAM,CAAC;IACtB,0DAA0D;IAC1D,cAAc,EAAE,MAAM,CAAC;IACvB,8DAA8D;IAC9D,cAAc,EAAE,MAAM,CAAC;IACvB,
|
|
1
|
+
{"version":3,"file":"benchmark.d.ts","sourceRoot":"","sources":["../../src/commands/benchmark.ts"],"names":[],"mappings":"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"}
|