@kevinrabun/judges 3.51.0 → 3.52.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.
Files changed (38) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +56 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/chat-notify.d.ts +9 -0
  6. package/dist/commands/chat-notify.d.ts.map +1 -0
  7. package/dist/commands/chat-notify.js +259 -0
  8. package/dist/commands/chat-notify.js.map +1 -0
  9. package/dist/commands/design-audit.d.ts +9 -0
  10. package/dist/commands/design-audit.d.ts.map +1 -0
  11. package/dist/commands/design-audit.js +302 -0
  12. package/dist/commands/design-audit.js.map +1 -0
  13. package/dist/commands/impact-scan.d.ts +9 -0
  14. package/dist/commands/impact-scan.d.ts.map +1 -0
  15. package/dist/commands/impact-scan.js +282 -0
  16. package/dist/commands/impact-scan.js.map +1 -0
  17. package/dist/commands/judge-learn.d.ts +9 -0
  18. package/dist/commands/judge-learn.d.ts.map +1 -0
  19. package/dist/commands/judge-learn.js +218 -0
  20. package/dist/commands/judge-learn.js.map +1 -0
  21. package/dist/commands/model-report.d.ts +9 -0
  22. package/dist/commands/model-report.d.ts.map +1 -0
  23. package/dist/commands/model-report.js +195 -0
  24. package/dist/commands/model-report.js.map +1 -0
  25. package/dist/commands/remediation-lib.d.ts +9 -0
  26. package/dist/commands/remediation-lib.d.ts.map +1 -0
  27. package/dist/commands/remediation-lib.js +266 -0
  28. package/dist/commands/remediation-lib.js.map +1 -0
  29. package/dist/commands/trust-adaptive.d.ts +9 -0
  30. package/dist/commands/trust-adaptive.d.ts.map +1 -0
  31. package/dist/commands/trust-adaptive.js +194 -0
  32. package/dist/commands/trust-adaptive.js.map +1 -0
  33. package/dist/commands/watch-judge.d.ts +8 -0
  34. package/dist/commands/watch-judge.d.ts.map +1 -0
  35. package/dist/commands/watch-judge.js +180 -0
  36. package/dist/commands/watch-judge.js.map +1 -0
  37. package/package.json +1 -1
  38. package/server.json +2 -2
