@kevinrabun/judges 3.65.0 → 3.67.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 (70) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +112 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/config-lint.d.ts +5 -0
  6. package/dist/commands/config-lint.d.ts.map +1 -0
  7. package/dist/commands/config-lint.js +188 -0
  8. package/dist/commands/config-lint.js.map +1 -0
  9. package/dist/commands/finding-age.d.ts +5 -0
  10. package/dist/commands/finding-age.d.ts.map +1 -0
  11. package/dist/commands/finding-age.js +146 -0
  12. package/dist/commands/finding-age.js.map +1 -0
  13. package/dist/commands/finding-rank.d.ts +5 -0
  14. package/dist/commands/finding-rank.d.ts.map +1 -0
  15. package/dist/commands/finding-rank.js +139 -0
  16. package/dist/commands/finding-rank.js.map +1 -0
  17. package/dist/commands/finding-timeline.d.ts +5 -0
  18. package/dist/commands/finding-timeline.d.ts.map +1 -0
  19. package/dist/commands/finding-timeline.js +144 -0
  20. package/dist/commands/finding-timeline.js.map +1 -0
  21. package/dist/commands/fix-verify.d.ts +5 -0
  22. package/dist/commands/fix-verify.d.ts.map +1 -0
  23. package/dist/commands/fix-verify.js +124 -0
  24. package/dist/commands/fix-verify.js.map +1 -0
  25. package/dist/commands/review-comment.d.ts +5 -0
  26. package/dist/commands/review-comment.d.ts.map +1 -0
  27. package/dist/commands/review-comment.js +166 -0
  28. package/dist/commands/review-comment.js.map +1 -0
  29. package/dist/commands/review-dashboard.d.ts +5 -0
  30. package/dist/commands/review-dashboard.d.ts.map +1 -0
  31. package/dist/commands/review-dashboard.js +141 -0
  32. package/dist/commands/review-dashboard.js.map +1 -0
  33. package/dist/commands/review-diff-summary.d.ts +5 -0
  34. package/dist/commands/review-diff-summary.d.ts.map +1 -0
  35. package/dist/commands/review-diff-summary.js +155 -0
  36. package/dist/commands/review-diff-summary.js.map +1 -0
  37. package/dist/commands/review-export.d.ts +5 -0
  38. package/dist/commands/review-export.d.ts.map +1 -0
  39. package/dist/commands/review-export.js +180 -0
  40. package/dist/commands/review-export.js.map +1 -0
  41. package/dist/commands/review-notify.d.ts +5 -0
  42. package/dist/commands/review-notify.d.ts.map +1 -0
  43. package/dist/commands/review-notify.js +144 -0
  44. package/dist/commands/review-notify.js.map +1 -0
  45. package/dist/commands/review-offline.d.ts +5 -0
  46. package/dist/commands/review-offline.d.ts.map +1 -0
  47. package/dist/commands/review-offline.js +126 -0
  48. package/dist/commands/review-offline.js.map +1 -0
  49. package/dist/commands/review-quota.d.ts +5 -0
  50. package/dist/commands/review-quota.d.ts.map +1 -0
  51. package/dist/commands/review-quota.js +127 -0
  52. package/dist/commands/review-quota.js.map +1 -0
  53. package/dist/commands/review-schedule.d.ts +5 -0
  54. package/dist/commands/review-schedule.d.ts.map +1 -0
  55. package/dist/commands/review-schedule.js +170 -0
  56. package/dist/commands/review-schedule.js.map +1 -0
  57. package/dist/commands/review-scope.d.ts +5 -0
  58. package/dist/commands/review-scope.d.ts.map +1 -0
  59. package/dist/commands/review-scope.js +198 -0
  60. package/dist/commands/review-scope.js.map +1 -0
  61. package/dist/commands/rule-catalog.d.ts +5 -0
  62. package/dist/commands/rule-catalog.d.ts.map +1 -0
  63. package/dist/commands/rule-catalog.js +129 -0
  64. package/dist/commands/rule-catalog.js.map +1 -0
  65. package/dist/commands/setup-wizard.d.ts +5 -0
  66. package/dist/commands/setup-wizard.d.ts.map +1 -0
  67. package/dist/commands/setup-wizard.js +175 -0
  68. package/dist/commands/setup-wizard.js.map +1 -0
  69. package/package.json +1 -1
  70. package/server.json +2 -2
