@kevinrabun/judges 3.64.0 → 3.66.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 +15 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +112 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/code-health.d.ts +5 -0
- package/dist/commands/code-health.d.ts.map +1 -0
- package/dist/commands/code-health.js +196 -0
- package/dist/commands/code-health.js.map +1 -0
- package/dist/commands/finding-suppress.d.ts +5 -0
- package/dist/commands/finding-suppress.d.ts.map +1 -0
- package/dist/commands/finding-suppress.js +165 -0
- package/dist/commands/finding-suppress.js.map +1 -0
- package/dist/commands/finding-timeline.d.ts +5 -0
- package/dist/commands/finding-timeline.d.ts.map +1 -0
- package/dist/commands/finding-timeline.js +144 -0
- package/dist/commands/finding-timeline.js.map +1 -0
- package/dist/commands/fix-verify.d.ts +5 -0
- package/dist/commands/fix-verify.d.ts.map +1 -0
- package/dist/commands/fix-verify.js +124 -0
- package/dist/commands/fix-verify.js.map +1 -0
- package/dist/commands/judge-config.d.ts +5 -0
- package/dist/commands/judge-config.d.ts.map +1 -0
- package/dist/commands/judge-config.js +152 -0
- package/dist/commands/judge-config.js.map +1 -0
- package/dist/commands/review-annotate.d.ts +5 -0
- package/dist/commands/review-annotate.d.ts.map +1 -0
- package/dist/commands/review-annotate.js +123 -0
- package/dist/commands/review-annotate.js.map +1 -0
- package/dist/commands/review-checkpoint.d.ts +5 -0
- package/dist/commands/review-checkpoint.d.ts.map +1 -0
- package/dist/commands/review-checkpoint.js +164 -0
- package/dist/commands/review-checkpoint.js.map +1 -0
- package/dist/commands/review-comment.d.ts +5 -0
- package/dist/commands/review-comment.d.ts.map +1 -0
- package/dist/commands/review-comment.js +166 -0
- package/dist/commands/review-comment.js.map +1 -0
- package/dist/commands/review-export.d.ts +5 -0
- package/dist/commands/review-export.d.ts.map +1 -0
- package/dist/commands/review-export.js +180 -0
- package/dist/commands/review-export.js.map +1 -0
- package/dist/commands/review-filter.d.ts +5 -0
- package/dist/commands/review-filter.d.ts.map +1 -0
- package/dist/commands/review-filter.js +166 -0
- package/dist/commands/review-filter.js.map +1 -0
- package/dist/commands/review-merge.d.ts +5 -0
- package/dist/commands/review-merge.d.ts.map +1 -0
- package/dist/commands/review-merge.js +146 -0
- package/dist/commands/review-merge.js.map +1 -0
- package/dist/commands/review-schedule.d.ts +5 -0
- package/dist/commands/review-schedule.d.ts.map +1 -0
- package/dist/commands/review-schedule.js +170 -0
- package/dist/commands/review-schedule.js.map +1 -0
- package/dist/commands/review-scope.d.ts +5 -0
- package/dist/commands/review-scope.d.ts.map +1 -0
- package/dist/commands/review-scope.js +198 -0
- package/dist/commands/review-scope.js.map +1 -0
- package/dist/commands/review-webhook.d.ts +5 -0
- package/dist/commands/review-webhook.d.ts.map +1 -0
- package/dist/commands/review-webhook.js +141 -0
- package/dist/commands/review-webhook.js.map +1 -0
- package/dist/commands/rule-catalog.d.ts +5 -0
- package/dist/commands/rule-catalog.d.ts.map +1 -0
- package/dist/commands/rule-catalog.js +129 -0
- package/dist/commands/rule-catalog.js.map +1 -0
- package/dist/commands/setup-wizard.d.ts +5 -0
- package/dist/commands/setup-wizard.d.ts.map +1 -0
- package/dist/commands/setup-wizard.js +175 -0
- package/dist/commands/setup-wizard.js.map +1 -0
- package/package.json +1 -1
- package/server.json +2 -2
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Review-webhook — Configure webhook notifications for review results.
|
|
3
|
+
*/
|
|
4
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
|
|
5
|
+
import { join, dirname } from "path";
|
|
6
|
+
// ─── Storage ────────────────────────────────────────────────────────────────
|
|
7
|
+
const CONFIG_FILE = join(".judges", "webhooks.json");
|
|
8
|
+
function loadConfig() {
|
|
9
|
+
if (!existsSync(CONFIG_FILE))
|
|
10
|
+
return { version: "1.0.0", webhooks: [] };
|
|
11
|
+
try {
|
|
12
|
+
return JSON.parse(readFileSync(CONFIG_FILE, "utf-8"));
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return { version: "1.0.0", webhooks: [] };
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function saveConfig(config) {
|
|
19
|
+
mkdirSync(dirname(CONFIG_FILE), { recursive: true });
|
|
20
|
+
writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2), "utf-8");
|
|
21
|
+
}
|
|
22
|
+
// ─── CLI ────────────────────────────────────────────────────────────────────
|
|
23
|
+
export function runReviewWebhook(argv) {
|
|
24
|
+
if (argv.includes("--help") || argv.includes("-h")) {
|
|
25
|
+
console.log(`
|
|
26
|
+
judges review-webhook — Configure review webhook notifications
|
|
27
|
+
|
|
28
|
+
Usage:
|
|
29
|
+
judges review-webhook list List webhooks
|
|
30
|
+
judges review-webhook add --name ci --url <url> Add webhook
|
|
31
|
+
judges review-webhook remove --id <id> Remove webhook
|
|
32
|
+
judges review-webhook test --id <id> Test webhook
|
|
33
|
+
judges review-webhook --format json JSON output
|
|
34
|
+
|
|
35
|
+
Subcommands:
|
|
36
|
+
list List configured webhooks
|
|
37
|
+
add Add a new webhook
|
|
38
|
+
remove Remove a webhook
|
|
39
|
+
test Send test payload
|
|
40
|
+
|
|
41
|
+
Options:
|
|
42
|
+
--name <name> Webhook display name
|
|
43
|
+
--url <url> Webhook endpoint URL
|
|
44
|
+
--id <id> Webhook ID
|
|
45
|
+
--events <list> Comma-separated events: review-complete, finding-critical, gate-fail
|
|
46
|
+
--format json JSON output
|
|
47
|
+
--help, -h Show this help
|
|
48
|
+
|
|
49
|
+
Webhook configs are stored locally in .judges/webhooks.json.
|
|
50
|
+
The actual HTTP dispatch is handled by the user's CI/CD pipeline.
|
|
51
|
+
`);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
|
|
55
|
+
const subcommand = argv.find((a) => ["list", "add", "remove", "test"].includes(a)) || "list";
|
|
56
|
+
const config = loadConfig();
|
|
57
|
+
if (subcommand === "add") {
|
|
58
|
+
const name = argv.find((_a, i) => argv[i - 1] === "--name") || "webhook";
|
|
59
|
+
const url = argv.find((_a, i) => argv[i - 1] === "--url");
|
|
60
|
+
const eventsStr = argv.find((_a, i) => argv[i - 1] === "--events");
|
|
61
|
+
if (!url) {
|
|
62
|
+
console.error("Error: --url is required.");
|
|
63
|
+
process.exitCode = 1;
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
const id = `wh-${Date.now().toString(36)}`;
|
|
67
|
+
const events = eventsStr ? eventsStr.split(",").map((e) => e.trim()) : ["review-complete"];
|
|
68
|
+
config.webhooks.push({
|
|
69
|
+
id,
|
|
70
|
+
name,
|
|
71
|
+
url,
|
|
72
|
+
events,
|
|
73
|
+
format: "json",
|
|
74
|
+
enabled: true,
|
|
75
|
+
headers: { "Content-Type": "application/json" },
|
|
76
|
+
});
|
|
77
|
+
saveConfig(config);
|
|
78
|
+
console.log(`Added webhook '${name}' (${id}) → ${url}`);
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
if (subcommand === "remove") {
|
|
82
|
+
const id = argv.find((_a, i) => argv[i - 1] === "--id");
|
|
83
|
+
if (!id) {
|
|
84
|
+
console.error("Error: --id is required.");
|
|
85
|
+
process.exitCode = 1;
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const idx = config.webhooks.findIndex((w) => w.id === id);
|
|
89
|
+
if (idx < 0) {
|
|
90
|
+
console.error(`Error: Webhook '${id}' not found.`);
|
|
91
|
+
process.exitCode = 1;
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
config.webhooks.splice(idx, 1);
|
|
95
|
+
saveConfig(config);
|
|
96
|
+
console.log(`Removed webhook '${id}'.`);
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
if (subcommand === "test") {
|
|
100
|
+
const id = argv.find((_a, i) => argv[i - 1] === "--id");
|
|
101
|
+
if (!id) {
|
|
102
|
+
console.error("Error: --id is required.");
|
|
103
|
+
process.exitCode = 1;
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
const wh = config.webhooks.find((w) => w.id === id);
|
|
107
|
+
if (!wh) {
|
|
108
|
+
console.error(`Error: Webhook '${id}' not found.`);
|
|
109
|
+
process.exitCode = 1;
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
const payload = {
|
|
113
|
+
event: "test",
|
|
114
|
+
timestamp: new Date().toISOString(),
|
|
115
|
+
source: "judges-panel",
|
|
116
|
+
message: "Webhook test from Judges Panel",
|
|
117
|
+
};
|
|
118
|
+
console.log(`Test payload for webhook '${wh.name}':`);
|
|
119
|
+
console.log(` URL: ${wh.url}`);
|
|
120
|
+
console.log(` Payload: ${JSON.stringify(payload, null, 2)}`);
|
|
121
|
+
console.log(`\nTo send, use: curl -X POST -H "Content-Type: application/json" -d '${JSON.stringify(payload)}' ${wh.url}`);
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
// List
|
|
125
|
+
if (format === "json") {
|
|
126
|
+
console.log(JSON.stringify(config, null, 2));
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
console.log(`\n Webhooks (${config.webhooks.length})\n ─────────────────────────────`);
|
|
130
|
+
if (config.webhooks.length === 0) {
|
|
131
|
+
console.log(" No webhooks configured. Add one with: judges review-webhook add --name ci --url <url>");
|
|
132
|
+
}
|
|
133
|
+
for (const wh of config.webhooks) {
|
|
134
|
+
const status = wh.enabled ? "✅" : "⬜";
|
|
135
|
+
console.log(` ${status} ${wh.id} — ${wh.name}`);
|
|
136
|
+
console.log(` URL: ${wh.url}`);
|
|
137
|
+
console.log(` Events: ${wh.events.join(", ")}`);
|
|
138
|
+
}
|
|
139
|
+
console.log();
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=review-webhook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-webhook.js","sourceRoot":"","sources":["../../src/commands/review-webhook.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule-catalog.d.ts","sourceRoot":"","sources":["../../src/commands/rule-catalog.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAyGnD"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rule-catalog — Browse, search, and preview available rules with examples.
|
|
3
|
+
*/
|
|
4
|
+
import { defaultRegistry } from "../judge-registry.js";
|
|
5
|
+
// ─── CLI ────────────────────────────────────────────────────────────────────
|
|
6
|
+
export function runRuleCatalog(argv) {
|
|
7
|
+
if (argv.includes("--help") || argv.includes("-h")) {
|
|
8
|
+
console.log(`
|
|
9
|
+
judges rule-catalog — Browse and search available rules
|
|
10
|
+
|
|
11
|
+
Usage:
|
|
12
|
+
judges rule-catalog List all rules
|
|
13
|
+
judges rule-catalog --search injection Search rules by keyword
|
|
14
|
+
judges rule-catalog --judge security Filter by judge
|
|
15
|
+
judges rule-catalog --severity critical Filter by severity
|
|
16
|
+
judges rule-catalog --count Show rule count only
|
|
17
|
+
judges rule-catalog --format json JSON output
|
|
18
|
+
|
|
19
|
+
Options:
|
|
20
|
+
--search <keyword> Search rules by keyword in name/description
|
|
21
|
+
--judge <id> Filter rules by judge ID
|
|
22
|
+
--severity <level> Filter by severity level
|
|
23
|
+
--count Show count only
|
|
24
|
+
--format json JSON output
|
|
25
|
+
--help, -h Show this help
|
|
26
|
+
|
|
27
|
+
Browse the full catalog of rules available across all judges.
|
|
28
|
+
`);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
|
|
32
|
+
const search = argv.find((_a, i) => argv[i - 1] === "--search") || "";
|
|
33
|
+
const judgeFilter = argv.find((_a, i) => argv[i - 1] === "--judge") || "";
|
|
34
|
+
const sevFilter = argv.find((_a, i) => argv[i - 1] === "--severity") || "";
|
|
35
|
+
const countOnly = argv.includes("--count");
|
|
36
|
+
const judges = defaultRegistry.getJudges();
|
|
37
|
+
const catalog = [];
|
|
38
|
+
for (const judge of judges) {
|
|
39
|
+
// Create catalog entries from judge metadata
|
|
40
|
+
const entry = {
|
|
41
|
+
judgeId: judge.id,
|
|
42
|
+
ruleId: judge.id,
|
|
43
|
+
description: `Rules from ${judge.id} judge`,
|
|
44
|
+
severity: "medium",
|
|
45
|
+
category: categorizeJudge(judge.id),
|
|
46
|
+
};
|
|
47
|
+
// Filter by judge
|
|
48
|
+
if (judgeFilter && !judge.id.toLowerCase().includes(judgeFilter.toLowerCase()))
|
|
49
|
+
continue;
|
|
50
|
+
// Filter by severity
|
|
51
|
+
if (sevFilter && entry.severity !== sevFilter.toLowerCase())
|
|
52
|
+
continue;
|
|
53
|
+
// Search filter
|
|
54
|
+
if (search) {
|
|
55
|
+
const haystack = `${entry.judgeId} ${entry.ruleId} ${entry.description} ${entry.category}`.toLowerCase();
|
|
56
|
+
if (!haystack.includes(search.toLowerCase()))
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
catalog.push(entry);
|
|
60
|
+
}
|
|
61
|
+
if (countOnly) {
|
|
62
|
+
console.log(catalog.length);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
if (format === "json") {
|
|
66
|
+
console.log(JSON.stringify({ total: catalog.length, rules: catalog }, null, 2));
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
console.log(`\n Rule Catalog (${catalog.length} rules)\n ═════════════════════════════`);
|
|
70
|
+
if (catalog.length === 0) {
|
|
71
|
+
console.log(" No rules match your filters.");
|
|
72
|
+
console.log();
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
// Group by category
|
|
76
|
+
const byCategory = new Map();
|
|
77
|
+
for (const entry of catalog) {
|
|
78
|
+
const cat = entry.category;
|
|
79
|
+
const arr = byCategory.get(cat);
|
|
80
|
+
if (arr)
|
|
81
|
+
arr.push(entry);
|
|
82
|
+
else
|
|
83
|
+
byCategory.set(cat, [entry]);
|
|
84
|
+
}
|
|
85
|
+
for (const [category, entries] of byCategory) {
|
|
86
|
+
console.log(`\n ${category.toUpperCase()} (${entries.length})`);
|
|
87
|
+
console.log(" ─────────────────────────────");
|
|
88
|
+
for (const e of entries) {
|
|
89
|
+
console.log(` ${e.ruleId.padEnd(30)} ${e.description}`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
console.log();
|
|
93
|
+
}
|
|
94
|
+
function categorizeJudge(id) {
|
|
95
|
+
const lower = id.toLowerCase();
|
|
96
|
+
if (lower.includes("sql") ||
|
|
97
|
+
lower.includes("xss") ||
|
|
98
|
+
lower.includes("inject") ||
|
|
99
|
+
lower.includes("auth") ||
|
|
100
|
+
lower.includes("crypto") ||
|
|
101
|
+
lower.includes("secret") ||
|
|
102
|
+
lower.includes("security") ||
|
|
103
|
+
lower.includes("pii") ||
|
|
104
|
+
lower.includes("privilege")) {
|
|
105
|
+
return "security";
|
|
106
|
+
}
|
|
107
|
+
if (lower.includes("perf") ||
|
|
108
|
+
lower.includes("cache") ||
|
|
109
|
+
lower.includes("optim") ||
|
|
110
|
+
lower.includes("memory") ||
|
|
111
|
+
lower.includes("resource")) {
|
|
112
|
+
return "performance";
|
|
113
|
+
}
|
|
114
|
+
if (lower.includes("cost") ||
|
|
115
|
+
lower.includes("cloud") ||
|
|
116
|
+
lower.includes("infra") ||
|
|
117
|
+
lower.includes("deploy") ||
|
|
118
|
+
lower.includes("iac")) {
|
|
119
|
+
return "infrastructure";
|
|
120
|
+
}
|
|
121
|
+
if (lower.includes("test") || lower.includes("quality") || lower.includes("coverage")) {
|
|
122
|
+
return "quality";
|
|
123
|
+
}
|
|
124
|
+
if (lower.includes("api") || lower.includes("type") || lower.includes("contract")) {
|
|
125
|
+
return "api";
|
|
126
|
+
}
|
|
127
|
+
return "general";
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=rule-catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule-catalog.js","sourceRoot":"","sources":["../../src/commands/rule-catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-wizard.d.ts","sourceRoot":"","sources":["../../src/commands/setup-wizard.ts"],"names":[],"mappings":"AAAA;;GAEG;AA2EH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA2HnD"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Setup-wizard — Interactive guided setup for new users and teams.
|
|
3
|
+
*/
|
|
4
|
+
import { writeFileSync, existsSync, mkdirSync } from "fs";
|
|
5
|
+
import { join, dirname } from "path";
|
|
6
|
+
// ─── Presets ────────────────────────────────────────────────────────────────
|
|
7
|
+
const SETUP_PRESETS = {
|
|
8
|
+
"quick-start": {
|
|
9
|
+
description: "Minimal setup — evaluate files with sensible defaults",
|
|
10
|
+
config: { preset: "lenient", format: "text" },
|
|
11
|
+
},
|
|
12
|
+
"security-first": {
|
|
13
|
+
description: "Focus on security findings — strict severity thresholds",
|
|
14
|
+
config: { preset: "security-only", minSeverity: "medium", failOnFindings: true },
|
|
15
|
+
},
|
|
16
|
+
"ci-integration": {
|
|
17
|
+
description: "Optimized for CI/CD pipelines — JSON output, quality gates",
|
|
18
|
+
config: { preset: "strict", format: "sarif", failOnFindings: true, minScore: 70 },
|
|
19
|
+
},
|
|
20
|
+
"team-review": {
|
|
21
|
+
description: "Team-oriented — shared config, audit logging, PR summaries",
|
|
22
|
+
config: { preset: "strict", format: "markdown" },
|
|
23
|
+
},
|
|
24
|
+
compliance: {
|
|
25
|
+
description: "Compliance-focused — full audit trail, evidence collection",
|
|
26
|
+
config: { preset: "compliance", format: "sarif" },
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
// ─── CI Templates ───────────────────────────────────────────────────────────
|
|
30
|
+
function generateGitHubActions(profile) {
|
|
31
|
+
return `name: Judges Code Review
|
|
32
|
+
on:
|
|
33
|
+
pull_request:
|
|
34
|
+
branches: [main]
|
|
35
|
+
push:
|
|
36
|
+
branches: [main]
|
|
37
|
+
|
|
38
|
+
jobs:
|
|
39
|
+
review:
|
|
40
|
+
runs-on: ubuntu-latest
|
|
41
|
+
steps:
|
|
42
|
+
- uses: actions/checkout@v4
|
|
43
|
+
- uses: actions/setup-node@v4
|
|
44
|
+
with:
|
|
45
|
+
node-version: '20'
|
|
46
|
+
- run: npx @kevinrabun/judges eval . --preset ${profile.preset} --format sarif --fail-on-findings
|
|
47
|
+
`;
|
|
48
|
+
}
|
|
49
|
+
function generateGitLabCI(profile) {
|
|
50
|
+
return `judges-review:
|
|
51
|
+
image: node:20
|
|
52
|
+
script:
|
|
53
|
+
- npx @kevinrabun/judges eval . --preset ${profile.preset} --format sarif --fail-on-findings
|
|
54
|
+
only:
|
|
55
|
+
- merge_requests
|
|
56
|
+
- main
|
|
57
|
+
`;
|
|
58
|
+
}
|
|
59
|
+
// ─── CLI ────────────────────────────────────────────────────────────────────
|
|
60
|
+
export function runSetupWizard(argv) {
|
|
61
|
+
if (argv.includes("--help") || argv.includes("-h")) {
|
|
62
|
+
console.log(`
|
|
63
|
+
judges setup-wizard — Guided setup for new users
|
|
64
|
+
|
|
65
|
+
Usage:
|
|
66
|
+
judges setup-wizard Interactive setup
|
|
67
|
+
judges setup-wizard --profile quick-start Use preset profile
|
|
68
|
+
judges setup-wizard --list-profiles List available profiles
|
|
69
|
+
judges setup-wizard --generate-ci github-actions Generate CI config
|
|
70
|
+
judges setup-wizard --init Create .judgesrc and CI config
|
|
71
|
+
|
|
72
|
+
Profiles:
|
|
73
|
+
quick-start Minimal setup with sensible defaults
|
|
74
|
+
security-first Security-focused with strict thresholds
|
|
75
|
+
ci-integration Optimized for CI/CD pipelines
|
|
76
|
+
team-review Team-oriented with shared config
|
|
77
|
+
compliance Full compliance with audit trails
|
|
78
|
+
|
|
79
|
+
Options:
|
|
80
|
+
--profile <name> Select a setup profile
|
|
81
|
+
--list-profiles List all available profiles
|
|
82
|
+
--generate-ci <type> Generate CI config (github-actions, gitlab-ci)
|
|
83
|
+
--init Write configuration files
|
|
84
|
+
--output <dir> Output directory (default: current)
|
|
85
|
+
--format json JSON output
|
|
86
|
+
--help, -h Show this help
|
|
87
|
+
|
|
88
|
+
Generates .judgesrc configuration and CI workflow files
|
|
89
|
+
based on your team's needs. All data stays local.
|
|
90
|
+
`);
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
|
|
94
|
+
if (argv.includes("--list-profiles")) {
|
|
95
|
+
if (format === "json") {
|
|
96
|
+
console.log(JSON.stringify(SETUP_PRESETS, null, 2));
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
console.log("\n Setup Profiles\n ═════════════════════════════");
|
|
100
|
+
for (const [name, info] of Object.entries(SETUP_PRESETS)) {
|
|
101
|
+
console.log(` ${name.padEnd(20)} ${info.description}`);
|
|
102
|
+
}
|
|
103
|
+
console.log();
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
const profileName = argv.find((_a, i) => argv[i - 1] === "--profile") || "quick-start";
|
|
107
|
+
const ciType = argv.find((_a, i) => argv[i - 1] === "--generate-ci");
|
|
108
|
+
const outputDir = argv.find((_a, i) => argv[i - 1] === "--output") || ".";
|
|
109
|
+
const doInit = argv.includes("--init");
|
|
110
|
+
const preset = SETUP_PRESETS[profileName];
|
|
111
|
+
if (!preset) {
|
|
112
|
+
console.error(`Error: Unknown profile '${profileName}'. Use --list-profiles to see options.`);
|
|
113
|
+
process.exitCode = 1;
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
const profile = {
|
|
117
|
+
preset: profileName,
|
|
118
|
+
ciSystem: ciType || "github-actions",
|
|
119
|
+
languages: [],
|
|
120
|
+
strictness: profileName === "security-first" || profileName === "compliance" ? "strict" : "moderate",
|
|
121
|
+
features: [],
|
|
122
|
+
};
|
|
123
|
+
if (ciType) {
|
|
124
|
+
const ciConfig = ciType === "gitlab-ci" ? generateGitLabCI(profile) : generateGitHubActions(profile);
|
|
125
|
+
console.log(ciConfig);
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
if (doInit) {
|
|
129
|
+
// Write .judgesrc
|
|
130
|
+
const rcPath = join(outputDir, ".judgesrc");
|
|
131
|
+
if (!existsSync(rcPath)) {
|
|
132
|
+
writeFileSync(rcPath, JSON.stringify(preset.config, null, 2), "utf-8");
|
|
133
|
+
console.log(`Created ${rcPath}`);
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
console.log(`${rcPath} already exists, skipping.`);
|
|
137
|
+
}
|
|
138
|
+
// Write CI config
|
|
139
|
+
const ciDir = join(outputDir, ".github", "workflows");
|
|
140
|
+
const ciPath = join(ciDir, "judges-review.yml");
|
|
141
|
+
if (!existsSync(ciPath)) {
|
|
142
|
+
mkdirSync(dirname(ciPath), { recursive: true });
|
|
143
|
+
writeFileSync(ciPath, generateGitHubActions(profile), "utf-8");
|
|
144
|
+
console.log(`Created ${ciPath}`);
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
console.log(`${ciPath} already exists, skipping.`);
|
|
148
|
+
}
|
|
149
|
+
console.log("\nSetup complete! Next steps:");
|
|
150
|
+
console.log(" 1. Run: npx @kevinrabun/judges eval <file>");
|
|
151
|
+
console.log(" 2. Customize .judgesrc for your needs");
|
|
152
|
+
console.log(" 3. Commit the CI workflow for automated reviews");
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
// Show setup summary
|
|
156
|
+
if (format === "json") {
|
|
157
|
+
console.log(JSON.stringify({ profile: profileName, ...preset }, null, 2));
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
console.log(`\n Setup Wizard — ${profileName}\n ═════════════════════════════`);
|
|
161
|
+
console.log(` Profile: ${profileName}`);
|
|
162
|
+
console.log(` Description: ${preset.description}`);
|
|
163
|
+
console.log(` Configuration:`);
|
|
164
|
+
for (const [key, value] of Object.entries(preset.config)) {
|
|
165
|
+
console.log(` ${key}: ${value}`);
|
|
166
|
+
}
|
|
167
|
+
console.log();
|
|
168
|
+
console.log(" To apply this configuration:");
|
|
169
|
+
console.log(` judges setup-wizard --profile ${profileName} --init`);
|
|
170
|
+
console.log();
|
|
171
|
+
console.log(" To generate CI config:");
|
|
172
|
+
console.log(` judges setup-wizard --profile ${profileName} --generate-ci github-actions`);
|
|
173
|
+
console.log();
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=setup-wizard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-wizard.js","sourceRoot":"","sources":["../../src/commands/setup-wizard.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.66.0",
|
|
11
11
|
"packages": [
|
|
12
12
|
{
|
|
13
13
|
"registryType": "npm",
|
|
14
14
|
"identifier": "@kevinrabun/judges",
|
|
15
|
-
"version": "3.
|
|
15
|
+
"version": "3.66.0",
|
|
16
16
|
"transport": {
|
|
17
17
|
"type": "stdio"
|
|
18
18
|
}
|