@kevinrabun/judges 3.40.0 → 3.42.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 (94) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +133 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/auto-calibrate.d.ts +15 -0
  6. package/dist/commands/auto-calibrate.d.ts.map +1 -0
  7. package/dist/commands/auto-calibrate.js +107 -0
  8. package/dist/commands/auto-calibrate.js.map +1 -0
  9. package/dist/commands/auto-triage.d.ts +32 -0
  10. package/dist/commands/auto-triage.d.ts.map +1 -0
  11. package/dist/commands/auto-triage.js +126 -0
  12. package/dist/commands/auto-triage.js.map +1 -0
  13. package/dist/commands/config-migrate.d.ts +44 -0
  14. package/dist/commands/config-migrate.d.ts.map +1 -0
  15. package/dist/commands/config-migrate.js +241 -0
  16. package/dist/commands/config-migrate.js.map +1 -0
  17. package/dist/commands/coverage-map.d.ts +23 -0
  18. package/dist/commands/coverage-map.d.ts.map +1 -0
  19. package/dist/commands/coverage-map.js +223 -0
  20. package/dist/commands/coverage-map.js.map +1 -0
  21. package/dist/commands/dedup-report.d.ts +13 -0
  22. package/dist/commands/dedup-report.d.ts.map +1 -0
  23. package/dist/commands/dedup-report.js +138 -0
  24. package/dist/commands/dedup-report.js.map +1 -0
  25. package/dist/commands/dep-audit.d.ts +53 -0
  26. package/dist/commands/dep-audit.d.ts.map +1 -0
  27. package/dist/commands/dep-audit.js +278 -0
  28. package/dist/commands/dep-audit.js.map +1 -0
  29. package/dist/commands/deprecated.d.ts +48 -0
  30. package/dist/commands/deprecated.d.ts.map +1 -0
  31. package/dist/commands/deprecated.js +202 -0
  32. package/dist/commands/deprecated.js.map +1 -0
  33. package/dist/commands/diff-only.d.ts +34 -0
  34. package/dist/commands/diff-only.d.ts.map +1 -0
  35. package/dist/commands/diff-only.js +152 -0
  36. package/dist/commands/diff-only.js.map +1 -0
  37. package/dist/commands/fix-pr.d.ts +23 -0
  38. package/dist/commands/fix-pr.d.ts.map +1 -0
  39. package/dist/commands/fix-pr.js +323 -0
  40. package/dist/commands/fix-pr.js.map +1 -0
  41. package/dist/commands/group-findings.d.ts +23 -0
  42. package/dist/commands/group-findings.d.ts.map +1 -0
  43. package/dist/commands/group-findings.js +155 -0
  44. package/dist/commands/group-findings.js.map +1 -0
  45. package/dist/commands/interactive-fix.d.ts +23 -0
  46. package/dist/commands/interactive-fix.d.ts.map +1 -0
  47. package/dist/commands/interactive-fix.js +140 -0
  48. package/dist/commands/interactive-fix.js.map +1 -0
  49. package/dist/commands/monorepo.d.ts +38 -0
  50. package/dist/commands/monorepo.d.ts.map +1 -0
  51. package/dist/commands/monorepo.js +233 -0
  52. package/dist/commands/monorepo.js.map +1 -0
  53. package/dist/commands/notify.d.ts +79 -0
  54. package/dist/commands/notify.d.ts.map +1 -0
  55. package/dist/commands/notify.js +325 -0
  56. package/dist/commands/notify.js.map +1 -0
  57. package/dist/commands/pr-summary.d.ts +26 -0
  58. package/dist/commands/pr-summary.d.ts.map +1 -0
  59. package/dist/commands/pr-summary.js +188 -0
  60. package/dist/commands/pr-summary.js.map +1 -0
  61. package/dist/commands/profile.d.ts +38 -0
  62. package/dist/commands/profile.d.ts.map +1 -0
  63. package/dist/commands/profile.js +102 -0
  64. package/dist/commands/profile.js.map +1 -0
  65. package/dist/commands/quality-gate.d.ts +70 -0
  66. package/dist/commands/quality-gate.d.ts.map +1 -0
  67. package/dist/commands/quality-gate.js +264 -0
  68. package/dist/commands/quality-gate.js.map +1 -0
  69. package/dist/commands/smart-select.d.ts +27 -0
  70. package/dist/commands/smart-select.d.ts.map +1 -0
  71. package/dist/commands/smart-select.js +346 -0
  72. package/dist/commands/smart-select.js.map +1 -0
  73. package/dist/commands/upload.d.ts +14 -0
  74. package/dist/commands/upload.d.ts.map +1 -0
  75. package/dist/commands/upload.js +173 -0
  76. package/dist/commands/upload.js.map +1 -0
  77. package/dist/commands/validate-config.d.ts +17 -0
  78. package/dist/commands/validate-config.d.ts.map +1 -0
  79. package/dist/commands/validate-config.js +268 -0
  80. package/dist/commands/validate-config.js.map +1 -0
  81. package/dist/commands/warm-cache.d.ts +31 -0
  82. package/dist/commands/warm-cache.d.ts.map +1 -0
  83. package/dist/commands/warm-cache.js +166 -0
  84. package/dist/commands/warm-cache.js.map +1 -0
  85. package/dist/evaluators/framework-rules.d.ts +59 -0
  86. package/dist/evaluators/framework-rules.d.ts.map +1 -0
  87. package/dist/evaluators/framework-rules.js +292 -0
  88. package/dist/evaluators/framework-rules.js.map +1 -0
  89. package/dist/parallel.d.ts +53 -0
  90. package/dist/parallel.d.ts.map +1 -0
  91. package/dist/parallel.js +170 -0
  92. package/dist/parallel.js.map +1 -0
  93. package/package.json +1 -1
  94. package/server.json +2 -2
