@kevinrabun/judges 3.68.0 → 3.70.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 +19 -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/finding-fix-rate.d.ts +5 -0
  6. package/dist/commands/finding-fix-rate.d.ts.map +1 -0
  7. package/dist/commands/finding-fix-rate.js +142 -0
  8. package/dist/commands/finding-fix-rate.js.map +1 -0
  9. package/dist/commands/finding-impact.d.ts +5 -0
  10. package/dist/commands/finding-impact.d.ts.map +1 -0
  11. package/dist/commands/finding-impact.js +136 -0
  12. package/dist/commands/finding-impact.js.map +1 -0
  13. package/dist/commands/finding-recurrence.d.ts +5 -0
  14. package/dist/commands/finding-recurrence.d.ts.map +1 -0
  15. package/dist/commands/finding-recurrence.js +136 -0
  16. package/dist/commands/finding-recurrence.js.map +1 -0
  17. package/dist/commands/review-archive.d.ts +5 -0
  18. package/dist/commands/review-archive.d.ts.map +1 -0
  19. package/dist/commands/review-archive.js +136 -0
  20. package/dist/commands/review-archive.js.map +1 -0
  21. package/dist/commands/review-benchmark-self.d.ts +5 -0
  22. package/dist/commands/review-benchmark-self.d.ts.map +1 -0
  23. package/dist/commands/review-benchmark-self.js +141 -0
  24. package/dist/commands/review-benchmark-self.js.map +1 -0
  25. package/dist/commands/review-changelog-gen.d.ts +5 -0
  26. package/dist/commands/review-changelog-gen.d.ts.map +1 -0
  27. package/dist/commands/review-changelog-gen.js +118 -0
  28. package/dist/commands/review-changelog-gen.js.map +1 -0
  29. package/dist/commands/review-ci-status.d.ts +5 -0
  30. package/dist/commands/review-ci-status.d.ts.map +1 -0
  31. package/dist/commands/review-ci-status.js +201 -0
  32. package/dist/commands/review-ci-status.js.map +1 -0
  33. package/dist/commands/review-custom-prompt.d.ts +5 -0
  34. package/dist/commands/review-custom-prompt.d.ts.map +1 -0
  35. package/dist/commands/review-custom-prompt.js +171 -0
  36. package/dist/commands/review-custom-prompt.js.map +1 -0
  37. package/dist/commands/review-diff-context.d.ts +5 -0
  38. package/dist/commands/review-diff-context.d.ts.map +1 -0
  39. package/dist/commands/review-diff-context.js +159 -0
  40. package/dist/commands/review-diff-context.js.map +1 -0
  41. package/dist/commands/review-milestone.d.ts +5 -0
  42. package/dist/commands/review-milestone.d.ts.map +1 -0
  43. package/dist/commands/review-milestone.js +137 -0
  44. package/dist/commands/review-milestone.js.map +1 -0
  45. package/dist/commands/review-report-pdf.d.ts +5 -0
  46. package/dist/commands/review-report-pdf.d.ts.map +1 -0
  47. package/dist/commands/review-report-pdf.js +164 -0
  48. package/dist/commands/review-report-pdf.js.map +1 -0
  49. package/dist/commands/review-risk-score.d.ts +5 -0
  50. package/dist/commands/review-risk-score.d.ts.map +1 -0
  51. package/dist/commands/review-risk-score.js +157 -0
  52. package/dist/commands/review-risk-score.js.map +1 -0
  53. package/dist/commands/review-standup.d.ts +5 -0
  54. package/dist/commands/review-standup.d.ts.map +1 -0
  55. package/dist/commands/review-standup.js +96 -0
  56. package/dist/commands/review-standup.js.map +1 -0
  57. package/dist/commands/review-tag.d.ts +5 -0
  58. package/dist/commands/review-tag.d.ts.map +1 -0
  59. package/dist/commands/review-tag.js +137 -0
  60. package/dist/commands/review-tag.js.map +1 -0
  61. package/dist/commands/review-team-summary.d.ts +5 -0
  62. package/dist/commands/review-team-summary.d.ts.map +1 -0
  63. package/dist/commands/review-team-summary.js +156 -0
  64. package/dist/commands/review-team-summary.js.map +1 -0
  65. package/dist/commands/review-whitelist.d.ts +5 -0
  66. package/dist/commands/review-whitelist.d.ts.map +1 -0
  67. package/dist/commands/review-whitelist.js +159 -0
  68. package/dist/commands/review-whitelist.js.map +1 -0
  69. package/package.json +1 -1
  70. package/server.json +2 -2
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Review-benchmark-self — Benchmark your review metrics against your own history.
3
+ */
4
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
5
+ import { join, dirname } from "path";
6
+ // ─── Storage ────────────────────────────────────────────────────────────────
7
+ const BENCHMARK_FILE = join(".judges", "self-benchmark.json");
8
+ function loadStore() {
9
+ if (!existsSync(BENCHMARK_FILE))
10
+ return { version: "1.0.0", snapshots: [] };
11
+ try {
12
+ return JSON.parse(readFileSync(BENCHMARK_FILE, "utf-8"));
13
+ }
14
+ catch {
15
+ return { version: "1.0.0", snapshots: [] };
16
+ }
17
+ }
18
+ function saveStore(store) {
19
+ mkdirSync(dirname(BENCHMARK_FILE), { recursive: true });
20
+ writeFileSync(BENCHMARK_FILE, JSON.stringify(store, null, 2), "utf-8");
21
+ }
22
+ // ─── CLI ────────────────────────────────────────────────────────────────────
23
+ export function runReviewBenchmarkSelf(argv) {
24
+ if (argv.includes("--help") || argv.includes("-h")) {
25
+ console.log(`
26
+ judges review-benchmark-self — Benchmark against your own history
27
+
28
+ Usage:
29
+ judges review-benchmark-self show Show benchmarks
30
+ judges review-benchmark-self snapshot Take a snapshot
31
+ judges review-benchmark-self snapshot --score 8.5 --findings 3 --reviews 10
32
+ judges review-benchmark-self compare Compare latest vs baseline
33
+ judges review-benchmark-self clear Clear all data
34
+
35
+ Subcommands:
36
+ show Show all snapshots
37
+ snapshot Take a new snapshot
38
+ compare Compare latest to first (baseline)
39
+ clear Clear all data
40
+
41
+ Options:
42
+ --score <n> Average score
43
+ --findings <n> Total findings
44
+ --reviews <n> Number of reviews
45
+ --criticals <n> Critical finding count
46
+ --pass-rate <n> Pass rate percentage
47
+ --format json JSON output
48
+ --help, -h Show this help
49
+
50
+ Track your improvement over time. Data in .judges/self-benchmark.json.
51
+ `);
52
+ return;
53
+ }
54
+ const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
55
+ const subcommand = argv.find((a) => ["show", "snapshot", "compare", "clear"].includes(a)) || "show";
56
+ const store = loadStore();
57
+ if (subcommand === "snapshot") {
58
+ const avgScore = parseFloat(argv.find((_a, i) => argv[i - 1] === "--score") || "0");
59
+ const totalFindings = parseInt(argv.find((_a, i) => argv[i - 1] === "--findings") || "0", 10);
60
+ const criticalCount = parseInt(argv.find((_a, i) => argv[i - 1] === "--criticals") || "0", 10);
61
+ const reviewCount = parseInt(argv.find((_a, i) => argv[i - 1] === "--reviews") || "0", 10);
62
+ const passRate = parseFloat(argv.find((_a, i) => argv[i - 1] === "--pass-rate") || "0");
63
+ store.snapshots.push({
64
+ date: new Date().toISOString().slice(0, 10),
65
+ avgScore,
66
+ totalFindings,
67
+ criticalCount,
68
+ reviewCount,
69
+ passRate,
70
+ });
71
+ saveStore(store);
72
+ console.log(`Snapshot recorded for ${new Date().toISOString().slice(0, 10)}.`);
73
+ return;
74
+ }
75
+ if (subcommand === "clear") {
76
+ saveStore({ version: "1.0.0", snapshots: [] });
77
+ console.log("Benchmark data cleared.");
78
+ return;
79
+ }
80
+ if (subcommand === "compare") {
81
+ if (store.snapshots.length < 2) {
82
+ console.log("Need at least 2 snapshots to compare. Take more snapshots first.");
83
+ return;
84
+ }
85
+ const baseline = store.snapshots[0];
86
+ const latest = store.snapshots[store.snapshots.length - 1];
87
+ if (format === "json") {
88
+ console.log(JSON.stringify({
89
+ baseline,
90
+ latest,
91
+ improvements: {
92
+ scoreDelta: latest.avgScore - baseline.avgScore,
93
+ findingDelta: latest.totalFindings - baseline.totalFindings,
94
+ passRateDelta: latest.passRate - baseline.passRate,
95
+ },
96
+ }, null, 2));
97
+ return;
98
+ }
99
+ console.log("\nSelf-Benchmark Comparison:");
100
+ console.log("─".repeat(55));
101
+ console.log(" Baseline Latest Delta");
102
+ console.log("─".repeat(55));
103
+ console.log(` Date: ${baseline.date.padEnd(17)}${latest.date}`);
104
+ const scoreDelta = latest.avgScore - baseline.avgScore;
105
+ const scoreSign = scoreDelta >= 0 ? "+" : "";
106
+ console.log(` Avg Score: ${baseline.avgScore.toFixed(1).padEnd(17)}${latest.avgScore.toFixed(1).padEnd(15)}${scoreSign}${scoreDelta.toFixed(1)}`);
107
+ const findingDelta = latest.totalFindings - baseline.totalFindings;
108
+ const findingSign = findingDelta <= 0 ? "" : "+";
109
+ console.log(` Findings: ${String(baseline.totalFindings).padEnd(17)}${String(latest.totalFindings).padEnd(15)}${findingSign}${findingDelta}`);
110
+ const passRateDelta = latest.passRate - baseline.passRate;
111
+ const passSign = passRateDelta >= 0 ? "+" : "";
112
+ console.log(` Pass Rate: ${(baseline.passRate.toFixed(1) + "%").padEnd(17)}${(latest.passRate.toFixed(1) + "%").padEnd(15)}${passSign}${passRateDelta.toFixed(1)}%`);
113
+ console.log("─".repeat(55));
114
+ if (scoreDelta > 0)
115
+ console.log(" Trend: Improving!");
116
+ else if (scoreDelta < 0)
117
+ console.log(" Trend: Declining — consider reviewing recent changes.");
118
+ else
119
+ console.log(" Trend: Stable");
120
+ console.log();
121
+ return;
122
+ }
123
+ // show
124
+ if (format === "json") {
125
+ console.log(JSON.stringify(store.snapshots, null, 2));
126
+ return;
127
+ }
128
+ if (store.snapshots.length === 0) {
129
+ console.log("No benchmarks recorded. Use 'judges review-benchmark-self snapshot' to start.");
130
+ return;
131
+ }
132
+ console.log("\nSelf-Benchmark History:");
133
+ console.log("─".repeat(65));
134
+ console.log(" Date Score Findings Criticals Reviews Pass Rate");
135
+ console.log("─".repeat(65));
136
+ for (const s of store.snapshots) {
137
+ console.log(` ${s.date} ${s.avgScore.toFixed(1).padEnd(8)}${String(s.totalFindings).padEnd(10)}${String(s.criticalCount).padEnd(11)}${String(s.reviewCount).padEnd(9)}${s.passRate.toFixed(1)}%`);
138
+ }
139
+ console.log("─".repeat(65));
140
+ }
141
+ //# sourceMappingURL=review-benchmark-self.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-benchmark-self.js","sourceRoot":"","sources":["../../src/commands/review-benchmark-self.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Review-changelog-gen — Auto-generate changelog entries from review findings and fixes.
3
+ */
4
+ export declare function runReviewChangelogGen(argv: string[]): void;
5
+ //# sourceMappingURL=review-changelog-gen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-changelog-gen.d.ts","sourceRoot":"","sources":["../../src/commands/review-changelog-gen.ts"],"names":[],"mappings":"AAAA;;GAEG;AAgFH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAgE1D"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Review-changelog-gen — Auto-generate changelog entries from review findings and fixes.
3
+ */
4
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
5
+ import { dirname } from "path";
6
+ // ─── Generation ─────────────────────────────────────────────────────────────
7
+ function generateEntries(verdict) {
8
+ const entries = [];
9
+ const date = new Date().toISOString().slice(0, 10);
10
+ const ruleGroups = new Map();
11
+ for (const f of verdict.findings || []) {
12
+ const prefix = (f.ruleId || "UNKNOWN").split("-")[0];
13
+ const group = ruleGroups.get(prefix) || { rules: [], severity: String(f.severity || "medium"), count: 0 };
14
+ if (f.ruleId && !group.rules.includes(f.ruleId))
15
+ group.rules.push(f.ruleId);
16
+ group.count++;
17
+ ruleGroups.set(prefix, group);
18
+ }
19
+ for (const [prefix, group] of ruleGroups) {
20
+ const type = group.severity === "critical" || group.severity === "high" ? "security" : "improvement";
21
+ entries.push({
22
+ date,
23
+ type,
24
+ description: `Address ${group.count} ${prefix} finding(s) (${group.severity} severity)`,
25
+ ruleIds: group.rules,
26
+ });
27
+ }
28
+ return entries;
29
+ }
30
+ function formatMarkdown(entries, version) {
31
+ const lines = [];
32
+ lines.push(`## [${version}] — ${entries[0]?.date || new Date().toISOString().slice(0, 10)}`);
33
+ lines.push("");
34
+ const security = entries.filter((e) => e.type === "security");
35
+ const fixes = entries.filter((e) => e.type === "fix");
36
+ const improvements = entries.filter((e) => e.type === "improvement");
37
+ if (security.length > 0) {
38
+ lines.push("### Security");
39
+ for (const e of security) {
40
+ lines.push(`- ${e.description} (${e.ruleIds.join(", ")})`);
41
+ }
42
+ lines.push("");
43
+ }
44
+ if (fixes.length > 0) {
45
+ lines.push("### Fixed");
46
+ for (const e of fixes) {
47
+ lines.push(`- ${e.description} (${e.ruleIds.join(", ")})`);
48
+ }
49
+ lines.push("");
50
+ }
51
+ if (improvements.length > 0) {
52
+ lines.push("### Improved");
53
+ for (const e of improvements) {
54
+ lines.push(`- ${e.description} (${e.ruleIds.join(", ")})`);
55
+ }
56
+ lines.push("");
57
+ }
58
+ return lines.join("\n");
59
+ }
60
+ // ─── CLI ────────────────────────────────────────────────────────────────────
61
+ export function runReviewChangelogGen(argv) {
62
+ if (argv.includes("--help") || argv.includes("-h")) {
63
+ console.log(`
64
+ judges review-changelog-gen — Generate changelog entries from review findings
65
+
66
+ Usage:
67
+ judges review-changelog-gen --file verdict.json Generate from verdict
68
+ judges review-changelog-gen --file v.json --version 1.2.0 With version
69
+ judges review-changelog-gen --file v.json --output CHANGES.md Save to file
70
+
71
+ Options:
72
+ --file <path> Verdict JSON file
73
+ --version <ver> Version string (default: "Unreleased")
74
+ --output <path> Save output to file
75
+ --format json JSON output
76
+ --help, -h Show this help
77
+
78
+ Auto-generates changelog entries from review findings for documentation.
79
+ `);
80
+ return;
81
+ }
82
+ const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
83
+ const file = argv.find((_a, i) => argv[i - 1] === "--file");
84
+ const version = argv.find((_a, i) => argv[i - 1] === "--version") || "Unreleased";
85
+ const output = argv.find((_a, i) => argv[i - 1] === "--output");
86
+ if (!file || !existsSync(file)) {
87
+ console.error("Error: --file with valid verdict JSON is required.");
88
+ process.exitCode = 1;
89
+ return;
90
+ }
91
+ let verdict;
92
+ try {
93
+ verdict = JSON.parse(readFileSync(file, "utf-8"));
94
+ }
95
+ catch {
96
+ console.error("Error: Failed to parse verdict file.");
97
+ process.exitCode = 1;
98
+ return;
99
+ }
100
+ const entries = generateEntries(verdict);
101
+ if (entries.length === 0) {
102
+ console.log("No findings to generate changelog entries from.");
103
+ return;
104
+ }
105
+ if (format === "json") {
106
+ console.log(JSON.stringify(entries, null, 2));
107
+ return;
108
+ }
109
+ const md = formatMarkdown(entries, version);
110
+ if (output) {
111
+ mkdirSync(dirname(output), { recursive: true });
112
+ writeFileSync(output, md, "utf-8");
113
+ console.log(`Changelog entries saved to ${output}`);
114
+ return;
115
+ }
116
+ console.log(md);
117
+ }
118
+ //# sourceMappingURL=review-changelog-gen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-changelog-gen.js","sourceRoot":"","sources":["../../src/commands/review-changelog-gen.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Review-ci-status — Check CI pipeline review status.
3
+ */
4
+ export declare function runReviewCiStatus(argv: string[]): void;
5
+ //# sourceMappingURL=review-ci-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-ci-status.d.ts","sourceRoot":"","sources":["../../src/commands/review-ci-status.ts"],"names":[],"mappings":"AAAA;;GAEG;AA6JH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA0EtD"}
@@ -0,0 +1,201 @@
1
+ /**
2
+ * Review-ci-status — Check CI pipeline review status.
3
+ */
4
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
5
+ import { join, dirname } from "path";
6
+ import { execSync } from "child_process";
7
+ // ─── Storage ────────────────────────────────────────────────────────────────
8
+ const STATUS_FILE = join(".judges", "ci-status.json");
9
+ function saveReport(report) {
10
+ mkdirSync(dirname(STATUS_FILE), { recursive: true });
11
+ writeFileSync(STATUS_FILE, JSON.stringify(report, null, 2), "utf-8");
12
+ }
13
+ // ─── Git Helpers ────────────────────────────────────────────────────────────
14
+ function getGitInfo() {
15
+ try {
16
+ const branch = execSync("git rev-parse --abbrev-ref HEAD", { encoding: "utf-8" }).trim();
17
+ const commit = execSync("git rev-parse --short HEAD", { encoding: "utf-8" }).trim();
18
+ return { branch, commit };
19
+ }
20
+ catch {
21
+ return { branch: "unknown", commit: "unknown" };
22
+ }
23
+ }
24
+ function checkUncommittedChanges() {
25
+ try {
26
+ const status = execSync("git status --porcelain", { encoding: "utf-8" }).trim();
27
+ return {
28
+ name: "Uncommitted Changes",
29
+ status: status.length === 0 ? "pass" : "fail",
30
+ detail: status.length === 0 ? "Working tree clean" : `${status.split("\n").length} uncommitted change(s)`,
31
+ timestamp: new Date().toISOString(),
32
+ };
33
+ }
34
+ catch {
35
+ return {
36
+ name: "Uncommitted Changes",
37
+ status: "unknown",
38
+ detail: "Could not check",
39
+ timestamp: new Date().toISOString(),
40
+ };
41
+ }
42
+ }
43
+ function checkPackageJson() {
44
+ if (!existsSync("package.json")) {
45
+ return {
46
+ name: "package.json",
47
+ status: "unknown",
48
+ detail: "No package.json found",
49
+ timestamp: new Date().toISOString(),
50
+ };
51
+ }
52
+ try {
53
+ const pkg = JSON.parse(readFileSync("package.json", "utf-8"));
54
+ const hasTest = pkg.scripts?.test !== undefined;
55
+ const hasBuild = pkg.scripts?.build !== undefined;
56
+ const hasLint = pkg.scripts?.lint !== undefined;
57
+ const detail = [
58
+ hasTest ? "test ✓" : "test ✗",
59
+ hasBuild ? "build ✓" : "build ✗",
60
+ hasLint ? "lint ✓" : "lint ✗",
61
+ ].join(", ");
62
+ return { name: "CI Scripts", status: hasTest ? "pass" : "fail", detail, timestamp: new Date().toISOString() };
63
+ }
64
+ catch {
65
+ return {
66
+ name: "CI Scripts",
67
+ status: "unknown",
68
+ detail: "Could not parse package.json",
69
+ timestamp: new Date().toISOString(),
70
+ };
71
+ }
72
+ }
73
+ function checkJudgesConfig() {
74
+ const configPaths = [".judgesrc", ".judgesrc.json", "judgesrc.json"];
75
+ const found = configPaths.find(existsSync);
76
+ if (found) {
77
+ return { name: "Judges Config", status: "pass", detail: `Found ${found}`, timestamp: new Date().toISOString() };
78
+ }
79
+ return {
80
+ name: "Judges Config",
81
+ status: "pending",
82
+ detail: "No .judgesrc found (optional)",
83
+ timestamp: new Date().toISOString(),
84
+ };
85
+ }
86
+ function checkGitHooks() {
87
+ const huskyDir = join(".husky");
88
+ if (existsSync(huskyDir)) {
89
+ return { name: "Git Hooks", status: "pass", detail: "Husky hooks configured", timestamp: new Date().toISOString() };
90
+ }
91
+ const gitHooksDir = join(".git", "hooks");
92
+ if (existsSync(gitHooksDir)) {
93
+ return {
94
+ name: "Git Hooks",
95
+ status: "pass",
96
+ detail: "Git hooks directory exists",
97
+ timestamp: new Date().toISOString(),
98
+ };
99
+ }
100
+ return {
101
+ name: "Git Hooks",
102
+ status: "pending",
103
+ detail: "No git hooks configured",
104
+ timestamp: new Date().toISOString(),
105
+ };
106
+ }
107
+ function checkCIConfig() {
108
+ const ciFiles = [
109
+ ".github/workflows",
110
+ ".gitlab-ci.yml",
111
+ "Jenkinsfile",
112
+ ".circleci/config.yml",
113
+ "azure-pipelines.yml",
114
+ ".travis.yml",
115
+ ];
116
+ const found = ciFiles.filter(existsSync);
117
+ if (found.length > 0) {
118
+ return {
119
+ name: "CI Configuration",
120
+ status: "pass",
121
+ detail: `Found: ${found.join(", ")}`,
122
+ timestamp: new Date().toISOString(),
123
+ };
124
+ }
125
+ return {
126
+ name: "CI Configuration",
127
+ status: "fail",
128
+ detail: "No CI configuration found",
129
+ timestamp: new Date().toISOString(),
130
+ };
131
+ }
132
+ // ─── CLI ────────────────────────────────────────────────────────────────────
133
+ export function runReviewCiStatus(argv) {
134
+ if (argv.includes("--help") || argv.includes("-h")) {
135
+ console.log(`
136
+ judges review-ci-status — Check CI pipeline review status
137
+
138
+ Usage:
139
+ judges review-ci-status
140
+ judges review-ci-status --format json
141
+
142
+ Options:
143
+ --format json JSON output
144
+ --help, -h Show this help
145
+
146
+ Checks:
147
+ • Uncommitted changes
148
+ • CI scripts (test, build, lint)
149
+ • Judges configuration
150
+ • Git hooks
151
+ • CI configuration files
152
+
153
+ Report saved to .judges/ci-status.json.
154
+ `);
155
+ return;
156
+ }
157
+ const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
158
+ const { branch, commit } = getGitInfo();
159
+ const checks = [
160
+ checkUncommittedChanges(),
161
+ checkPackageJson(),
162
+ checkJudgesConfig(),
163
+ checkGitHooks(),
164
+ checkCIConfig(),
165
+ ];
166
+ const hasFail = checks.some((c) => c.status === "fail");
167
+ const hasPending = checks.some((c) => c.status === "pending");
168
+ const overall = hasFail ? "fail" : hasPending ? "pending" : "pass";
169
+ const report = {
170
+ branch,
171
+ commit,
172
+ timestamp: new Date().toISOString(),
173
+ checks,
174
+ overall,
175
+ };
176
+ saveReport(report);
177
+ if (format === "json") {
178
+ console.log(JSON.stringify(report, null, 2));
179
+ return;
180
+ }
181
+ const statusIcon = (s) => {
182
+ if (s === "pass")
183
+ return "✓";
184
+ if (s === "fail")
185
+ return "✗";
186
+ if (s === "pending")
187
+ return "○";
188
+ return "?";
189
+ };
190
+ console.log("\nCI Status Report:");
191
+ console.log("═".repeat(60));
192
+ console.log(` Branch: ${branch} Commit: ${commit}`);
193
+ console.log(` Overall: ${overall.toUpperCase()} ${statusIcon(overall)}`);
194
+ console.log("═".repeat(60));
195
+ for (const c of checks) {
196
+ console.log(` ${statusIcon(c.status)} ${c.name.padEnd(25)} ${c.detail}`);
197
+ }
198
+ console.log("═".repeat(60));
199
+ console.log(` Report saved to ${STATUS_FILE}`);
200
+ }
201
+ //# sourceMappingURL=review-ci-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-ci-status.js","sourceRoot":"","sources":["../../src/commands/review-ci-status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Review-custom-prompt — Customize review prompts for project-specific needs.
3
+ */
4
+ export declare function runReviewCustomPrompt(argv: string[]): void;
5
+ //# sourceMappingURL=review-custom-prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-custom-prompt.d.ts","sourceRoot":"","sources":["../../src/commands/review-custom-prompt.ts"],"names":[],"mappings":"AAAA;;GAEG;AAwDH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAqJ1D"}