@kevinrabun/judges 3.65.0 → 3.67.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +112 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/config-lint.d.ts +5 -0
  6. package/dist/commands/config-lint.d.ts.map +1 -0
  7. package/dist/commands/config-lint.js +188 -0
  8. package/dist/commands/config-lint.js.map +1 -0
  9. package/dist/commands/finding-age.d.ts +5 -0
  10. package/dist/commands/finding-age.d.ts.map +1 -0
  11. package/dist/commands/finding-age.js +146 -0
  12. package/dist/commands/finding-age.js.map +1 -0
  13. package/dist/commands/finding-rank.d.ts +5 -0
  14. package/dist/commands/finding-rank.d.ts.map +1 -0
  15. package/dist/commands/finding-rank.js +139 -0
  16. package/dist/commands/finding-rank.js.map +1 -0
  17. package/dist/commands/finding-timeline.d.ts +5 -0
  18. package/dist/commands/finding-timeline.d.ts.map +1 -0
  19. package/dist/commands/finding-timeline.js +144 -0
  20. package/dist/commands/finding-timeline.js.map +1 -0
  21. package/dist/commands/fix-verify.d.ts +5 -0
  22. package/dist/commands/fix-verify.d.ts.map +1 -0
  23. package/dist/commands/fix-verify.js +124 -0
  24. package/dist/commands/fix-verify.js.map +1 -0
  25. package/dist/commands/review-comment.d.ts +5 -0
  26. package/dist/commands/review-comment.d.ts.map +1 -0
  27. package/dist/commands/review-comment.js +166 -0
  28. package/dist/commands/review-comment.js.map +1 -0
  29. package/dist/commands/review-dashboard.d.ts +5 -0
  30. package/dist/commands/review-dashboard.d.ts.map +1 -0
  31. package/dist/commands/review-dashboard.js +141 -0
  32. package/dist/commands/review-dashboard.js.map +1 -0
  33. package/dist/commands/review-diff-summary.d.ts +5 -0
  34. package/dist/commands/review-diff-summary.d.ts.map +1 -0
  35. package/dist/commands/review-diff-summary.js +155 -0
  36. package/dist/commands/review-diff-summary.js.map +1 -0
  37. package/dist/commands/review-export.d.ts +5 -0
  38. package/dist/commands/review-export.d.ts.map +1 -0
  39. package/dist/commands/review-export.js +180 -0
  40. package/dist/commands/review-export.js.map +1 -0
  41. package/dist/commands/review-notify.d.ts +5 -0
  42. package/dist/commands/review-notify.d.ts.map +1 -0
  43. package/dist/commands/review-notify.js +144 -0
  44. package/dist/commands/review-notify.js.map +1 -0
  45. package/dist/commands/review-offline.d.ts +5 -0
  46. package/dist/commands/review-offline.d.ts.map +1 -0
  47. package/dist/commands/review-offline.js +126 -0
  48. package/dist/commands/review-offline.js.map +1 -0
  49. package/dist/commands/review-quota.d.ts +5 -0
  50. package/dist/commands/review-quota.d.ts.map +1 -0
  51. package/dist/commands/review-quota.js +127 -0
  52. package/dist/commands/review-quota.js.map +1 -0
  53. package/dist/commands/review-schedule.d.ts +5 -0
  54. package/dist/commands/review-schedule.d.ts.map +1 -0
  55. package/dist/commands/review-schedule.js +170 -0
  56. package/dist/commands/review-schedule.js.map +1 -0
  57. package/dist/commands/review-scope.d.ts +5 -0
  58. package/dist/commands/review-scope.d.ts.map +1 -0
  59. package/dist/commands/review-scope.js +198 -0
  60. package/dist/commands/review-scope.js.map +1 -0
  61. package/dist/commands/rule-catalog.d.ts +5 -0
  62. package/dist/commands/rule-catalog.d.ts.map +1 -0
  63. package/dist/commands/rule-catalog.js +129 -0
  64. package/dist/commands/rule-catalog.js.map +1 -0
  65. package/dist/commands/setup-wizard.d.ts +5 -0
  66. package/dist/commands/setup-wizard.d.ts.map +1 -0
  67. package/dist/commands/setup-wizard.js +175 -0
  68. package/dist/commands/setup-wizard.js.map +1 -0
  69. package/package.json +1 -1
  70. package/server.json +2 -2
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Review-offline — Offline mode support for air-gapped environments.
3
+ */
4
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
5
+ import { join, dirname } from "path";
6
+ // ─── Storage ────────────────────────────────────────────────────────────────
7
+ const OFFLINE_DIR = join(".judges", "offline");
8
+ // ─── CLI ────────────────────────────────────────────────────────────────────
9
+ export function runReviewOffline(argv) {
10
+ if (argv.includes("--help") || argv.includes("-h")) {
11
+ console.log(`
12
+ judges review-offline — Offline mode support
13
+
14
+ Usage:
15
+ judges review-offline status Check offline readiness
16
+ judges review-offline prepare Prepare for offline use
17
+ judges review-offline bundle --output bundle.json Create offline bundle
18
+ judges review-offline verify Verify offline bundle
19
+
20
+ Subcommands:
21
+ status Check if judges can run offline
22
+ prepare Cache required data for offline use
23
+ bundle Create a portable offline bundle
24
+ verify Verify offline setup is complete
25
+
26
+ Options:
27
+ --output <path> Output path for bundle
28
+ --format json JSON output
29
+ --help, -h Show this help
30
+
31
+ Judges runs entirely locally without network access.
32
+ This command helps verify and document offline capabilities.
33
+ `);
34
+ return;
35
+ }
36
+ const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
37
+ const subcommand = argv.find((a) => ["status", "prepare", "bundle", "verify"].includes(a)) || "status";
38
+ if (subcommand === "prepare") {
39
+ mkdirSync(OFFLINE_DIR, { recursive: true });
40
+ // Snapshot current config if it exists
41
+ const rcPath = ".judgesrc";
42
+ let config = {};
43
+ if (existsSync(rcPath)) {
44
+ try {
45
+ config = JSON.parse(readFileSync(rcPath, "utf-8"));
46
+ }
47
+ catch {
48
+ /* skip */
49
+ }
50
+ }
51
+ const manifest = {
52
+ version: "1.0.0",
53
+ createdAt: new Date().toISOString(),
54
+ includes: ["judges-cli", "all-judges", "config"],
55
+ configSnapshot: config,
56
+ };
57
+ writeFileSync(join(OFFLINE_DIR, "manifest.json"), JSON.stringify(manifest, null, 2), "utf-8");
58
+ console.log("Offline preparation complete. Manifest written to .judges/offline/manifest.json");
59
+ return;
60
+ }
61
+ if (subcommand === "bundle") {
62
+ const output = argv.find((_a, i) => argv[i - 1] === "--output") || join(OFFLINE_DIR, "bundle.json");
63
+ const rcPath = ".judgesrc";
64
+ let config = {};
65
+ if (existsSync(rcPath)) {
66
+ try {
67
+ config = JSON.parse(readFileSync(rcPath, "utf-8"));
68
+ }
69
+ catch {
70
+ /* skip */
71
+ }
72
+ }
73
+ const bundle = {
74
+ version: "1.0.0",
75
+ createdAt: new Date().toISOString(),
76
+ includes: ["judges-cli", "all-judges", "config", "rules"],
77
+ configSnapshot: config,
78
+ };
79
+ mkdirSync(dirname(output), { recursive: true });
80
+ writeFileSync(output, JSON.stringify(bundle, null, 2), "utf-8");
81
+ console.log(`Offline bundle written to ${output}`);
82
+ return;
83
+ }
84
+ if (subcommand === "verify") {
85
+ const manifestPath = join(OFFLINE_DIR, "manifest.json");
86
+ const checks = [
87
+ { name: "CLI installed", ok: true },
88
+ { name: "Judges available", ok: true },
89
+ { name: "Offline manifest", ok: existsSync(manifestPath) },
90
+ { name: "Config present", ok: existsSync(".judgesrc") },
91
+ ];
92
+ if (format === "json") {
93
+ console.log(JSON.stringify({ checks, allPassed: checks.every((c) => c.ok) }, null, 2));
94
+ return;
95
+ }
96
+ console.log("\n Offline Verification\n ─────────────────────────────");
97
+ for (const check of checks) {
98
+ console.log(` ${check.ok ? "✅" : "❌"} ${check.name}`);
99
+ }
100
+ const allOk = checks.every((c) => c.ok);
101
+ console.log(`\n ${allOk ? "✅ Ready for offline use" : "⚠️ Some checks failed — run 'judges review-offline prepare'"}`);
102
+ console.log();
103
+ return;
104
+ }
105
+ // Status
106
+ const capabilities = {
107
+ localExecution: true,
108
+ noNetworkRequired: true,
109
+ allJudgesLocal: true,
110
+ configLocal: existsSync(".judgesrc"),
111
+ offlinePrepared: existsSync(join(OFFLINE_DIR, "manifest.json")),
112
+ };
113
+ if (format === "json") {
114
+ console.log(JSON.stringify(capabilities, null, 2));
115
+ return;
116
+ }
117
+ console.log("\n Offline Mode Status\n ═════════════════════════════");
118
+ console.log(` Local execution: ✅ All analysis runs locally`);
119
+ console.log(` Network required: ❌ No network access needed`);
120
+ console.log(` All judges local: ✅ All ${45}+ judges are bundled`);
121
+ console.log(` Config present: ${capabilities.configLocal ? "✅" : "⚠️ No .judgesrc found"}`);
122
+ console.log(` Offline prepared: ${capabilities.offlinePrepared ? "✅" : "⚠️ Run 'judges review-offline prepare'"}`);
123
+ console.log(`\n Judges is designed for fully offline, air-gapped operation.`);
124
+ console.log(` No data is sent externally — all processing is local.\n`);
125
+ }
126
+ //# sourceMappingURL=review-offline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-offline.js","sourceRoot":"","sources":["../../src/commands/review-offline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Review-quota — Track review usage quotas locally.
3
+ */
4
+ export declare function runReviewQuota(argv: string[]): void;
5
+ //# sourceMappingURL=review-quota.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-quota.d.ts","sourceRoot":"","sources":["../../src/commands/review-quota.ts"],"names":[],"mappings":"AAAA;;GAEG;AAiDH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAqHnD"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Review-quota — Track review usage quotas locally.
3
+ */
4
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
5
+ import { join, dirname } from "path";
6
+ // ─── Storage ────────────────────────────────────────────────────────────────
7
+ const QUOTA_FILE = join(".judges", "review-quota.json");
8
+ function loadQuota() {
9
+ if (!existsSync(QUOTA_FILE))
10
+ return { version: "1.0.0", dailyLimit: 100, monthlyLimit: 3000, usage: [] };
11
+ try {
12
+ return JSON.parse(readFileSync(QUOTA_FILE, "utf-8"));
13
+ }
14
+ catch {
15
+ return { version: "1.0.0", dailyLimit: 100, monthlyLimit: 3000, usage: [] };
16
+ }
17
+ }
18
+ function saveQuota(store) {
19
+ mkdirSync(dirname(QUOTA_FILE), { recursive: true });
20
+ writeFileSync(QUOTA_FILE, JSON.stringify(store, null, 2), "utf-8");
21
+ }
22
+ function today() {
23
+ return new Date().toISOString().slice(0, 10);
24
+ }
25
+ function thisMonth() {
26
+ return new Date().toISOString().slice(0, 7);
27
+ }
28
+ // ─── CLI ────────────────────────────────────────────────────────────────────
29
+ export function runReviewQuota(argv) {
30
+ if (argv.includes("--help") || argv.includes("-h")) {
31
+ console.log(`
32
+ judges review-quota — Track review usage quotas
33
+
34
+ Usage:
35
+ judges review-quota show Show current usage
36
+ judges review-quota record --files 5 --findings 12 Record usage
37
+ judges review-quota set --daily 200 --monthly 5000 Set limits
38
+ judges review-quota reset Reset usage data
39
+
40
+ Subcommands:
41
+ show Show current usage and quotas
42
+ record Record a review session
43
+ set Set daily/monthly limits
44
+ reset Reset all usage data
45
+
46
+ Options:
47
+ --files <n> Number of files reviewed
48
+ --findings <n> Number of findings generated
49
+ --daily <n> Daily review limit
50
+ --monthly <n> Monthly review limit
51
+ --format json JSON output
52
+ --help, -h Show this help
53
+
54
+ Quotas are tracked locally in .judges/review-quota.json.
55
+ `);
56
+ return;
57
+ }
58
+ const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
59
+ const subcommand = argv.find((a) => ["show", "record", "set", "reset"].includes(a)) || "show";
60
+ const store = loadQuota();
61
+ if (subcommand === "record") {
62
+ const files = parseInt(argv.find((_a, i) => argv[i - 1] === "--files") || "1", 10);
63
+ const findings = parseInt(argv.find((_a, i) => argv[i - 1] === "--findings") || "0", 10);
64
+ const todayStr = today();
65
+ const existing = store.usage.find((u) => u.date === todayStr);
66
+ if (existing) {
67
+ existing.reviewCount++;
68
+ existing.filesReviewed += files;
69
+ existing.findingsGenerated += findings;
70
+ }
71
+ else {
72
+ store.usage.push({ date: todayStr, reviewCount: 1, filesReviewed: files, findingsGenerated: findings });
73
+ }
74
+ saveQuota(store);
75
+ console.log(`Recorded: ${files} files, ${findings} findings.`);
76
+ return;
77
+ }
78
+ if (subcommand === "set") {
79
+ const daily = argv.find((_a, i) => argv[i - 1] === "--daily");
80
+ const monthly = argv.find((_a, i) => argv[i - 1] === "--monthly");
81
+ if (daily)
82
+ store.dailyLimit = parseInt(daily, 10);
83
+ if (monthly)
84
+ store.monthlyLimit = parseInt(monthly, 10);
85
+ saveQuota(store);
86
+ console.log(`Limits set — daily: ${store.dailyLimit}, monthly: ${store.monthlyLimit}`);
87
+ return;
88
+ }
89
+ if (subcommand === "reset") {
90
+ store.usage = [];
91
+ saveQuota(store);
92
+ console.log("Usage data reset.");
93
+ return;
94
+ }
95
+ // Show
96
+ const todayStr = today();
97
+ const monthStr = thisMonth();
98
+ const todayUsage = store.usage.find((u) => u.date === todayStr);
99
+ const dailyReviews = todayUsage ? todayUsage.reviewCount : 0;
100
+ const monthlyReviews = store.usage
101
+ .filter((u) => u.date.startsWith(monthStr))
102
+ .reduce((sum, u) => sum + u.reviewCount, 0);
103
+ const dailyPct = store.dailyLimit > 0 ? Math.round((dailyReviews / store.dailyLimit) * 100) : 0;
104
+ const monthlyPct = store.monthlyLimit > 0 ? Math.round((monthlyReviews / store.monthlyLimit) * 100) : 0;
105
+ if (format === "json") {
106
+ console.log(JSON.stringify({
107
+ daily: { used: dailyReviews, limit: store.dailyLimit, percent: dailyPct },
108
+ monthly: { used: monthlyReviews, limit: store.monthlyLimit, percent: monthlyPct },
109
+ today: todayUsage || null,
110
+ }, null, 2));
111
+ return;
112
+ }
113
+ const dailyBar = "█".repeat(Math.min(Math.round(dailyPct / 5), 20)) + "░".repeat(Math.max(20 - Math.round(dailyPct / 5), 0));
114
+ const monthlyBar = "█".repeat(Math.min(Math.round(monthlyPct / 5), 20)) + "░".repeat(Math.max(20 - Math.round(monthlyPct / 5), 0));
115
+ console.log(`\n Review Quota\n ═════════════════════════════`);
116
+ console.log(` Daily: ${dailyBar} ${dailyReviews}/${store.dailyLimit} (${dailyPct}%)`);
117
+ console.log(` Monthly: ${monthlyBar} ${monthlyReviews}/${store.monthlyLimit} (${monthlyPct}%)`);
118
+ if (todayUsage) {
119
+ console.log(`\n Today: ${todayUsage.reviewCount} reviews, ${todayUsage.filesReviewed} files, ${todayUsage.findingsGenerated} findings`);
120
+ }
121
+ if (dailyPct >= 90)
122
+ console.log("\n ⚠️ Approaching daily limit!");
123
+ if (monthlyPct >= 90)
124
+ console.log(" ⚠️ Approaching monthly limit!");
125
+ console.log();
126
+ }
127
+ //# sourceMappingURL=review-quota.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-quota.js","sourceRoot":"","sources":["../../src/commands/review-quota.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Review-schedule — Configure scheduled review cadences (stored locally).
3
+ */
4
+ export declare function runReviewSchedule(argv: string[]): void;
5
+ //# sourceMappingURL=review-schedule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-schedule.d.ts","sourceRoot":"","sources":["../../src/commands/review-schedule.ts"],"names":[],"mappings":"AAAA;;GAEG;AAsEH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAsItD"}
@@ -0,0 +1,170 @@
1
+ /**
2
+ * Review-schedule — Configure scheduled review cadences (stored locally).
3
+ */
4
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
5
+ import { join, dirname } from "path";
6
+ // ─── Storage ────────────────────────────────────────────────────────────────
7
+ const SCHEDULE_FILE = join(".judges", "schedules.json");
8
+ function loadSchedules() {
9
+ if (!existsSync(SCHEDULE_FILE))
10
+ return { version: "1.0.0", schedules: [] };
11
+ try {
12
+ return JSON.parse(readFileSync(SCHEDULE_FILE, "utf-8"));
13
+ }
14
+ catch {
15
+ return { version: "1.0.0", schedules: [] };
16
+ }
17
+ }
18
+ function saveSchedules(store) {
19
+ mkdirSync(dirname(SCHEDULE_FILE), { recursive: true });
20
+ writeFileSync(SCHEDULE_FILE, JSON.stringify(store, null, 2), "utf-8");
21
+ }
22
+ // ─── Cron generation ────────────────────────────────────────────────────────
23
+ function generateCiConfig(schedule, ci) {
24
+ if (ci === "github-actions") {
25
+ return `# ${schedule.name}: ${schedule.description}
26
+ name: Scheduled Review - ${schedule.name}
27
+ on:
28
+ schedule:
29
+ - cron: '${schedule.cron}'
30
+ workflow_dispatch:
31
+
32
+ jobs:
33
+ review:
34
+ runs-on: ubuntu-latest
35
+ steps:
36
+ - uses: actions/checkout@v4
37
+ - uses: actions/setup-node@v4
38
+ with:
39
+ node-version: '20'
40
+ - run: npx @kevinrabun/judges ${schedule.command}
41
+ `;
42
+ }
43
+ // Generic
44
+ return `# Schedule: ${schedule.name}\n# Cron: ${schedule.cron}\n# Command: judges ${schedule.command}`;
45
+ }
46
+ // ─── CLI ────────────────────────────────────────────────────────────────────
47
+ export function runReviewSchedule(argv) {
48
+ if (argv.includes("--help") || argv.includes("-h")) {
49
+ console.log(`
50
+ judges review-schedule — Configure scheduled review cadences
51
+
52
+ Usage:
53
+ judges review-schedule list List schedules
54
+ judges review-schedule add --name daily --cron "0 8 * * *" --command "eval src/"
55
+ judges review-schedule remove --id sched-xxx Remove a schedule
56
+ judges review-schedule enable --id sched-xxx Enable a schedule
57
+ judges review-schedule disable --id sched-xxx Disable a schedule
58
+ judges review-schedule generate --id sched-xxx --ci github-actions
59
+
60
+ Subcommands:
61
+ list List all configured schedules
62
+ add Add a new scheduled review
63
+ remove Remove a schedule
64
+ enable Enable a schedule
65
+ disable Disable a schedule
66
+ generate Generate CI configuration for a schedule
67
+
68
+ Options:
69
+ --name <name> Schedule name
70
+ --cron <expr> Cron expression
71
+ --command <cmd> Judges command to run
72
+ --id <id> Schedule ID
73
+ --ci <type> CI system (github-actions)
74
+ --description <text> Description
75
+ --format json JSON output
76
+ --help, -h Show this help
77
+
78
+ Schedules are stored locally in .judges/schedules.json.
79
+ Use 'generate' to create CI workflow files for automated execution.
80
+ `);
81
+ return;
82
+ }
83
+ const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
84
+ const subcommand = argv.find((a) => ["list", "add", "remove", "enable", "disable", "generate"].includes(a)) || "list";
85
+ const store = loadSchedules();
86
+ if (subcommand === "add") {
87
+ const name = argv.find((_a, i) => argv[i - 1] === "--name") || `schedule-${store.schedules.length + 1}`;
88
+ const cron = argv.find((_a, i) => argv[i - 1] === "--cron") || "0 8 * * 1-5";
89
+ const command = argv.find((_a, i) => argv[i - 1] === "--command") || "eval .";
90
+ const description = argv.find((_a, i) => argv[i - 1] === "--description") || "";
91
+ const entry = {
92
+ id: `sched-${Date.now().toString(36)}`,
93
+ name,
94
+ cron,
95
+ command,
96
+ enabled: true,
97
+ createdAt: new Date().toISOString(),
98
+ lastRun: "",
99
+ description,
100
+ };
101
+ store.schedules.push(entry);
102
+ saveSchedules(store);
103
+ console.log(`Added schedule '${name}' (${entry.id}) — cron: ${cron}`);
104
+ return;
105
+ }
106
+ if (subcommand === "remove") {
107
+ const id = argv.find((_a, i) => argv[i - 1] === "--id");
108
+ if (!id) {
109
+ console.error("Error: --id is required.");
110
+ process.exitCode = 1;
111
+ return;
112
+ }
113
+ store.schedules = store.schedules.filter((s) => s.id !== id);
114
+ saveSchedules(store);
115
+ console.log(`Removed schedule '${id}'.`);
116
+ return;
117
+ }
118
+ if (subcommand === "enable" || subcommand === "disable") {
119
+ const id = argv.find((_a, i) => argv[i - 1] === "--id");
120
+ if (!id) {
121
+ console.error("Error: --id is required.");
122
+ process.exitCode = 1;
123
+ return;
124
+ }
125
+ const entry = store.schedules.find((s) => s.id === id);
126
+ if (!entry) {
127
+ console.error(`Error: Schedule '${id}' not found.`);
128
+ process.exitCode = 1;
129
+ return;
130
+ }
131
+ entry.enabled = subcommand === "enable";
132
+ saveSchedules(store);
133
+ console.log(`Schedule '${id}' ${subcommand}d.`);
134
+ return;
135
+ }
136
+ if (subcommand === "generate") {
137
+ const id = argv.find((_a, i) => argv[i - 1] === "--id");
138
+ const ci = argv.find((_a, i) => argv[i - 1] === "--ci") || "github-actions";
139
+ if (!id) {
140
+ console.error("Error: --id is required.");
141
+ process.exitCode = 1;
142
+ return;
143
+ }
144
+ const entry = store.schedules.find((s) => s.id === id);
145
+ if (!entry) {
146
+ console.error(`Error: Schedule '${id}' not found.`);
147
+ process.exitCode = 1;
148
+ return;
149
+ }
150
+ console.log(generateCiConfig(entry, ci));
151
+ return;
152
+ }
153
+ // List
154
+ if (format === "json") {
155
+ console.log(JSON.stringify(store, null, 2));
156
+ return;
157
+ }
158
+ console.log(`\n Review Schedules (${store.schedules.length})\n ═════════════════════════════`);
159
+ if (store.schedules.length === 0) {
160
+ console.log(' No schedules. Add one with: judges review-schedule add --name daily --cron "0 8 * * *"');
161
+ }
162
+ for (const s of store.schedules) {
163
+ const status = s.enabled ? "✅" : "⏸️";
164
+ console.log(` ${status} ${s.id} — ${s.name} (${s.cron}) command: ${s.command}`);
165
+ if (s.description)
166
+ console.log(` ${s.description}`);
167
+ }
168
+ console.log();
169
+ }
170
+ //# sourceMappingURL=review-schedule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-schedule.js","sourceRoot":"","sources":["../../src/commands/review-schedule.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Review-scope — Define and manage review scope boundaries.
3
+ */
4
+ export declare function runReviewScope(argv: string[]): void;
5
+ //# sourceMappingURL=review-scope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-scope.d.ts","sourceRoot":"","sources":["../../src/commands/review-scope.ts"],"names":[],"mappings":"AAAA;;GAEG;AA6DH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA6JnD"}