@kevinrabun/judges 3.93.0 → 3.94.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 (42) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +63 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/finding-code-context.d.ts +5 -0
  6. package/dist/commands/finding-code-context.d.ts.map +1 -0
  7. package/dist/commands/finding-code-context.js +97 -0
  8. package/dist/commands/finding-code-context.js.map +1 -0
  9. package/dist/commands/finding-explain.d.ts +5 -0
  10. package/dist/commands/finding-explain.d.ts.map +1 -0
  11. package/dist/commands/finding-explain.js +94 -0
  12. package/dist/commands/finding-explain.js.map +1 -0
  13. package/dist/commands/finding-filter-view.d.ts +5 -0
  14. package/dist/commands/finding-filter-view.d.ts.map +1 -0
  15. package/dist/commands/finding-filter-view.js +108 -0
  16. package/dist/commands/finding-filter-view.js.map +1 -0
  17. package/dist/commands/finding-resolution-track.d.ts +5 -0
  18. package/dist/commands/finding-resolution-track.d.ts.map +1 -0
  19. package/dist/commands/finding-resolution-track.js +151 -0
  20. package/dist/commands/finding-resolution-track.js.map +1 -0
  21. package/dist/commands/review-ide-sync.d.ts +5 -0
  22. package/dist/commands/review-ide-sync.d.ts.map +1 -0
  23. package/dist/commands/review-ide-sync.js +92 -0
  24. package/dist/commands/review-ide-sync.js.map +1 -0
  25. package/dist/commands/review-interactive.d.ts +5 -0
  26. package/dist/commands/review-interactive.d.ts.map +1 -0
  27. package/dist/commands/review-interactive.js +86 -0
  28. package/dist/commands/review-interactive.js.map +1 -0
  29. package/dist/commands/review-onboard-checklist.d.ts +5 -0
  30. package/dist/commands/review-onboard-checklist.d.ts.map +1 -0
  31. package/dist/commands/review-onboard-checklist.js +120 -0
  32. package/dist/commands/review-onboard-checklist.js.map +1 -0
  33. package/dist/commands/review-quickstart.d.ts +5 -0
  34. package/dist/commands/review-quickstart.d.ts.map +1 -0
  35. package/dist/commands/review-quickstart.js +108 -0
  36. package/dist/commands/review-quickstart.js.map +1 -0
  37. package/dist/commands/review-tenant-config.d.ts +5 -0
  38. package/dist/commands/review-tenant-config.d.ts.map +1 -0
  39. package/dist/commands/review-tenant-config.js +117 -0
  40. package/dist/commands/review-tenant-config.js.map +1 -0
  41. package/package.json +1 -1
  42. package/server.json +2 -2
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Review-interactive — Interactive review session with step-by-step finding walkthrough.
3
+ */
4
+ export declare function runReviewInteractive(argv: string[]): void;
5
+ //# sourceMappingURL=review-interactive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-interactive.d.ts","sourceRoot":"","sources":["../../src/commands/review-interactive.ts"],"names":[],"mappings":"AAAA;;GAEG;AA0BH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAuEzD"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Review-interactive — Interactive review session with step-by-step finding walkthrough.
3
+ */
4
+ import { readFileSync, existsSync } from "fs";
5
+ // ─── Helpers ────────────────────────────────────────────────────────────────
6
+ function formatFinding(f, index) {
7
+ const lines = [];
8
+ lines.push(`\n── Finding ${index + 1} ──────────────────────────────────────`);
9
+ lines.push(` Rule: ${f.ruleId}`);
10
+ lines.push(` Severity: ${f.severity}`);
11
+ lines.push(` Title: ${f.title}`);
12
+ lines.push(` Details: ${f.description}`);
13
+ if (f.lineNumbers !== undefined && f.lineNumbers.length > 0) {
14
+ lines.push(` Lines: ${f.lineNumbers.join(", ")}`);
15
+ }
16
+ lines.push(` Fix: ${f.recommendation}`);
17
+ if (f.confidence !== undefined) {
18
+ lines.push(` Confidence: ${(f.confidence * 100).toFixed(0)}%`);
19
+ }
20
+ return lines.join("\n");
21
+ }
22
+ // ─── CLI ────────────────────────────────────────────────────────────────────
23
+ export function runReviewInteractive(argv) {
24
+ const fileIdx = argv.indexOf("--file");
25
+ const severityIdx = argv.indexOf("--severity");
26
+ const formatIdx = argv.indexOf("--format");
27
+ const filePath = fileIdx >= 0 ? argv[fileIdx + 1] : undefined;
28
+ const severityFilter = severityIdx >= 0 ? argv[severityIdx + 1] : undefined;
29
+ const format = formatIdx >= 0 ? argv[formatIdx + 1] : "table";
30
+ if (argv.includes("--help") || argv.includes("-h")) {
31
+ console.log(`
32
+ judges review-interactive — Interactive finding walkthrough
33
+
34
+ Usage:
35
+ judges review-interactive --file <review.json> [--severity <level>]
36
+ [--format table|json]
37
+
38
+ Options:
39
+ --file <path> Review result JSON file
40
+ --severity <level> Filter: critical, high, medium, low, info
41
+ --format <fmt> Output format: table (default), json
42
+ --help, -h Show this help
43
+ `);
44
+ return;
45
+ }
46
+ if (!filePath) {
47
+ console.error("Error: --file is required");
48
+ process.exitCode = 1;
49
+ return;
50
+ }
51
+ if (!existsSync(filePath)) {
52
+ console.error(`Error: file not found: ${filePath}`);
53
+ process.exitCode = 1;
54
+ return;
55
+ }
56
+ let verdict;
57
+ try {
58
+ verdict = JSON.parse(readFileSync(filePath, "utf-8"));
59
+ }
60
+ catch {
61
+ console.error(`Error: failed to parse review file: ${filePath}`);
62
+ process.exitCode = 1;
63
+ return;
64
+ }
65
+ let findings = verdict.findings;
66
+ if (severityFilter) {
67
+ findings = findings.filter((f) => f.severity === severityFilter);
68
+ }
69
+ if (format === "json") {
70
+ console.log(JSON.stringify({ total: findings.length, findings }, null, 2));
71
+ return;
72
+ }
73
+ console.log(`\nInteractive Review: ${findings.length} findings`);
74
+ console.log(`Overall: ${verdict.overallVerdict} (score: ${verdict.overallScore})`);
75
+ console.log("═".repeat(55));
76
+ if (findings.length === 0) {
77
+ console.log(" No findings match the current filter.");
78
+ return;
79
+ }
80
+ for (let i = 0; i < findings.length; i++) {
81
+ console.log(formatFinding(findings[i], i));
82
+ }
83
+ console.log("\n" + "═".repeat(55));
84
+ console.log(`Reviewed ${findings.length} finding(s). Use --severity to filter.`);
85
+ }
86
+ //# sourceMappingURL=review-interactive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-interactive.js","sourceRoot":"","sources":["../../src/commands/review-interactive.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAG9C,+EAA+E;AAE/E,SAAS,aAAa,CAAC,CAAU,EAAE,KAAa;IAC9C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,gBAAgB,KAAK,GAAG,CAAC,yCAAyC,CAAC,CAAC;IAC/E,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACxC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC1C,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IACvC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,CAAC,WAAW,KAAK,SAAS,IAAI,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5D,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;IAChD,IAAI,CAAC,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,+EAA+E;AAE/E,MAAM,UAAU,oBAAoB,CAAC,IAAc;IACjD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9D,MAAM,cAAc,GAAG,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5E,MAAM,MAAM,GAAG,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAE9D,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;CAYf,CAAC,CAAC;QACC,OAAO;IACT,CAAC;IAED,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC3C,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,0BAA0B,QAAQ,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,IAAI,OAAwB,CAAC;IAC7B,IAAI,CAAC;QACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAoB,CAAC;IAC3E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,uCAAuC,QAAQ,EAAE,CAAC,CAAC;QACjE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,IAAI,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAChC,IAAI,cAAc,EAAE,CAAC;QACnB,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC,CAAC;IACnE,CAAC;IAED,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3E,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,yBAAyB,QAAQ,CAAC,MAAM,WAAW,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,YAAY,OAAO,CAAC,cAAc,YAAY,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC;IACnF,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAE5B,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;QACvD,OAAO;IACT,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,YAAY,QAAQ,CAAC,MAAM,wCAAwC,CAAC,CAAC;AACnF,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Review-onboard-checklist — Generate team onboarding checklists for Judges adoption.
3
+ */
4
+ export declare function runReviewOnboardChecklist(argv: string[]): void;
5
+ //# sourceMappingURL=review-onboard-checklist.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-onboard-checklist.d.ts","sourceRoot":"","sources":["../../src/commands/review-onboard-checklist.ts"],"names":[],"mappings":"AAAA;;GAEG;AAkDH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAqF9D"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Review-onboard-checklist — Generate team onboarding checklists for Judges adoption.
3
+ */
4
+ import { writeFileSync } from "fs";
5
+ import { defaultRegistry } from "../judge-registry.js";
6
+ function getChecklist() {
7
+ const judges = defaultRegistry.getJudges();
8
+ const domains = [...new Set(judges.map((j) => j.domain))];
9
+ return [
10
+ {
11
+ category: "Installation",
12
+ item: "Install @kevinrabun/judges globally or as dev dependency",
13
+ priority: "required",
14
+ },
15
+ { category: "Installation", item: "Install VS Code extension (Judges Panel)", priority: "recommended" },
16
+ { category: "Configuration", item: "Create .judgesrc in project root", priority: "required" },
17
+ { category: "Configuration", item: "Choose preset (default, strict, security-focused)", priority: "required" },
18
+ { category: "Configuration", item: "Set minSeverity threshold for team", priority: "recommended" },
19
+ {
20
+ category: "Configuration",
21
+ item: `Review available domains: ${domains.slice(0, 5).join(", ")}...`,
22
+ priority: "recommended",
23
+ },
24
+ { category: "CI/CD", item: "Add judges review to CI pipeline", priority: "recommended" },
25
+ { category: "CI/CD", item: "Configure review-ci-gate with pass/fail thresholds", priority: "recommended" },
26
+ { category: "CI/CD", item: "Set up SARIF output for GitHub Security tab", priority: "optional" },
27
+ { category: "Team", item: "Share .judgesrc in version control", priority: "required" },
28
+ { category: "Team", item: "Document suppression workflow for false positives", priority: "recommended" },
29
+ { category: "Team", item: "Set up team-specific tenant config profiles", priority: "optional" },
30
+ { category: "Review", item: "Run first review on sample file", priority: "required" },
31
+ { category: "Review", item: "Review output formats (table, json, markdown, sarif)", priority: "recommended" },
32
+ {
33
+ category: "Review",
34
+ item: `Explore ${judges.length} available judges across ${domains.length} domains`,
35
+ priority: "optional",
36
+ },
37
+ ];
38
+ }
39
+ // ─── CLI ────────────────────────────────────────────────────────────────────
40
+ export function runReviewOnboardChecklist(argv) {
41
+ const formatIdx = argv.indexOf("--format");
42
+ const outputIdx = argv.indexOf("--output");
43
+ const priorityIdx = argv.indexOf("--priority");
44
+ const format = formatIdx >= 0 ? argv[formatIdx + 1] : "table";
45
+ const outputPath = outputIdx >= 0 ? argv[outputIdx + 1] : undefined;
46
+ const priorityFilter = priorityIdx >= 0 ? argv[priorityIdx + 1] : undefined;
47
+ if (argv.includes("--help") || argv.includes("-h")) {
48
+ console.log(`
49
+ judges review-onboard-checklist — Team onboarding checklist
50
+
51
+ Usage:
52
+ judges review-onboard-checklist [--priority required|recommended|optional]
53
+ [--output <file>] [--format table|json|markdown]
54
+
55
+ Options:
56
+ --priority <level> Filter by priority level
57
+ --output <path> Write checklist to file
58
+ --format <fmt> Output format: table (default), json, markdown
59
+ --help, -h Show this help
60
+ `);
61
+ return;
62
+ }
63
+ let items = getChecklist();
64
+ if (priorityFilter) {
65
+ items = items.filter((i) => i.priority === priorityFilter);
66
+ }
67
+ if (format === "json") {
68
+ const output = JSON.stringify(items, null, 2);
69
+ if (outputPath) {
70
+ writeFileSync(outputPath, output);
71
+ console.log(`Checklist written to ${outputPath}`);
72
+ }
73
+ else {
74
+ console.log(output);
75
+ }
76
+ return;
77
+ }
78
+ if (format === "markdown") {
79
+ const lines = ["# Judges Onboarding Checklist\n"];
80
+ let currentCategory = "";
81
+ for (const item of items) {
82
+ if (item.category !== currentCategory) {
83
+ currentCategory = item.category;
84
+ lines.push(`\n## ${currentCategory}\n`);
85
+ }
86
+ const badge = item.priority === "required"
87
+ ? "**[REQUIRED]**"
88
+ : item.priority === "recommended"
89
+ ? "[recommended]"
90
+ : "[optional]";
91
+ lines.push(`- [ ] ${badge} ${item.item}`);
92
+ }
93
+ const output = lines.join("\n");
94
+ if (outputPath) {
95
+ writeFileSync(outputPath, output);
96
+ console.log(`Checklist written to ${outputPath}`);
97
+ }
98
+ else {
99
+ console.log(output);
100
+ }
101
+ return;
102
+ }
103
+ // Table format
104
+ console.log(`\nOnboarding Checklist: ${items.length} items`);
105
+ console.log("═".repeat(70));
106
+ let currentCategory = "";
107
+ for (const item of items) {
108
+ if (item.category !== currentCategory) {
109
+ currentCategory = item.category;
110
+ console.log(`\n ${currentCategory}`);
111
+ console.log(" " + "─".repeat(60));
112
+ }
113
+ const badge = item.priority === "required" ? "[REQ]" : item.priority === "recommended" ? "[REC]" : "[OPT]";
114
+ console.log(` ${badge} ${item.item}`);
115
+ }
116
+ console.log("\n" + "═".repeat(70));
117
+ const required = items.filter((i) => i.priority === "required").length;
118
+ console.log(`${required} required, ${items.length - required} optional/recommended`);
119
+ }
120
+ //# sourceMappingURL=review-onboard-checklist.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-onboard-checklist.js","sourceRoot":"","sources":["../../src/commands/review-onboard-checklist.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Review-quickstart — Interactive quickstart guide for new users.
3
+ */
4
+ export declare function runReviewQuickstart(argv: string[]): void;
5
+ //# sourceMappingURL=review-quickstart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-quickstart.d.ts","sourceRoot":"","sources":["../../src/commands/review-quickstart.ts"],"names":[],"mappings":"AAAA;;GAEG;AAoEH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAuDxD"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Review-quickstart — Interactive quickstart guide for new users.
3
+ */
4
+ import { existsSync, writeFileSync } from "fs";
5
+ import { join } from "path";
6
+ import { defaultRegistry } from "../judge-registry.js";
7
+ function buildSteps(projectDir) {
8
+ const configPath = join(projectDir, ".judgesrc");
9
+ const hasConfig = existsSync(configPath);
10
+ const judges = defaultRegistry.getJudges();
11
+ return [
12
+ {
13
+ number: 1,
14
+ title: "Install Judges",
15
+ description: "npm install -g @kevinrabun/judges",
16
+ status: "done",
17
+ },
18
+ {
19
+ number: 2,
20
+ title: "Create Configuration",
21
+ description: `Create .judgesrc in your project root (${judges.length} judges available)`,
22
+ status: hasConfig ? "done" : "pending",
23
+ },
24
+ {
25
+ number: 3,
26
+ title: "Run First Review",
27
+ description: "judges review <file> — run your first code review",
28
+ status: "pending",
29
+ },
30
+ {
31
+ number: 4,
32
+ title: "Explore Judges",
33
+ description: `judges list — browse ${judges.length} available judges across domains`,
34
+ status: "pending",
35
+ },
36
+ {
37
+ number: 5,
38
+ title: "Configure Severity",
39
+ description: "Set minSeverity in .judgesrc to filter noise (critical, high, medium, low, info)",
40
+ status: "pending",
41
+ },
42
+ {
43
+ number: 6,
44
+ title: "Add CI Integration",
45
+ description: "judges review-ci-gate — integrate into your CI/CD pipeline",
46
+ status: "pending",
47
+ },
48
+ {
49
+ number: 7,
50
+ title: "Enable IDE Support",
51
+ description: "Install Judges Panel for VS Code or configure JetBrains plugin",
52
+ status: "pending",
53
+ },
54
+ ];
55
+ }
56
+ // ─── CLI ────────────────────────────────────────────────────────────────────
57
+ export function runReviewQuickstart(argv) {
58
+ const dirIdx = argv.indexOf("--dir");
59
+ const formatIdx = argv.indexOf("--format");
60
+ const initFlag = argv.includes("--init");
61
+ const projectDir = dirIdx >= 0 ? argv[dirIdx + 1] : process.cwd();
62
+ const format = formatIdx >= 0 ? argv[formatIdx + 1] : "table";
63
+ if (argv.includes("--help") || argv.includes("-h")) {
64
+ console.log(`
65
+ judges review-quickstart — Interactive quickstart guide
66
+
67
+ Usage:
68
+ judges review-quickstart [--dir <path>] [--init] [--format table|json]
69
+
70
+ Options:
71
+ --dir <path> Project directory (default: cwd)
72
+ --init Generate default .judgesrc config
73
+ --format <fmt> Output format: table (default), json
74
+ --help, -h Show this help
75
+ `);
76
+ return;
77
+ }
78
+ if (initFlag) {
79
+ const configPath = join(projectDir, ".judgesrc");
80
+ if (existsSync(configPath)) {
81
+ console.log(`Config already exists: ${configPath}`);
82
+ return;
83
+ }
84
+ const defaultConfig = {
85
+ preset: "default",
86
+ minSeverity: "medium",
87
+ };
88
+ writeFileSync(configPath, JSON.stringify(defaultConfig, null, 2));
89
+ console.log(`Created default config: ${configPath}`);
90
+ return;
91
+ }
92
+ const steps = buildSteps(projectDir);
93
+ if (format === "json") {
94
+ console.log(JSON.stringify(steps, null, 2));
95
+ return;
96
+ }
97
+ const completed = steps.filter((s) => s.status === "done").length;
98
+ console.log(`\nQuickstart Progress: ${completed}/${steps.length} steps completed`);
99
+ console.log("═".repeat(65));
100
+ for (const step of steps) {
101
+ const icon = step.status === "done" ? "[✓]" : step.status === "skipped" ? "[-]" : "[ ]";
102
+ console.log(` ${icon} Step ${step.number}: ${step.title}`);
103
+ console.log(` ${step.description}`);
104
+ }
105
+ console.log("═".repeat(65));
106
+ console.log(`\nRun with --init to generate a default .judgesrc config.`);
107
+ }
108
+ //# sourceMappingURL=review-quickstart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-quickstart.js","sourceRoot":"","sources":["../../src/commands/review-quickstart.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Review-tenant-config — Manage per-tenant/team configuration profiles.
3
+ */
4
+ export declare function runReviewTenantConfig(argv: string[]): void;
5
+ //# sourceMappingURL=review-tenant-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-tenant-config.d.ts","sourceRoot":"","sources":["../../src/commands/review-tenant-config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAgBH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAqH1D"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Review-tenant-config — Manage per-tenant/team configuration profiles.
3
+ */
4
+ import { readFileSync, writeFileSync, existsSync, readdirSync } from "fs";
5
+ import { join } from "path";
6
+ // ─── CLI ────────────────────────────────────────────────────────────────────
7
+ export function runReviewTenantConfig(argv) {
8
+ const dirIdx = argv.indexOf("--dir");
9
+ const nameIdx = argv.indexOf("--name");
10
+ const setIdx = argv.indexOf("--set");
11
+ const formatIdx = argv.indexOf("--format");
12
+ const configDir = dirIdx >= 0 ? argv[dirIdx + 1] : join(process.cwd(), ".judges-tenants");
13
+ const tenantName = nameIdx >= 0 ? argv[nameIdx + 1] : undefined;
14
+ const setValue = setIdx >= 0 ? argv[setIdx + 1] : undefined;
15
+ const format = formatIdx >= 0 ? argv[formatIdx + 1] : "table";
16
+ if (argv.includes("--help") || argv.includes("-h")) {
17
+ console.log(`
18
+ judges review-tenant-config — Manage team configuration profiles
19
+
20
+ Usage:
21
+ judges review-tenant-config [--dir <path>] [--name <tenant>]
22
+ [--set <key=value>] [--format table|json]
23
+
24
+ Options:
25
+ --dir <path> Config directory (default: .judges-tenants/)
26
+ --name <tenant> Tenant/team name
27
+ --set <key=value> Set a config key for the named tenant
28
+ --format <fmt> Output format: table (default), json
29
+ --help, -h Show this help
30
+ `);
31
+ return;
32
+ }
33
+ // List all tenants
34
+ if (!tenantName) {
35
+ if (!existsSync(configDir)) {
36
+ console.log("No tenant configs found. Use --name <tenant> to create one.");
37
+ return;
38
+ }
39
+ const files = readdirSync(configDir);
40
+ const profiles = [];
41
+ for (const file of files) {
42
+ if (typeof file === "string" && file.endsWith(".json")) {
43
+ try {
44
+ const profile = JSON.parse(readFileSync(join(configDir, file), "utf-8"));
45
+ profiles.push(profile);
46
+ }
47
+ catch {
48
+ // skip invalid files
49
+ }
50
+ }
51
+ }
52
+ if (format === "json") {
53
+ console.log(JSON.stringify(profiles, null, 2));
54
+ return;
55
+ }
56
+ console.log(`\nTenant Configurations: ${profiles.length} profile(s)`);
57
+ console.log("═".repeat(55));
58
+ for (const p of profiles) {
59
+ console.log(` ${p.name.padEnd(20)} ${p.description}`);
60
+ console.log(` ${"".padEnd(20)} Created: ${p.createdAt}`);
61
+ }
62
+ if (profiles.length === 0) {
63
+ console.log(" No tenant profiles found.");
64
+ }
65
+ console.log("═".repeat(55));
66
+ return;
67
+ }
68
+ // Set a value
69
+ if (setValue) {
70
+ const eqPos = setValue.indexOf("=");
71
+ if (eqPos < 0) {
72
+ console.error("Error: --set requires key=value format");
73
+ process.exitCode = 1;
74
+ return;
75
+ }
76
+ const key = setValue.substring(0, eqPos);
77
+ const val = setValue.substring(eqPos + 1);
78
+ const filePath = join(configDir, `${tenantName}.json`);
79
+ let profile;
80
+ if (existsSync(filePath)) {
81
+ profile = JSON.parse(readFileSync(filePath, "utf-8"));
82
+ }
83
+ else {
84
+ profile = {
85
+ name: tenantName,
86
+ description: `Configuration for ${tenantName}`,
87
+ config: {},
88
+ createdAt: new Date().toISOString().split("T")[0],
89
+ };
90
+ }
91
+ profile.config[key] = val;
92
+ writeFileSync(filePath, JSON.stringify(profile, null, 2));
93
+ console.log(`Set ${key}=${val} for tenant "${tenantName}"`);
94
+ return;
95
+ }
96
+ // Show tenant
97
+ const filePath = join(configDir, `${tenantName}.json`);
98
+ if (!existsSync(filePath)) {
99
+ console.error(`Error: no config found for tenant "${tenantName}"`);
100
+ console.error("Use --set <key=value> to create one.");
101
+ process.exitCode = 1;
102
+ return;
103
+ }
104
+ const profile = JSON.parse(readFileSync(filePath, "utf-8"));
105
+ if (format === "json") {
106
+ console.log(JSON.stringify(profile, null, 2));
107
+ return;
108
+ }
109
+ console.log(`\nTenant: ${profile.name}`);
110
+ console.log(`Description: ${profile.description}`);
111
+ console.log(`Created: ${profile.createdAt}`);
112
+ console.log("─".repeat(40));
113
+ for (const [k, v] of Object.entries(profile.config)) {
114
+ console.log(` ${k}: ${String(v)}`);
115
+ }
116
+ }
117
+ //# sourceMappingURL=review-tenant-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-tenant-config.js","sourceRoot":"","sources":["../../src/commands/review-tenant-config.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.93.0",
3
+ "version": "3.94.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.93.0",
10
+ "version": "3.94.0",
11
11
  "packages": [
12
12
  {
13
13
  "registryType": "npm",
14
14
  "identifier": "@kevinrabun/judges",
15
- "version": "3.93.0",
15
+ "version": "3.94.0",
16
16
  "transport": {
17
17
  "type": "stdio"
18
18
  }