@@ -0,0 +1,195 @@
1
+ /**
2
+ * Model report — track which AI model/version produced each finding
3
+ * across evaluation runs. Generates model scorecards with pass rates,
4
+ * failure categories, and vendor-specific blind spots.
5
+ *
6
+ * All data stored locally in `.judges-model-reports/`.
7
+ */
8
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from "fs";
9
+ import { join } from "path";
10
+ // ─── Storage ────────────────────────────────────────────────────────────────
11
+ const DATA_DIR = ".judges-model-reports";
12
+ function ensureDir() {
13
+ if (!existsSync(DATA_DIR))
14
+ mkdirSync(DATA_DIR, { recursive: true });
15
+ }
16
+ function loadEntries() {
17
+ const file = join(DATA_DIR, "history.json");
18
+ if (!existsSync(file))
19
+ return [];
20
+ try {
21
+ return JSON.parse(readFileSync(file, "utf-8"));
22
+ }
23
+ catch {
24
+ return [];
25
+ }
26
+ }
27
+ function saveEntries(entries) {
28
+ ensureDir();
29
+ writeFileSync(join(DATA_DIR, "history.json"), JSON.stringify(entries, null, 2));
30
+ }
31
+ // ─── Analysis ───────────────────────────────────────────────────────────────
32
+ function categorizeFindings(content) {
33
+ const cats = {};
34
+ const patterns = [
35
+ ["security", /injection|xss|csrf|auth|password|secret|token|key/gi],
36
+ ["error-handling", /catch|error|exception|throw|reject|finally/gi],
37
+ ["performance", /loop|recursion|allocation|memory|cache|lazy|eager/gi],
38
+ ["naming", /naming|variable|identifier|abbreviation|convention/gi],
39
+ ["complexity", /complex|nested|depth|cyclomatic|conditional/gi],
40
+ ["duplication", /duplicate|copy|clone|repeat|redundant/gi],
41
+ ["documentation", /comment|doc|readme|jsdoc|annotation/gi],
42
+ ["testing", /test|assert|mock|stub|coverage|spec/gi],
43
+ ];
44
+ for (const [cat, re] of patterns) {
45
+ const matches = (content.match(re) || []).length;
46
+ if (matches > 0)
47
+ cats[cat] = matches;
48
+ }
49
+ return cats;
50
+ }
51
+ function generateReports(entries) {
52
+ const models = new Map();
53
+ for (const entry of entries) {
54
+ const list = models.get(entry.model) || [];
55
+ list.push(entry);
56
+ models.set(entry.model, list);
57
+ }
58
+ const reports = [];
59
+ for (const [model, evalList] of models) {
60
+ const avgScore = Math.round(evalList.reduce((s, e) => s + e.score, 0) / evalList.length);
61
+ const avgFindings = Math.round(evalList.reduce((s, e) => s + e.totalFindings, 0) / evalList.length);
62
+ // Aggregate categories
63
+ const catTotals = {};
64
+ for (const e of evalList) {
65
+ for (const [cat, count] of Object.entries(e.categories)) {
66
+ catTotals[cat] = (catTotals[cat] || 0) + count;
67
+ }
68
+ }
69
+ const topCategories = Object.entries(catTotals)
70
+ .sort((a, b) => b[1] - a[1])
71
+ .slice(0, 5)
72
+ .map(([category, count]) => ({ category, count }));
73
+ // Trend
74
+ let trend = "stable";
75
+ if (evalList.length >= 3) {
76
+ const recent = evalList.slice(-3);
77
+ const scoreDiff = recent[recent.length - 1].score - recent[0].score;
78
+ if (scoreDiff > 5)
79
+ trend = "improving";
80
+ else if (scoreDiff < -5)
81
+ trend = "declining";
82
+ }
83
+ reports.push({ model, evaluations: evalList.length, avgScore, avgFindings, topCategories, trend });
84
+ }
85
+ return reports.sort((a, b) => b.avgScore - a.avgScore);
86
+ }
87
+ // ─── CLI ────────────────────────────────────────────────────────────────────
88
+ export function runModelReport(argv) {
89
+ if (argv.includes("--help") || argv.includes("-h")) {
90
+ console.log(`
91
+ judges model-report — AI model scorecard and comparison
92
+
93
+ Usage:
94
+ judges model-report --record --model "gpt-4" --score 85 --findings 3
95
+ judges model-report --record --model "claude-4" --file eval-output.json
96
+ judges model-report --show
97
+ judges model-report --compare
98
+
99
+ Options:
100
+ --record Record a new evaluation entry
101
+ --model <name> Model name/version
102
+ --score <n> Evaluation score (0-100)
103
+ --findings <n> Number of findings
104
+ --file <path> Import findings from evaluation output
105
+ --show Display model scorecards
106
+ --compare Side-by-side model comparison
107
+ --format json JSON output
108
+ --help, -h Show this help
109
+ `);
110
+ return;
111
+ }
112
+ const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
113
+ const record = argv.includes("--record");
114
+ const show = argv.includes("--show");
115
+ const compare = argv.includes("--compare");
116
+ const modelName = argv.find((_a, i) => argv[i - 1] === "--model") || "";
117
+ const scoreArg = argv.find((_a, i) => argv[i - 1] === "--score");
118
+ const findingsArg = argv.find((_a, i) => argv[i - 1] === "--findings");
119
+ const fileArg = argv.find((_a, i) => argv[i - 1] === "--file");
120
+ if (record) {
121
+ if (!modelName) {
122
+ console.error(" --model is required for --record");
123
+ return;
124
+ }
125
+ let totalFindings = parseInt(findingsArg || "0");
126
+ let score = parseInt(scoreArg || "0");
127
+ let categories = {};
128
+ if (fileArg && existsSync(fileArg)) {
129
+ try {
130
+ const data = readFileSync(fileArg, "utf-8");
131
+ categories = categorizeFindings(data);
132
+ const parsed = JSON.parse(data);
133
+ if (parsed.findings)
134
+ totalFindings = Array.isArray(parsed.findings) ? parsed.findings.length : totalFindings;
135
+ if (parsed.overallScore)
136
+ score = parsed.overallScore;
137
+ }
138
+ catch {
139
+ /* use manual values */
140
+ }
141
+ }
142
+ const entry = {
143
+ model: modelName,
144
+ timestamp: new Date().toISOString(),
145
+ totalFindings,
146
+ criticalCount: 0,
147
+ highCount: 0,
148
+ mediumCount: Math.round(totalFindings * 0.6),
149
+ lowCount: Math.round(totalFindings * 0.4),
150
+ score,
151
+ categories,
152
+ };
153
+ const entries = loadEntries();
154
+ entries.push(entry);
155
+ saveEntries(entries);
156
+ console.log(` ✅ Recorded evaluation for ${modelName} (score: ${score}, findings: ${totalFindings})`);
157
+ return;
158
+ }
159
+ const entries = loadEntries();
160
+ if (entries.length === 0) {
161
+ console.log(" No model data recorded yet. Use --record to add evaluations.");
162
+ return;
163
+ }
164
+ const reports = generateReports(entries);
165
+ if (format === "json") {
166
+ console.log(JSON.stringify({ reports, totalEntries: entries.length, timestamp: new Date().toISOString() }, null, 2));
167
+ return;
168
+ }
169
+ if (compare) {
170
+ console.log(`\n Model Comparison — ${reports.length} models\n ──────────────────────────`);
171
+ console.log(` ${"Model".padEnd(25)} ${"Evals".padEnd(8)} ${"Avg Score".padEnd(12)} ${"Avg Findings".padEnd(14)} Trend`);
172
+ console.log(` ${"─".repeat(25)} ${"─".repeat(8)} ${"─".repeat(12)} ${"─".repeat(14)} ${"─".repeat(10)}`);
173
+ for (const r of reports) {
174
+ const trendIcon = r.trend === "improving" ? "📈" : r.trend === "declining" ? "📉" : "➡️";
175
+ console.log(` ${r.model.padEnd(25)} ${String(r.evaluations).padEnd(8)} ${String(r.avgScore).padEnd(12)} ${String(r.avgFindings).padEnd(14)} ${trendIcon} ${r.trend}`);
176
+ }
177
+ console.log("");
178
+ return;
179
+ }
180
+ // Show (default)
181
+ if (show || !compare) {
182
+ console.log(`\n Model Report Cards — ${entries.length} evaluations across ${reports.length} models\n ──────────────────────────`);
183
+ for (const r of reports) {
184
+ const icon = r.avgScore >= 80 ? "🟢" : r.avgScore >= 60 ? "🟡" : "🔴";
185
+ const trendIcon = r.trend === "improving" ? "📈" : r.trend === "declining" ? "📉" : "➡️";
186
+ console.log(`\n ${icon} ${r.model}`);
187
+ console.log(` Score: ${r.avgScore}/100 | Findings: ${r.avgFindings} avg | Evals: ${r.evaluations} | ${trendIcon} ${r.trend}`);
188
+ if (r.topCategories.length > 0) {
189
+ console.log(` Top issues: ${r.topCategories.map((c) => `${c.category}(${c.count})`).join(", ")}`);
190
+ }
191
+ }
192
+ console.log("");
193
+ }
194
+ }
195
+ //# sourceMappingURL=model-report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-report.js","sourceRoot":"","sources":["../../src/commands/model-report.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Remediation library — stores proven fixes as parameterized
3
+ * templates ranked by effectiveness. Auto-applies top-ranked
4
+ * templates to new instances of the same finding pattern.
5
+ *
6
+ * All data stored locally in `.judges-remediation/`.
7
+ */
8
+ export declare function runRemediationLib(argv: string[]): void;
9
+ //# sourceMappingURL=remediation-lib.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remediation-lib.d.ts","sourceRoot":"","sources":["../../src/commands/remediation-lib.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAiIH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAmLtD"}
@@ -0,0 +1,266 @@
1
+ /**
2
+ * Remediation library — stores proven fixes as parameterized
3
+ * templates ranked by effectiveness. Auto-applies top-ranked
4
+ * templates to new instances of the same finding pattern.
5
+ *
6
+ * All data stored locally in `.judges-remediation/`.
7
+ */
8
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from "fs";
9
+ import { join } from "path";
10
+ // ─── Storage ────────────────────────────────────────────────────────────────
11
+ const DATA_DIR = ".judges-remediation";
12
+ const LIB_FILE = join(DATA_DIR, "library.json");
13
+ function ensureDir() {
14
+ if (!existsSync(DATA_DIR))
15
+ mkdirSync(DATA_DIR, { recursive: true });
16
+ }
17
+ function loadLibrary() {
18
+ if (!existsSync(LIB_FILE))
19
+ return { templates: [], totalApplied: 0, lastUpdated: new Date().toISOString() };
20
+ try {
21
+ return JSON.parse(readFileSync(LIB_FILE, "utf-8"));
22
+ }
23
+ catch {
24
+ return { templates: [], totalApplied: 0, lastUpdated: new Date().toISOString() };
25
+ }
26
+ }
27
+ function saveLibrary(lib) {
28
+ ensureDir();
29
+ lib.lastUpdated = new Date().toISOString();
30
+ writeFileSync(LIB_FILE, JSON.stringify(lib, null, 2));
31
+ }
32
+ // ─── Built-in templates ─────────────────────────────────────────────────────
33
+ const BUILTIN_TEMPLATES = [
34
+ {
35
+ id: "builtin-empty-catch",
36
+ ruleId: "empty-catch",
37
+ name: "Add error logging to empty catch",
38
+ description: "Replace empty catch blocks with console.error or logger",
39
+ language: "typescript",
40
+ before: "catch (err) {}",
41
+ after: 'catch (err) { console.error("Unhandled error:", err); }',
42
+ votes: 10,
43
+ applied: 0,
44
+ successRate: 95,
45
+ createdAt: "2025-01-01T00:00:00Z",
46
+ updatedAt: "2025-01-01T00:00:00Z",
47
+ },
48
+ {
49
+ id: "builtin-sql-injection",
50
+ ruleId: "sql-injection",
51
+ name: "Use parameterized query",
52
+ description: "Replace string concatenation with parameterized queries",
53
+ language: "typescript",
54
+ before: "`SELECT * FROM users WHERE id = ${userId}`",
55
+ after: '"SELECT * FROM users WHERE id = $1", [userId]',
56
+ votes: 15,
57
+ applied: 0,
58
+ successRate: 98,
59
+ createdAt: "2025-01-01T00:00:00Z",
60
+ updatedAt: "2025-01-01T00:00:00Z",
61
+ },
62
+ {
63
+ id: "builtin-xss",
64
+ ruleId: "xss",
65
+ name: "Sanitize HTML output",
66
+ description: "Escape user input before inserting into HTML",
67
+ language: "javascript",
68
+ before: "element.innerHTML = userInput",
69
+ after: "element.textContent = userInput",
70
+ votes: 12,
71
+ applied: 0,
72
+ successRate: 92,
73
+ createdAt: "2025-01-01T00:00:00Z",
74
+ updatedAt: "2025-01-01T00:00:00Z",
75
+ },
76
+ {
77
+ id: "builtin-hardcoded-secret",
78
+ ruleId: "hardcoded-secret",
79
+ name: "Move to environment variable",
80
+ description: "Replace hardcoded secrets with environment variable references",
81
+ language: "any",
82
+ before: 'const API_KEY = "sk-abc123..."',
83
+ after: "const API_KEY = process.env.API_KEY || ''",
84
+ votes: 14,
85
+ applied: 0,
86
+ successRate: 96,
87
+ createdAt: "2025-01-01T00:00:00Z",
88
+ updatedAt: "2025-01-01T00:00:00Z",
89
+ },
90
+ {
91
+ id: "builtin-todo-placeholder",
92
+ ruleId: "todo-placeholder",
93
+ name: "Replace TODO with implementation",
94
+ description: "Flag TODO comments that AI generators leave behind",
95
+ language: "any",
96
+ before: "// TODO: implement this",
97
+ after: "// Implementation required — see ticket #XXX",
98
+ votes: 8,
99
+ applied: 0,
100
+ successRate: 70,
101
+ createdAt: "2025-01-01T00:00:00Z",
102
+ updatedAt: "2025-01-01T00:00:00Z",
103
+ },
104
+ ];
105
+ // ─── CLI ────────────────────────────────────────────────────────────────────
106
+ export function runRemediationLib(argv) {
107
+ if (argv.includes("--help") || argv.includes("-h")) {
108
+ console.log(`
109
+ judges remediation-lib — Proven fix templates for common findings
110
+
111
+ Usage:
112
+ judges remediation-lib --list
113
+ judges remediation-lib --search "empty-catch"
114
+ judges remediation-lib --add --rule "my-rule" --name "Fix name" --before "bad" --after "good" --lang ts
115
+ judges remediation-lib --vote --id "builtin-empty-catch"
116
+ judges remediation-lib --apply --id "builtin-sql-injection" --file src/db.ts
117
+ judges remediation-lib --init (seed with built-in templates)
118
+
119
+ Options:
120
+ --list List all templates (ranked by votes)
121
+ --search <pattern> Search templates by rule or name
122
+ --add Add a new template
123
+ --rule <ruleId> Rule ID for the template
124
+ --name <name> Template name
125
+ --before <code> Code pattern to match
126
+ --after <code> Replacement code
127
+ --lang <language> Language (default: any)
128
+ --vote Upvote a template
129
+ --id <template-id> Template ID (for vote/apply)
130
+ --apply Apply template to file
131
+ --file <path> Target file for apply
132
+ --init Initialize with built-in templates
133
+ --format json JSON output
134
+ --help, -h Show this help
135
+ `);
136
+ return;
137
+ }
138
+ const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
139
+ const _isList = argv.includes("--list");
140
+ const isSearch = argv.includes("--search");
141
+ const isAdd = argv.includes("--add");
142
+ const isVote = argv.includes("--vote");
143
+ const isApply = argv.includes("--apply");
144
+ const isInit = argv.includes("--init");
145
+ const id = argv.find((_a, i) => argv[i - 1] === "--id") || "";
146
+ const ruleId = argv.find((_a, i) => argv[i - 1] === "--rule") || "";
147
+ const name = argv.find((_a, i) => argv[i - 1] === "--name") || "";
148
+ const before = argv.find((_a, i) => argv[i - 1] === "--before") || "";
149
+ const after = argv.find((_a, i) => argv[i - 1] === "--after") || "";
150
+ const lang = argv.find((_a, i) => argv[i - 1] === "--lang") || "any";
151
+ const searchTerm = argv.find((_a, i) => argv[i - 1] === "--search") || "";
152
+ const file = argv.find((_a, i) => argv[i - 1] === "--file") || "";
153
+ if (isInit) {
154
+ const lib = loadLibrary();
155
+ let added = 0;
156
+ for (const bt of BUILTIN_TEMPLATES) {
157
+ if (!lib.templates.some((t) => t.id === bt.id)) {
158
+ lib.templates.push({ ...bt });
159
+ added++;
160
+ }
161
+ }
162
+ saveLibrary(lib);
163
+ console.log(` ✅ Initialized with ${added} built-in templates (${lib.templates.length} total)`);
164
+ return;
165
+ }
166
+ if (isAdd) {
167
+ if (!ruleId || !name || !before || !after) {
168
+ console.error(" --rule, --name, --before, and --after are required");
169
+ return;
170
+ }
171
+ const lib = loadLibrary();
172
+ const template = {
173
+ id: `custom-${Date.now()}`,
174
+ ruleId,
175
+ name,
176
+ description: name,
177
+ language: lang,
178
+ before,
179
+ after,
180
+ votes: 0,
181
+ applied: 0,
182
+ successRate: 0,
183
+ createdAt: new Date().toISOString(),
184
+ updatedAt: new Date().toISOString(),
185
+ };
186
+ lib.templates.push(template);
187
+ saveLibrary(lib);
188
+ console.log(` ✅ Added template "${name}" for rule "${ruleId}"`);
189
+ return;
190
+ }
191
+ if (isVote) {
192
+ if (!id) {
193
+ console.error(" --id is required");
194
+ return;
195
+ }
196
+ const lib = loadLibrary();
197
+ const tmpl = lib.templates.find((t) => t.id === id);
198
+ if (!tmpl) {
199
+ console.error(` Template "${id}" not found`);
200
+ return;
201
+ }
202
+ tmpl.votes++;
203
+ tmpl.updatedAt = new Date().toISOString();
204
+ saveLibrary(lib);
205
+ console.log(` ✅ Upvoted "${tmpl.name}" (${tmpl.votes} votes)`);
206
+ return;
207
+ }
208
+ if (isApply) {
209
+ if (!id || !file) {
210
+ console.error(" --id and --file are required");
211
+ return;
212
+ }
213
+ if (!existsSync(file)) {
214
+ console.error(` File not found: ${file}`);
215
+ return;
216
+ }
217
+ const lib = loadLibrary();
218
+ const tmpl = lib.templates.find((t) => t.id === id);
219
+ if (!tmpl) {
220
+ console.error(` Template "${id}" not found`);
221
+ return;
222
+ }
223
+ const content = readFileSync(file, "utf-8");
224
+ if (!content.includes(tmpl.before)) {
225
+ console.log(` ⚠ Pattern not found in ${file}`);
226
+ return;
227
+ }
228
+ const updated = content.replace(tmpl.before, tmpl.after);
229
+ writeFileSync(file, updated);
230
+ tmpl.applied++;
231
+ lib.totalApplied++;
232
+ saveLibrary(lib);
233
+ console.log(` ✅ Applied "${tmpl.name}" to ${file}`);
234
+ return;
235
+ }
236
+ // List / Search
237
+ const lib = loadLibrary();
238
+ let templates = lib.templates;
239
+ if (isSearch && searchTerm) {
240
+ const term = searchTerm.toLowerCase();
241
+ templates = templates.filter((t) => t.ruleId.toLowerCase().includes(term) ||
242
+ t.name.toLowerCase().includes(term) ||
243
+ t.description.toLowerCase().includes(term));
244
+ }
245
+ templates.sort((a, b) => b.votes - a.votes);
246
+ if (format === "json") {
247
+ console.log(JSON.stringify({ templates, totalApplied: lib.totalApplied, timestamp: new Date().toISOString() }, null, 2));
248
+ }
249
+ else {
250
+ console.log(`\n Remediation Library — ${templates.length} templates\n ──────────────────────────`);
251
+ if (templates.length === 0) {
252
+ console.log(" No templates found. Use --init to seed built-ins or --add to create.");
253
+ console.log("");
254
+ return;
255
+ }
256
+ for (const t of templates) {
257
+ const effIcon = t.successRate >= 90 ? "🟢" : t.successRate >= 70 ? "🟡" : "🔴";
258
+ console.log(`\n ${effIcon} ${t.name} [${t.id}]`);
259
+ console.log(` Rule: ${t.ruleId} | Lang: ${t.language} | Votes: ${t.votes} | Applied: ${t.applied} | Success: ${t.successRate}%`);
260
+ console.log(` Before: ${t.before}`);
261
+ console.log(` After: ${t.after}`);
262
+ }
263
+ console.log(`\n Total applied: ${lib.totalApplied}\n`);
264
+ }
265
+ }
266
+ //# sourceMappingURL=remediation-lib.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remediation-lib.js","sourceRoot":"","sources":["../../src/commands/remediation-lib.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAyB5B,+EAA+E;AAE/E,MAAM,QAAQ,GAAG,qBAAqB,CAAC;AACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;AAEhD,SAAS,SAAS;IAChB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,WAAW;IAClB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;IAC5G,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;IACnF,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,GAAoB;IACvC,SAAS,EAAE,CAAC;IACZ,GAAG,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,+EAA+E;AAE/E,MAAM,iBAAiB,GAA0B;IAC/C;QACE,EAAE,EAAE,qBAAqB;QACzB,MAAM,EAAE,aAAa;QACrB,IAAI,EAAE,kCAAkC;QACxC,WAAW,EAAE,yDAAyD;QACtE,QAAQ,EAAE,YAAY;QACtB,MAAM,EAAE,gBAAgB;QACxB,KAAK,EAAE,yDAAyD;QAChE,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,EAAE;QACf,SAAS,EAAE,sBAAsB;QACjC,SAAS,EAAE,sBAAsB;KAClC;IACD;QACE,EAAE,EAAE,uBAAuB;QAC3B,MAAM,EAAE,eAAe;QACvB,IAAI,EAAE,yBAAyB;QAC/B,WAAW,EAAE,yDAAyD;QACtE,QAAQ,EAAE,YAAY;QACtB,MAAM,EAAE,4CAA4C;QACpD,KAAK,EAAE,+CAA+C;QACtD,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,EAAE;QACf,SAAS,EAAE,sBAAsB;QACjC,SAAS,EAAE,sBAAsB;KAClC;IACD;QACE,EAAE,EAAE,aAAa;QACjB,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,8CAA8C;QAC3D,QAAQ,EAAE,YAAY;QACtB,MAAM,EAAE,+BAA+B;QACvC,KAAK,EAAE,iCAAiC;QACxC,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,EAAE;QACf,SAAS,EAAE,sBAAsB;QACjC,SAAS,EAAE,sBAAsB;KAClC;IACD;QACE,EAAE,EAAE,0BAA0B;QAC9B,MAAM,EAAE,kBAAkB;QAC1B,IAAI,EAAE,8BAA8B;QACpC,WAAW,EAAE,gEAAgE;QAC7E,QAAQ,EAAE,KAAK;QACf,MAAM,EAAE,gCAAgC;QACxC,KAAK,EAAE,2CAA2C;QAClD,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,EAAE;QACf,SAAS,EAAE,sBAAsB;QACjC,SAAS,EAAE,sBAAsB;KAClC;IACD;QACE,EAAE,EAAE,0BAA0B;QAC9B,MAAM,EAAE,kBAAkB;QAC1B,IAAI,EAAE,kCAAkC;QACxC,WAAW,EAAE,oDAAoD;QACjE,QAAQ,EAAE,KAAK;QACf,MAAM,EAAE,yBAAyB;QACjC,KAAK,EAAE,8CAA8C;QACrD,KAAK,EAAE,CAAC;QACR,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,EAAE;QACf,SAAS,EAAE,sBAAsB;QACjC,SAAS,EAAE,sBAAsB;KAClC;CACF,CAAC;AAEF,+EAA+E;AAE/E,MAAM,UAAU,iBAAiB,CAAC,IAAc;IAC9C,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2Bf,CAAC,CAAC;QACC,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAU,EAAE,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,UAAU,CAAC,IAAI,MAAM,CAAC;IAC1F,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAEvC,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAU,EAAE,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC;IAC9E,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAU,EAAE,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;IACpF,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAU,EAAE,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;IAClF,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAU,EAAE,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,UAAU,CAAC,IAAI,EAAE,CAAC;IACtF,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAU,EAAE,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;IACpF,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAU,EAAE,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,QAAQ,CAAC,IAAI,KAAK,CAAC;IACrF,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAU,EAAE,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,UAAU,CAAC,IAAI,EAAE,CAAC;IAC1F,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAU,EAAE,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;IAElF,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,GAAG,GAAG,WAAW,EAAE,CAAC;QAC1B,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,EAAE,IAAI,iBAAiB,EAAE,CAAC;YACnC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC/C,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;gBAC9B,KAAK,EAAE,CAAC;YACV,CAAC;QACH,CAAC;QACD,WAAW,CAAC,GAAG,CAAC,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,wBAAwB,KAAK,wBAAwB,GAAG,CAAC,SAAS,CAAC,MAAM,SAAS,CAAC,CAAC;QAChG,OAAO;IACT,CAAC;IAED,IAAI,KAAK,EAAE,CAAC;QACV,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;YAC1C,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;YACtE,OAAO;QACT,CAAC;QACD,MAAM,GAAG,GAAG,WAAW,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAwB;YACpC,EAAE,EAAE,UAAU,IAAI,CAAC,GAAG,EAAE,EAAE;YAC1B,MAAM;YACN,IAAI;YACJ,WAAW,EAAE,IAAI;YACjB,QAAQ,EAAE,IAAI;YACd,MAAM;YACN,KAAK;YACL,KAAK,EAAE,CAAC;YACR,OAAO,EAAE,CAAC;YACV,WAAW,EAAE,CAAC;YACd,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;QACF,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7B,WAAW,CAAC,GAAG,CAAC,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,eAAe,MAAM,GAAG,CAAC,CAAC;QACjE,OAAO;IACT,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;YACpC,OAAO;QACT,CAAC;QACD,MAAM,GAAG,GAAG,WAAW,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;YAC9C,OAAO;QACT,CAAC;QACD,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC1C,WAAW,CAAC,GAAG,CAAC,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC;QAChE,OAAO;IACT,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;YAChD,OAAO;QACT,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC;YAC3C,OAAO;QACT,CAAC;QACD,MAAM,GAAG,GAAG,WAAW,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;YAC9C,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,4BAA4B,IAAI,EAAE,CAAC,CAAC;YAChD,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACzD,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,GAAG,CAAC,YAAY,EAAE,CAAC;QACnB,WAAW,CAAC,GAAG,CAAC,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,CAAC,IAAI,QAAQ,IAAI,EAAE,CAAC,CAAC;QACrD,OAAO;IACT,CAAC;IAED,gBAAgB;IAChB,MAAM,GAAG,GAAG,WAAW,EAAE,CAAC;IAC1B,IAAI,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;IAE9B,IAAI,QAAQ,IAAI,UAAU,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;QACtC,SAAS,GAAG,SAAS,CAAC,MAAM,CAC1B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;YACrC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;YACnC,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAC7C,CAAC;IACJ,CAAC;IAED,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAE5C,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAC5G,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,6BAA6B,SAAS,CAAC,MAAM,0CAA0C,CAAC,CAAC;QAErG,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,0EAA0E,CAAC,CAAC;YACxF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO;QACT,CAAC;QAED,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;YAC1B,MAAM,OAAO,GAAG,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;YAC/E,OAAO,CAAC,GAAG,CAAC,SAAS,OAAO,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACpD,OAAO,CAAC,GAAG,CACT,iBAAiB,CAAC,CAAC,MAAM,YAAY,CAAC,CAAC,QAAQ,aAAa,CAAC,CAAC,KAAK,eAAe,CAAC,CAAC,OAAO,eAAe,CAAC,CAAC,WAAW,GAAG,CAC3H,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAC5C,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,wBAAwB,GAAG,CAAC,YAAY,IAAI,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Trust-adaptive — adjust judge sensitivity based on historical
3
+ * accuracy of developers or AI models. High-trust actors skip
4
+ * non-critical judges; low-trust get stricter scrutiny.
5
+ *
6
+ * All data stored locally in `.judges-trust/`.
7
+ */
8
+ export declare function runTrustAdaptive(argv: string[]): void;
9
+ //# sourceMappingURL=trust-adaptive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trust-adaptive.d.ts","sourceRoot":"","sources":["../../src/commands/trust-adaptive.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAsGH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAoIrD"}