@kevinrabun/judges 3.2.0 → 3.4.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 (57) hide show
  1. package/README.md +131 -7
  2. package/dist/ast/index.d.ts +7 -8
  3. package/dist/ast/index.d.ts.map +1 -1
  4. package/dist/ast/index.js +16 -18
  5. package/dist/ast/index.js.map +1 -1
  6. package/dist/ast/tree-sitter-ast.d.ts.map +1 -1
  7. package/dist/ast/tree-sitter-ast.js +215 -9
  8. package/dist/ast/tree-sitter-ast.js.map +1 -1
  9. package/dist/cli.d.ts +8 -1
  10. package/dist/cli.d.ts.map +1 -1
  11. package/dist/cli.js +169 -11
  12. package/dist/cli.js.map +1 -1
  13. package/dist/commands/ci-templates.d.ts +10 -0
  14. package/dist/commands/ci-templates.d.ts.map +1 -0
  15. package/dist/commands/ci-templates.js +90 -0
  16. package/dist/commands/ci-templates.js.map +1 -0
  17. package/dist/commands/fix.d.ts +21 -0
  18. package/dist/commands/fix.d.ts.map +1 -0
  19. package/dist/commands/fix.js +189 -0
  20. package/dist/commands/fix.js.map +1 -0
  21. package/dist/commands/hook.d.ts +9 -0
  22. package/dist/commands/hook.d.ts.map +1 -0
  23. package/dist/commands/hook.js +149 -0
  24. package/dist/commands/hook.js.map +1 -0
  25. package/dist/commands/init.d.ts +11 -0
  26. package/dist/commands/init.d.ts.map +1 -0
  27. package/dist/commands/init.js +266 -0
  28. package/dist/commands/init.js.map +1 -0
  29. package/dist/commands/report.d.ts +13 -0
  30. package/dist/commands/report.d.ts.map +1 -0
  31. package/dist/commands/report.js +140 -0
  32. package/dist/commands/report.js.map +1 -0
  33. package/dist/commands/watch.d.ts +18 -0
  34. package/dist/commands/watch.d.ts.map +1 -0
  35. package/dist/commands/watch.js +183 -0
  36. package/dist/commands/watch.js.map +1 -0
  37. package/dist/evaluators/code-structure.d.ts +3 -3
  38. package/dist/evaluators/code-structure.js +3 -3
  39. package/dist/formatters/html.d.ts +13 -0
  40. package/dist/formatters/html.d.ts.map +1 -0
  41. package/dist/formatters/html.js +219 -0
  42. package/dist/formatters/html.js.map +1 -0
  43. package/dist/index.js +8 -3
  44. package/dist/index.js.map +1 -1
  45. package/dist/language-patterns.d.ts.map +1 -1
  46. package/dist/language-patterns.js +8 -0
  47. package/dist/language-patterns.js.map +1 -1
  48. package/dist/types.d.ts +1 -1
  49. package/dist/types.d.ts.map +1 -1
  50. package/grammars/tree-sitter-cpp.wasm +0 -0
  51. package/grammars/tree-sitter-typescript.wasm +0 -0
  52. package/package.json +3 -1
  53. package/server.json +2 -2
  54. package/dist/ast/typescript-ast.d.ts +0 -7
  55. package/dist/ast/typescript-ast.d.ts.map +0 -1
  56. package/dist/ast/typescript-ast.js +0 -236
  57. package/dist/ast/typescript-ast.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fix.js","sourceRoot":"","sources":["../../src/commands/fix.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * `judges hook` — Install/uninstall pre-commit git hooks.
