@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.
Files changed (70) hide show
  1. package/CHANGELOG.md +15 -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/code-health.d.ts +5 -0
  6. package/dist/commands/code-health.d.ts.map +1 -0
  7. package/dist/commands/code-health.js +196 -0
  8. package/dist/commands/code-health.js.map +1 -0
  9. package/dist/commands/finding-suppress.d.ts +5 -0
  10. package/dist/commands/finding-suppress.d.ts.map +1 -0
  11. package/dist/commands/finding-suppress.js +165 -0
  12. package/dist/commands/finding-suppress.js.map +1 -0
  13. package/dist/commands/finding-timeline.d.ts +5 -0
  14. package/dist/commands/finding-timeline.d.ts.map +1 -0
  15. package/dist/commands/finding-timeline.js +144 -0
  16. package/dist/commands/finding-timeline.js.map +1 -0
  17. package/dist/commands/fix-verify.d.ts +5 -0
  18. package/dist/commands/fix-verify.d.ts.map +1 -0
  19. package/dist/commands/fix-verify.js +124 -0
  20. package/dist/commands/fix-verify.js.map +1 -0
  21. package/dist/commands/judge-config.d.ts +5 -0
  22. package/dist/commands/judge-config.d.ts.map +1 -0
  23. package/dist/commands/judge-config.js +152 -0
  24. package/dist/commands/judge-config.js.map +1 -0
  25. package/dist/commands/review-annotate.d.ts +5 -0
  26. package/dist/commands/review-annotate.d.ts.map +1 -0
  27. package/dist/commands/review-annotate.js +123 -0
  28. package/dist/commands/review-annotate.js.map +1 -0
  29. package/dist/commands/review-checkpoint.d.ts +5 -0
  30. package/dist/commands/review-checkpoint.d.ts.map +1 -0
  31. package/dist/commands/review-checkpoint.js +164 -0
  32. package/dist/commands/review-checkpoint.js.map +1 -0
  33. package/dist/commands/review-comment.d.ts +5 -0
  34. package/dist/commands/review-comment.d.ts.map +1 -0
  35. package/dist/commands/review-comment.js +166 -0
  36. package/dist/commands/review-comment.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-filter.d.ts +5 -0
  42. package/dist/commands/review-filter.d.ts.map +1 -0
  43. package/dist/commands/review-filter.js +166 -0
  44. package/dist/commands/review-filter.js.map +1 -0
  45. package/dist/commands/review-merge.d.ts +5 -0
  46. package/dist/commands/review-merge.d.ts.map +1 -0
  47. package/dist/commands/review-merge.js +146 -0
  48. package/dist/commands/review-merge.js.map +1 -0
  49. package/dist/commands/review-schedule.d.ts +5 -0
  50. package/dist/commands/review-schedule.d.ts.map +1 -0
  51. package/dist/commands/review-schedule.js +170 -0
  52. package/dist/commands/review-schedule.js.map +1 -0
  53. package/dist/commands/review-scope.d.ts +5 -0
  54. package/dist/commands/review-scope.d.ts.map +1 -0
  55. package/dist/commands/review-scope.js +198 -0
  56. package/dist/commands/review-scope.js.map +1 -0
  57. package/dist/commands/review-webhook.d.ts +5 -0
  58. package/dist/commands/review-webhook.d.ts.map +1 -0
  59. package/dist/commands/review-webhook.js +141 -0
  60. package/dist/commands/review-webhook.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,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,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.64.0",
3
+ "version": "3.66.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.64.0",
10
+ "version": "3.66.0",
11
11
  "packages": [
12
12
  {
13
13
  "registryType": "npm",
14
14
  "identifier": "@kevinrabun/judges",
15
- "version": "3.64.0",
15
+ "version": "3.66.0",
16
16
  "transport": {
17
17
  "type": "stdio"
18
18
  }