@kevinrabun/judges 3.38.0 → 3.41.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.
- package/CHANGELOG.md +68 -0
- package/README.md +5 -4
- package/dist/api.d.ts +5 -2
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +5 -1
- package/dist/api.js.map +1 -1
- package/dist/ast/structural-parser.js +3 -3
- package/dist/ast/structural-parser.js.map +1 -1
- package/dist/calibration.d.ts +35 -0
- package/dist/calibration.d.ts.map +1 -1
- package/dist/calibration.js +52 -0
- package/dist/calibration.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +370 -16
- package/dist/cli.js.map +1 -1
- package/dist/commands/auto-calibrate.d.ts +15 -0
- package/dist/commands/auto-calibrate.d.ts.map +1 -0
- package/dist/commands/auto-calibrate.js +107 -0
- package/dist/commands/auto-calibrate.js.map +1 -0
- package/dist/commands/benchmark-languages.js +4 -4
- package/dist/commands/benchmark.d.ts +2 -1
- package/dist/commands/benchmark.d.ts.map +1 -1
- package/dist/commands/benchmark.js +67 -2
- package/dist/commands/benchmark.js.map +1 -1
- package/dist/commands/calibration-dashboard.d.ts.map +1 -1
- package/dist/commands/calibration-dashboard.js +198 -0
- package/dist/commands/calibration-dashboard.js.map +1 -1
- package/dist/commands/calibration-share.d.ts +31 -0
- package/dist/commands/calibration-share.d.ts.map +1 -0
- package/dist/commands/calibration-share.js +183 -0
- package/dist/commands/calibration-share.js.map +1 -0
- package/dist/commands/compliance-report.d.ts +35 -0
- package/dist/commands/compliance-report.d.ts.map +1 -0
- package/dist/commands/compliance-report.js +162 -0
- package/dist/commands/compliance-report.js.map +1 -0
- package/dist/commands/config-migrate.d.ts +44 -0
- package/dist/commands/config-migrate.d.ts.map +1 -0
- package/dist/commands/config-migrate.js +241 -0
- package/dist/commands/config-migrate.js.map +1 -0
- package/dist/commands/dedup-report.d.ts +13 -0
- package/dist/commands/dedup-report.d.ts.map +1 -0
- package/dist/commands/dedup-report.js +138 -0
- package/dist/commands/dedup-report.js.map +1 -0
- package/dist/commands/dep-audit.d.ts +53 -0
- package/dist/commands/dep-audit.d.ts.map +1 -0
- package/dist/commands/dep-audit.js +278 -0
- package/dist/commands/dep-audit.js.map +1 -0
- package/dist/commands/deprecated.d.ts +48 -0
- package/dist/commands/deprecated.d.ts.map +1 -0
- package/dist/commands/deprecated.js +202 -0
- package/dist/commands/deprecated.js.map +1 -0
- package/dist/commands/diff.d.ts.map +1 -1
- package/dist/commands/diff.js +8 -3
- package/dist/commands/diff.js.map +1 -1
- package/dist/commands/feedback-rules.d.ts +29 -0
- package/dist/commands/feedback-rules.d.ts.map +1 -0
- package/dist/commands/feedback-rules.js +174 -0
- package/dist/commands/feedback-rules.js.map +1 -0
- package/dist/commands/feedback.d.ts +12 -0
- package/dist/commands/feedback.d.ts.map +1 -1
- package/dist/commands/feedback.js +16 -0
- package/dist/commands/feedback.js.map +1 -1
- package/dist/commands/fix-pr.d.ts +23 -0
- package/dist/commands/fix-pr.d.ts.map +1 -0
- package/dist/commands/fix-pr.js +323 -0
- package/dist/commands/fix-pr.js.map +1 -0
- package/dist/commands/fix.d.ts.map +1 -1
- package/dist/commands/fix.js +33 -1
- package/dist/commands/fix.js.map +1 -1
- package/dist/commands/governance.d.ts +32 -0
- package/dist/commands/governance.d.ts.map +1 -0
- package/dist/commands/governance.js +203 -0
- package/dist/commands/governance.js.map +1 -0
- package/dist/commands/help.d.ts +8 -0
- package/dist/commands/help.d.ts.map +1 -0
- package/dist/commands/help.js +303 -0
- package/dist/commands/help.js.map +1 -0
- package/dist/commands/hook.d.ts.map +1 -1
- package/dist/commands/hook.js +17 -20
- package/dist/commands/hook.js.map +1 -1
- package/dist/commands/interactive-fix.d.ts +23 -0
- package/dist/commands/interactive-fix.d.ts.map +1 -0
- package/dist/commands/interactive-fix.js +140 -0
- package/dist/commands/interactive-fix.js.map +1 -0
- package/dist/commands/llm-benchmark.d.ts +119 -0
- package/dist/commands/llm-benchmark.d.ts.map +1 -0
- package/dist/commands/llm-benchmark.js +396 -0
- package/dist/commands/llm-benchmark.js.map +1 -0
- package/dist/commands/metrics-dashboard.d.ts +22 -0
- package/dist/commands/metrics-dashboard.d.ts.map +1 -0
- package/dist/commands/metrics-dashboard.js +335 -0
- package/dist/commands/metrics-dashboard.js.map +1 -0
- package/dist/commands/metrics.d.ts +58 -0
- package/dist/commands/metrics.d.ts.map +1 -0
- package/dist/commands/metrics.js +242 -0
- package/dist/commands/metrics.js.map +1 -0
- package/dist/commands/monorepo.d.ts +38 -0
- package/dist/commands/monorepo.d.ts.map +1 -0
- package/dist/commands/monorepo.js +233 -0
- package/dist/commands/monorepo.js.map +1 -0
- package/dist/commands/notify.d.ts +79 -0
- package/dist/commands/notify.d.ts.map +1 -0
- package/dist/commands/notify.js +325 -0
- package/dist/commands/notify.js.map +1 -0
- package/dist/commands/onboard.d.ts +13 -0
- package/dist/commands/onboard.d.ts.map +1 -0
- package/dist/commands/onboard.js +179 -0
- package/dist/commands/onboard.js.map +1 -0
- package/dist/commands/org-metrics.d.ts +24 -0
- package/dist/commands/org-metrics.d.ts.map +1 -0
- package/dist/commands/org-metrics.js +238 -0
- package/dist/commands/org-metrics.js.map +1 -0
- package/dist/commands/override.d.ts +62 -0
- package/dist/commands/override.d.ts.map +1 -0
- package/dist/commands/override.js +264 -0
- package/dist/commands/override.js.map +1 -0
- package/dist/commands/parity.d.ts +31 -0
- package/dist/commands/parity.d.ts.map +1 -0
- package/dist/commands/parity.js +213 -0
- package/dist/commands/parity.js.map +1 -0
- package/dist/commands/plugin-search.d.ts +40 -0
- package/dist/commands/plugin-search.d.ts.map +1 -0
- package/dist/commands/plugin-search.js +328 -0
- package/dist/commands/plugin-search.js.map +1 -0
- package/dist/commands/plugins.d.ts +13 -0
- package/dist/commands/plugins.d.ts.map +1 -0
- package/dist/commands/plugins.js +105 -0
- package/dist/commands/plugins.js.map +1 -0
- package/dist/commands/quality-gate.d.ts +70 -0
- package/dist/commands/quality-gate.d.ts.map +1 -0
- package/dist/commands/quality-gate.js +264 -0
- package/dist/commands/quality-gate.js.map +1 -0
- package/dist/commands/review.js +1 -1
- package/dist/commands/review.js.map +1 -1
- package/dist/commands/snapshot.d.ts +27 -0
- package/dist/commands/snapshot.d.ts.map +1 -1
- package/dist/commands/snapshot.js +99 -0
- package/dist/commands/snapshot.js.map +1 -1
- package/dist/commands/trace.d.ts +65 -0
- package/dist/commands/trace.d.ts.map +1 -0
- package/dist/commands/trace.js +246 -0
- package/dist/commands/trace.js.map +1 -0
- package/dist/commands/trust-ramp.d.ts +30 -0
- package/dist/commands/trust-ramp.d.ts.map +1 -0
- package/dist/commands/trust-ramp.js +190 -0
- package/dist/commands/trust-ramp.js.map +1 -0
- package/dist/config.d.ts +5 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +65 -0
- package/dist/config.js.map +1 -1
- package/dist/data-adapter.d.ts +124 -0
- package/dist/data-adapter.d.ts.map +1 -0
- package/dist/data-adapter.js +213 -0
- package/dist/data-adapter.js.map +1 -0
- package/dist/evaluators/accessibility.js +1 -1
- package/dist/evaluators/accessibility.js.map +1 -1
- package/dist/evaluators/ai-code-safety.d.ts.map +1 -1
- package/dist/evaluators/ai-code-safety.js +1 -4
- package/dist/evaluators/ai-code-safety.js.map +1 -1
- package/dist/evaluators/cost-effectiveness.js +1 -1
- package/dist/evaluators/cost-effectiveness.js.map +1 -1
- package/dist/evaluators/false-positive-review.js +4 -4
- package/dist/evaluators/false-positive-review.js.map +1 -1
- package/dist/evaluators/framework-rules.d.ts +59 -0
- package/dist/evaluators/framework-rules.d.ts.map +1 -0
- package/dist/evaluators/framework-rules.js +292 -0
- package/dist/evaluators/framework-rules.js.map +1 -0
- package/dist/evaluators/iac-security.js +1 -1
- package/dist/evaluators/iac-security.js.map +1 -1
- package/dist/evaluators/index.d.ts.map +1 -1
- package/dist/evaluators/index.js +59 -10
- package/dist/evaluators/index.js.map +1 -1
- package/dist/evaluators/intent-alignment.d.ts +4 -0
- package/dist/evaluators/intent-alignment.d.ts.map +1 -1
- package/dist/evaluators/intent-alignment.js +163 -0
- package/dist/evaluators/intent-alignment.js.map +1 -1
- package/dist/evaluators/logic-review.js +1 -1
- package/dist/evaluators/logic-review.js.map +1 -1
- package/dist/evaluators/maintainability.js +1 -1
- package/dist/evaluators/maintainability.js.map +1 -1
- package/dist/evaluators/over-engineering.js +3 -3
- package/dist/evaluators/over-engineering.js.map +1 -1
- package/dist/evaluators/project.d.ts +12 -0
- package/dist/evaluators/project.d.ts.map +1 -1
- package/dist/evaluators/project.js +86 -0
- package/dist/evaluators/project.js.map +1 -1
- package/dist/evaluators/security.js +2 -2
- package/dist/evaluators/security.js.map +1 -1
- package/dist/evaluators/ux.js +1 -1
- package/dist/evaluators/ux.js.map +1 -1
- package/dist/finding-lifecycle.d.ts +9 -0
- package/dist/finding-lifecycle.d.ts.map +1 -1
- package/dist/finding-lifecycle.js +15 -0
- package/dist/finding-lifecycle.js.map +1 -1
- package/dist/fix-history.d.ts +9 -0
- package/dist/fix-history.d.ts.map +1 -1
- package/dist/fix-history.js +15 -0
- package/dist/fix-history.js.map +1 -1
- package/dist/formatters/sarif.d.ts +3 -0
- package/dist/formatters/sarif.d.ts.map +1 -1
- package/dist/formatters/sarif.js +36 -12
- package/dist/formatters/sarif.js.map +1 -1
- package/dist/github-app.d.ts +16 -1
- package/dist/github-app.d.ts.map +1 -1
- package/dist/github-app.js +85 -2
- package/dist/github-app.js.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/judge-registry.d.ts +157 -0
- package/dist/judge-registry.d.ts.map +1 -0
- package/dist/judge-registry.js +273 -0
- package/dist/judge-registry.js.map +1 -0
- package/dist/judges/accessibility.d.ts.map +1 -1
- package/dist/judges/accessibility.js +4 -0
- package/dist/judges/accessibility.js.map +1 -1
- package/dist/judges/agent-instructions.d.ts.map +1 -1
- package/dist/judges/agent-instructions.js +4 -0
- package/dist/judges/agent-instructions.js.map +1 -1
- package/dist/judges/ai-code-safety.d.ts.map +1 -1
- package/dist/judges/ai-code-safety.js +4 -0
- package/dist/judges/ai-code-safety.js.map +1 -1
- package/dist/judges/api-contract.d.ts.map +1 -1
- package/dist/judges/api-contract.js +4 -0
- package/dist/judges/api-contract.js.map +1 -1
- package/dist/judges/api-design.d.ts.map +1 -1
- package/dist/judges/api-design.js +4 -0
- package/dist/judges/api-design.js.map +1 -1
- package/dist/judges/authentication.d.ts.map +1 -1
- package/dist/judges/authentication.js +4 -0
- package/dist/judges/authentication.js.map +1 -1
- package/dist/judges/backwards-compatibility.d.ts.map +1 -1
- package/dist/judges/backwards-compatibility.js +4 -0
- package/dist/judges/backwards-compatibility.js.map +1 -1
- package/dist/judges/caching.d.ts.map +1 -1
- package/dist/judges/caching.js +4 -0
- package/dist/judges/caching.js.map +1 -1
- package/dist/judges/ci-cd.d.ts.map +1 -1
- package/dist/judges/ci-cd.js +4 -0
- package/dist/judges/ci-cd.js.map +1 -1
- package/dist/judges/cloud-readiness.d.ts.map +1 -1
- package/dist/judges/cloud-readiness.js +4 -0
- package/dist/judges/cloud-readiness.js.map +1 -1
- package/dist/judges/code-structure.d.ts.map +1 -1
- package/dist/judges/code-structure.js +4 -0
- package/dist/judges/code-structure.js.map +1 -1
- package/dist/judges/compliance.d.ts.map +1 -1
- package/dist/judges/compliance.js +4 -0
- package/dist/judges/compliance.js.map +1 -1
- package/dist/judges/concurrency.d.ts.map +1 -1
- package/dist/judges/concurrency.js +4 -0
- package/dist/judges/concurrency.js.map +1 -1
- package/dist/judges/configuration-management.d.ts.map +1 -1
- package/dist/judges/configuration-management.js +4 -0
- package/dist/judges/configuration-management.js.map +1 -1
- package/dist/judges/cost-effectiveness.d.ts.map +1 -1
- package/dist/judges/cost-effectiveness.js +4 -0
- package/dist/judges/cost-effectiveness.js.map +1 -1
- package/dist/judges/cybersecurity.d.ts.map +1 -1
- package/dist/judges/cybersecurity.js +4 -0
- package/dist/judges/cybersecurity.js.map +1 -1
- package/dist/judges/data-security.d.ts.map +1 -1
- package/dist/judges/data-security.js +4 -0
- package/dist/judges/data-security.js.map +1 -1
- package/dist/judges/data-sovereignty.d.ts.map +1 -1
- package/dist/judges/data-sovereignty.js +4 -0
- package/dist/judges/data-sovereignty.js.map +1 -1
- package/dist/judges/database.d.ts.map +1 -1
- package/dist/judges/database.js +4 -0
- package/dist/judges/database.js.map +1 -1
- package/dist/judges/dependency-health.d.ts.map +1 -1
- package/dist/judges/dependency-health.js +4 -0
- package/dist/judges/dependency-health.js.map +1 -1
- package/dist/judges/documentation.d.ts.map +1 -1
- package/dist/judges/documentation.js +4 -0
- package/dist/judges/documentation.js.map +1 -1
- package/dist/judges/error-handling.d.ts.map +1 -1
- package/dist/judges/error-handling.js +4 -0
- package/dist/judges/error-handling.js.map +1 -1
- package/dist/judges/ethics-bias.d.ts.map +1 -1
- package/dist/judges/ethics-bias.js +4 -0
- package/dist/judges/ethics-bias.js.map +1 -1
- package/dist/judges/false-positive-review.d.ts.map +1 -1
- package/dist/judges/false-positive-review.js +2 -0
- package/dist/judges/false-positive-review.js.map +1 -1
- package/dist/judges/framework-safety.d.ts.map +1 -1
- package/dist/judges/framework-safety.js +4 -0
- package/dist/judges/framework-safety.js.map +1 -1
- package/dist/judges/hallucination-detection.d.ts.map +1 -1
- package/dist/judges/hallucination-detection.js +4 -0
- package/dist/judges/hallucination-detection.js.map +1 -1
- package/dist/judges/iac-security.d.ts.map +1 -1
- package/dist/judges/iac-security.js +4 -0
- package/dist/judges/iac-security.js.map +1 -1
- package/dist/judges/index.d.ts +59 -0
- package/dist/judges/index.d.ts.map +1 -1
- package/dist/judges/index.js +65 -189
- package/dist/judges/index.js.map +1 -1
- package/dist/judges/intent-alignment.d.ts.map +1 -1
- package/dist/judges/intent-alignment.js +4 -0
- package/dist/judges/intent-alignment.js.map +1 -1
- package/dist/judges/internationalization.d.ts.map +1 -1
- package/dist/judges/internationalization.js +4 -0
- package/dist/judges/internationalization.js.map +1 -1
- package/dist/judges/logging-privacy.d.ts.map +1 -1
- package/dist/judges/logging-privacy.js +4 -0
- package/dist/judges/logging-privacy.js.map +1 -1
- package/dist/judges/logic-review.d.ts.map +1 -1
- package/dist/judges/logic-review.js +4 -0
- package/dist/judges/logic-review.js.map +1 -1
- package/dist/judges/maintainability.d.ts.map +1 -1
- package/dist/judges/maintainability.js +4 -0
- package/dist/judges/maintainability.js.map +1 -1
- package/dist/judges/model-fingerprint.d.ts.map +1 -1
- package/dist/judges/model-fingerprint.js +4 -0
- package/dist/judges/model-fingerprint.js.map +1 -1
- package/dist/judges/multi-turn-coherence.d.ts.map +1 -1
- package/dist/judges/multi-turn-coherence.js +4 -0
- package/dist/judges/multi-turn-coherence.js.map +1 -1
- package/dist/judges/observability.d.ts.map +1 -1
- package/dist/judges/observability.js +4 -0
- package/dist/judges/observability.js.map +1 -1
- package/dist/judges/over-engineering.d.ts.map +1 -1
- package/dist/judges/over-engineering.js +4 -0
- package/dist/judges/over-engineering.js.map +1 -1
- package/dist/judges/performance.d.ts.map +1 -1
- package/dist/judges/performance.js +4 -0
- package/dist/judges/performance.js.map +1 -1
- package/dist/judges/portability.d.ts.map +1 -1
- package/dist/judges/portability.js +4 -0
- package/dist/judges/portability.js.map +1 -1
- package/dist/judges/rate-limiting.d.ts.map +1 -1
- package/dist/judges/rate-limiting.js +4 -0
- package/dist/judges/rate-limiting.js.map +1 -1
- package/dist/judges/reliability.d.ts.map +1 -1
- package/dist/judges/reliability.js +4 -0
- package/dist/judges/reliability.js.map +1 -1
- package/dist/judges/scalability.d.ts.map +1 -1
- package/dist/judges/scalability.js +4 -0
- package/dist/judges/scalability.js.map +1 -1
- package/dist/judges/security.d.ts.map +1 -1
- package/dist/judges/security.js +4 -0
- package/dist/judges/security.js.map +1 -1
- package/dist/judges/software-practices.d.ts.map +1 -1
- package/dist/judges/software-practices.js +4 -0
- package/dist/judges/software-practices.js.map +1 -1
- package/dist/judges/testing.d.ts.map +1 -1
- package/dist/judges/testing.js +4 -0
- package/dist/judges/testing.js.map +1 -1
- package/dist/judges/ux.d.ts.map +1 -1
- package/dist/judges/ux.js +4 -0
- package/dist/judges/ux.js.map +1 -1
- package/dist/parallel.d.ts +53 -0
- package/dist/parallel.d.ts.map +1 -0
- package/dist/parallel.js +170 -0
- package/dist/parallel.js.map +1 -0
- package/dist/plugins.d.ts +8 -51
- package/dist/plugins.d.ts.map +1 -1
- package/dist/plugins.js +16 -125
- package/dist/plugins.js.map +1 -1
- package/dist/security-ids.d.ts +24 -0
- package/dist/security-ids.d.ts.map +1 -0
- package/dist/security-ids.js +240 -0
- package/dist/security-ids.js.map +1 -0
- package/dist/tools/prompts.d.ts +4 -0
- package/dist/tools/prompts.d.ts.map +1 -1
- package/dist/tools/prompts.js +6 -4
- package/dist/tools/prompts.js.map +1 -1
- package/dist/tools/register-scaffold.d.ts +3 -0
- package/dist/tools/register-scaffold.d.ts.map +1 -0
- package/dist/tools/register-scaffold.js +399 -0
- package/dist/tools/register-scaffold.js.map +1 -0
- package/dist/tools/register.d.ts +1 -1
- package/dist/tools/register.d.ts.map +1 -1
- package/dist/tools/register.js +3 -1
- package/dist/tools/register.js.map +1 -1
- package/dist/types.d.ts +75 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -2
- package/server.json +2 -2
|
@@ -0,0 +1,278 @@
|
|
|
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 { existsSync, readFileSync } from "fs";
|
|
14
|
+
import { execSync } from "child_process";
|
|
15
|
+
import { resolve, join } from "path";
|
|
16
|
+
// ─── npm Audit ──────────────────────────────────────────────────────────────
|
|
17
|
+
function runNpmAudit(dir) {
|
|
18
|
+
try {
|
|
19
|
+
const output = execSync("npm audit --json 2>/dev/null || true", {
|
|
20
|
+
cwd: dir,
|
|
21
|
+
encoding: "utf-8",
|
|
22
|
+
timeout: 30000,
|
|
23
|
+
});
|
|
24
|
+
const data = JSON.parse(output);
|
|
25
|
+
const vulns = [];
|
|
26
|
+
// npm audit v2 format (npm >= 7)
|
|
27
|
+
const advisories = (data.vulnerabilities || {});
|
|
28
|
+
for (const [name, info] of Object.entries(advisories)) {
|
|
29
|
+
const severity = mapNpmSeverity(info.severity);
|
|
30
|
+
const via = (info.via || []);
|
|
31
|
+
const cves = [];
|
|
32
|
+
const cwes = [];
|
|
33
|
+
let title = `Vulnerability in ${name}`;
|
|
34
|
+
let url;
|
|
35
|
+
for (const v of via) {
|
|
36
|
+
if (typeof v === "object" && v !== null) {
|
|
37
|
+
if (v.cve)
|
|
38
|
+
cves.push(v.cve);
|
|
39
|
+
if (v.cwe) {
|
|
40
|
+
const cweArr = Array.isArray(v.cwe) ? v.cwe : [v.cwe];
|
|
41
|
+
cwes.push(...cweArr.map((c) => c));
|
|
42
|
+
}
|
|
43
|
+
if (v.title)
|
|
44
|
+
title = v.title;
|
|
45
|
+
if (v.url)
|
|
46
|
+
url = v.url;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
vulns.push({
|
|
50
|
+
name,
|
|
51
|
+
version: info.version || "unknown",
|
|
52
|
+
severity,
|
|
53
|
+
cves: [...new Set(cves)],
|
|
54
|
+
cwes: [...new Set(cwes)],
|
|
55
|
+
title,
|
|
56
|
+
url,
|
|
57
|
+
fixedIn: info.fixAvailable?.version,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
return vulns;
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
return [];
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
function mapNpmSeverity(sev) {
|
|
67
|
+
switch (sev) {
|
|
68
|
+
case "critical":
|
|
69
|
+
return "critical";
|
|
70
|
+
case "high":
|
|
71
|
+
return "high";
|
|
72
|
+
case "moderate":
|
|
73
|
+
return "medium";
|
|
74
|
+
case "low":
|
|
75
|
+
return "low";
|
|
76
|
+
default:
|
|
77
|
+
return "info";
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// ─── pip Audit ──────────────────────────────────────────────────────────────
|
|
81
|
+
function runPipAudit(dir) {
|
|
82
|
+
try {
|
|
83
|
+
const output = execSync("pip-audit --format=json 2>/dev/null || python -m pip_audit --format=json 2>/dev/null || true", {
|
|
84
|
+
cwd: dir,
|
|
85
|
+
encoding: "utf-8",
|
|
86
|
+
timeout: 30000,
|
|
87
|
+
});
|
|
88
|
+
if (!output.trim().startsWith("["))
|
|
89
|
+
return [];
|
|
90
|
+
const data = JSON.parse(output);
|
|
91
|
+
return data
|
|
92
|
+
.filter((entry) => entry.vulns && Array.isArray(entry.vulns) && entry.vulns.length > 0)
|
|
93
|
+
.map((entry) => {
|
|
94
|
+
const vulnEntries = entry.vulns;
|
|
95
|
+
return {
|
|
96
|
+
name: entry.name,
|
|
97
|
+
version: entry.version,
|
|
98
|
+
severity: "high",
|
|
99
|
+
cves: vulnEntries.map((v) => v.id || "").filter(Boolean),
|
|
100
|
+
cwes: [],
|
|
101
|
+
title: `Vulnerability in ${entry.name}`,
|
|
102
|
+
fixedIn: vulnEntries[0]?.fix_versions,
|
|
103
|
+
};
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
return [];
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// ─── Correlation Engine ─────────────────────────────────────────────────────
|
|
111
|
+
/** CWE-to-rule mapping for correlating deps vulnerabilities with code findings */
|
|
112
|
+
const CWE_TO_RULE_PREFIX = {
|
|
113
|
+
"CWE-79": ["SEC", "XSS"],
|
|
114
|
+
"CWE-89": ["SEC", "SQLI"],
|
|
115
|
+
"CWE-94": ["SEC"],
|
|
116
|
+
"CWE-78": ["SEC", "CMD"],
|
|
117
|
+
"CWE-22": ["SEC", "PATH"],
|
|
118
|
+
"CWE-611": ["SEC"],
|
|
119
|
+
"CWE-502": ["SEC"],
|
|
120
|
+
"CWE-200": ["DATA"],
|
|
121
|
+
"CWE-287": ["AUTH"],
|
|
122
|
+
"CWE-306": ["AUTH"],
|
|
123
|
+
"CWE-352": ["SEC", "CSRF"],
|
|
124
|
+
"CWE-918": ["SEC", "SSRF"],
|
|
125
|
+
"CWE-1321": ["SEC"],
|
|
126
|
+
"CWE-400": ["PERF", "DOS"],
|
|
127
|
+
};
|
|
128
|
+
function correlateVulnsWithFindings(vulns, findings) {
|
|
129
|
+
const correlations = [];
|
|
130
|
+
for (const vuln of vulns) {
|
|
131
|
+
const related = [];
|
|
132
|
+
for (const finding of findings) {
|
|
133
|
+
// Match by CWE
|
|
134
|
+
if (finding.cweIds && vuln.cwes.length > 0) {
|
|
135
|
+
const overlap = finding.cweIds.filter((cwe) => vuln.cwes.includes(cwe));
|
|
136
|
+
if (overlap.length > 0) {
|
|
137
|
+
related.push({
|
|
138
|
+
ruleId: finding.ruleId,
|
|
139
|
+
title: finding.title,
|
|
140
|
+
reason: `Shares CWE: ${overlap.join(", ")} with vulnerable dep ${vuln.name}`,
|
|
141
|
+
});
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// Match by rule prefix → CWE category
|
|
146
|
+
for (const cwe of vuln.cwes) {
|
|
147
|
+
const prefixes = CWE_TO_RULE_PREFIX[cwe] || [];
|
|
148
|
+
if (prefixes.some((p) => finding.ruleId.startsWith(p))) {
|
|
149
|
+
related.push({
|
|
150
|
+
ruleId: finding.ruleId,
|
|
151
|
+
title: finding.title,
|
|
152
|
+
reason: `Code pattern (${finding.ruleId}) relates to ${cwe} in vulnerable dep ${vuln.name}`,
|
|
153
|
+
});
|
|
154
|
+
break;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
if (related.length > 0) {
|
|
159
|
+
correlations.push({ vulnerability: vuln, relatedFindings: related });
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return correlations;
|
|
163
|
+
}
|
|
164
|
+
// ─── Main Audit Function ────────────────────────────────────────────────────
|
|
165
|
+
export function runDepAudit(dir, findings) {
|
|
166
|
+
let packageManager = "unknown";
|
|
167
|
+
let vulns = [];
|
|
168
|
+
// Detect and run audit
|
|
169
|
+
if (existsSync(join(dir, "package.json")) || existsSync(join(dir, "package-lock.json"))) {
|
|
170
|
+
packageManager = "npm";
|
|
171
|
+
vulns = runNpmAudit(dir);
|
|
172
|
+
}
|
|
173
|
+
else if (existsSync(join(dir, "requirements.txt")) ||
|
|
174
|
+
existsSync(join(dir, "pyproject.toml")) ||
|
|
175
|
+
existsSync(join(dir, "Pipfile"))) {
|
|
176
|
+
packageManager = "pip";
|
|
177
|
+
vulns = runPipAudit(dir);
|
|
178
|
+
}
|
|
179
|
+
const severityCounts = { critical: 0, high: 0, medium: 0, low: 0, info: 0 };
|
|
180
|
+
for (const v of vulns) {
|
|
181
|
+
severityCounts[v.severity]++;
|
|
182
|
+
}
|
|
183
|
+
const correlations = findings ? correlateVulnsWithFindings(vulns, findings) : [];
|
|
184
|
+
return {
|
|
185
|
+
packageManager,
|
|
186
|
+
vulnerabilities: vulns,
|
|
187
|
+
totalVulnerabilities: vulns.length,
|
|
188
|
+
severityCounts,
|
|
189
|
+
correlations,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
// ─── CLI Runner ─────────────────────────────────────────────────────────────
|
|
193
|
+
export function runDepAuditCommand(argv) {
|
|
194
|
+
if (argv.includes("--help") || argv.includes("-h")) {
|
|
195
|
+
console.log(`
|
|
196
|
+
judges dep-audit — Dependency vulnerability correlation
|
|
197
|
+
|
|
198
|
+
Usage:
|
|
199
|
+
judges dep-audit [dir] Audit dependencies
|
|
200
|
+
judges dep-audit --correlate results.json Correlate with code findings
|
|
201
|
+
judges dep-audit --format json JSON output
|
|
202
|
+
|
|
203
|
+
Supports:
|
|
204
|
+
• npm (package.json / package-lock.json)
|
|
205
|
+
• pip (requirements.txt / pyproject.toml / Pipfile)
|
|
206
|
+
|
|
207
|
+
Correlates dependency vulnerabilities with code findings by CWE mapping.
|
|
208
|
+
|
|
209
|
+
Options:
|
|
210
|
+
--correlate <file> Path to Judges JSON results file
|
|
211
|
+
--format <fmt> Output format: text, json
|
|
212
|
+
--help, -h Show this help
|
|
213
|
+
`);
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
const dir = argv.find((a, i) => i > 1 && !a.startsWith("-") && argv[i - 1] !== "--correlate" && argv[i - 1] !== "--format") ||
|
|
217
|
+
".";
|
|
218
|
+
const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
|
|
219
|
+
const correlatePath = argv.find((_a, i) => argv[i - 1] === "--correlate");
|
|
220
|
+
// Load findings for correlation if provided
|
|
221
|
+
let findings;
|
|
222
|
+
if (correlatePath && existsSync(correlatePath)) {
|
|
223
|
+
try {
|
|
224
|
+
const data = JSON.parse(readFileSync(correlatePath, "utf-8"));
|
|
225
|
+
findings = data.findings || [];
|
|
226
|
+
}
|
|
227
|
+
catch {
|
|
228
|
+
console.error(`Warning: Could not parse findings from ${correlatePath}`);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
console.log(`\n Running dependency audit in ${resolve(dir)}...\n`);
|
|
232
|
+
const result = runDepAudit(resolve(dir), findings);
|
|
233
|
+
if (format === "json") {
|
|
234
|
+
console.log(JSON.stringify(result, null, 2));
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
// Text output
|
|
238
|
+
if (result.packageManager === "unknown") {
|
|
239
|
+
console.log(" No supported package manifest found (package.json, requirements.txt, etc.)\n");
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
console.log(` Package manager: ${result.packageManager}`);
|
|
243
|
+
console.log(` Vulnerabilities: ${result.totalVulnerabilities}\n`);
|
|
244
|
+
if (result.totalVulnerabilities === 0) {
|
|
245
|
+
console.log(" ✅ No known vulnerabilities found.\n");
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
// Severity breakdown
|
|
249
|
+
for (const sev of ["critical", "high", "medium", "low", "info"]) {
|
|
250
|
+
if (result.severityCounts[sev] > 0) {
|
|
251
|
+
console.log(` ${sev.toUpperCase().padEnd(10)} ${result.severityCounts[sev]}`);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
console.log("");
|
|
255
|
+
// Top vulnerabilities
|
|
256
|
+
for (const vuln of result.vulnerabilities.slice(0, 15)) {
|
|
257
|
+
const fixInfo = vuln.fixedIn ? ` → fix: ${vuln.fixedIn}` : "";
|
|
258
|
+
console.log(` • [${vuln.severity.toUpperCase()}] ${vuln.name}@${vuln.version}: ${vuln.title}${fixInfo}`);
|
|
259
|
+
if (vuln.cves.length > 0) {
|
|
260
|
+
console.log(` CVE: ${vuln.cves.join(", ")}`);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
// Correlations
|
|
264
|
+
if (result.correlations.length > 0) {
|
|
265
|
+
console.log(`\n ─── Code ↔ Dependency Correlations ───\n`);
|
|
266
|
+
for (const corr of result.correlations) {
|
|
267
|
+
console.log(` 📦 ${corr.vulnerability.name} (${corr.vulnerability.cves.join(", ")})`);
|
|
268
|
+
for (const rel of corr.relatedFindings) {
|
|
269
|
+
console.log(` ↳ ${rel.ruleId}: ${rel.reason}`);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
console.log("");
|
|
274
|
+
if (result.severityCounts.critical > 0 || result.severityCounts.high > 0) {
|
|
275
|
+
process.exit(1);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
//# sourceMappingURL=dep-audit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dep-audit.js","sourceRoot":"","sources":["../../src/commands/dep-audit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rule deprecation lifecycle management.
|
|
3
|
+
*
|
|
4
|
+
* Provides a registry of deprecated Judges rules with migration guidance,
|
|
5
|
+
* sunset dates, and replacement rules. Emits warnings when deprecated
|
|
6
|
+
* rules appear in findings or config.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* judges deprecated # List all deprecated rules
|
|
10
|
+
* judges deprecated --check .judgesrc # Check config for deprecated rules
|
|
11
|
+
* judges deprecated --format json # JSON output
|
|
12
|
+
*/
|
|
13
|
+
export interface DeprecatedRule {
|
|
14
|
+
/** The deprecated rule ID */
|
|
15
|
+
ruleId: string;
|
|
16
|
+
/** When it was deprecated (version) */
|
|
17
|
+
deprecatedIn: string;
|
|
18
|
+
/** When it will be removed (version, or "TBD") */
|
|
19
|
+
removedIn: string;
|
|
20
|
+
/** Why it was deprecated */
|
|
21
|
+
reason: string;
|
|
22
|
+
/** Replacement rule(s), if any */
|
|
23
|
+
replacements: string[];
|
|
24
|
+
/** Migration guidance */
|
|
25
|
+
migration: string;
|
|
26
|
+
}
|
|
27
|
+
export interface DeprecationWarning {
|
|
28
|
+
ruleId: string;
|
|
29
|
+
location: "config" | "finding";
|
|
30
|
+
message: string;
|
|
31
|
+
replacements: string[];
|
|
32
|
+
}
|
|
33
|
+
export declare function getDeprecatedRules(): DeprecatedRule[];
|
|
34
|
+
export declare function isRuleDeprecated(ruleId: string): DeprecatedRule | undefined;
|
|
35
|
+
/**
|
|
36
|
+
* Check a config for references to deprecated rules.
|
|
37
|
+
* Scans disabledRules, ruleOverrides, and customRules.
|
|
38
|
+
*/
|
|
39
|
+
export declare function checkConfigForDeprecated(config: Record<string, unknown>): DeprecationWarning[];
|
|
40
|
+
/**
|
|
41
|
+
* Check findings for deprecated rules and annotate them.
|
|
42
|
+
*/
|
|
43
|
+
export declare function annotateDeprecatedFindings(findings: Array<{
|
|
44
|
+
ruleId: string;
|
|
45
|
+
[key: string]: unknown;
|
|
46
|
+
}>): DeprecationWarning[];
|
|
47
|
+
export declare function runDeprecatedCommand(argv: string[]): void;
|
|
48
|
+
//# sourceMappingURL=deprecated.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deprecated.d.ts","sourceRoot":"","sources":["../../src/commands/deprecated.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,MAAM,WAAW,cAAc;IAC7B,6BAA6B;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,YAAY,EAAE,MAAM,CAAC;IACrB,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB,4BAA4B;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAoDD,wBAAgB,kBAAkB,IAAI,cAAc,EAAE,CAErD;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAE3E;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,kBAAkB,EAAE,CA8C9F;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC,GAC1D,kBAAkB,EAAE,CAmBtB;AAID,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA6EzD"}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rule deprecation lifecycle management.
|
|
3
|
+
*
|
|
4
|
+
* Provides a registry of deprecated Judges rules with migration guidance,
|
|
5
|
+
* sunset dates, and replacement rules. Emits warnings when deprecated
|
|
6
|
+
* rules appear in findings or config.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* judges deprecated # List all deprecated rules
|
|
10
|
+
* judges deprecated --check .judgesrc # Check config for deprecated rules
|
|
11
|
+
* judges deprecated --format json # JSON output
|
|
12
|
+
*/
|
|
13
|
+
// ─── Deprecated Rules Registry ──────────────────────────────────────────────
|
|
14
|
+
const DEPRECATED_RULES = [
|
|
15
|
+
{
|
|
16
|
+
ruleId: "SEC-EVAL-001",
|
|
17
|
+
deprecatedIn: "3.10.0",
|
|
18
|
+
removedIn: "4.0.0",
|
|
19
|
+
reason: "Merged into SEC-INJ-001 for unified injection detection",
|
|
20
|
+
replacements: ["SEC-INJ-001"],
|
|
21
|
+
migration: "Replace SEC-EVAL-001 references in ruleOverrides with SEC-INJ-001. The new rule covers eval(), Function(), and other injection vectors.",
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
ruleId: "PERF-LOOP-001",
|
|
25
|
+
deprecatedIn: "3.15.0",
|
|
26
|
+
removedIn: "4.0.0",
|
|
27
|
+
reason: "Superseded by the more comprehensive PERF-COMPLEXITY-001 which covers loops, recursion, and algorithmic complexity",
|
|
28
|
+
replacements: ["PERF-COMPLEXITY-001"],
|
|
29
|
+
migration: "Update ruleOverrides to use PERF-COMPLEXITY-001. The new rule has more granular severity options.",
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
ruleId: "DOC-INLINE-001",
|
|
33
|
+
deprecatedIn: "3.20.0",
|
|
34
|
+
removedIn: "4.0.0",
|
|
35
|
+
reason: "Split into DOC-FUNC-001 (function docs) and DOC-CLASS-001 (class docs) for more targeted analysis",
|
|
36
|
+
replacements: ["DOC-FUNC-001", "DOC-CLASS-001"],
|
|
37
|
+
migration: "Replace DOC-INLINE-001 in ruleOverrides with DOC-FUNC-001 and/or DOC-CLASS-001 depending on your needs.",
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
ruleId: "DATA-PII-001",
|
|
41
|
+
deprecatedIn: "3.25.0",
|
|
42
|
+
removedIn: "4.0.0",
|
|
43
|
+
reason: "Replaced by DATA-001 which includes PII detection alongside other sensitive data patterns",
|
|
44
|
+
replacements: ["DATA-001"],
|
|
45
|
+
migration: "Update references from DATA-PII-001 to DATA-001. The new rule has broader coverage.",
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
ruleId: "SEC-CRYPTO-WEAK",
|
|
49
|
+
deprecatedIn: "3.30.0",
|
|
50
|
+
removedIn: "4.0.0",
|
|
51
|
+
reason: "Renamed to SEC-CRYPTO-001 for consistent naming convention",
|
|
52
|
+
replacements: ["SEC-CRYPTO-001"],
|
|
53
|
+
migration: "Simply rename SEC-CRYPTO-WEAK to SEC-CRYPTO-001 in all config references.",
|
|
54
|
+
},
|
|
55
|
+
];
|
|
56
|
+
// ─── Registry API ───────────────────────────────────────────────────────────
|
|
57
|
+
export function getDeprecatedRules() {
|
|
58
|
+
return [...DEPRECATED_RULES];
|
|
59
|
+
}
|
|
60
|
+
export function isRuleDeprecated(ruleId) {
|
|
61
|
+
return DEPRECATED_RULES.find((r) => r.ruleId === ruleId);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Check a config for references to deprecated rules.
|
|
65
|
+
* Scans disabledRules, ruleOverrides, and customRules.
|
|
66
|
+
*/
|
|
67
|
+
export function checkConfigForDeprecated(config) {
|
|
68
|
+
const warnings = [];
|
|
69
|
+
// Check disabledRules
|
|
70
|
+
const disabled = (config.disabledRules || []);
|
|
71
|
+
for (const ruleId of disabled) {
|
|
72
|
+
const dep = isRuleDeprecated(ruleId);
|
|
73
|
+
if (dep) {
|
|
74
|
+
warnings.push({
|
|
75
|
+
ruleId,
|
|
76
|
+
location: "config",
|
|
77
|
+
message: `disabledRules contains deprecated rule "${ruleId}" (deprecated in v${dep.deprecatedIn}). ${dep.migration}`,
|
|
78
|
+
replacements: dep.replacements,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// Check ruleOverrides keys
|
|
83
|
+
const overrides = (config.ruleOverrides || {});
|
|
84
|
+
for (const ruleId of Object.keys(overrides)) {
|
|
85
|
+
const dep = isRuleDeprecated(ruleId);
|
|
86
|
+
if (dep) {
|
|
87
|
+
warnings.push({
|
|
88
|
+
ruleId,
|
|
89
|
+
location: "config",
|
|
90
|
+
message: `ruleOverrides references deprecated rule "${ruleId}" (deprecated in v${dep.deprecatedIn}). ${dep.migration}`,
|
|
91
|
+
replacements: dep.replacements,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// Check lockedRules
|
|
96
|
+
const locked = (config.lockedRules || []);
|
|
97
|
+
for (const ruleId of locked) {
|
|
98
|
+
const dep = isRuleDeprecated(ruleId);
|
|
99
|
+
if (dep) {
|
|
100
|
+
warnings.push({
|
|
101
|
+
ruleId,
|
|
102
|
+
location: "config",
|
|
103
|
+
message: `lockedRules contains deprecated rule "${ruleId}" (deprecated in v${dep.deprecatedIn}). ${dep.migration}`,
|
|
104
|
+
replacements: dep.replacements,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return warnings;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Check findings for deprecated rules and annotate them.
|
|
112
|
+
*/
|
|
113
|
+
export function annotateDeprecatedFindings(findings) {
|
|
114
|
+
const warnings = [];
|
|
115
|
+
const seen = new Set();
|
|
116
|
+
for (const finding of findings) {
|
|
117
|
+
if (seen.has(finding.ruleId))
|
|
118
|
+
continue;
|
|
119
|
+
const dep = isRuleDeprecated(finding.ruleId);
|
|
120
|
+
if (dep) {
|
|
121
|
+
seen.add(finding.ruleId);
|
|
122
|
+
warnings.push({
|
|
123
|
+
ruleId: finding.ruleId,
|
|
124
|
+
location: "finding",
|
|
125
|
+
message: `Rule "${finding.ruleId}" is deprecated since v${dep.deprecatedIn}. ${dep.reason}`,
|
|
126
|
+
replacements: dep.replacements,
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return warnings;
|
|
131
|
+
}
|
|
132
|
+
// ─── CLI Runner ─────────────────────────────────────────────────────────────
|
|
133
|
+
export function runDeprecatedCommand(argv) {
|
|
134
|
+
if (argv.includes("--help") || argv.includes("-h")) {
|
|
135
|
+
console.log(`
|
|
136
|
+
judges deprecated — Rule deprecation lifecycle
|
|
137
|
+
|
|
138
|
+
Usage:
|
|
139
|
+
judges deprecated List all deprecated rules
|
|
140
|
+
judges deprecated --check .judgesrc Check config for deprecated references
|
|
141
|
+
judges deprecated --format json JSON output
|
|
142
|
+
|
|
143
|
+
Shows deprecated rules with migration guidance, replacement rules, and removal timeline.
|
|
144
|
+
|
|
145
|
+
Options:
|
|
146
|
+
--check <path> Check a .judgesrc for deprecated rule references
|
|
147
|
+
--format <fmt> Output format: text, json
|
|
148
|
+
--help, -h Show this help
|
|
149
|
+
`);
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
|
|
153
|
+
const checkPath = argv.find((_a, i) => argv[i - 1] === "--check");
|
|
154
|
+
// Check config mode
|
|
155
|
+
if (checkPath) {
|
|
156
|
+
try {
|
|
157
|
+
const { readFileSync, existsSync } = require("fs");
|
|
158
|
+
if (!existsSync(checkPath)) {
|
|
159
|
+
console.log(`\n File not found: ${checkPath}\n`);
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
const config = JSON.parse(readFileSync(checkPath, "utf-8"));
|
|
163
|
+
const warnings = checkConfigForDeprecated(config);
|
|
164
|
+
if (format === "json") {
|
|
165
|
+
console.log(JSON.stringify({ warnings }, null, 2));
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
console.log(`\n Checking ${checkPath} for deprecated rules...\n`);
|
|
169
|
+
if (warnings.length === 0) {
|
|
170
|
+
console.log(" ✅ No deprecated rule references found.\n");
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
for (const w of warnings) {
|
|
174
|
+
console.log(` ⚠️ ${w.message}`);
|
|
175
|
+
if (w.replacements.length > 0) {
|
|
176
|
+
console.log(` → Replace with: ${w.replacements.join(", ")}`);
|
|
177
|
+
}
|
|
178
|
+
console.log("");
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
catch (err) {
|
|
184
|
+
console.error(`\n Error checking config: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
// List all deprecated rules
|
|
189
|
+
const rules = getDeprecatedRules();
|
|
190
|
+
if (format === "json") {
|
|
191
|
+
console.log(JSON.stringify({ deprecatedRules: rules }, null, 2));
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
console.log("\n Deprecated Rules\n");
|
|
195
|
+
console.log(` ${"RULE ID".padEnd(20)} ${"DEPRECATED IN".padEnd(15)} ${"REMOVED IN".padEnd(12)} REPLACEMENT(S)`);
|
|
196
|
+
console.log(` ${"─".repeat(20)} ${"─".repeat(15)} ${"─".repeat(12)} ${"─".repeat(25)}`);
|
|
197
|
+
for (const rule of rules) {
|
|
198
|
+
console.log(` ${rule.ruleId.padEnd(20)} v${rule.deprecatedIn.padEnd(14)} v${rule.removedIn.padEnd(11)} ${rule.replacements.join(", ") || "—"}`);
|
|
199
|
+
}
|
|
200
|
+
console.log(`\n ${rules.length} deprecated rule(s). Run with --check <config> to scan your .judgesrc.\n`);
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=deprecated.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deprecated.js","sourceRoot":"","sources":["../../src/commands/deprecated.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/commands/diff.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/commands/diff.ts"],"names":[],"mappings":"AAgZA,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CA2BlG;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAgI5C"}
|
package/dist/commands/diff.js
CHANGED
|
@@ -157,7 +157,7 @@ const SECURITY_DELETION_PATTERNS = [
|
|
|
157
157
|
* Analyze removed lines for security-relevant deletions.
|
|
158
158
|
* Returns findings for patterns that were deleted from the codebase.
|
|
159
159
|
*/
|
|
160
|
-
function analyzeDeletions(removedLines,
|
|
160
|
+
function analyzeDeletions(removedLines, _filePath) {
|
|
161
161
|
if (removedLines.length === 0)
|
|
162
162
|
return [];
|
|
163
163
|
const findings = [];
|
|
@@ -208,8 +208,13 @@ function extractExportedSignatures(lines) {
|
|
|
208
208
|
function countParams(paramStr) {
|
|
209
209
|
if (!paramStr.trim())
|
|
210
210
|
return 0;
|
|
211
|
-
// Handle generic type parameters by removing angle-bracket contents
|
|
212
|
-
|
|
211
|
+
// Handle generic type parameters by removing angle-bracket contents iteratively
|
|
212
|
+
let cleaned = paramStr;
|
|
213
|
+
let prev;
|
|
214
|
+
do {
|
|
215
|
+
prev = cleaned;
|
|
216
|
+
cleaned = cleaned.replace(/<[^>]*>/g, "");
|
|
217
|
+
} while (cleaned !== prev);
|
|
213
218
|
return cleaned.split(",").length;
|
|
214
219
|
}
|
|
215
220
|
/**
|