3
+ *
4
+ * Usage:
5
+ * judges hook install # Install pre-commit hook
6
+ * judges hook uninstall # Remove pre-commit hook
7
+ */
8
+ export declare function runHook(argv: string[]): void;
9
+ //# sourceMappingURL=hook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../src/commands/hook.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAuDH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAa5C"}
@@ -0,0 +1,149 @@
1
+ /**
2
+ * `judges hook` — Install/uninstall pre-commit git hooks.
3
+ *
4
+ * Usage:
5
+ * judges hook install # Install pre-commit hook
6
+ * judges hook uninstall # Remove pre-commit hook
7
+ */
8
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, unlinkSync, chmodSync } from "fs";
9
+ import { join, resolve } from "path";
10
+ // ─── Hook Content ───────────────────────────────────────────────────────────
11
+ const HOOK_MARKER = "# judges-panel-hook";
12
+ function generateHookScript() {
13
+ return `#!/usr/bin/env sh
14
+ ${HOOK_MARKER}
15
+ # Judges Panel pre-commit hook — automatically evaluate staged files.
16
+
17
+ STAGED=$(git diff --cached --name-only --diff-filter=ACM | grep -E '\\.(ts|tsx|js|jsx|py|go|rs|java|cs|cpp|cc|cxx)$')
18
+ if [ -n "$STAGED" ]; then
19
+ echo ""
20
+ echo " Judges Panel — checking staged files..."
21
+ echo ""
22
+ FAILED=0
23
+ for f in $STAGED; do
24
+ judges eval "$f" --summary --fail-on-findings 2>/dev/null
25
+ if [ $? -ne 0 ]; then
26
+ FAILED=1
27
+ fi
28
+ done
29
+ if [ "$FAILED" -ne 0 ]; then
30
+ echo ""
31
+ echo " ⛔ Judges found critical issues. Commit blocked."
32
+ echo " Run 'judges eval <file>' to see details."
33
+ echo " Run 'judges fix <file> --apply' to auto-fix."
34
+ echo " Use 'git commit --no-verify' to bypass."
35
+ echo ""
36
+ exit 1
37
+ fi
38
+ fi
39
+ `;
40
+ }
41
+ // ─── Find Git Hooks Directory ───────────────────────────────────────────────
42
+ function findGitHooksDir(cwd) {
43
+ // Check for Husky first
44
+ const huskyDir = join(cwd, ".husky");
45
+ if (existsSync(huskyDir))
46
+ return huskyDir;
47
+ // Check for .git/hooks
48
+ const gitHooksDir = join(cwd, ".git", "hooks");
49
+ if (existsSync(join(cwd, ".git")))
50
+ return gitHooksDir;
51
+ return undefined;
52
+ }
53
+ // ─── Main Hook Command ─────────────────────────────────────────────────────
54
+ export function runHook(argv) {
55
+ const subcommand = argv[3]; // install, uninstall
56
+ const cwd = resolve(".");
57
+ if (!subcommand || subcommand === "install") {
58
+ installHook(cwd);
59
+ }
60
+ else if (subcommand === "uninstall") {
61
+ uninstallHook(cwd);
62
+ }
63
+ else {
64
+ console.error(`Unknown hook subcommand: ${subcommand}`);
65
+ console.error("Usage: judges hook install | judges hook uninstall");
66
+ process.exit(1);
67
+ }
68
+ }
69
+ function installHook(cwd) {
70
+ const hooksDir = findGitHooksDir(cwd);
71
+ if (!hooksDir) {
72
+ console.error("Error: Not a git repository (no .git directory found).");
73
+ console.error("Run this command from the root of a git repository.");
74
+ process.exit(1);
75
+ }
76
+ // Ensure hooks directory exists
77
+ if (!existsSync(hooksDir)) {
78
+ mkdirSync(hooksDir, { recursive: true });
79
+ }
80
+ const hookPath = join(hooksDir, "pre-commit");
81
+ if (existsSync(hookPath)) {
82
+ const existing = readFileSync(hookPath, "utf-8");
83
+ if (existing.includes(HOOK_MARKER)) {
84
+ console.log("\n ℹ Judges pre-commit hook is already installed.\n");
85
+ process.exit(0);
86
+ }
87
+ // Append to existing hook
88
+ const appended = existing.trimEnd() + "\n\n" + generateHookScript();
89
+ writeFileSync(hookPath, appended, "utf-8");
90
+ try {
91
+ chmodSync(hookPath, 0o755);
92
+ }
93
+ catch {
94
+ /* Windows */
95
+ }
96
+ console.log("\n ✅ Judges hook appended to existing pre-commit hook.");
97
+ console.log(` Location: ${hookPath}\n`);
98
+ }
99
+ else {
100
+ writeFileSync(hookPath, generateHookScript(), "utf-8");
101
+ try {
102
+ chmodSync(hookPath, 0o755);
103
+ }
104
+ catch {
105
+ /* Windows */
106
+ }
107
+ console.log("\n ✅ Judges pre-commit hook installed.");
108
+ console.log(` Location: ${hookPath}\n`);
109
+ }
110
+ console.log(" Staged files will be evaluated before each commit.");
111
+ console.log(" Use 'git commit --no-verify' to bypass.\n");
112
+ process.exit(0);
113
+ }
114
+ function uninstallHook(cwd) {
115
+ const hooksDir = findGitHooksDir(cwd);
116
+ if (!hooksDir) {
117
+ console.error("Error: Not a git repository.");
118
+ process.exit(1);
119
+ }
120
+ const hookPath = join(hooksDir, "pre-commit");
121
+ if (!existsSync(hookPath)) {
122
+ console.log("\n ℹ No pre-commit hook found. Nothing to uninstall.\n");
123
+ process.exit(0);
124
+ }
125
+ const content = readFileSync(hookPath, "utf-8");
126
+ if (!content.includes(HOOK_MARKER)) {
127
+ console.log("\n ℹ Pre-commit hook exists but was not installed by Judges.\n");
128
+ process.exit(0);
129
+ }
130
+ // Remove the judges block
131
+ const lines = content.split("\n");
132
+ const markerIndex = lines.findIndex((l) => l.includes(HOOK_MARKER));
133
+ if (markerIndex <= 1) {
134
+ // Entire file is the judges hook — remove it
135
+ unlinkSync(hookPath);
136
+ console.log("\n ✅ Judges pre-commit hook removed.\n");
137
+ }
138
+ else {
139
+ // Remove from marker to end (judges block is at the end)
140
+ const cleaned = lines
141
+ .slice(0, markerIndex - 1)
142
+ .join("\n")
143
+ .trimEnd() + "\n";
144
+ writeFileSync(hookPath, cleaned, "utf-8");
145
+ console.log("\n ✅ Judges section removed from pre-commit hook.\n");
146
+ }
147
+ process.exit(0);
148
+ }
149
+ //# sourceMappingURL=hook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook.js","sourceRoot":"","sources":["../../src/commands/hook.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * `judges init` — Interactive project setup wizard.
3
+ *
4
+ * Generates:
5
+ * - .judgesrc.json (project config)
6
+ * - .vscode/mcp.json (VS Code MCP server config)
7
+ * - .github/workflows/judges.yml (CI workflow)
8
+ * - .husky/pre-commit hook (optional)
9
+ */
10
+ export declare function runInit(projectDir?: string): Promise<void>;
11
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAoKH,wBAAsB,OAAO,CAAC,UAAU,GAAE,MAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAgKrE"}
@@ -0,0 +1,266 @@
1
+ /**
2
+ * `judges init` — Interactive project setup wizard.
3
+ *
4
+ * Generates:
5
+ * - .judgesrc.json (project config)
6
+ * - .vscode/mcp.json (VS Code MCP server config)
7
+ * - .github/workflows/judges.yml (CI workflow)
8
+ * - .husky/pre-commit hook (optional)
9
+ */
10
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
11
+ import { dirname, join, resolve } from "path";
12
+ import { createInterface } from "readline";
13
+ // ─── Interactive Prompt Helper ──────────────────────────────────────────────
14
+ function createPromptInterface() {
15
+ return createInterface({ input: process.stdin, output: process.stdout });
16
+ }
17
+ async function ask(rl, question, defaultValue) {
18
+ const suffix = defaultValue ? ` (${defaultValue})` : "";
19
+ return new Promise((r) => {
20
+ rl.question(` ${question}${suffix}: `, (answer) => {
21
+ r(answer.trim() || defaultValue || "");
22
+ });
23
+ });
24
+ }
25
+ async function askYesNo(rl, question, defaultYes = true) {
26
+ const hint = defaultYes ? "Y/n" : "y/N";
27
+ const answer = await ask(rl, `${question} [${hint}]`);
28
+ if (!answer)
29
+ return defaultYes;
30
+ return answer.toLowerCase().startsWith("y");
31
+ }
32
+ async function askChoice(rl, question, options, defaultIndex = 0) {
33
+ console.log(` ${question}`);
34
+ for (let i = 0; i < options.length; i++) {
35
+ const marker = i === defaultIndex ? ">" : " ";
36
+ console.log(` ${marker} ${i + 1}. ${options[i]}`);
37
+ }
38
+ const answer = await ask(rl, "Choice", String(defaultIndex + 1));
39
+ const idx = parseInt(answer, 10) - 1;
40
+ return options[idx >= 0 && idx < options.length ? idx : defaultIndex];
41
+ }
42
+ function generateJudgesRc(opts) {
43
+ const rc = {};
44
+ if (opts.policyProfile !== "default") {
45
+ rc.policyProfile = opts.policyProfile;
46
+ }
47
+ if (opts.minSeverity !== "low") {
48
+ rc.minSeverity = opts.minSeverity;
49
+ }
50
+ if (opts.disabledJudges.length > 0) {
51
+ rc.disabledJudges = opts.disabledJudges;
52
+ }
53
+ rc.disabledRules = [];
54
+ rc.ruleOverrides = {};
55
+ return JSON.stringify(rc, null, 2) + "\n";
56
+ }
57
+ function generateGitHubWorkflow(opts) {
58
+ return `name: Judges Code Review
59
+ on:
60
+ pull_request:
61
+ types: [opened, synchronize, reopened]
62
+
63
+ permissions:
64
+ contents: read
65
+ security-events: write
66
+
67
+ jobs:
68
+ judges:
69
+ runs-on: ubuntu-latest
70
+ steps:
71
+ - uses: actions/checkout@v4
72
+ - uses: KevinRabun/judges@main
73
+ with:
74
+ path: "."
75
+ format: sarif
76
+ upload-sarif: true
77
+ fail-on-findings: ${opts.failOnFindings}
78
+ `;
79
+ }
80
+ function generateMcpConfig() {
81
+ return (JSON.stringify({
82
+ servers: {
83
+ judges: {
84
+ command: "judges",
85
+ args: [],
86
+ },
87
+ },
88
+ }, null, 2) + "\n");
89
+ }
90
+ function generatePreCommitHook() {
91
+ return `#!/usr/bin/env sh
92
+ . "$(dirname -- "$0")/_/husky.sh"
93
+
94
+ # Run Judges on staged files
95
+ STAGED=$(git diff --cached --name-only --diff-filter=ACM | grep -E '\\.(ts|tsx|js|jsx|py|go|rs|java|cs|cpp|cc|cxx)$')
96
+ if [ -n "$STAGED" ]; then
97
+ echo "Running Judges on staged files..."
98
+ for f in $STAGED; do
99
+ judges eval "$f" --fail-on-findings 2>/dev/null
100
+ if [ $? -ne 0 ]; then
101
+ echo "\\n Judges found issues in $f. Commit blocked."
102
+ echo " Run 'judges eval $f' to see details, or 'judges fix $f' to auto-fix.\\n"
103
+ exit 1
104
+ fi
105
+ done
106
+ fi
107
+ `;
108
+ }
109
+ // ─── Safe File Write ────────────────────────────────────────────────────────
110
+ function safeWriteFile(filePath, content, dryRun = false) {
111
+ const abs = resolve(filePath);
112
+ if (existsSync(abs)) {
113
+ console.log(` ⏭ Skipped (already exists): ${filePath}`);
114
+ return false;
115
+ }
116
+ if (dryRun) {
117
+ console.log(` 📝 Would create: ${filePath}`);
118
+ return true;
119
+ }
120
+ const dir = dirname(abs);
121
+ if (!existsSync(dir))
122
+ mkdirSync(dir, { recursive: true });
123
+ writeFileSync(abs, content, "utf-8");
124
+ console.log(` ✅ Created: ${filePath}`);
125
+ return true;
126
+ }
127
+ // ─── Main Init Command ─────────────────────────────────────────────────────
128
+ export async function runInit(projectDir = ".") {
129
+ const root = resolve(projectDir);
130
+ console.log("");
131
+ console.log("╔══════════════════════════════════════════════════════════════╗");
132
+ console.log("║ Judges Panel — Project Setup Wizard ║");
133
+ console.log("╚══════════════════════════════════════════════════════════════╝");
134
+ console.log("");
135
+ // Check if already initialized
136
+ if (existsSync(join(root, ".judgesrc.json")) || existsSync(join(root, ".judgesrc"))) {
137
+ console.log(" ℹ This project already has a .judgesrc config.");
138
+ console.log(" Run 'judges eval' to analyze your code.\n");
139
+ return;
140
+ }
141
+ const rl = createPromptInterface();
142
+ try {
143
+ // 1. Policy profile
144
+ console.log(" What kind of project is this?\n");
145
+ const profile = await askChoice(rl, "", [
146
+ "default — General-purpose application",
147
+ "startup — Move fast, catch critical issues only",
148
+ "regulated — Enterprise/government, strict compliance",
149
+ "healthcare — HIPAA-aware, patient data focus",
150
+ "fintech — PCI-DSS, financial data focus",
151
+ "public-sector — FedRAMP/NIST-aligned",
152
+ ]);
153
+ const policyProfile = profile.split(" — ")[0];
154
+ // 2. Minimum severity
155
+ console.log("");
156
+ const minSeverity = await askChoice(rl, "Minimum severity to report?", [
157
+ "low — Show everything (recommended for new projects)",
158
+ "medium — Hide low-severity hints",
159
+ "high — Only critical and high",
160
+ ]);
161
+ const minSev = minSeverity.split(" — ")[0];
162
+ // 3. Disable any judges?
163
+ console.log("");
164
+ const disableAny = await askYesNo(rl, "Skip any judges? (e.g., disable i18n for internal tools)", false);
165
+ let disabledJudges = [];
166
+ if (disableAny) {
167
+ const ids = await ask(rl, "Judge IDs to disable (comma-separated)", "");
168
+ disabledJudges = ids
169
+ .split(",")
170
+ .map((s) => s.trim())
171
+ .filter(Boolean);
172
+ }
173
+ // 4. GitHub Actions
174
+ console.log("");
175
+ const generateGitHubAction = await askYesNo(rl, "Generate GitHub Actions workflow?", true);
176
+ let failOnFindings = false;
177
+ if (generateGitHubAction) {
178
+ failOnFindings = await askYesNo(rl, "Fail CI on critical/high findings?", true);
179
+ }
180
+ // 4b. GitLab CI
181
+ console.log("");
182
+ const generateGitLabCi = await askYesNo(rl, "Generate GitLab CI pipeline (.gitlab-ci.yml)?", false);
183
+ // 4c. Azure Pipelines
184
+ console.log("");
185
+ const generateAzurePipelines = await askYesNo(rl, "Generate Azure Pipelines config (azure-pipelines.yml)?", false);
186
+ // Set failOnFindings from any CI setup
187
+ if (!failOnFindings && (generateGitLabCi || generateAzurePipelines)) {
188
+ failOnFindings = await askYesNo(rl, "Fail CI on critical/high findings?", true);
189
+ }
190
+ // 5. MCP config
191
+ console.log("");
192
+ const generateMcpConfigOpt = await askYesNo(rl, "Generate VS Code MCP config (.vscode/mcp.json)?", true);
193
+ // 6. Pre-commit hook
194
+ console.log("");
195
+ const hasHusky = existsSync(join(root, ".husky"));
196
+ const generatePreCommit = await askYesNo(rl, hasHusky ? "Add Judges to your Husky pre-commit hook?" : "Generate pre-commit hook (requires Husky)?", hasHusky);
197
+ rl.close();
198
+ // ─── Generate Files ───────────────────────────────────────────────────
199
+ const opts = {
200
+ policyProfile,
201
+ minSeverity: minSev,
202
+ disabledJudges,
203
+ generateGitHubAction,
204
+ generateGitLabCi,
205
+ generateAzurePipelines,
206
+ generateMcpConfig: generateMcpConfigOpt,
207
+ generatePreCommit,
208
+ failOnFindings,
209
+ };
210
+ console.log("\n Generating files...\n");
211
+ // Always generate .judgesrc.json
212
+ safeWriteFile(join(root, ".judgesrc.json"), generateJudgesRc(opts));
213
+ if (opts.generateGitHubAction) {
214
+ safeWriteFile(join(root, ".github", "workflows", "judges.yml"), generateGitHubWorkflow(opts));
215
+ }
216
+ if (opts.generateGitLabCi) {
217
+ const { generateGitLabCi: genGitLab } = await import("./ci-templates.js");
218
+ safeWriteFile(join(root, ".gitlab-ci.judges.yml"), genGitLab(opts.failOnFindings));
219
+ }
220
+ if (opts.generateAzurePipelines) {
221
+ const { generateAzurePipelines: genAzure } = await import("./ci-templates.js");
222
+ safeWriteFile(join(root, "azure-pipelines.judges.yml"), genAzure(opts.failOnFindings));
223
+ }
224
+ if (opts.generateMcpConfig) {
225
+ const mcpPath = join(root, ".vscode", "mcp.json");
226
+ if (existsSync(mcpPath)) {
227
+ // Merge with existing MCP config
228
+ try {
229
+ const existing = JSON.parse(readFileSync(mcpPath, "utf-8"));
230
+ if (!existing.servers?.judges) {
231
+ existing.servers = existing.servers || {};
232
+ existing.servers.judges = { command: "judges", args: [] };
233
+ writeFileSync(mcpPath, JSON.stringify(existing, null, 2) + "\n", "utf-8");
234
+ console.log(` ✅ Added judges server to existing: .vscode/mcp.json`);
235
+ }
236
+ else {
237
+ console.log(` ⏭ Skipped (judges already configured): .vscode/mcp.json`);
238
+ }
239
+ }
240
+ catch {
241
+ safeWriteFile(mcpPath, generateMcpConfig());
242
+ }
243
+ }
244
+ else {
245
+ safeWriteFile(join(root, ".vscode", "mcp.json"), generateMcpConfig());
246
+ }
247
+ }
248
+ if (opts.generatePreCommit) {
249
+ safeWriteFile(join(root, ".husky", "pre-commit"), generatePreCommitHook());
250
+ }
251
+ // ─── Summary ────────────────────────────────────────────────────────
252
+ console.log("\n Done! Next steps:\n");
253
+ console.log(" 1. judges eval src/app.ts # Evaluate a file");
254
+ console.log(" 2. judges eval . # Evaluate the whole project");
255
+ console.log(" 3. judges fix src/app.ts --apply # Auto-fix findings");
256
+ console.log(" 4. judges watch src/ # Watch for changes");
257
+ console.log("");
258
+ console.log(" 📖 Full docs: https://github.com/KevinRabun/judges#readme\n");
259
+ }
260
+ catch {
261
+ rl.close();
262
+ console.error(" Init cancelled.\n");
263
+ process.exit(1);
264
+ }
265
+ }
266
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * `judges report` — Generate a project-level report from a local directory.
3
+ *
4
+ * Usage:
5
+ * judges report . # Report on current directory
6
+ * judges report src/ # Report on src/ directory
7
+ * judges report . --format json # JSON output
8
+ * judges report . --format html # HTML output
9
+ * judges report . --output report.html # Save to file
10
+ * judges report . --max-files 100 # Limit files scanned
11
+ */
12
+ export declare function runReport(argv: string[]): void;
13
+ //# sourceMappingURL=report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/commands/report.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAoEH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAgG9C"}
@@ -0,0 +1,140 @@
1
+ /**
2
+ * `judges report` — Generate a project-level report from a local directory.
3
+ *
4
+ * Usage:
5
+ * judges report . # Report on current directory
6
+ * judges report src/ # Report on src/ directory
7
+ * judges report . --format json # JSON output
8
+ * judges report . --format html # HTML output
9
+ * judges report . --output report.html # Save to file
10
+ * judges report . --max-files 100 # Limit files scanned
11
+ */
12
+ import { existsSync, writeFileSync, statSync } from "fs";
13
+ import { resolve, basename } from "path";
14
+ import { generateRepoReportFromLocalPath } from "../reports/public-repo-report.js";
15
+ function parseReportArgs(argv) {
16
+ const args = {
17
+ path: ".",
18
+ format: "text",
19
+ output: undefined,
20
+ maxFiles: 600,
21
+ maxFileBytes: 300_000,
22
+ };
23
+ for (let i = 3; i < argv.length; i++) {
24
+ const arg = argv[i];
25
+ switch (arg) {
26
+ case "--format":
27
+ case "-o":
28
+ args.format = argv[++i];
29
+ break;
30
+ case "--output":
31
+ args.output = argv[++i];
32
+ break;
33
+ case "--max-files":
34
+ args.maxFiles = parseInt(argv[++i], 10);
35
+ break;
36
+ case "--max-file-bytes":
37
+ args.maxFileBytes = parseInt(argv[++i], 10);
38
+ break;
39
+ default:
40
+ if (!arg.startsWith("-")) {
41
+ args.path = arg;
42
+ }
43
+ break;
44
+ }
45
+ }
46
+ return args;
47
+ }
48
+ // ─── Progress Display ───────────────────────────────────────────────────────
49
+ function showProgress(message) {
50
+ if (process.stderr.isTTY) {
51
+ process.stderr.write(`\r ⏳ ${message}`.padEnd(70));
52
+ }
53
+ }
54
+ function clearProgress() {
55
+ if (process.stderr.isTTY) {
56
+ process.stderr.write("\r" + " ".repeat(70) + "\r");
57
+ }
58
+ }
59
+ // ─── Main Report Command ───────────────────────────────────────────────────
60
+ export function runReport(argv) {
61
+ const args = parseReportArgs(argv);
62
+ const targetPath = resolve(args.path);
63
+ if (!existsSync(targetPath)) {
64
+ console.error(`Error: Path not found: ${targetPath}`);
65
+ process.exit(1);
66
+ }
67
+ if (!statSync(targetPath).isDirectory()) {
68
+ console.error("Error: 'judges report' requires a directory path.");
69
+ console.error("Use 'judges eval' to evaluate a single file.");
70
+ process.exit(1);
71
+ }
72
+ const projectName = basename(targetPath) || "project";
73
+ console.error("");
74
+ console.error("╔══════════════════════════════════════════════════════════════╗");
75
+ console.error("║ Judges Panel — Project Report ║");
76
+ console.error("╚══════════════════════════════════════════════════════════════╝");
77
+ console.error("");
78
+ console.error(` Scanning: ${args.path}`);
79
+ console.error(` Max files: ${args.maxFiles}`);
80
+ console.error("");
81
+ showProgress("Analyzing source files...");
82
+ const startTime = Date.now();
83
+ const result = generateRepoReportFromLocalPath({
84
+ repoPath: targetPath,
85
+ repoLabel: projectName,
86
+ maxFiles: args.maxFiles,
87
+ maxFileBytes: args.maxFileBytes,
88
+ includeAstFindings: true,
89
+ });
90
+ clearProgress();
91
+ const elapsed = ((Date.now() - startTime) / 1000).toFixed(1);
92
+ console.error(` ✅ Analyzed ${result.analyzedFileCount} files in ${elapsed}s`);
93
+ console.error(` Score: ${result.averageScore}/100 | Verdict: ${result.overallVerdict.toUpperCase()} | Findings: ${result.totalFindings}`);
94
+ console.error("");
95
+ // Format output
96
+ let output;
97
+ switch (args.format) {
98
+ case "json":
99
+ output = JSON.stringify({
100
+ project: projectName,
101
+ analyzedFiles: result.analyzedFileCount,
102
+ totalFindings: result.totalFindings,
103
+ averageScore: result.averageScore,
104
+ overallVerdict: result.overallVerdict,
105
+ timestamp: new Date().toISOString(),
106
+ }, null, 2);
107
+ break;
108
+ case "html": {
109
+ // Wrap as a simple HTML page with the markdown
110
+ const escapedMd = result.markdown.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
111
+ output = `<!DOCTYPE html>
112
+ <html lang="en">
113
+ <head><meta charset="utf-8"><title>Judges Report — ${projectName}</title>
114
+ <style>body{font-family:monospace;max-width:960px;margin:2rem auto;padding:1rem;white-space:pre-wrap;line-height:1.6}</style>
115
+ </head><body>${escapedMd}</body></html>`;
116
+ break;
117
+ }
118
+ case "markdown":
119
+ output = result.markdown;
120
+ break;
121
+ case "text":
122
+ default:
123
+ output = result.markdown;
124
+ break;
125
+ }
126
+ // Write to file or stdout
127
+ if (args.output) {
128
+ writeFileSync(resolve(args.output), output, "utf-8");
129
+ console.error(` 📝 Report saved to: ${args.output}\n`);
130
+ }
131
+ else {
132
+ console.log(output);
133
+ }
134
+ // Exit with appropriate code
135
+ if (result.overallVerdict === "fail") {
136
+ process.exit(1);
137
+ }
138
+ process.exit(0);
139
+ }
140
+ //# sourceMappingURL=report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/commands/report.ts"],"names":[],"mappings":"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"}