@@ -0,0 +1,223 @@
1
+ /**
2
+ * Rule coverage map — show which rules apply to which languages,
3
+ * helping teams understand their coverage and identify gaps.
4
+ */
5
+ // ─── Rules-to-Language Mapping ──────────────────────────────────────────────
6
+ /**
7
+ * Universal rules applicable to all programming languages.
8
+ */
9
+ const UNIVERSAL_RULES = [
10
+ { pattern: "SEC-", judge: "cybersecurity", severity: "high" },
11
+ { pattern: "ERR-", judge: "error-handling", severity: "medium" },
12
+ { pattern: "MAINT-", judge: "maintainability", severity: "low" },
13
+ { pattern: "DOC-", judge: "documentation", severity: "low" },
14
+ { pattern: "STRUCT-", judge: "code-structure", severity: "medium" },
15
+ { pattern: "TEST-", judge: "testing", severity: "medium" },
16
+ { pattern: "LOG-", judge: "logging-privacy", severity: "medium" },
17
+ { pattern: "AI-", judge: "ai-code-safety", severity: "high" },
18
+ ];
19
+ /**
20
+ * Language-specific rules with limited applicability.
21
+ */
22
+ const LANGUAGE_RULES = [
23
+ {
24
+ pattern: "INJECT-SQL",
25
+ judge: "cybersecurity",
26
+ severity: "critical",
27
+ languages: ["typescript", "javascript", "python", "java", "csharp", "php", "ruby", "go"],
28
+ },
29
+ {
30
+ pattern: "INJECT-CMD",
31
+ judge: "cybersecurity",
32
+ severity: "critical",
33
+ languages: ["typescript", "javascript", "python", "java", "csharp", "php", "ruby", "go", "rust"],
34
+ },
35
+ {
36
+ pattern: "XSS-",
37
+ judge: "cybersecurity",
38
+ severity: "high",
39
+ languages: ["typescript", "javascript", "python", "java", "csharp", "php", "ruby"],
40
+ },
41
+ {
42
+ pattern: "SSRF-",
43
+ judge: "cybersecurity",
44
+ severity: "high",
45
+ languages: ["typescript", "javascript", "python", "java", "csharp", "go", "ruby"],
46
+ },
47
+ {
48
+ pattern: "CRYPTO-",
49
+ judge: "cybersecurity",
50
+ severity: "high",
51
+ languages: ["typescript", "javascript", "python", "java", "csharp", "go", "rust", "c", "cpp"],
52
+ },
53
+ {
54
+ pattern: "AUTH-",
55
+ judge: "authentication",
56
+ severity: "high",
57
+ languages: ["typescript", "javascript", "python", "java", "csharp", "go", "ruby", "php"],
58
+ },
59
+ {
60
+ pattern: "PERF-",
61
+ judge: "performance",
62
+ severity: "medium",
63
+ languages: ["typescript", "javascript", "python", "java", "csharp", "go", "rust", "c", "cpp"],
64
+ },
65
+ {
66
+ pattern: "DB-",
67
+ judge: "database",
68
+ severity: "medium",
69
+ languages: ["typescript", "javascript", "python", "java", "csharp", "go", "ruby", "sql"],
70
+ },
71
+ { pattern: "IAC-", judge: "iac-security", severity: "high", languages: ["terraform", "bicep", "yaml", "dockerfile"] },
72
+ { pattern: "CICD-", judge: "ci-cd", severity: "high", languages: ["yaml", "dockerfile", "bash", "powershell"] },
73
+ {
74
+ pattern: "CONCUR-",
75
+ judge: "concurrency",
76
+ severity: "high",
77
+ languages: ["go", "rust", "java", "csharp", "python", "c", "cpp"],
78
+ },
79
+ { pattern: "A11Y-", judge: "accessibility", severity: "medium", languages: ["typescript", "javascript", "html"] },
80
+ {
81
+ pattern: "I18N-",
82
+ judge: "internationalization",
83
+ severity: "low",
84
+ languages: ["typescript", "javascript", "python", "java", "csharp"],
85
+ },
86
+ { pattern: "FW-REACT", judge: "framework-safety", severity: "high", languages: ["typescript", "javascript"] },
87
+ { pattern: "FW-EXPRESS", judge: "framework-safety", severity: "high", languages: ["typescript", "javascript"] },
88
+ { pattern: "FW-DJANGO", judge: "framework-safety", severity: "high", languages: ["python"] },
89
+ { pattern: "FW-FLASK", judge: "framework-safety", severity: "high", languages: ["python"] },
90
+ { pattern: "FW-SPRING", judge: "framework-safety", severity: "high", languages: ["java", "kotlin"] },
91
+ { pattern: "FW-RAILS", judge: "framework-safety", severity: "high", languages: ["ruby"] },
92
+ { pattern: "FW-NEXT", judge: "framework-safety", severity: "high", languages: ["typescript", "javascript"] },
93
+ { pattern: "FW-FASTAPI", judge: "framework-safety", severity: "high", languages: ["python"] },
94
+ ];
95
+ const ALL_LANGUAGES = [
96
+ "typescript",
97
+ "javascript",
98
+ "python",
99
+ "java",
100
+ "csharp",
101
+ "go",
102
+ "rust",
103
+ "ruby",
104
+ "php",
105
+ "c",
106
+ "cpp",
107
+ "kotlin",
108
+ "scala",
109
+ "swift",
110
+ "dart",
111
+ "bash",
112
+ "powershell",
113
+ "sql",
114
+ "terraform",
115
+ "bicep",
116
+ "yaml",
117
+ "dockerfile",
118
+ "html",
119
+ ];
120
+ // ─── Coverage Computation ───────────────────────────────────────────────────
121
+ export function buildCoverageMap(languages) {
122
+ const langs = languages || ALL_LANGUAGES;
123
+ const rules = [];
124
+ const matrix = {};
125
+ // Universal rules
126
+ for (const r of UNIVERSAL_RULES) {
127
+ const coverage = {
128
+ ruleId: r.pattern.replace(/-$/, ""),
129
+ languages: [...langs],
130
+ severity: r.severity,
131
+ judge: r.judge,
132
+ };
133
+ rules.push(coverage);
134
+ matrix[coverage.ruleId] = {};
135
+ for (const l of langs)
136
+ matrix[coverage.ruleId][l] = true;
137
+ }
138
+ // Language-specific rules
139
+ for (const r of LANGUAGE_RULES) {
140
+ const applicableLangs = r.languages.filter((l) => langs.includes(l));
141
+ const coverage = {
142
+ ruleId: r.pattern.replace(/-$/, ""),
143
+ languages: applicableLangs,
144
+ severity: r.severity,
145
+ judge: r.judge,
146
+ };
147
+ rules.push(coverage);
148
+ matrix[coverage.ruleId] = {};
149
+ for (const l of langs)
150
+ matrix[coverage.ruleId][l] = applicableLangs.includes(l);
151
+ }
152
+ // Statistics
153
+ const byLanguage = {};
154
+ const byJudge = {};
155
+ for (const r of rules) {
156
+ byJudge[r.judge] = (byJudge[r.judge] || 0) + 1;
157
+ for (const l of r.languages) {
158
+ byLanguage[l] = (byLanguage[l] || 0) + 1;
159
+ }
160
+ }
161
+ return {
162
+ languages: langs,
163
+ rules,
164
+ matrix,
165
+ stats: { totalRules: rules.length, byLanguage, byJudge },
166
+ };
167
+ }
168
+ // ─── CLI ────────────────────────────────────────────────────────────────────
169
+ export function runCoverageMap(argv) {
170
+ if (argv.includes("--help") || argv.includes("-h")) {
171
+ console.log(`
172
+ judges coverage-map — Show which rules apply to which languages
173
+
174
+ Usage:
175
+ judges coverage-map Full coverage matrix
176
+ judges coverage-map --languages typescript,python Focus on specific languages
177
+ judges coverage-map --judge cybersecurity Filter by judge
178
+
179
+ Options:
180
+ --languages <list> Comma-separated languages to show
181
+ --judge <id> Filter rules by judge
182
+ --format json JSON output
183
+ --help, -h Show this help
184
+ `);
185
+ return;
186
+ }
187
+ const langsArg = argv.find((_a, i) => argv[i - 1] === "--languages");
188
+ const judgeFilter = argv.find((_a, i) => argv[i - 1] === "--judge");
189
+ const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
190
+ const languages = langsArg ? langsArg.split(",").map((s) => s.trim()) : undefined;
191
+ const map = buildCoverageMap(languages);
192
+ let rules = map.rules;
193
+ if (judgeFilter) {
194
+ rules = rules.filter((r) => r.judge === judgeFilter);
195
+ }
196
+ if (format === "json") {
197
+ console.log(JSON.stringify({ ...map, rules }, null, 2));
198
+ return;
199
+ }
200
+ console.log(`\n Rule Coverage Map\n`);
201
+ console.log(` Total rules: ${rules.length} | Languages: ${map.languages.length}\n`);
202
+ // Show compact matrix
203
+ const displayLangs = map.languages.slice(0, 12); // limit width
204
+ const header = " " + "Rule".padEnd(20) + displayLangs.map((l) => l.slice(0, 4).padEnd(5)).join("");
205
+ console.log(header);
206
+ console.log(" " + "─".repeat(header.length - 2));
207
+ for (const r of rules) {
208
+ const row = displayLangs.map((l) => (r.languages.includes(l) ? " ✓ " : " · ")).join("");
209
+ console.log(` ${r.ruleId.padEnd(20)}${row}`);
210
+ }
211
+ console.log(`\n Coverage by language:`);
212
+ const sorted = Object.entries(map.stats.byLanguage).sort((a, b) => b[1] - a[1]);
213
+ for (const [lang, count] of sorted) {
214
+ const pct = ((count / rules.length) * 100).toFixed(0);
215
+ console.log(` ${lang.padEnd(15)} ${String(count).padStart(3)} rules (${pct}%)`);
216
+ }
217
+ console.log(`\n Coverage by judge:`);
218
+ for (const [judge, count] of Object.entries(map.stats.byJudge).sort((a, b) => b[1] - a[1])) {
219
+ console.log(` ${judge.padEnd(25)} ${count} rules`);
220
+ }
221
+ console.log("");
222
+ }
223
+ //# sourceMappingURL=coverage-map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverage-map.js","sourceRoot":"","sources":["../../src/commands/coverage-map.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * `judges dedup-report` — Cross-run finding deduplication report.
3
+ *
4
+ * Shows which findings are new vs recurring vs fixed across runs.
5
+ * Built on the existing finding-lifecycle tracking infrastructure.
6
+ *
7
+ * Usage:
8
+ * judges dedup-report # Show finding delta report
9
+ * judges dedup-report --format json # JSON output
10
+ * judges dedup-report --stats # Summary statistics only
11
+ */
12
+ export declare function runDedupReport(argv: string[]): void;
13
+ //# sourceMappingURL=dedup-report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dedup-report.d.ts","sourceRoot":"","sources":["../../src/commands/dedup-report.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAQH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA0HnD"}
@@ -0,0 +1,138 @@
1
+ /**
2
+ * `judges dedup-report` — Cross-run finding deduplication report.
3
+ *
4
+ * Shows which findings are new vs recurring vs fixed across runs.
5
+ * Built on the existing finding-lifecycle tracking infrastructure.
6
+ *
7
+ * Usage:
8
+ * judges dedup-report # Show finding delta report
9
+ * judges dedup-report --format json # JSON output
10
+ * judges dedup-report --stats # Summary statistics only
11
+ */
12
+ import { loadFindingStore, getFindingStats } from "../finding-lifecycle.js";
13
+ import { resolve } from "path";
14
+ // ─── CLI Runner ─────────────────────────────────────────────────────────────
15
+ export function runDedupReport(argv) {
16
+ if (argv.includes("--help") || argv.includes("-h")) {
17
+ console.log(`
18
+ judges dedup-report — Cross-run finding deduplication report
19
+
20
+ Usage:
21
+ judges dedup-report [dir] Show finding delta report
22
+ judges dedup-report --stats Summary statistics only
23
+ judges dedup-report --recurring Show only recurring findings
24
+ judges dedup-report --new Show only new findings since last run
25
+ judges dedup-report --fixed Show recently fixed findings
26
+ judges dedup-report --format json JSON output
27
+
28
+ Reads .judges-findings.json from the project directory to show:
29
+ • New findings introduced since last run
30
+ • Recurring findings (persistent across runs)
31
+ • Fixed findings (no longer detected)
32
+ • Trend analysis (improving / stable / degrading)
33
+
34
+ Options:
35
+ --dir <path> Project directory (default: current)
36
+ --stats Show summary statistics only
37
+ --recurring Filter to recurring findings
38
+ --new Filter to newly introduced findings
39
+ --fixed Filter to fixed findings
40
+ --format <fmt> Output format: text, json
41
+ --help, -h Show this help
42
+ `);
43
+ return;
44
+ }
45
+ const dir = resolve(argv.find((_a, i) => argv[i - 1] === "--dir") ||
46
+ argv.find((a, i) => i > 1 && !a.startsWith("-") && argv[i - 1] !== "--format" && argv[i - 1] !== "--dir") ||
47
+ ".");
48
+ const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
49
+ const statsOnly = argv.includes("--stats");
50
+ const showRecurring = argv.includes("--recurring");
51
+ const showNew = argv.includes("--new");
52
+ const showFixed = argv.includes("--fixed");
53
+ const store = loadFindingStore(dir);
54
+ if (store.findings.length === 0) {
55
+ console.log("\n No finding history found. Run 'judges eval' first to build the finding store.\n");
56
+ return;
57
+ }
58
+ const stats = getFindingStats(store);
59
+ if (format === "json") {
60
+ const data = { stats, runNumber: store.runNumber, lastRunAt: store.lastRunAt };
61
+ if (!statsOnly) {
62
+ const openFindings = store.findings.filter((f) => f.status === "open");
63
+ const fixedFindings = store.findings.filter((f) => f.status === "fixed");
64
+ const newFindings = openFindings.filter((f) => f.runCount === 1);
65
+ const recurringFindings = openFindings.filter((f) => f.runCount > 1);
66
+ if (showNew)
67
+ data.findings = newFindings;
68
+ else if (showRecurring)
69
+ data.findings = recurringFindings;
70
+ else if (showFixed)
71
+ data.findings = fixedFindings;
72
+ else
73
+ data.findings = { new: newFindings, recurring: recurringFindings, fixed: fixedFindings };
74
+ }
75
+ console.log(JSON.stringify(data, null, 2));
76
+ return;
77
+ }
78
+ // Text output
79
+ console.log(`\n Finding Deduplication Report — Run #${store.runNumber} (${store.lastRunAt})\n`);
80
+ // Stats
81
+ console.log(` Total tracked: ${stats.totalOpen + stats.totalFixed}`);
82
+ console.log(` Open: ${stats.totalOpen}`);
83
+ console.log(` Fixed: ${stats.totalFixed}`);
84
+ console.log(` Triaged: ${stats.totalTriaged}`);
85
+ console.log(` Avg age (days): ${Math.round(stats.avgAge)}`);
86
+ console.log("");
87
+ // Severity breakdown
88
+ console.log(" By severity:");
89
+ for (const [sev, count] of Object.entries(stats.bySeverity)) {
90
+ if (count > 0) {
91
+ console.log(` ${sev.toUpperCase().padEnd(10)} ${count}`);
92
+ }
93
+ }
94
+ console.log("");
95
+ if (statsOnly)
96
+ return;
97
+ const openFindings = store.findings.filter((f) => f.status === "open");
98
+ const fixedFindings = store.findings.filter((f) => f.status === "fixed");
99
+ const newFindings = openFindings.filter((f) => f.runCount === 1);
100
+ const recurringFindings = openFindings.filter((f) => f.runCount > 1);
101
+ // New findings
102
+ if (!showRecurring && !showFixed && newFindings.length > 0) {
103
+ console.log(` ─── New Findings (${newFindings.length}) ───\n`);
104
+ printFindings(newFindings);
105
+ }
106
+ // Recurring
107
+ if (!showNew && !showFixed && recurringFindings.length > 0) {
108
+ console.log(` ─── Recurring Findings (${recurringFindings.length}) ───\n`);
109
+ printFindings(recurringFindings, true);
110
+ }
111
+ // Fixed
112
+ if (!showNew && !showRecurring && fixedFindings.length > 0) {
113
+ const recentFixed = fixedFindings.filter((f) => {
114
+ if (!f.fixedAt)
115
+ return false;
116
+ const fixedDate = new Date(f.fixedAt);
117
+ const weekAgo = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000);
118
+ return fixedDate >= weekAgo;
119
+ });
120
+ if (recentFixed.length > 0) {
121
+ console.log(` ─── Recently Fixed (${recentFixed.length}) ───\n`);
122
+ printFindings(recentFixed);
123
+ }
124
+ }
125
+ console.log("");
126
+ }
127
+ function printFindings(findings, showRunCount = false) {
128
+ for (const f of findings.slice(0, 20)) {
129
+ const runInfo = showRunCount ? ` (${f.runCount} runs)` : "";
130
+ console.log(` • [${f.severity.toUpperCase()}] ${f.ruleId}: ${f.title}${runInfo}`);
131
+ console.log(` ${f.filePath}`);
132
+ }
133
+ if (findings.length > 20) {
134
+ console.log(` ... and ${findings.length - 20} more`);
135
+ }
136
+ console.log("");
137
+ }
138
+ //# sourceMappingURL=dedup-report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dedup-report.js","sourceRoot":"","sources":["../../src/commands/dedup-report.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * `judges dep-audit` — Dependency vulnerability correlation.
3
+ *
4
+ * Correlates code-level findings with known vulnerabilities in project
5
+ * dependencies. Uses npm audit / pip audit output to enrich findings
6
+ * with CVE data, adding urgency context to code review.
7
+ *
8
+ * Usage:
9
+ * judges dep-audit # Audit current directory
10
+ * judges dep-audit --format json # JSON output
11
+ * judges dep-audit --correlate results.json # Correlate with findings
12
+ */
13
+ import type { Finding, Severity } from "../types.js";
14
+ export interface VulnerablePackage {
15
+ /** Package name */
16
+ name: string;
17
+ /** Installed version */
18
+ version: string;
19
+ /** Vulnerability severity */
20
+ severity: Severity;
21
+ /** CVE identifier(s) */
22
+ cves: string[];
23
+ /** CWE identifier(s) */
24
+ cwes: string[];
25
+ /** Advisory title */
26
+ title: string;
27
+ /** URL for more information */
28
+ url?: string;
29
+ /** Fixed version (if known) */
30
+ fixedIn?: string;
31
+ }
32
+ export interface DepAuditResult {
33
+ /** Detected package manager */
34
+ packageManager: "npm" | "pip" | "unknown";
35
+ /** Vulnerable packages found */
36
+ vulnerabilities: VulnerablePackage[];
37
+ /** Total vulnerability count */
38
+ totalVulnerabilities: number;
39
+ /** Counts by severity */
40
+ severityCounts: Record<Severity, number>;
41
+ /** Correlations with code findings */
42
+ correlations: Array<{
43
+ vulnerability: VulnerablePackage;
44
+ relatedFindings: Array<{
45
+ ruleId: string;
46
+ title: string;
47
+ reason: string;
48
+ }>;
49
+ }>;
50
+ }
51
+ export declare function runDepAudit(dir: string, findings?: Finding[]): DepAuditResult;
52
+ export declare function runDepAuditCommand(argv: string[]): void;
53
+ //# sourceMappingURL=dep-audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dep-audit.d.ts","sourceRoot":"","sources":["../../src/commands/dep-audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAIrD,MAAM,WAAW,iBAAiB;IAChC,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,wBAAwB;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,6BAA6B;IAC7B,QAAQ,EAAE,QAAQ,CAAC;IACnB,wBAAwB;IACxB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,wBAAwB;IACxB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,qBAAqB;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,+BAA+B;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,+BAA+B;IAC/B,cAAc,EAAE,KAAK,GAAG,KAAK,GAAG,SAAS,CAAC;IAC1C,gCAAgC;IAChC,eAAe,EAAE,iBAAiB,EAAE,CAAC;IACrC,gCAAgC;IAChC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,yBAAyB;IACzB,cAAc,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACzC,sCAAsC;IACtC,YAAY,EAAE,KAAK,CAAC;QAClB,aAAa,EAAE,iBAAiB,CAAC;QACjC,eAAe,EAAE,KAAK,CAAC;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAC3E,CAAC,CAAC;CACJ;AA0KD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,cAAc,CA+B7E;AAID,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAgGvD"}