@@ -0,0 +1,198 @@
1
+ /**
2
+ * Review-scope — Define and manage review scope boundaries.
3
+ */
4
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
5
+ import { join, dirname } from "path";
6
+ // ─── Storage ────────────────────────────────────────────────────────────────
7
+ const SCOPE_FILE = join(".judges", "review-scope.json");
8
+ function loadScope() {
9
+ if (!existsSync(SCOPE_FILE)) {
10
+ return {
11
+ version: "1.0.0",
12
+ name: "default",
13
+ include: ["**/*"],
14
+ exclude: ["node_modules/**", "dist/**", ".git/**", "*.min.js", "*.min.css"],
15
+ languages: [],
16
+ maxFileSize: 500000,
17
+ maxFiles: 1000,
18
+ focusDirs: [],
19
+ ignoreDirs: ["node_modules", "dist", ".git", "vendor", "build", "coverage"],
20
+ };
21
+ }
22
+ try {
23
+ return JSON.parse(readFileSync(SCOPE_FILE, "utf-8"));
24
+ }
25
+ catch {
26
+ return {
27
+ version: "1.0.0",
28
+ name: "default",
29
+ include: ["**/*"],
30
+ exclude: [],
31
+ languages: [],
32
+ maxFileSize: 500000,
33
+ maxFiles: 1000,
34
+ focusDirs: [],
35
+ ignoreDirs: [],
36
+ };
37
+ }
38
+ }
39
+ function saveScope(config) {
40
+ mkdirSync(dirname(SCOPE_FILE), { recursive: true });
41
+ writeFileSync(SCOPE_FILE, JSON.stringify(config, null, 2), "utf-8");
42
+ }
43
+ // ─── CLI ────────────────────────────────────────────────────────────────────
44
+ export function runReviewScope(argv) {
45
+ if (argv.includes("--help") || argv.includes("-h")) {
46
+ console.log(`
47
+ judges review-scope — Define review scope boundaries
48
+
49
+ Usage:
50
+ judges review-scope show Show current scope
51
+ judges review-scope set --name production Set scope name
52
+ judges review-scope include --pattern "src/**" Add include pattern
53
+ judges review-scope exclude --pattern "test/**" Add exclude pattern
54
+ judges review-scope focus --dir src/core Add focus directory
55
+ judges review-scope ignore --dir vendor Add ignore directory
56
+ judges review-scope language --add python Add language filter
57
+ judges review-scope reset Reset to defaults
58
+
59
+ Subcommands:
60
+ show Show current scope configuration
61
+ set Set a scope property
62
+ include Add include pattern
63
+ exclude Add exclude pattern
64
+ focus Add focus directory
65
+ ignore Add ignore directory
66
+ language Manage language filters
67
+ reset Reset to default scope
68
+
69
+ Options:
70
+ --pattern <glob> Glob pattern (for include/exclude)
71
+ --dir <path> Directory (for focus/ignore)
72
+ --name <name> Scope name
73
+ --add <lang> Add language filter
74
+ --remove <lang> Remove language filter
75
+ --max-size <bytes> Maximum file size to review
76
+ --max-files <n> Maximum number of files
77
+ --format json JSON output
78
+ --help, -h Show this help
79
+
80
+ Scope configuration is stored in .judges/review-scope.json.
81
+ `);
82
+ return;
83
+ }
84
+ const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
85
+ const subcommand = argv.find((a) => ["show", "set", "include", "exclude", "focus", "ignore", "language", "reset"].includes(a)) ||
86
+ "show";
87
+ const config = loadScope();
88
+ if (subcommand === "reset") {
89
+ const defaults = loadScope();
90
+ defaults.include = ["**/*"];
91
+ defaults.exclude = ["node_modules/**", "dist/**", ".git/**", "*.min.js", "*.min.css"];
92
+ defaults.languages = [];
93
+ defaults.focusDirs = [];
94
+ defaults.ignoreDirs = ["node_modules", "dist", ".git", "vendor", "build", "coverage"];
95
+ saveScope(defaults);
96
+ console.log("Scope reset to defaults.");
97
+ return;
98
+ }
99
+ if (subcommand === "set") {
100
+ const name = argv.find((_a, i) => argv[i - 1] === "--name");
101
+ const maxSize = argv.find((_a, i) => argv[i - 1] === "--max-size");
102
+ const maxFiles = argv.find((_a, i) => argv[i - 1] === "--max-files");
103
+ if (name)
104
+ config.name = name;
105
+ if (maxSize)
106
+ config.maxFileSize = parseInt(maxSize, 10);
107
+ if (maxFiles)
108
+ config.maxFiles = parseInt(maxFiles, 10);
109
+ saveScope(config);
110
+ console.log("Scope updated.");
111
+ return;
112
+ }
113
+ if (subcommand === "include") {
114
+ const pattern = argv.find((_a, i) => argv[i - 1] === "--pattern");
115
+ if (pattern && !config.include.includes(pattern)) {
116
+ config.include.push(pattern);
117
+ saveScope(config);
118
+ console.log(`Added include pattern: ${pattern}`);
119
+ }
120
+ else {
121
+ console.error("Error: --pattern is required.");
122
+ process.exitCode = 1;
123
+ }
124
+ return;
125
+ }
126
+ if (subcommand === "exclude") {
127
+ const pattern = argv.find((_a, i) => argv[i - 1] === "--pattern");
128
+ if (pattern && !config.exclude.includes(pattern)) {
129
+ config.exclude.push(pattern);
130
+ saveScope(config);
131
+ console.log(`Added exclude pattern: ${pattern}`);
132
+ }
133
+ else {
134
+ console.error("Error: --pattern is required.");
135
+ process.exitCode = 1;
136
+ }
137
+ return;
138
+ }
139
+ if (subcommand === "focus") {
140
+ const dir = argv.find((_a, i) => argv[i - 1] === "--dir");
141
+ if (dir && !config.focusDirs.includes(dir)) {
142
+ config.focusDirs.push(dir);
143
+ saveScope(config);
144
+ console.log(`Added focus directory: ${dir}`);
145
+ }
146
+ else {
147
+ console.error("Error: --dir is required.");
148
+ process.exitCode = 1;
149
+ }
150
+ return;
151
+ }
152
+ if (subcommand === "ignore") {
153
+ const dir = argv.find((_a, i) => argv[i - 1] === "--dir");
154
+ if (dir && !config.ignoreDirs.includes(dir)) {
155
+ config.ignoreDirs.push(dir);
156
+ saveScope(config);
157
+ console.log(`Added ignore directory: ${dir}`);
158
+ }
159
+ else {
160
+ console.error("Error: --dir is required.");
161
+ process.exitCode = 1;
162
+ }
163
+ return;
164
+ }
165
+ if (subcommand === "language") {
166
+ const add = argv.find((_a, i) => argv[i - 1] === "--add");
167
+ const remove = argv.find((_a, i) => argv[i - 1] === "--remove");
168
+ if (add && !config.languages.includes(add)) {
169
+ config.languages.push(add);
170
+ saveScope(config);
171
+ console.log(`Added language filter: ${add}`);
172
+ }
173
+ else if (remove) {
174
+ config.languages = config.languages.filter((l) => l !== remove);
175
+ saveScope(config);
176
+ console.log(`Removed language filter: ${remove}`);
177
+ }
178
+ else {
179
+ console.log(`Languages: ${config.languages.length > 0 ? config.languages.join(", ") : "(all)"}`);
180
+ }
181
+ return;
182
+ }
183
+ // Show
184
+ if (format === "json") {
185
+ console.log(JSON.stringify(config, null, 2));
186
+ return;
187
+ }
188
+ console.log(`\n Review Scope: ${config.name}\n ═════════════════════════════`);
189
+ console.log(` Include: ${config.include.join(", ")}`);
190
+ console.log(` Exclude: ${config.exclude.join(", ")}`);
191
+ console.log(` Languages: ${config.languages.length > 0 ? config.languages.join(", ") : "(all)"}`);
192
+ console.log(` Max file size: ${config.maxFileSize} bytes`);
193
+ console.log(` Max files: ${config.maxFiles}`);
194
+ console.log(` Focus dirs: ${config.focusDirs.length > 0 ? config.focusDirs.join(", ") : "(none)"}`);
195
+ console.log(` Ignore dirs: ${config.ignoreDirs.join(", ")}`);
196
+ console.log();
197
+ }
198
+ //# sourceMappingURL=review-scope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-scope.js","sourceRoot":"","sources":["../../src/commands/review-scope.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Rule-catalog — Browse, search, and preview available rules with examples.
3
+ */
4
+ export declare function runRuleCatalog(argv: string[]): void;
5
+ //# sourceMappingURL=rule-catalog.d.ts.map
@@ -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,5 @@
1
+ /**
2
+ * Setup-wizard — Interactive guided setup for new users and teams.
3
+ */
4
+ export declare function runSetupWizard(argv: string[]): void;
5
+ //# sourceMappingURL=setup-wizard.d.ts.map
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kevinrabun/judges",
3
- "version": "3.65.0",
3
+ "version": "3.67.0",
4
4
  "description": "45 specialized judges that evaluate AI-generated code for security, cost, and quality.",
5
5
  "mcpName": "io.github.KevinRabun/judges",
6
6
  "type": "module",
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.65.0",
10
+ "version": "3.67.0",
11
11
  "packages": [
12
12
  {
13
13
  "registryType": "npm",
14
14
  "identifier": "@kevinrabun/judges",
15
- "version": "3.65.0",
15
+ "version": "3.67.0",
16
16
  "transport": {
17
17
  "type": "stdio"
18
18
  }