@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.
- package/CHANGELOG.md +12 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +56 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/chat-notify.d.ts +9 -0
- package/dist/commands/chat-notify.d.ts.map +1 -0
- package/dist/commands/chat-notify.js +259 -0
- package/dist/commands/chat-notify.js.map +1 -0
- package/dist/commands/design-audit.d.ts +9 -0
- package/dist/commands/design-audit.d.ts.map +1 -0
- package/dist/commands/design-audit.js +302 -0
- package/dist/commands/design-audit.js.map +1 -0
- package/dist/commands/impact-scan.d.ts +9 -0
- package/dist/commands/impact-scan.d.ts.map +1 -0
- package/dist/commands/impact-scan.js +282 -0
- package/dist/commands/impact-scan.js.map +1 -0
- package/dist/commands/judge-learn.d.ts +9 -0
- package/dist/commands/judge-learn.d.ts.map +1 -0
- package/dist/commands/judge-learn.js +218 -0
- package/dist/commands/judge-learn.js.map +1 -0
- package/dist/commands/model-report.d.ts +9 -0
- package/dist/commands/model-report.d.ts.map +1 -0
- package/dist/commands/model-report.js +195 -0
- package/dist/commands/model-report.js.map +1 -0
- package/dist/commands/remediation-lib.d.ts +9 -0
- package/dist/commands/remediation-lib.d.ts.map +1 -0
- package/dist/commands/remediation-lib.js +266 -0
- package/dist/commands/remediation-lib.js.map +1 -0
- package/dist/commands/trust-adaptive.d.ts +9 -0
- package/dist/commands/trust-adaptive.d.ts.map +1 -0
- package/dist/commands/trust-adaptive.js +194 -0
- package/dist/commands/trust-adaptive.js.map +1 -0
- package/dist/commands/watch-judge.d.ts +8 -0
- package/dist/commands/watch-judge.d.ts.map +1 -0
- package/dist/commands/watch-judge.js +180 -0
- package/dist/commands/watch-judge.js.map +1 -0
- package/package.json +1 -1
- package/server.json +2 -2
|
@@ -0,0 +1,194 @@
|
|
|
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
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync } from "fs";
|
|
9
|
+
import { join } from "path";
|
|
10
|
+
// ─── Storage ────────────────────────────────────────────────────────────────
|
|
11
|
+
const DATA_DIR = ".judges-trust";
|
|
12
|
+
function ensureDir() {
|
|
13
|
+
if (!existsSync(DATA_DIR))
|
|
14
|
+
mkdirSync(DATA_DIR, { recursive: true });
|
|
15
|
+
}
|
|
16
|
+
function loadRecords() {
|
|
17
|
+
const file = join(DATA_DIR, "records.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 saveRecords(records) {
|
|
28
|
+
ensureDir();
|
|
29
|
+
writeFileSync(join(DATA_DIR, "records.json"), JSON.stringify(records, null, 2));
|
|
30
|
+
}
|
|
31
|
+
// ─── Analysis ───────────────────────────────────────────────────────────────
|
|
32
|
+
// Non-critical judges that can be skipped for high-trust actors
|
|
33
|
+
const NON_CRITICAL_JUDGES = [
|
|
34
|
+
"style-consistency",
|
|
35
|
+
"naming-convention",
|
|
36
|
+
"comment-coverage",
|
|
37
|
+
"line-length",
|
|
38
|
+
"function-length",
|
|
39
|
+
"import-order",
|
|
40
|
+
];
|
|
41
|
+
function computeProfile(record) {
|
|
42
|
+
const passRate = record.evaluations > 0 ? record.passCount / record.evaluations : 0;
|
|
43
|
+
const fpRate = record.evaluations > 0 ? record.falsePositives / record.evaluations : 0;
|
|
44
|
+
// Trust score: weighted combination
|
|
45
|
+
const trustScore = Math.round(passRate * 40 + record.avgScore * 0.4 + fpRate * 20);
|
|
46
|
+
let trustLevel;
|
|
47
|
+
let sensitivity;
|
|
48
|
+
let skipJudges = [];
|
|
49
|
+
let escalate = false;
|
|
50
|
+
let detail;
|
|
51
|
+
if (record.evaluations < 5) {
|
|
52
|
+
trustLevel = "unknown";
|
|
53
|
+
sensitivity = "normal";
|
|
54
|
+
detail = `Only ${record.evaluations} evaluations — need ≥5 for trust assignment`;
|
|
55
|
+
}
|
|
56
|
+
else if (trustScore >= 75) {
|
|
57
|
+
trustLevel = "high";
|
|
58
|
+
sensitivity = "relaxed";
|
|
59
|
+
skipJudges = NON_CRITICAL_JUDGES;
|
|
60
|
+
detail = `High trust (${trustScore}) — skip ${skipJudges.length} non-critical judges`;
|
|
61
|
+
}
|
|
62
|
+
else if (trustScore >= 45) {
|
|
63
|
+
trustLevel = "medium";
|
|
64
|
+
sensitivity = "normal";
|
|
65
|
+
detail = `Medium trust (${trustScore}) — standard evaluation`;
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
trustLevel = "low";
|
|
69
|
+
sensitivity = "strict";
|
|
70
|
+
escalate = true;
|
|
71
|
+
detail = `Low trust (${trustScore}) — strict evaluation with human escalation`;
|
|
72
|
+
}
|
|
73
|
+
return { actor: record.actor, trustLevel, trustScore, sensitivity, skipJudges, escalate, detail };
|
|
74
|
+
}
|
|
75
|
+
// ─── CLI ────────────────────────────────────────────────────────────────────
|
|
76
|
+
export function runTrustAdaptive(argv) {
|
|
77
|
+
if (argv.includes("--help") || argv.includes("-h")) {
|
|
78
|
+
console.log(`
|
|
79
|
+
judges trust-adaptive — Adaptive trust scoring for actors
|
|
80
|
+
|
|
81
|
+
Usage:
|
|
82
|
+
judges trust-adaptive --record --actor "copilot" --score 85 --pass
|
|
83
|
+
judges trust-adaptive --record --actor "dev-alice" --score 40 --fail
|
|
84
|
+
judges trust-adaptive --record --actor "copilot" --fp (record false positive)
|
|
85
|
+
judges trust-adaptive --show
|
|
86
|
+
judges trust-adaptive --profile "copilot"
|
|
87
|
+
|
|
88
|
+
Options:
|
|
89
|
+
--record Record evaluation result
|
|
90
|
+
--actor <name> Actor name (developer, AI model, team)
|
|
91
|
+
--score <n> Evaluation score (0-100)
|
|
92
|
+
--pass Record a pass
|
|
93
|
+
--fail Record a fail
|
|
94
|
+
--fp Record a false positive
|
|
95
|
+
--show Show all trust profiles
|
|
96
|
+
--profile <name> Show specific actor profile
|
|
97
|
+
--format json JSON output
|
|
98
|
+
--help, -h Show this help
|
|
99
|
+
|
|
100
|
+
Trust Levels:
|
|
101
|
+
high → Skip non-critical judges, relaxed thresholds
|
|
102
|
+
medium → Standard evaluation
|
|
103
|
+
low → Strict evaluation, escalation to human reviewer
|
|
104
|
+
unknown → <5 evaluations, standard evaluation
|
|
105
|
+
`);
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
|
|
109
|
+
const record = argv.includes("--record");
|
|
110
|
+
const _show = argv.includes("--show");
|
|
111
|
+
const profileName = argv.find((_a, i) => argv[i - 1] === "--profile");
|
|
112
|
+
const actor = argv.find((_a, i) => argv[i - 1] === "--actor") || "";
|
|
113
|
+
const scoreArg = parseInt(argv.find((_a, i) => argv[i - 1] === "--score") || "0");
|
|
114
|
+
const isPass = argv.includes("--pass");
|
|
115
|
+
const isFail = argv.includes("--fail");
|
|
116
|
+
const isFp = argv.includes("--fp");
|
|
117
|
+
if (record) {
|
|
118
|
+
if (!actor) {
|
|
119
|
+
console.error(" --actor is required for --record");
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
const records = loadRecords();
|
|
123
|
+
let rec = records.find((r) => r.actor === actor);
|
|
124
|
+
if (!rec) {
|
|
125
|
+
rec = { actor, evaluations: 0, passCount: 0, failCount: 0, falsePositives: 0, avgScore: 0, lastUpdated: "" };
|
|
126
|
+
records.push(rec);
|
|
127
|
+
}
|
|
128
|
+
rec.evaluations++;
|
|
129
|
+
if (isPass)
|
|
130
|
+
rec.passCount++;
|
|
131
|
+
if (isFail)
|
|
132
|
+
rec.failCount++;
|
|
133
|
+
if (isFp)
|
|
134
|
+
rec.falsePositives++;
|
|
135
|
+
rec.avgScore = Math.round((rec.avgScore * (rec.evaluations - 1) + scoreArg) / rec.evaluations);
|
|
136
|
+
rec.lastUpdated = new Date().toISOString();
|
|
137
|
+
saveRecords(records);
|
|
138
|
+
console.log(` ✅ Recorded for ${actor}: eval #${rec.evaluations} (score: ${scoreArg}${isPass ? ", pass" : ""}${isFail ? ", fail" : ""}${isFp ? ", FP" : ""})`);
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
const records = loadRecords();
|
|
142
|
+
if (records.length === 0) {
|
|
143
|
+
console.log(" No trust records yet. Use --record to add evaluations.");
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
if (profileName) {
|
|
147
|
+
const rec = records.find((r) => r.actor === profileName);
|
|
148
|
+
if (!rec) {
|
|
149
|
+
console.error(` Actor "${profileName}" not found.`);
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
const profile = computeProfile(rec);
|
|
153
|
+
if (format === "json") {
|
|
154
|
+
console.log(JSON.stringify(profile, null, 2));
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
const icon = profile.trustLevel === "high"
|
|
158
|
+
? "🟢"
|
|
159
|
+
: profile.trustLevel === "medium"
|
|
160
|
+
? "🟡"
|
|
161
|
+
: profile.trustLevel === "low"
|
|
162
|
+
? "🔴"
|
|
163
|
+
: "⚪";
|
|
164
|
+
console.log(`\n ${icon} ${profile.actor}`);
|
|
165
|
+
console.log(` Trust: ${profile.trustLevel} (${profile.trustScore}/100)`);
|
|
166
|
+
console.log(` Sensitivity: ${profile.sensitivity}`);
|
|
167
|
+
console.log(` ${profile.detail}`);
|
|
168
|
+
if (profile.skipJudges.length > 0)
|
|
169
|
+
console.log(` Skip: ${profile.skipJudges.join(", ")}`);
|
|
170
|
+
if (profile.escalate)
|
|
171
|
+
console.log(` ⚠ Human escalation required`);
|
|
172
|
+
console.log(` Stats: ${rec.evaluations} evals, ${rec.passCount} pass, ${rec.failCount} fail, ${rec.falsePositives} FP`);
|
|
173
|
+
console.log("");
|
|
174
|
+
}
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
// Show all
|
|
178
|
+
const profiles = records.map(computeProfile);
|
|
179
|
+
profiles.sort((a, b) => b.trustScore - a.trustScore);
|
|
180
|
+
if (format === "json") {
|
|
181
|
+
console.log(JSON.stringify({ profiles, timestamp: new Date().toISOString() }, null, 2));
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
console.log(`\n Trust Profiles — ${profiles.length} actors\n ──────────────────────────`);
|
|
185
|
+
console.log(` ${"Actor".padEnd(25)} ${"Level".padEnd(10)} ${"Score".padEnd(8)} ${"Sensitivity".padEnd(12)} ${"Evals".padEnd(8)} Detail`);
|
|
186
|
+
console.log(` ${"─".repeat(25)} ${"─".repeat(10)} ${"─".repeat(8)} ${"─".repeat(12)} ${"─".repeat(8)} ${"─".repeat(30)}`);
|
|
187
|
+
for (const p of profiles) {
|
|
188
|
+
const icon = p.trustLevel === "high" ? "🟢" : p.trustLevel === "medium" ? "🟡" : p.trustLevel === "low" ? "🔴" : "⚪";
|
|
189
|
+
console.log(` ${icon} ${p.actor.padEnd(23)} ${p.trustLevel.padEnd(10)} ${String(p.trustScore).padEnd(8)} ${p.sensitivity.padEnd(12)} ${String(records.find((r) => r.actor === p.actor)?.evaluations || 0).padEnd(8)} ${p.detail}`);
|
|
190
|
+
}
|
|
191
|
+
console.log("");
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=trust-adaptive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trust-adaptive.js","sourceRoot":"","sources":["../../src/commands/trust-adaptive.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Watch judge — continuously monitor files and auto-evaluate on change.
|
|
3
|
+
* Triggers tribunal review on AI-flagged patterns with live feedback.
|
|
4
|
+
*
|
|
5
|
+
* All data stored locally.
|
|
6
|
+
*/
|
|
7
|
+
export declare function runWatchJudge(argv: string[]): void;
|
|
8
|
+
//# sourceMappingURL=watch-judge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch-judge.d.ts","sourceRoot":"","sources":["../../src/commands/watch-judge.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA4EH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA+GlD"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Watch judge — continuously monitor files and auto-evaluate on change.
|
|
3
|
+
* Triggers tribunal review on AI-flagged patterns with live feedback.
|
|
4
|
+
*
|
|
5
|
+
* All data stored locally.
|
|
6
|
+
*/
|
|
7
|
+
import { existsSync, readFileSync, readdirSync, statSync, watchFile, unwatchFile } from "fs";
|
|
8
|
+
import { join, extname, relative } from "path";
|
|
9
|
+
// ─── Lightweight eval ───────────────────────────────────────────────────────
|
|
10
|
+
function quickEval(content) {
|
|
11
|
+
const findings = [];
|
|
12
|
+
const lines = content.split("\n");
|
|
13
|
+
// AI-generated indicators
|
|
14
|
+
if (/\/\/\s*(?:generated|auto-generated|copilot|chatgpt|claude)/i.test(content))
|
|
15
|
+
findings.push("AI-generated marker detected");
|
|
16
|
+
if ((content.match(/TODO|FIXME|HACK/g) || []).length > 3)
|
|
17
|
+
findings.push(`Excessive TODO/FIXME/HACK markers`);
|
|
18
|
+
if ((content.match(/catch\s*\(\s*\w*\s*\)\s*{\s*}/g) || []).length > 0)
|
|
19
|
+
findings.push("Empty catch blocks");
|
|
20
|
+
if (lines.some((l) => l.length > 200))
|
|
21
|
+
findings.push("Extremely long lines (>200 chars)");
|
|
22
|
+
const importCount = lines.filter((l) => /^\s*import\s/.test(l)).length;
|
|
23
|
+
if (importCount > 20)
|
|
24
|
+
findings.push(`High import count (${importCount})`);
|
|
25
|
+
const dupeBlocks = new Set();
|
|
26
|
+
for (let i = 0; i < lines.length - 2; i++) {
|
|
27
|
+
const block = lines
|
|
28
|
+
.slice(i, i + 3)
|
|
29
|
+
.join("\n")
|
|
30
|
+
.trim();
|
|
31
|
+
if (block.length > 30 && dupeBlocks.has(block))
|
|
32
|
+
findings.push("Duplicate code block detected");
|
|
33
|
+
dupeBlocks.add(block);
|
|
34
|
+
}
|
|
35
|
+
const score = Math.max(0, 100 - findings.length * 15);
|
|
36
|
+
return { score, findings };
|
|
37
|
+
}
|
|
38
|
+
// ─── Scanner ────────────────────────────────────────────────────────────────
|
|
39
|
+
const SKIP = new Set(["node_modules", ".git", "dist", "build", "coverage"]);
|
|
40
|
+
const EXTS = new Set([".ts", ".js", ".py", ".java", ".cs", ".go", ".rb", ".php", ".rs"]);
|
|
41
|
+
function collectFiles(dir) {
|
|
42
|
+
const result = [];
|
|
43
|
+
function walk(d) {
|
|
44
|
+
let entries;
|
|
45
|
+
try {
|
|
46
|
+
entries = readdirSync(d);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
for (const name of entries) {
|
|
52
|
+
if (SKIP.has(name) || name.startsWith("."))
|
|
53
|
+
continue;
|
|
54
|
+
const full = join(d, name);
|
|
55
|
+
try {
|
|
56
|
+
const sub = readdirSync(full);
|
|
57
|
+
void sub;
|
|
58
|
+
walk(full);
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
if (EXTS.has(extname(name).toLowerCase()))
|
|
62
|
+
result.push(full);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
walk(dir);
|
|
67
|
+
return result;
|
|
68
|
+
}
|
|
69
|
+
// ─── CLI ────────────────────────────────────────────────────────────────────
|
|
70
|
+
export function runWatchJudge(argv) {
|
|
71
|
+
if (argv.includes("--help") || argv.includes("-h")) {
|
|
72
|
+
console.log(`
|
|
73
|
+
judges watch-judge — Continuously monitor files and auto-evaluate
|
|
74
|
+
|
|
75
|
+
Usage:
|
|
76
|
+
judges watch-judge <dir>
|
|
77
|
+
judges watch-judge src/ --interval 2000
|
|
78
|
+
|
|
79
|
+
Options:
|
|
80
|
+
--interval <ms> Polling interval in milliseconds (default: 3000)
|
|
81
|
+
--min-score <n> Only alert on files scoring below this (default: 70)
|
|
82
|
+
--once Run a single pass then exit
|
|
83
|
+
--format json JSON output
|
|
84
|
+
--help, -h Show this help
|
|
85
|
+
`);
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
|
|
89
|
+
const interval = parseInt(argv.find((_a, i) => argv[i - 1] === "--interval") || "3000");
|
|
90
|
+
const minScore = parseInt(argv.find((_a, i) => argv[i - 1] === "--min-score") || "70");
|
|
91
|
+
const once = argv.includes("--once");
|
|
92
|
+
const target = argv.find((a) => !a.startsWith("--") && !argv[argv.indexOf(a) - 1]?.startsWith("--")) || ".";
|
|
93
|
+
if (!existsSync(target)) {
|
|
94
|
+
console.error(` Path not found: ${target}`);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
const files = collectFiles(target);
|
|
98
|
+
if (files.length === 0) {
|
|
99
|
+
console.log(" No source files found.");
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
// Single pass mode
|
|
103
|
+
if (once) {
|
|
104
|
+
const events = [];
|
|
105
|
+
for (const f of files) {
|
|
106
|
+
let content;
|
|
107
|
+
try {
|
|
108
|
+
content = readFileSync(f, "utf-8");
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
const { score, findings } = quickEval(content);
|
|
114
|
+
if (score < minScore) {
|
|
115
|
+
const rel = relative(target, f) || f;
|
|
116
|
+
events.push({ file: rel, timestamp: new Date().toISOString(), findings: findings.length, score });
|
|
117
|
+
if (format !== "json") {
|
|
118
|
+
const icon = score < 40 ? "🔴" : score < 70 ? "🟠" : "🟡";
|
|
119
|
+
console.log(` ${icon} ${rel} — ${score}/100`);
|
|
120
|
+
for (const finding of findings)
|
|
121
|
+
console.log(` → ${finding}`);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
if (format === "json") {
|
|
126
|
+
console.log(JSON.stringify({ events, scannedFiles: files.length, timestamp: new Date().toISOString() }, null, 2));
|
|
127
|
+
}
|
|
128
|
+
else if (events.length === 0) {
|
|
129
|
+
console.log(` ✅ All ${files.length} files score above ${minScore}`);
|
|
130
|
+
}
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
// Watch mode
|
|
134
|
+
console.log(`\n 👁 Watching ${files.length} files (interval: ${interval}ms, min-score: ${minScore})`);
|
|
135
|
+
console.log(` Press Ctrl+C to stop\n`);
|
|
136
|
+
const mtimes = new Map();
|
|
137
|
+
for (const f of files) {
|
|
138
|
+
try {
|
|
139
|
+
mtimes.set(f, statSync(f).mtimeMs);
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
/* skip */
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
const checkFile = (f) => {
|
|
146
|
+
try {
|
|
147
|
+
const stat = statSync(f);
|
|
148
|
+
const prev = mtimes.get(f) || 0;
|
|
149
|
+
if (stat.mtimeMs <= prev)
|
|
150
|
+
return;
|
|
151
|
+
mtimes.set(f, stat.mtimeMs);
|
|
152
|
+
const content = readFileSync(f, "utf-8");
|
|
153
|
+
const { score, findings } = quickEval(content);
|
|
154
|
+
const rel = relative(target, f) || f;
|
|
155
|
+
const ts = new Date().toLocaleTimeString();
|
|
156
|
+
if (score < minScore) {
|
|
157
|
+
const icon = score < 40 ? "🔴" : score < 70 ? "🟠" : "🟡";
|
|
158
|
+
console.log(` [${ts}] ${icon} ${rel} — ${score}/100`);
|
|
159
|
+
for (const finding of findings)
|
|
160
|
+
console.log(` → ${finding}`);
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
console.log(` [${ts}] 🟢 ${rel} — ${score}/100`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
/* file gone or inaccessible */
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
for (const f of files) {
|
|
171
|
+
watchFile(f, { interval }, () => checkFile(f));
|
|
172
|
+
}
|
|
173
|
+
process.on("SIGINT", () => {
|
|
174
|
+
for (const f of files)
|
|
175
|
+
unwatchFile(f);
|
|
176
|
+
console.log("\n Stopped watching.\n");
|
|
177
|
+
process.exit(0);
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=watch-judge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch-judge.js","sourceRoot":"","sources":["../../src/commands/watch-judge.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/server.json
CHANGED
|
@@ -7,12 +7,12 @@
|
|
|
7
7
|
"url": "https://github.com/kevinrabun/judges",
|
|
8
8
|
"source": "github"
|
|
9
9
|
},
|
|
10
|
-
"version": "3.
|
|
10
|
+
"version": "3.52.0",
|
|
11
11
|
"packages": [
|
|
12
12
|
{
|
|
13
13
|
"registryType": "npm",
|
|
14
14
|
"identifier": "@kevinrabun/judges",
|
|
15
|
-
"version": "3.
|
|
15
|
+
"version": "3.52.0",
|
|
16
16
|
"transport": {
|
|
17
17
|
"type": "stdio"
|
|
18
18
|
}
|