@kevinrabun/judges 3.93.0 → 3.95.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 (78) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +126 -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-correlation-map.d.ts +5 -0
  10. package/dist/commands/finding-correlation-map.d.ts.map +1 -0
  11. package/dist/commands/finding-correlation-map.js +102 -0
  12. package/dist/commands/finding-correlation-map.js.map +1 -0
  13. package/dist/commands/finding-dedup-cross.d.ts +5 -0
  14. package/dist/commands/finding-dedup-cross.d.ts.map +1 -0
  15. package/dist/commands/finding-dedup-cross.js +91 -0
  16. package/dist/commands/finding-dedup-cross.js.map +1 -0
  17. package/dist/commands/finding-explain.d.ts +5 -0
  18. package/dist/commands/finding-explain.d.ts.map +1 -0
  19. package/dist/commands/finding-explain.js +94 -0
  20. package/dist/commands/finding-explain.js.map +1 -0
  21. package/dist/commands/finding-filter-view.d.ts +5 -0
  22. package/dist/commands/finding-filter-view.d.ts.map +1 -0
  23. package/dist/commands/finding-filter-view.js +108 -0
  24. package/dist/commands/finding-filter-view.js.map +1 -0
  25. package/dist/commands/finding-groupby-file.d.ts +5 -0
  26. package/dist/commands/finding-groupby-file.d.ts.map +1 -0
  27. package/dist/commands/finding-groupby-file.js +95 -0
  28. package/dist/commands/finding-groupby-file.js.map +1 -0
  29. package/dist/commands/finding-resolution-track.d.ts +5 -0
  30. package/dist/commands/finding-resolution-track.d.ts.map +1 -0
  31. package/dist/commands/finding-resolution-track.js +151 -0
  32. package/dist/commands/finding-resolution-track.js.map +1 -0
  33. package/dist/commands/review-api-export.d.ts +5 -0
  34. package/dist/commands/review-api-export.d.ts.map +1 -0
  35. package/dist/commands/review-api-export.js +99 -0
  36. package/dist/commands/review-api-export.js.map +1 -0
  37. package/dist/commands/review-ide-sync.d.ts +5 -0
  38. package/dist/commands/review-ide-sync.d.ts.map +1 -0
  39. package/dist/commands/review-ide-sync.js +92 -0
  40. package/dist/commands/review-ide-sync.js.map +1 -0
  41. package/dist/commands/review-interactive.d.ts +5 -0
  42. package/dist/commands/review-interactive.d.ts.map +1 -0
  43. package/dist/commands/review-interactive.js +86 -0
  44. package/dist/commands/review-interactive.js.map +1 -0
  45. package/dist/commands/review-merge-request.d.ts +5 -0
  46. package/dist/commands/review-merge-request.d.ts.map +1 -0
  47. package/dist/commands/review-merge-request.js +96 -0
  48. package/dist/commands/review-merge-request.js.map +1 -0
  49. package/dist/commands/review-notification-config.d.ts +5 -0
  50. package/dist/commands/review-notification-config.d.ts.map +1 -0
  51. package/dist/commands/review-notification-config.js +123 -0
  52. package/dist/commands/review-notification-config.js.map +1 -0
  53. package/dist/commands/review-onboard-checklist.d.ts +5 -0
  54. package/dist/commands/review-onboard-checklist.d.ts.map +1 -0
  55. package/dist/commands/review-onboard-checklist.js +120 -0
  56. package/dist/commands/review-onboard-checklist.js.map +1 -0
  57. package/dist/commands/review-quickstart.d.ts +5 -0
  58. package/dist/commands/review-quickstart.d.ts.map +1 -0
  59. package/dist/commands/review-quickstart.js +108 -0
  60. package/dist/commands/review-quickstart.js.map +1 -0
  61. package/dist/commands/review-scope-select.d.ts +5 -0
  62. package/dist/commands/review-scope-select.d.ts.map +1 -0
  63. package/dist/commands/review-scope-select.js +99 -0
  64. package/dist/commands/review-scope-select.js.map +1 -0
  65. package/dist/commands/review-summary-dashboard.d.ts +5 -0
  66. package/dist/commands/review-summary-dashboard.d.ts.map +1 -0
  67. package/dist/commands/review-summary-dashboard.js +97 -0
  68. package/dist/commands/review-summary-dashboard.js.map +1 -0
  69. package/dist/commands/review-template-library.d.ts +5 -0
  70. package/dist/commands/review-template-library.d.ts.map +1 -0
  71. package/dist/commands/review-template-library.js +156 -0
  72. package/dist/commands/review-template-library.js.map +1 -0
  73. package/dist/commands/review-tenant-config.d.ts +5 -0
  74. package/dist/commands/review-tenant-config.d.ts.map +1 -0
  75. package/dist/commands/review-tenant-config.js +117 -0
  76. package/dist/commands/review-tenant-config.js.map +1 -0
  77. package/package.json +1 -1
  78. package/server.json +2 -2
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Review-merge-request — Format findings for merge/pull request comments.
3
+ */
4
+ import { readFileSync, writeFileSync, existsSync } from "fs";
5
+ // ─── Formatting ─────────────────────────────────────────────────────────────
6
+ function toMarkdownComment(verdict) {
7
+ const lines = [];
8
+ lines.push(`## Judges Review Summary`);
9
+ lines.push(``);
10
+ lines.push(`**Verdict:** ${verdict.overallVerdict} | **Score:** ${verdict.overallScore} | **Findings:** ${verdict.findings.length}`);
11
+ lines.push(``);
12
+ if (verdict.criticalCount > 0 || verdict.highCount > 0) {
13
+ lines.push(`> ⚠️ ${verdict.criticalCount} critical, ${verdict.highCount} high severity finding(s)`);
14
+ lines.push(``);
15
+ }
16
+ const bySeverity = {};
17
+ for (const f of verdict.findings) {
18
+ if (bySeverity[f.severity] === undefined) {
19
+ bySeverity[f.severity] = [];
20
+ }
21
+ bySeverity[f.severity].push(f);
22
+ }
23
+ const order = ["critical", "high", "medium", "low", "info"];
24
+ for (const sev of order) {
25
+ const group = bySeverity[sev];
26
+ if (group === undefined || group.length === 0)
27
+ continue;
28
+ lines.push(`### ${sev.charAt(0).toUpperCase() + sev.slice(1)} (${group.length})`);
29
+ lines.push(``);
30
+ for (const f of group) {
31
+ const loc = f.lineNumbers !== undefined && f.lineNumbers.length > 0 ? ` (L${f.lineNumbers.join(",")})` : "";
32
+ lines.push(`- **${f.ruleId}**${loc}: ${f.title}`);
33
+ lines.push(` - ${f.recommendation}`);
34
+ }
35
+ lines.push(``);
36
+ }
37
+ lines.push(`---`);
38
+ lines.push(`*Generated by [Judges](https://github.com/KevinRabun/judges) at ${verdict.timestamp ?? new Date().toISOString()}*`);
39
+ return lines.join("\n");
40
+ }
41
+ // ─── CLI ────────────────────────────────────────────────────────────────────
42
+ export function runReviewMergeRequest(argv) {
43
+ const fileIdx = argv.indexOf("--file");
44
+ const outputIdx = argv.indexOf("--output");
45
+ const formatIdx = argv.indexOf("--format");
46
+ const filePath = fileIdx >= 0 ? argv[fileIdx + 1] : undefined;
47
+ const outputPath = outputIdx >= 0 ? argv[outputIdx + 1] : undefined;
48
+ const format = formatIdx >= 0 ? argv[formatIdx + 1] : "markdown";
49
+ if (argv.includes("--help") || argv.includes("-h")) {
50
+ console.log(`
51
+ judges review-merge-request — Format findings for MR/PR comments
52
+
53
+ Usage:
54
+ judges review-merge-request --file <review.json> [--output <file>]
55
+ [--format markdown|json]
56
+
57
+ Options:
58
+ --file <path> Review result JSON file
59
+ --output <path> Write formatted comment to file
60
+ --format <fmt> Output format: markdown (default), json
61
+ --help, -h Show this help
62
+ `);
63
+ return;
64
+ }
65
+ if (!filePath) {
66
+ console.error("Error: --file is required");
67
+ process.exitCode = 1;
68
+ return;
69
+ }
70
+ if (!existsSync(filePath)) {
71
+ console.error(`Error: file not found: ${filePath}`);
72
+ process.exitCode = 1;
73
+ return;
74
+ }
75
+ let verdict;
76
+ try {
77
+ verdict = JSON.parse(readFileSync(filePath, "utf-8"));
78
+ }
79
+ catch {
80
+ console.error(`Error: failed to parse review file: ${filePath}`);
81
+ process.exitCode = 1;
82
+ return;
83
+ }
84
+ if (format === "json") {
85
+ console.log(JSON.stringify({ comment: toMarkdownComment(verdict) }, null, 2));
86
+ return;
87
+ }
88
+ const output = toMarkdownComment(verdict);
89
+ if (outputPath) {
90
+ writeFileSync(outputPath, output);
91
+ console.log(`MR comment written to ${outputPath}`);
92
+ return;
93
+ }
94
+ console.log(output);
95
+ }
96
+ //# sourceMappingURL=review-merge-request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-merge-request.js","sourceRoot":"","sources":["../../src/commands/review-merge-request.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Review-notification-config — Configure notification preferences for review results.
3
+ */
4
+ export declare function runReviewNotificationConfig(argv: string[]): void;
5
+ //# sourceMappingURL=review-notification-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-notification-config.d.ts","sourceRoot":"","sources":["../../src/commands/review-notification-config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAoBH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA2HhE"}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Review-notification-config — Configure notification preferences for review results.
3
+ */
4
+ import { readFileSync, writeFileSync, existsSync } from "fs";
5
+ // ─── CLI ────────────────────────────────────────────────────────────────────
6
+ export function runReviewNotificationConfig(argv) {
7
+ const fileIdx = argv.indexOf("--file");
8
+ const enableIdx = argv.indexOf("--enable");
9
+ const disableIdx = argv.indexOf("--disable");
10
+ const severityIdx = argv.indexOf("--severity");
11
+ const digestIdx = argv.indexOf("--digest");
12
+ const formatIdx = argv.indexOf("--format");
13
+ const configPath = fileIdx >= 0 ? argv[fileIdx + 1] : ".judges-notifications.json";
14
+ const format = formatIdx >= 0 ? argv[formatIdx + 1] : "table";
15
+ if (argv.includes("--help") || argv.includes("-h")) {
16
+ console.log(`
17
+ judges review-notification-config — Configure notification preferences
18
+
19
+ Usage:
20
+ judges review-notification-config [--file <config>] [--enable <channel>]
21
+ [--disable <channel>] [--severity <level>]
22
+ [--digest daily|weekly] [--format table|json]
23
+
24
+ Options:
25
+ --file <path> Config file (default: .judges-notifications.json)
26
+ --enable <channel> Enable: console, file, slack, email
27
+ --disable <channel> Disable a channel
28
+ --severity <level> Set min severity for notifications
29
+ --digest <freq> Enable digest: daily, weekly
30
+ --format <fmt> Output format: table (default), json
31
+ --help, -h Show this help
32
+ `);
33
+ return;
34
+ }
35
+ // Load or init config
36
+ let config;
37
+ if (existsSync(configPath)) {
38
+ config = JSON.parse(readFileSync(configPath, "utf-8"));
39
+ }
40
+ else {
41
+ config = {
42
+ channels: [
43
+ { type: "console", enabled: true, minSeverity: "medium" },
44
+ { type: "file", enabled: false, minSeverity: "low" },
45
+ { type: "slack", enabled: false, minSeverity: "high" },
46
+ { type: "email", enabled: false, minSeverity: "critical" },
47
+ ],
48
+ digest: false,
49
+ digestFrequency: "daily",
50
+ };
51
+ }
52
+ let changed = false;
53
+ // Enable channel
54
+ if (enableIdx >= 0) {
55
+ const channel = argv[enableIdx + 1];
56
+ const ch = config.channels.find((c) => c.type === channel);
57
+ if (ch) {
58
+ ch.enabled = true;
59
+ changed = true;
60
+ console.log(`Enabled ${channel} notifications.`);
61
+ }
62
+ else {
63
+ config.channels.push({ type: channel, enabled: true, minSeverity: "medium" });
64
+ changed = true;
65
+ console.log(`Added and enabled ${channel} notifications.`);
66
+ }
67
+ }
68
+ // Disable channel
69
+ if (disableIdx >= 0) {
70
+ const channel = argv[disableIdx + 1];
71
+ const ch = config.channels.find((c) => c.type === channel);
72
+ if (ch) {
73
+ ch.enabled = false;
74
+ changed = true;
75
+ console.log(`Disabled ${channel} notifications.`);
76
+ }
77
+ else {
78
+ console.error(`Channel not found: ${channel}`);
79
+ }
80
+ }
81
+ // Set severity
82
+ if (severityIdx >= 0) {
83
+ const sev = argv[severityIdx + 1];
84
+ for (const ch of config.channels) {
85
+ if (ch.enabled) {
86
+ ch.minSeverity = sev;
87
+ }
88
+ }
89
+ changed = true;
90
+ console.log(`Set min severity to ${sev} for enabled channels.`);
91
+ }
92
+ // Digest
93
+ if (digestIdx >= 0) {
94
+ const freq = argv[digestIdx + 1];
95
+ config.digest = true;
96
+ config.digestFrequency = freq;
97
+ changed = true;
98
+ console.log(`Enabled ${freq} digest.`);
99
+ }
100
+ if (changed) {
101
+ writeFileSync(configPath, JSON.stringify(config, null, 2));
102
+ console.log(`Config saved to ${configPath}`);
103
+ return;
104
+ }
105
+ // Display current config
106
+ if (format === "json") {
107
+ console.log(JSON.stringify(config, null, 2));
108
+ return;
109
+ }
110
+ console.log(`\nNotification Configuration`);
111
+ console.log("═".repeat(55));
112
+ console.log(` Digest: ${config.digest ? `enabled (${config.digestFrequency})` : "disabled"}`);
113
+ console.log(`\n Channels:`);
114
+ for (const ch of config.channels) {
115
+ const status = ch.enabled ? "ON " : "OFF";
116
+ console.log(` [${status}] ${ch.type.padEnd(10)} min: ${ch.minSeverity}`);
117
+ }
118
+ if (config.quietHours) {
119
+ console.log(`\n Quiet Hours: ${config.quietHours.start} – ${config.quietHours.end}`);
120
+ }
121
+ console.log("═".repeat(55));
122
+ }
123
+ //# sourceMappingURL=review-notification-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-notification-config.js","sourceRoot":"","sources":["../../src/commands/review-notification-config.ts"],"names":[],"mappings":"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"}
@@ -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-scope-select — Select review scope by path patterns and exclusions.
3
+ */
4
+ export declare function runReviewScopeSelect(argv: string[]): void;
5
+ //# sourceMappingURL=review-scope-select.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-scope-select.d.ts","sourceRoot":"","sources":["../../src/commands/review-scope-select.ts"],"names":[],"mappings":"AAAA;;GAEG;AAoCH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA4EzD"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Review-scope-select — Select review scope by path patterns and exclusions.
3
+ */
4
+ import { existsSync, readdirSync, statSync } from "fs";
5
+ import { join, relative } from "path";
6
+ // ─── Helpers ────────────────────────────────────────────────────────────────
7
+ function collectFiles(dir, extensions) {
8
+ const results = [];
9
+ function walk(d) {
10
+ const entries = readdirSync(d);
11
+ for (const entry of entries) {
12
+ if (typeof entry !== "string")
13
+ continue;
14
+ const full = join(d, entry);
15
+ try {
16
+ const stat = statSync(full);
17
+ if (stat.isDirectory()) {
18
+ if (entry !== "node_modules" && entry !== ".git" && entry !== "dist") {
19
+ walk(full);
20
+ }
21
+ }
22
+ else if (extensions.some((ext) => entry.endsWith(ext))) {
23
+ results.push(full);
24
+ }
25
+ }
26
+ catch {
27
+ // skip inaccessible
28
+ }
29
+ }
30
+ }
31
+ walk(dir);
32
+ return results;
33
+ }
34
+ // ─── CLI ────────────────────────────────────────────────────────────────────
35
+ export function runReviewScopeSelect(argv) {
36
+ const dirIdx = argv.indexOf("--dir");
37
+ const extIdx = argv.indexOf("--ext");
38
+ const excludeIdx = argv.indexOf("--exclude");
39
+ const formatIdx = argv.indexOf("--format");
40
+ const limitIdx = argv.indexOf("--limit");
41
+ const projectDir = dirIdx >= 0 ? argv[dirIdx + 1] : process.cwd();
42
+ const format = formatIdx >= 0 ? argv[formatIdx + 1] : "table";
43
+ if (argv.includes("--help") || argv.includes("-h")) {
44
+ console.log(`
45
+ judges review-scope-select — Select review scope by path/extension
46
+
47
+ Usage:
48
+ judges review-scope-select [--dir <path>] [--ext .ts,.js,...]
49
+ [--exclude <pattern>] [--limit <n>]
50
+ [--format table|json]
51
+
52
+ Options:
53
+ --dir <path> Project directory (default: cwd)
54
+ --ext <extensions> Comma-separated file extensions (default: .ts,.js,.py,.java,.go)
55
+ --exclude <pattern> Exclude paths containing pattern
56
+ --limit <n> Maximum files to list
57
+ --format <fmt> Output format: table (default), json
58
+ --help, -h Show this help
59
+ `);
60
+ return;
61
+ }
62
+ if (!existsSync(projectDir)) {
63
+ console.error(`Error: directory not found: ${projectDir}`);
64
+ process.exitCode = 1;
65
+ return;
66
+ }
67
+ const extensions = extIdx >= 0 ? argv[extIdx + 1].split(",") : [".ts", ".js", ".py", ".java", ".go"];
68
+ const excludePattern = excludeIdx >= 0 ? argv[excludeIdx + 1] : undefined;
69
+ const limit = limitIdx >= 0 ? parseInt(argv[limitIdx + 1], 10) : undefined;
70
+ let files = collectFiles(projectDir, extensions);
71
+ if (excludePattern) {
72
+ files = files.filter((f) => !f.includes(excludePattern));
73
+ }
74
+ if (limit !== undefined && limit > 0) {
75
+ files = files.slice(0, limit);
76
+ }
77
+ const relativePaths = files.map((f) => relative(projectDir, f));
78
+ if (format === "json") {
79
+ console.log(JSON.stringify({ count: relativePaths.length, files: relativePaths }, null, 2));
80
+ return;
81
+ }
82
+ console.log(`\nReview Scope: ${relativePaths.length} file(s)`);
83
+ console.log("═".repeat(55));
84
+ const byExt = {};
85
+ for (const f of relativePaths) {
86
+ const ext = f.substring(f.lastIndexOf("."));
87
+ byExt[ext] = (byExt[ext] ?? 0) + 1;
88
+ }
89
+ console.log(" Extensions:");
90
+ for (const [ext, count] of Object.entries(byExt)) {
91
+ console.log(` ${ext.padEnd(8)} ${count} file(s)`);
92
+ }
93
+ console.log("\n Files:");
94
+ for (const f of relativePaths) {
95
+ console.log(` ${f}`);
96
+ }
97
+ console.log("═".repeat(55));
98
+ }
99
+ //# sourceMappingURL=review-scope-select.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-scope-select.js","sourceRoot":"","sources":["../../src/commands/review-scope-select.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Review-summary-dashboard — Aggregate review dashboard with key metrics.
3
+ */
4
+ export declare function runReviewSummaryDashboard(argv: string[]): void;
5
+ //# sourceMappingURL=review-summary-dashboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-summary-dashboard.d.ts","sourceRoot":"","sources":["../../src/commands/review-summary-dashboard.ts"],"names":[],"mappings":"AAAA;;GAEG;AAmBH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAsG9D"}