@kevinrabun/judges-cli 3.124.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/README.md +24 -0
- package/agents/accessibility.judge.md +44 -0
- package/agents/agent-instructions.judge.md +44 -0
- package/agents/ai-code-safety.judge.md +55 -0
- package/agents/api-contract.judge.md +37 -0
- package/agents/api-design.judge.md +55 -0
- package/agents/authentication.judge.md +61 -0
- package/agents/backwards-compatibility.judge.md +44 -0
- package/agents/caching.judge.md +44 -0
- package/agents/ci-cd.judge.md +44 -0
- package/agents/cloud-readiness.judge.md +51 -0
- package/agents/code-structure.judge.md +48 -0
- package/agents/compliance.judge.md +47 -0
- package/agents/concurrency.judge.md +46 -0
- package/agents/configuration-management.judge.md +44 -0
- package/agents/cost-effectiveness.judge.md +40 -0
- package/agents/cybersecurity.judge.md +61 -0
- package/agents/data-security.judge.md +48 -0
- package/agents/data-sovereignty.judge.md +58 -0
- package/agents/database.judge.md +49 -0
- package/agents/dependency-health.judge.md +46 -0
- package/agents/documentation.judge.md +53 -0
- package/agents/error-handling.judge.md +53 -0
- package/agents/ethics-bias.judge.md +46 -0
- package/agents/false-positive-review.judge.md +85 -0
- package/agents/framework-safety.judge.md +47 -0
- package/agents/hallucination-detection.judge.md +46 -0
- package/agents/iac-security.judge.md +45 -0
- package/agents/intent-alignment.judge.md +44 -0
- package/agents/internationalization.judge.md +42 -0
- package/agents/logging-privacy.judge.md +44 -0
- package/agents/logic-review.judge.md +34 -0
- package/agents/maintainability.judge.md +44 -0
- package/agents/model-fingerprint.judge.md +31 -0
- package/agents/multi-turn-coherence.judge.md +36 -0
- package/agents/observability.judge.md +52 -0
- package/agents/over-engineering.judge.md +48 -0
- package/agents/performance.judge.md +44 -0
- package/agents/portability.judge.md +44 -0
- package/agents/rate-limiting.judge.md +53 -0
- package/agents/reliability.judge.md +55 -0
- package/agents/scalability.judge.md +50 -0
- package/agents/security.judge.md +62 -0
- package/agents/software-practices.judge.md +54 -0
- package/agents/testing.judge.md +52 -0
- package/agents/ux.judge.md +44 -0
- package/bin/judges.js +8 -0
- package/dist/a2a-protocol.d.ts +136 -0
- package/dist/a2a-protocol.js +218 -0
- package/dist/agent-loader.d.ts +107 -0
- package/dist/agent-loader.js +260 -0
- package/dist/api.d.ts +169 -0
- package/dist/api.js +195 -0
- package/dist/ast/cross-file-taint.d.ts +42 -0
- package/dist/ast/cross-file-taint.js +679 -0
- package/dist/ast/index.d.ts +25 -0
- package/dist/ast/index.js +148 -0
- package/dist/ast/structural-parser.d.ts +2 -0
- package/dist/ast/structural-parser.js +756 -0
- package/dist/ast/taint-tracker.d.ts +48 -0
- package/dist/ast/taint-tracker.js +1033 -0
- package/dist/ast/tree-sitter-ast.d.ts +33 -0
- package/dist/ast/tree-sitter-ast.js +1164 -0
- package/dist/ast/types.d.ts +50 -0
- package/dist/ast/types.js +7 -0
- package/dist/audit-trail.d.ts +245 -0
- package/dist/audit-trail.js +257 -0
- package/dist/auto-tune.d.ts +146 -0
- package/dist/auto-tune.js +373 -0
- package/dist/cache.d.ts +53 -0
- package/dist/cache.js +86 -0
- package/dist/calibration.d.ts +108 -0
- package/dist/calibration.js +219 -0
- package/dist/cli-dispatch.d.ts +7 -0
- package/dist/cli-dispatch.js +654 -0
- package/dist/cli-formatters.d.ts +6 -0
- package/dist/cli-formatters.js +186 -0
- package/dist/cli-helpers.d.ts +29 -0
- package/dist/cli-helpers.js +129 -0
- package/dist/cli.d.ts +30 -0
- package/dist/cli.js +1487 -0
- package/dist/commands/adoption-report.d.ts +7 -0
- package/dist/commands/adoption-report.js +218 -0
- package/dist/commands/adoption-track.d.ts +4 -0
- package/dist/commands/adoption-track.js +246 -0
- package/dist/commands/ai-gate.d.ts +7 -0
- package/dist/commands/ai-gate.js +212 -0
- package/dist/commands/ai-model-trust.d.ts +16 -0
- package/dist/commands/ai-model-trust.js +234 -0
- package/dist/commands/ai-output-compare.d.ts +8 -0
- package/dist/commands/ai-output-compare.js +202 -0
- package/dist/commands/ai-pattern-trend.d.ts +8 -0
- package/dist/commands/ai-pattern-trend.js +223 -0
- package/dist/commands/ai-prompt-audit.d.ts +22 -0
- package/dist/commands/ai-prompt-audit.js +254 -0
- package/dist/commands/ai-provenance.d.ts +4 -0
- package/dist/commands/ai-provenance.js +247 -0
- package/dist/commands/api-audit.d.ts +8 -0
- package/dist/commands/api-audit.js +359 -0
- package/dist/commands/api-misuse.d.ts +4 -0
- package/dist/commands/api-misuse.js +260 -0
- package/dist/commands/api-versioning-audit.d.ts +5 -0
- package/dist/commands/api-versioning-audit.js +233 -0
- package/dist/commands/approve-chain.d.ts +7 -0
- package/dist/commands/approve-chain.js +234 -0
- package/dist/commands/arch-audit.d.ts +8 -0
- package/dist/commands/arch-audit.js +283 -0
- package/dist/commands/assertion-density.d.ts +4 -0
- package/dist/commands/assertion-density.js +263 -0
- package/dist/commands/assign-findings.d.ts +36 -0
- package/dist/commands/assign-findings.js +177 -0
- package/dist/commands/async-safety.d.ts +4 -0
- package/dist/commands/async-safety.js +266 -0
- package/dist/commands/audit-bundle.d.ts +28 -0
- package/dist/commands/audit-bundle.js +234 -0
- package/dist/commands/audit-trail.d.ts +17 -0
- package/dist/commands/audit-trail.js +154 -0
- package/dist/commands/auto-approve.d.ts +4 -0
- package/dist/commands/auto-approve.js +188 -0
- package/dist/commands/auto-calibrate.d.ts +14 -0
- package/dist/commands/auto-calibrate.js +106 -0
- package/dist/commands/auto-detect.d.ts +61 -0
- package/dist/commands/auto-detect.js +328 -0
- package/dist/commands/auto-fix.d.ts +17 -0
- package/dist/commands/auto-fix.js +240 -0
- package/dist/commands/auto-triage.d.ts +31 -0
- package/dist/commands/auto-triage.js +125 -0
- package/dist/commands/baseline.d.ts +47 -0
- package/dist/commands/baseline.js +353 -0
- package/dist/commands/batch-review.d.ts +4 -0
- package/dist/commands/batch-review.js +180 -0
- package/dist/commands/benchmark-advanced.d.ts +14 -0
- package/dist/commands/benchmark-advanced.js +5057 -0
- package/dist/commands/benchmark-ai-agents.d.ts +8 -0
- package/dist/commands/benchmark-ai-agents.js +4123 -0
- package/dist/commands/benchmark-ai-output.d.ts +9 -0
- package/dist/commands/benchmark-ai-output.js +365 -0
- package/dist/commands/benchmark-compliance-ethics.d.ts +8 -0
- package/dist/commands/benchmark-compliance-ethics.js +3060 -0
- package/dist/commands/benchmark-expanded-2.d.ts +12 -0
- package/dist/commands/benchmark-expanded-2.js +5530 -0
- package/dist/commands/benchmark-expanded.d.ts +12 -0
- package/dist/commands/benchmark-expanded.js +2599 -0
- package/dist/commands/benchmark-infrastructure.d.ts +8 -0
- package/dist/commands/benchmark-infrastructure.js +2882 -0
- package/dist/commands/benchmark-languages.d.ts +8 -0
- package/dist/commands/benchmark-languages.js +1963 -0
- package/dist/commands/benchmark-quality-ops.d.ts +8 -0
- package/dist/commands/benchmark-quality-ops.js +3415 -0
- package/dist/commands/benchmark-security-deep.d.ts +9 -0
- package/dist/commands/benchmark-security-deep.js +2335 -0
- package/dist/commands/benchmark.d.ts +233 -0
- package/dist/commands/benchmark.js +3214 -0
- package/dist/commands/blame-review.d.ts +4 -0
- package/dist/commands/blame-review.js +266 -0
- package/dist/commands/boundary-enforce.d.ts +5 -0
- package/dist/commands/boundary-enforce.js +255 -0
- package/dist/commands/build-optimize.d.ts +6 -0
- package/dist/commands/build-optimize.js +256 -0
- package/dist/commands/burndown.d.ts +26 -0
- package/dist/commands/burndown.js +179 -0
- package/dist/commands/cache-audit.d.ts +4 -0
- package/dist/commands/cache-audit.js +219 -0
- package/dist/commands/calibration-dashboard.d.ts +1 -0
- package/dist/commands/calibration-dashboard.js +294 -0
- package/dist/commands/calibration-share.d.ts +30 -0
- package/dist/commands/calibration-share.js +182 -0
- package/dist/commands/chat-notify.d.ts +8 -0
- package/dist/commands/chat-notify.js +258 -0
- package/dist/commands/ci-template.d.ts +14 -0
- package/dist/commands/ci-template.js +211 -0
- package/dist/commands/ci-templates.d.ts +9 -0
- package/dist/commands/ci-templates.js +89 -0
- package/dist/commands/clarity-score.d.ts +8 -0
- package/dist/commands/clarity-score.js +260 -0
- package/dist/commands/clone-detect.d.ts +4 -0
- package/dist/commands/clone-detect.js +232 -0
- package/dist/commands/coach-mode.d.ts +7 -0
- package/dist/commands/coach-mode.js +229 -0
- package/dist/commands/code-health.d.ts +4 -0
- package/dist/commands/code-health.js +195 -0
- package/dist/commands/code-owner-suggest.d.ts +16 -0
- package/dist/commands/code-owner-suggest.js +214 -0
- package/dist/commands/code-similarity.d.ts +8 -0
- package/dist/commands/code-similarity.js +231 -0
- package/dist/commands/comment-drift.d.ts +4 -0
- package/dist/commands/comment-drift.js +228 -0
- package/dist/commands/commit-hygiene.d.ts +5 -0
- package/dist/commands/commit-hygiene.js +175 -0
- package/dist/commands/community-patterns.d.ts +1 -0
- package/dist/commands/community-patterns.js +131 -0
- package/dist/commands/compare-runs.d.ts +37 -0
- package/dist/commands/compare-runs.js +228 -0
- package/dist/commands/completion-audit.d.ts +4 -0
- package/dist/commands/completion-audit.js +296 -0
- package/dist/commands/completions.d.ts +1 -0
- package/dist/commands/completions.js +257 -0
- package/dist/commands/compliance-map.d.ts +8 -0
- package/dist/commands/compliance-map.js +374 -0
- package/dist/commands/compliance-report.d.ts +34 -0
- package/dist/commands/compliance-report.js +161 -0
- package/dist/commands/compliance-weight.d.ts +8 -0
- package/dist/commands/compliance-weight.js +272 -0
- package/dist/commands/config-drift.d.ts +24 -0
- package/dist/commands/config-drift.js +213 -0
- package/dist/commands/config-lint.d.ts +4 -0
- package/dist/commands/config-lint.js +187 -0
- package/dist/commands/config-migrate.d.ts +43 -0
- package/dist/commands/config-migrate.js +240 -0
- package/dist/commands/config-share.d.ts +95 -0
- package/dist/commands/config-share.js +406 -0
- package/dist/commands/context-blind.d.ts +4 -0
- package/dist/commands/context-blind.js +272 -0
- package/dist/commands/context-inject.d.ts +8 -0
- package/dist/commands/context-inject.js +211 -0
- package/dist/commands/contract-verify.d.ts +4 -0
- package/dist/commands/contract-verify.js +316 -0
- package/dist/commands/correlate.d.ts +27 -0
- package/dist/commands/correlate.js +241 -0
- package/dist/commands/cost-forecast.d.ts +18 -0
- package/dist/commands/cost-forecast.js +193 -0
- package/dist/commands/coverage-map.d.ts +22 -0
- package/dist/commands/coverage-map.js +222 -0
- package/dist/commands/coverage.d.ts +40 -0
- package/dist/commands/coverage.js +147 -0
- package/dist/commands/cross-file-consistency.d.ts +4 -0
- package/dist/commands/cross-file-consistency.js +254 -0
- package/dist/commands/cross-pr-regression.d.ts +8 -0
- package/dist/commands/cross-pr-regression.js +297 -0
- package/dist/commands/custom-rule.d.ts +4 -0
- package/dist/commands/custom-rule.js +210 -0
- package/dist/commands/dead-code-detect.d.ts +4 -0
- package/dist/commands/dead-code-detect.js +255 -0
- package/dist/commands/dedup-report.d.ts +12 -0
- package/dist/commands/dedup-report.js +137 -0
- package/dist/commands/dep-audit.d.ts +52 -0
- package/dist/commands/dep-audit.js +277 -0
- package/dist/commands/dep-correlate.d.ts +8 -0
- package/dist/commands/dep-correlate.js +207 -0
- package/dist/commands/deploy-readiness.d.ts +5 -0
- package/dist/commands/deploy-readiness.js +211 -0
- package/dist/commands/deprecated.d.ts +47 -0
- package/dist/commands/deprecated.js +201 -0
- package/dist/commands/deps.d.ts +5 -0
- package/dist/commands/deps.js +122 -0
- package/dist/commands/design-audit.d.ts +8 -0
- package/dist/commands/design-audit.js +301 -0
- package/dist/commands/dev-score.d.ts +36 -0
- package/dist/commands/dev-score.js +203 -0
- package/dist/commands/diff-explain.d.ts +4 -0
- package/dist/commands/diff-explain.js +142 -0
- package/dist/commands/diff-only.d.ts +33 -0
- package/dist/commands/diff-only.js +151 -0
- package/dist/commands/diff-review.d.ts +4 -0
- package/dist/commands/diff-review.js +190 -0
- package/dist/commands/diff.d.ts +6 -0
- package/dist/commands/diff.js +449 -0
- package/dist/commands/digest.d.ts +19 -0
- package/dist/commands/digest.js +221 -0
- package/dist/commands/doc-drift.d.ts +8 -0
- package/dist/commands/doc-drift.js +258 -0
- package/dist/commands/doc-gen.d.ts +7 -0
- package/dist/commands/doc-gen.js +208 -0
- package/dist/commands/docs.d.ts +1 -0
- package/dist/commands/docs.js +156 -0
- package/dist/commands/doctor.d.ts +55 -0
- package/dist/commands/doctor.js +362 -0
- package/dist/commands/encoding-safety.d.ts +4 -0
- package/dist/commands/encoding-safety.js +275 -0
- package/dist/commands/error-taxonomy.d.ts +5 -0
- package/dist/commands/error-taxonomy.js +226 -0
- package/dist/commands/error-ux.d.ts +4 -0
- package/dist/commands/error-ux.js +252 -0
- package/dist/commands/event-leak.d.ts +4 -0
- package/dist/commands/event-leak.js +262 -0
- package/dist/commands/evidence-chain.d.ts +4 -0
- package/dist/commands/evidence-chain.js +309 -0
- package/dist/commands/example-leak.d.ts +4 -0
- package/dist/commands/example-leak.js +232 -0
- package/dist/commands/exception-consistency.d.ts +6 -0
- package/dist/commands/exception-consistency.js +192 -0
- package/dist/commands/exec-report.d.ts +8 -0
- package/dist/commands/exec-report.js +271 -0
- package/dist/commands/explain-finding.d.ts +7 -0
- package/dist/commands/explain-finding.js +278 -0
- package/dist/commands/false-negatives.d.ts +34 -0
- package/dist/commands/false-negatives.js +165 -0
- package/dist/commands/feedback-rules.d.ts +28 -0
- package/dist/commands/feedback-rules.js +173 -0
- package/dist/commands/feedback.d.ts +182 -0
- package/dist/commands/feedback.js +550 -0
- package/dist/commands/finding-age-analysis.d.ts +4 -0
- package/dist/commands/finding-age-analysis.js +144 -0
- package/dist/commands/finding-age-report.d.ts +4 -0
- package/dist/commands/finding-age-report.js +154 -0
- package/dist/commands/finding-age-tracker.d.ts +7 -0
- package/dist/commands/finding-age-tracker.js +152 -0
- package/dist/commands/finding-age.d.ts +4 -0
- package/dist/commands/finding-age.js +145 -0
- package/dist/commands/finding-ancestry-trace.d.ts +1 -0
- package/dist/commands/finding-ancestry-trace.js +69 -0
- package/dist/commands/finding-annotation-export.d.ts +1 -0
- package/dist/commands/finding-annotation-export.js +97 -0
- package/dist/commands/finding-annotation-layer.d.ts +4 -0
- package/dist/commands/finding-annotation-layer.js +128 -0
- package/dist/commands/finding-auto-categorize.d.ts +1 -0
- package/dist/commands/finding-auto-categorize.js +109 -0
- package/dist/commands/finding-auto-fix-suggest.d.ts +1 -0
- package/dist/commands/finding-auto-fix-suggest.js +76 -0
- package/dist/commands/finding-auto-fix.d.ts +4 -0
- package/dist/commands/finding-auto-fix.js +188 -0
- package/dist/commands/finding-auto-group.d.ts +4 -0
- package/dist/commands/finding-auto-group.js +108 -0
- package/dist/commands/finding-auto-label.d.ts +4 -0
- package/dist/commands/finding-auto-label.js +220 -0
- package/dist/commands/finding-auto-priority.d.ts +1 -0
- package/dist/commands/finding-auto-priority.js +100 -0
- package/dist/commands/finding-auto-suppress.d.ts +4 -0
- package/dist/commands/finding-auto-suppress.js +126 -0
- package/dist/commands/finding-auto-tag.d.ts +4 -0
- package/dist/commands/finding-auto-tag.js +113 -0
- package/dist/commands/finding-auto-triage.d.ts +4 -0
- package/dist/commands/finding-auto-triage.js +108 -0
- package/dist/commands/finding-autofix-preview.d.ts +4 -0
- package/dist/commands/finding-autofix-preview.js +86 -0
- package/dist/commands/finding-batch-resolve.d.ts +4 -0
- package/dist/commands/finding-batch-resolve.js +165 -0
- package/dist/commands/finding-batch-suppress.d.ts +4 -0
- package/dist/commands/finding-batch-suppress.js +85 -0
- package/dist/commands/finding-batch-triage.d.ts +1 -0
- package/dist/commands/finding-batch-triage.js +90 -0
- package/dist/commands/finding-blast-radius.d.ts +4 -0
- package/dist/commands/finding-blast-radius.js +91 -0
- package/dist/commands/finding-budget.d.ts +4 -0
- package/dist/commands/finding-budget.js +232 -0
- package/dist/commands/finding-category-map.d.ts +4 -0
- package/dist/commands/finding-category-map.js +103 -0
- package/dist/commands/finding-category-stats.d.ts +4 -0
- package/dist/commands/finding-category-stats.js +104 -0
- package/dist/commands/finding-category.d.ts +4 -0
- package/dist/commands/finding-category.js +109 -0
- package/dist/commands/finding-change-impact.d.ts +4 -0
- package/dist/commands/finding-change-impact.js +107 -0
- package/dist/commands/finding-cluster-analysis.d.ts +4 -0
- package/dist/commands/finding-cluster-analysis.js +133 -0
- package/dist/commands/finding-cluster-group.d.ts +4 -0
- package/dist/commands/finding-cluster-group.js +105 -0
- package/dist/commands/finding-cluster-summary.d.ts +1 -0
- package/dist/commands/finding-cluster-summary.js +85 -0
- package/dist/commands/finding-cluster.d.ts +4 -0
- package/dist/commands/finding-cluster.js +157 -0
- package/dist/commands/finding-code-context.d.ts +4 -0
- package/dist/commands/finding-code-context.js +96 -0
- package/dist/commands/finding-code-smell.d.ts +4 -0
- package/dist/commands/finding-code-smell.js +113 -0
- package/dist/commands/finding-compare-runs.d.ts +4 -0
- package/dist/commands/finding-compare-runs.js +105 -0
- package/dist/commands/finding-compliance-tag.d.ts +1 -0
- package/dist/commands/finding-compliance-tag.js +106 -0
- package/dist/commands/finding-confidence-boost.d.ts +1 -0
- package/dist/commands/finding-confidence-boost.js +88 -0
- package/dist/commands/finding-confidence-calibrate.d.ts +4 -0
- package/dist/commands/finding-confidence-calibrate.js +111 -0
- package/dist/commands/finding-confidence-filter.d.ts +4 -0
- package/dist/commands/finding-confidence-filter.js +77 -0
- package/dist/commands/finding-contest.d.ts +7 -0
- package/dist/commands/finding-contest.js +192 -0
- package/dist/commands/finding-context-enrich.d.ts +4 -0
- package/dist/commands/finding-context-enrich.js +89 -0
- package/dist/commands/finding-context-expand.d.ts +4 -0
- package/dist/commands/finding-context-expand.js +102 -0
- package/dist/commands/finding-context-link.d.ts +1 -0
- package/dist/commands/finding-context-link.js +94 -0
- package/dist/commands/finding-context-summary.d.ts +1 -0
- package/dist/commands/finding-context-summary.js +85 -0
- package/dist/commands/finding-context-window.d.ts +4 -0
- package/dist/commands/finding-context-window.js +126 -0
- package/dist/commands/finding-context.d.ts +4 -0
- package/dist/commands/finding-context.js +140 -0
- package/dist/commands/finding-correlate.d.ts +4 -0
- package/dist/commands/finding-correlate.js +88 -0
- package/dist/commands/finding-correlation-map.d.ts +4 -0
- package/dist/commands/finding-correlation-map.js +101 -0
- package/dist/commands/finding-correlation.d.ts +4 -0
- package/dist/commands/finding-correlation.js +103 -0
- package/dist/commands/finding-cross-file-link.d.ts +1 -0
- package/dist/commands/finding-cross-file-link.js +101 -0
- package/dist/commands/finding-cross-ref.d.ts +4 -0
- package/dist/commands/finding-cross-ref.js +98 -0
- package/dist/commands/finding-cve-lookup.d.ts +4 -0
- package/dist/commands/finding-cve-lookup.js +97 -0
- package/dist/commands/finding-cwe-lookup.d.ts +4 -0
- package/dist/commands/finding-cwe-lookup.js +148 -0
- package/dist/commands/finding-cwe-map.d.ts +4 -0
- package/dist/commands/finding-cwe-map.js +133 -0
- package/dist/commands/finding-dedup-cross-file.d.ts +4 -0
- package/dist/commands/finding-dedup-cross-file.js +95 -0
- package/dist/commands/finding-dedup-cross.d.ts +4 -0
- package/dist/commands/finding-dedup-cross.js +90 -0
- package/dist/commands/finding-dedup-merge.d.ts +1 -0
- package/dist/commands/finding-dedup-merge.js +107 -0
- package/dist/commands/finding-dedup-report.d.ts +4 -0
- package/dist/commands/finding-dedup-report.js +101 -0
- package/dist/commands/finding-dedup-smart.d.ts +1 -0
- package/dist/commands/finding-dedup-smart.js +109 -0
- package/dist/commands/finding-deduplicate.d.ts +4 -0
- package/dist/commands/finding-deduplicate.js +141 -0
- package/dist/commands/finding-dependency-check.d.ts +4 -0
- package/dist/commands/finding-dependency-check.js +119 -0
- package/dist/commands/finding-dependency-impact.d.ts +1 -0
- package/dist/commands/finding-dependency-impact.js +97 -0
- package/dist/commands/finding-dependency-link.d.ts +4 -0
- package/dist/commands/finding-dependency-link.js +73 -0
- package/dist/commands/finding-dependency-risk.d.ts +4 -0
- package/dist/commands/finding-dependency-risk.js +117 -0
- package/dist/commands/finding-dependency-tree.d.ts +4 -0
- package/dist/commands/finding-dependency-tree.js +116 -0
- package/dist/commands/finding-diff-highlight.d.ts +4 -0
- package/dist/commands/finding-diff-highlight.js +107 -0
- package/dist/commands/finding-dismiss-workflow.d.ts +4 -0
- package/dist/commands/finding-dismiss-workflow.js +119 -0
- package/dist/commands/finding-duplicate-detect.d.ts +4 -0
- package/dist/commands/finding-duplicate-detect.js +113 -0
- package/dist/commands/finding-duplicate-rule.d.ts +4 -0
- package/dist/commands/finding-duplicate-rule.js +103 -0
- package/dist/commands/finding-effort-rank.d.ts +1 -0
- package/dist/commands/finding-effort-rank.js +93 -0
- package/dist/commands/finding-evidence-chain.d.ts +4 -0
- package/dist/commands/finding-evidence-chain.js +147 -0
- package/dist/commands/finding-evidence-collect.d.ts +4 -0
- package/dist/commands/finding-evidence-collect.js +114 -0
- package/dist/commands/finding-explain.d.ts +4 -0
- package/dist/commands/finding-explain.js +93 -0
- package/dist/commands/finding-export-csv.d.ts +4 -0
- package/dist/commands/finding-export-csv.js +78 -0
- package/dist/commands/finding-false-neg-check.d.ts +8 -0
- package/dist/commands/finding-false-neg-check.js +139 -0
- package/dist/commands/finding-false-positive-learn.d.ts +4 -0
- package/dist/commands/finding-false-positive-learn.js +85 -0
- package/dist/commands/finding-false-positive-log.d.ts +4 -0
- package/dist/commands/finding-false-positive-log.js +150 -0
- package/dist/commands/finding-false-positive.d.ts +4 -0
- package/dist/commands/finding-false-positive.js +134 -0
- package/dist/commands/finding-filter-view.d.ts +4 -0
- package/dist/commands/finding-filter-view.js +107 -0
- package/dist/commands/finding-fix-chain.d.ts +1 -0
- package/dist/commands/finding-fix-chain.js +78 -0
- package/dist/commands/finding-fix-estimate.d.ts +1 -0
- package/dist/commands/finding-fix-estimate.js +95 -0
- package/dist/commands/finding-fix-playbook.d.ts +1 -0
- package/dist/commands/finding-fix-playbook.js +110 -0
- package/dist/commands/finding-fix-priority.d.ts +4 -0
- package/dist/commands/finding-fix-priority.js +98 -0
- package/dist/commands/finding-fix-rate.d.ts +4 -0
- package/dist/commands/finding-fix-rate.js +141 -0
- package/dist/commands/finding-fix-suggest.d.ts +4 -0
- package/dist/commands/finding-fix-suggest.js +88 -0
- package/dist/commands/finding-fix-validation.d.ts +4 -0
- package/dist/commands/finding-fix-validation.js +115 -0
- package/dist/commands/finding-fix-verify.d.ts +4 -0
- package/dist/commands/finding-fix-verify.js +198 -0
- package/dist/commands/finding-group-by.d.ts +4 -0
- package/dist/commands/finding-group-by.js +86 -0
- package/dist/commands/finding-group.d.ts +15 -0
- package/dist/commands/finding-group.js +164 -0
- package/dist/commands/finding-groupby-file.d.ts +4 -0
- package/dist/commands/finding-groupby-file.js +94 -0
- package/dist/commands/finding-hotfix-suggest.d.ts +7 -0
- package/dist/commands/finding-hotfix-suggest.js +170 -0
- package/dist/commands/finding-hotspot-detect.d.ts +1 -0
- package/dist/commands/finding-hotspot-detect.js +120 -0
- package/dist/commands/finding-hotspot-map.d.ts +4 -0
- package/dist/commands/finding-hotspot-map.js +106 -0
- package/dist/commands/finding-hotspot.d.ts +4 -0
- package/dist/commands/finding-hotspot.js +115 -0
- package/dist/commands/finding-impact-radius.d.ts +1 -0
- package/dist/commands/finding-impact-radius.js +94 -0
- package/dist/commands/finding-impact-rank.d.ts +4 -0
- package/dist/commands/finding-impact-rank.js +85 -0
- package/dist/commands/finding-impact-score.d.ts +4 -0
- package/dist/commands/finding-impact-score.js +123 -0
- package/dist/commands/finding-impact.d.ts +4 -0
- package/dist/commands/finding-impact.js +135 -0
- package/dist/commands/finding-line-blame.d.ts +7 -0
- package/dist/commands/finding-line-blame.js +129 -0
- package/dist/commands/finding-link-graph.d.ts +4 -0
- package/dist/commands/finding-link-graph.js +144 -0
- package/dist/commands/finding-link.d.ts +4 -0
- package/dist/commands/finding-link.js +128 -0
- package/dist/commands/finding-merge-results.d.ts +4 -0
- package/dist/commands/finding-merge-results.js +110 -0
- package/dist/commands/finding-merge-strategy.d.ts +1 -0
- package/dist/commands/finding-merge-strategy.js +84 -0
- package/dist/commands/finding-metadata-enrich.d.ts +4 -0
- package/dist/commands/finding-metadata-enrich.js +92 -0
- package/dist/commands/finding-noise-filter.d.ts +7 -0
- package/dist/commands/finding-noise-filter.js +140 -0
- package/dist/commands/finding-noise-reduce.d.ts +1 -0
- package/dist/commands/finding-noise-reduce.js +81 -0
- package/dist/commands/finding-noise-score.d.ts +1 -0
- package/dist/commands/finding-noise-score.js +93 -0
- package/dist/commands/finding-owner-assign.d.ts +4 -0
- package/dist/commands/finding-owner-assign.js +133 -0
- package/dist/commands/finding-owner-notify.d.ts +1 -0
- package/dist/commands/finding-owner-notify.js +121 -0
- package/dist/commands/finding-ownership-assign.d.ts +4 -0
- package/dist/commands/finding-ownership-assign.js +101 -0
- package/dist/commands/finding-ownership-map.d.ts +4 -0
- package/dist/commands/finding-ownership-map.js +118 -0
- package/dist/commands/finding-patch-chain.d.ts +1 -0
- package/dist/commands/finding-patch-chain.js +90 -0
- package/dist/commands/finding-patch-preview.d.ts +4 -0
- package/dist/commands/finding-patch-preview.js +103 -0
- package/dist/commands/finding-pattern-detect.d.ts +4 -0
- package/dist/commands/finding-pattern-detect.js +127 -0
- package/dist/commands/finding-pattern-library.d.ts +4 -0
- package/dist/commands/finding-pattern-library.js +145 -0
- package/dist/commands/finding-pattern-match.d.ts +4 -0
- package/dist/commands/finding-pattern-match.js +165 -0
- package/dist/commands/finding-prioritize.d.ts +4 -0
- package/dist/commands/finding-prioritize.js +119 -0
- package/dist/commands/finding-priority-matrix.d.ts +4 -0
- package/dist/commands/finding-priority-matrix.js +102 -0
- package/dist/commands/finding-priority-queue.d.ts +4 -0
- package/dist/commands/finding-priority-queue.js +131 -0
- package/dist/commands/finding-priority-rank.d.ts +1 -0
- package/dist/commands/finding-priority-rank.js +82 -0
- package/dist/commands/finding-quality-gate.d.ts +4 -0
- package/dist/commands/finding-quality-gate.js +107 -0
- package/dist/commands/finding-rank.d.ts +4 -0
- package/dist/commands/finding-rank.js +138 -0
- package/dist/commands/finding-reachability-check.d.ts +4 -0
- package/dist/commands/finding-reachability-check.js +102 -0
- package/dist/commands/finding-reachability.d.ts +4 -0
- package/dist/commands/finding-reachability.js +131 -0
- package/dist/commands/finding-recurrence-check.d.ts +1 -0
- package/dist/commands/finding-recurrence-check.js +103 -0
- package/dist/commands/finding-recurrence-detect.d.ts +4 -0
- package/dist/commands/finding-recurrence-detect.js +77 -0
- package/dist/commands/finding-recurrence.d.ts +4 -0
- package/dist/commands/finding-recurrence.js +135 -0
- package/dist/commands/finding-regression-check.d.ts +4 -0
- package/dist/commands/finding-regression-check.js +112 -0
- package/dist/commands/finding-regression-detect.d.ts +1 -0
- package/dist/commands/finding-regression-detect.js +86 -0
- package/dist/commands/finding-related-rules.d.ts +4 -0
- package/dist/commands/finding-related-rules.js +151 -0
- package/dist/commands/finding-remediation-cost.d.ts +1 -0
- package/dist/commands/finding-remediation-cost.js +79 -0
- package/dist/commands/finding-remediation-plan.d.ts +4 -0
- package/dist/commands/finding-remediation-plan.js +107 -0
- package/dist/commands/finding-reopen-detect.d.ts +1 -0
- package/dist/commands/finding-reopen-detect.js +77 -0
- package/dist/commands/finding-repeat-detect.d.ts +1 -0
- package/dist/commands/finding-repeat-detect.js +92 -0
- package/dist/commands/finding-resolution-track.d.ts +4 -0
- package/dist/commands/finding-resolution-track.js +150 -0
- package/dist/commands/finding-resolution-tracker.d.ts +4 -0
- package/dist/commands/finding-resolution-tracker.js +163 -0
- package/dist/commands/finding-resolution-workflow.d.ts +1 -0
- package/dist/commands/finding-resolution-workflow.js +91 -0
- package/dist/commands/finding-resolution.d.ts +4 -0
- package/dist/commands/finding-resolution.js +142 -0
- package/dist/commands/finding-risk-label.d.ts +1 -0
- package/dist/commands/finding-risk-label.js +72 -0
- package/dist/commands/finding-risk-matrix.d.ts +4 -0
- package/dist/commands/finding-risk-matrix.js +126 -0
- package/dist/commands/finding-risk-score.d.ts +4 -0
- package/dist/commands/finding-risk-score.js +95 -0
- package/dist/commands/finding-root-cause.d.ts +4 -0
- package/dist/commands/finding-root-cause.js +184 -0
- package/dist/commands/finding-rule-explain.d.ts +4 -0
- package/dist/commands/finding-rule-explain.js +140 -0
- package/dist/commands/finding-scope-filter.d.ts +1 -0
- package/dist/commands/finding-scope-filter.js +77 -0
- package/dist/commands/finding-scope-impact.d.ts +1 -0
- package/dist/commands/finding-scope-impact.js +83 -0
- package/dist/commands/finding-search-index.d.ts +4 -0
- package/dist/commands/finding-search-index.js +99 -0
- package/dist/commands/finding-security-hotspot.d.ts +4 -0
- package/dist/commands/finding-security-hotspot.js +175 -0
- package/dist/commands/finding-severity-dist.d.ts +4 -0
- package/dist/commands/finding-severity-dist.js +105 -0
- package/dist/commands/finding-severity-drift.d.ts +4 -0
- package/dist/commands/finding-severity-drift.js +92 -0
- package/dist/commands/finding-severity-heatmap.d.ts +4 -0
- package/dist/commands/finding-severity-heatmap.js +108 -0
- package/dist/commands/finding-severity-histogram.d.ts +4 -0
- package/dist/commands/finding-severity-histogram.js +66 -0
- package/dist/commands/finding-severity-override.d.ts +4 -0
- package/dist/commands/finding-severity-override.js +131 -0
- package/dist/commands/finding-severity-rebalance.d.ts +1 -0
- package/dist/commands/finding-severity-rebalance.js +108 -0
- package/dist/commands/finding-severity-trend.d.ts +4 -0
- package/dist/commands/finding-severity-trend.js +127 -0
- package/dist/commands/finding-similar-match.d.ts +1 -0
- package/dist/commands/finding-similar-match.js +112 -0
- package/dist/commands/finding-snippet.d.ts +4 -0
- package/dist/commands/finding-snippet.js +102 -0
- package/dist/commands/finding-summary-digest.d.ts +7 -0
- package/dist/commands/finding-summary-digest.js +145 -0
- package/dist/commands/finding-suppress-pattern.d.ts +4 -0
- package/dist/commands/finding-suppress-pattern.js +148 -0
- package/dist/commands/finding-suppress.d.ts +4 -0
- package/dist/commands/finding-suppress.js +164 -0
- package/dist/commands/finding-suppression-audit.d.ts +4 -0
- package/dist/commands/finding-suppression-audit.js +137 -0
- package/dist/commands/finding-suppression-list.d.ts +4 -0
- package/dist/commands/finding-suppression-list.js +119 -0
- package/dist/commands/finding-suppression-log.d.ts +4 -0
- package/dist/commands/finding-suppression-log.js +174 -0
- package/dist/commands/finding-time-to-fix.d.ts +1 -0
- package/dist/commands/finding-time-to-fix.js +98 -0
- package/dist/commands/finding-timeline-view.d.ts +4 -0
- package/dist/commands/finding-timeline-view.js +98 -0
- package/dist/commands/finding-timeline.d.ts +4 -0
- package/dist/commands/finding-timeline.js +143 -0
- package/dist/commands/finding-top-offender.d.ts +1 -0
- package/dist/commands/finding-top-offender.js +75 -0
- package/dist/commands/finding-trace.d.ts +4 -0
- package/dist/commands/finding-trace.js +118 -0
- package/dist/commands/finding-trend-alert.d.ts +1 -0
- package/dist/commands/finding-trend-alert.js +126 -0
- package/dist/commands/finding-trend-analysis.d.ts +4 -0
- package/dist/commands/finding-trend-analysis.js +95 -0
- package/dist/commands/finding-trend-forecast.d.ts +4 -0
- package/dist/commands/finding-trend-forecast.js +106 -0
- package/dist/commands/finding-trend-report.d.ts +4 -0
- package/dist/commands/finding-trend-report.js +107 -0
- package/dist/commands/finding-trend.d.ts +4 -0
- package/dist/commands/finding-trend.js +118 -0
- package/dist/commands/fix-pr.d.ts +22 -0
- package/dist/commands/fix-pr.js +286 -0
- package/dist/commands/fix-suggest.d.ts +4 -0
- package/dist/commands/fix-suggest.js +171 -0
- package/dist/commands/fix-verify.d.ts +4 -0
- package/dist/commands/fix-verify.js +123 -0
- package/dist/commands/fix.d.ts +117 -0
- package/dist/commands/fix.js +445 -0
- package/dist/commands/focus-area.d.ts +5 -0
- package/dist/commands/focus-area.js +192 -0
- package/dist/commands/generate.d.ts +7 -0
- package/dist/commands/generate.js +403 -0
- package/dist/commands/governance.d.ts +31 -0
- package/dist/commands/governance.js +202 -0
- package/dist/commands/group-findings.d.ts +22 -0
- package/dist/commands/group-findings.js +154 -0
- package/dist/commands/guided-tour.d.ts +8 -0
- package/dist/commands/guided-tour.js +287 -0
- package/dist/commands/habit-tracker.d.ts +7 -0
- package/dist/commands/habit-tracker.js +194 -0
- package/dist/commands/hallucination-detect.d.ts +4 -0
- package/dist/commands/hallucination-detect.js +350 -0
- package/dist/commands/hallucination-score.d.ts +8 -0
- package/dist/commands/hallucination-score.js +316 -0
- package/dist/commands/help.d.ts +7 -0
- package/dist/commands/help.js +302 -0
- package/dist/commands/hook-install.d.ts +21 -0
- package/dist/commands/hook-install.js +142 -0
- package/dist/commands/hook.d.ts +8 -0
- package/dist/commands/hook.js +145 -0
- package/dist/commands/iac-lint.d.ts +7 -0
- package/dist/commands/iac-lint.js +312 -0
- package/dist/commands/idempotency-audit.d.ts +4 -0
- package/dist/commands/idempotency-audit.js +222 -0
- package/dist/commands/ignore-list.d.ts +18 -0
- package/dist/commands/ignore-list.js +152 -0
- package/dist/commands/impact-scan.d.ts +8 -0
- package/dist/commands/impact-scan.js +281 -0
- package/dist/commands/incident-response.d.ts +7 -0
- package/dist/commands/incident-response.js +254 -0
- package/dist/commands/incremental-review.d.ts +4 -0
- package/dist/commands/incremental-review.js +236 -0
- package/dist/commands/init.d.ts +10 -0
- package/dist/commands/init.js +265 -0
- package/dist/commands/input-guard.d.ts +4 -0
- package/dist/commands/input-guard.js +255 -0
- package/dist/commands/interactive-fix.d.ts +22 -0
- package/dist/commands/interactive-fix.js +139 -0
- package/dist/commands/judge-author.d.ts +7 -0
- package/dist/commands/judge-author.js +260 -0
- package/dist/commands/judge-config.d.ts +4 -0
- package/dist/commands/judge-config.js +151 -0
- package/dist/commands/judge-learn.d.ts +8 -0
- package/dist/commands/judge-learn.js +217 -0
- package/dist/commands/judge-reputation.d.ts +28 -0
- package/dist/commands/judge-reputation.js +198 -0
- package/dist/commands/kb.d.ts +40 -0
- package/dist/commands/kb.js +228 -0
- package/dist/commands/language-packs.d.ts +42 -0
- package/dist/commands/language-packs.js +150 -0
- package/dist/commands/learn.d.ts +26 -0
- package/dist/commands/learn.js +288 -0
- package/dist/commands/learning-path.d.ts +8 -0
- package/dist/commands/learning-path.js +325 -0
- package/dist/commands/license-scan.d.ts +8 -0
- package/dist/commands/license-scan.js +183 -0
- package/dist/commands/llm-benchmark-optimizer.d.ts +78 -0
- package/dist/commands/llm-benchmark-optimizer.js +241 -0
- package/dist/commands/llm-benchmark.d.ts +156 -0
- package/dist/commands/llm-benchmark.js +670 -0
- package/dist/commands/log-quality.d.ts +5 -0
- package/dist/commands/log-quality.js +211 -0
- package/dist/commands/logic-lint.d.ts +4 -0
- package/dist/commands/logic-lint.js +255 -0
- package/dist/commands/lsp.d.ts +23 -0
- package/dist/commands/lsp.js +285 -0
- package/dist/commands/merge-verdict.d.ts +4 -0
- package/dist/commands/merge-verdict.js +287 -0
- package/dist/commands/metrics-dashboard.d.ts +21 -0
- package/dist/commands/metrics-dashboard.js +334 -0
- package/dist/commands/metrics.d.ts +57 -0
- package/dist/commands/metrics.js +241 -0
- package/dist/commands/migration-safety.d.ts +5 -0
- package/dist/commands/migration-safety.js +256 -0
- package/dist/commands/model-report.d.ts +8 -0
- package/dist/commands/model-report.js +194 -0
- package/dist/commands/model-risk.d.ts +27 -0
- package/dist/commands/model-risk.js +220 -0
- package/dist/commands/monorepo.d.ts +37 -0
- package/dist/commands/monorepo.js +232 -0
- package/dist/commands/multi-lang-review.d.ts +4 -0
- package/dist/commands/multi-lang-review.js +230 -0
- package/dist/commands/noise-advisor.d.ts +29 -0
- package/dist/commands/noise-advisor.js +170 -0
- package/dist/commands/notify.d.ts +78 -0
- package/dist/commands/notify.js +324 -0
- package/dist/commands/null-safety-audit.d.ts +5 -0
- package/dist/commands/null-safety-audit.js +221 -0
- package/dist/commands/observability-gap.d.ts +5 -0
- package/dist/commands/observability-gap.js +211 -0
- package/dist/commands/onboard.d.ts +12 -0
- package/dist/commands/onboard.js +178 -0
- package/dist/commands/org-metrics.d.ts +23 -0
- package/dist/commands/org-metrics.js +237 -0
- package/dist/commands/org-policy.d.ts +7 -0
- package/dist/commands/org-policy.js +207 -0
- package/dist/commands/over-abstraction.d.ts +4 -0
- package/dist/commands/over-abstraction.js +307 -0
- package/dist/commands/override.d.ts +61 -0
- package/dist/commands/override.js +268 -0
- package/dist/commands/ownership-map.d.ts +5 -0
- package/dist/commands/ownership-map.js +217 -0
- package/dist/commands/parity.d.ts +30 -0
- package/dist/commands/parity.js +212 -0
- package/dist/commands/pattern-registry.d.ts +22 -0
- package/dist/commands/pattern-registry.js +226 -0
- package/dist/commands/perf-compare.d.ts +8 -0
- package/dist/commands/perf-compare.js +245 -0
- package/dist/commands/perf-hotspot.d.ts +7 -0
- package/dist/commands/perf-hotspot.js +273 -0
- package/dist/commands/phantom-import.d.ts +4 -0
- package/dist/commands/phantom-import.js +260 -0
- package/dist/commands/pii-scan.d.ts +7 -0
- package/dist/commands/pii-scan.js +299 -0
- package/dist/commands/plugin-search.d.ts +39 -0
- package/dist/commands/plugin-search.js +327 -0
- package/dist/commands/plugins.d.ts +12 -0
- package/dist/commands/plugins.js +104 -0
- package/dist/commands/policy-audit.d.ts +52 -0
- package/dist/commands/policy-audit.js +160 -0
- package/dist/commands/pr-quality-gate.d.ts +28 -0
- package/dist/commands/pr-quality-gate.js +207 -0
- package/dist/commands/pr-summary.d.ts +25 -0
- package/dist/commands/pr-summary.js +187 -0
- package/dist/commands/predict.d.ts +7 -0
- package/dist/commands/predict.js +218 -0
- package/dist/commands/privilege-path.d.ts +4 -0
- package/dist/commands/privilege-path.js +233 -0
- package/dist/commands/profile.d.ts +37 -0
- package/dist/commands/profile.js +101 -0
- package/dist/commands/prompt-replay.d.ts +7 -0
- package/dist/commands/prompt-replay.js +176 -0
- package/dist/commands/quality-gate.d.ts +69 -0
- package/dist/commands/quality-gate.js +252 -0
- package/dist/commands/query.d.ts +19 -0
- package/dist/commands/query.js +229 -0
- package/dist/commands/quick-check.d.ts +4 -0
- package/dist/commands/quick-check.js +173 -0
- package/dist/commands/recommend.d.ts +20 -0
- package/dist/commands/recommend.js +282 -0
- package/dist/commands/refactor-safety.d.ts +8 -0
- package/dist/commands/refactor-safety.js +273 -0
- package/dist/commands/reg-watch.d.ts +20 -0
- package/dist/commands/reg-watch.js +219 -0
- package/dist/commands/regression-alert.d.ts +31 -0
- package/dist/commands/regression-alert.js +215 -0
- package/dist/commands/remediation-lib.d.ts +8 -0
- package/dist/commands/remediation-lib.js +265 -0
- package/dist/commands/remediation.d.ts +20 -0
- package/dist/commands/remediation.js +256 -0
- package/dist/commands/report-template.d.ts +16 -0
- package/dist/commands/report-template.js +290 -0
- package/dist/commands/report.d.ts +12 -0
- package/dist/commands/report.js +139 -0
- package/dist/commands/resource-cleanup.d.ts +6 -0
- package/dist/commands/resource-cleanup.js +235 -0
- package/dist/commands/retro.d.ts +22 -0
- package/dist/commands/retro.js +211 -0
- package/dist/commands/retry-pattern-audit.d.ts +5 -0
- package/dist/commands/retry-pattern-audit.js +215 -0
- package/dist/commands/review-ab-test.d.ts +4 -0
- package/dist/commands/review-ab-test.js +224 -0
- package/dist/commands/review-access-log.d.ts +4 -0
- package/dist/commands/review-access-log.js +65 -0
- package/dist/commands/review-action-item-gen.d.ts +1 -0
- package/dist/commands/review-action-item-gen.js +72 -0
- package/dist/commands/review-adoption-metrics.d.ts +4 -0
- package/dist/commands/review-adoption-metrics.js +95 -0
- package/dist/commands/review-adoption-score.d.ts +1 -0
- package/dist/commands/review-adoption-score.js +181 -0
- package/dist/commands/review-ai-feedback-loop.d.ts +1 -0
- package/dist/commands/review-ai-feedback-loop.js +116 -0
- package/dist/commands/review-annotate.d.ts +4 -0
- package/dist/commands/review-annotate.js +122 -0
- package/dist/commands/review-annotation-export.d.ts +4 -0
- package/dist/commands/review-annotation-export.js +105 -0
- package/dist/commands/review-annotation.d.ts +4 -0
- package/dist/commands/review-annotation.js +133 -0
- package/dist/commands/review-api-export.d.ts +4 -0
- package/dist/commands/review-api-export.js +98 -0
- package/dist/commands/review-approval-criteria.d.ts +1 -0
- package/dist/commands/review-approval-criteria.js +99 -0
- package/dist/commands/review-approval-gate.d.ts +7 -0
- package/dist/commands/review-approval-gate.js +190 -0
- package/dist/commands/review-approval.d.ts +4 -0
- package/dist/commands/review-approval.js +133 -0
- package/dist/commands/review-archive-search.d.ts +4 -0
- package/dist/commands/review-archive-search.js +70 -0
- package/dist/commands/review-archive.d.ts +4 -0
- package/dist/commands/review-archive.js +135 -0
- package/dist/commands/review-audit-export.d.ts +4 -0
- package/dist/commands/review-audit-export.js +93 -0
- package/dist/commands/review-audit-log.d.ts +4 -0
- package/dist/commands/review-audit-log.js +140 -0
- package/dist/commands/review-audit-trail.d.ts +4 -0
- package/dist/commands/review-audit-trail.js +96 -0
- package/dist/commands/review-auto-merge.d.ts +4 -0
- package/dist/commands/review-auto-merge.js +175 -0
- package/dist/commands/review-badge.d.ts +4 -0
- package/dist/commands/review-badge.js +152 -0
- package/dist/commands/review-batch-files.d.ts +4 -0
- package/dist/commands/review-batch-files.js +82 -0
- package/dist/commands/review-batch-mode.d.ts +4 -0
- package/dist/commands/review-batch-mode.js +97 -0
- package/dist/commands/review-batch-run.d.ts +4 -0
- package/dist/commands/review-batch-run.js +149 -0
- package/dist/commands/review-benchmark-self.d.ts +4 -0
- package/dist/commands/review-benchmark-self.js +140 -0
- package/dist/commands/review-blame-map.d.ts +4 -0
- package/dist/commands/review-blame-map.js +100 -0
- package/dist/commands/review-branch-compare.d.ts +4 -0
- package/dist/commands/review-branch-compare.js +108 -0
- package/dist/commands/review-branch-policy.d.ts +4 -0
- package/dist/commands/review-branch-policy.js +102 -0
- package/dist/commands/review-bulk-action.d.ts +4 -0
- package/dist/commands/review-bulk-action.js +109 -0
- package/dist/commands/review-bulk-apply.d.ts +4 -0
- package/dist/commands/review-bulk-apply.js +102 -0
- package/dist/commands/review-cache-clear.d.ts +4 -0
- package/dist/commands/review-cache-clear.js +160 -0
- package/dist/commands/review-cache-warm.d.ts +4 -0
- package/dist/commands/review-cache-warm.js +70 -0
- package/dist/commands/review-cache.d.ts +22 -0
- package/dist/commands/review-cache.js +134 -0
- package/dist/commands/review-changelog-entry.d.ts +7 -0
- package/dist/commands/review-changelog-entry.js +109 -0
- package/dist/commands/review-changelog-gen.d.ts +4 -0
- package/dist/commands/review-changelog-gen.js +117 -0
- package/dist/commands/review-changelog-impact.d.ts +1 -0
- package/dist/commands/review-changelog-impact.js +89 -0
- package/dist/commands/review-checklist.d.ts +4 -0
- package/dist/commands/review-checklist.js +144 -0
- package/dist/commands/review-checkpoint.d.ts +4 -0
- package/dist/commands/review-checkpoint.js +163 -0
- package/dist/commands/review-ci-gate.d.ts +4 -0
- package/dist/commands/review-ci-gate.js +114 -0
- package/dist/commands/review-ci-insight.d.ts +1 -0
- package/dist/commands/review-ci-insight.js +100 -0
- package/dist/commands/review-ci-integration.d.ts +4 -0
- package/dist/commands/review-ci-integration.js +125 -0
- package/dist/commands/review-ci-status.d.ts +4 -0
- package/dist/commands/review-ci-status.js +200 -0
- package/dist/commands/review-cicd-integrate.d.ts +4 -0
- package/dist/commands/review-cicd-integrate.js +122 -0
- package/dist/commands/review-code-health-score.d.ts +1 -0
- package/dist/commands/review-code-health-score.js +100 -0
- package/dist/commands/review-code-owner.d.ts +7 -0
- package/dist/commands/review-code-owner.js +164 -0
- package/dist/commands/review-code-ownership.d.ts +1 -0
- package/dist/commands/review-code-ownership.js +88 -0
- package/dist/commands/review-comment.d.ts +4 -0
- package/dist/commands/review-comment.js +165 -0
- package/dist/commands/review-commit-hook.d.ts +7 -0
- package/dist/commands/review-commit-hook.js +134 -0
- package/dist/commands/review-commit-quality.d.ts +1 -0
- package/dist/commands/review-commit-quality.js +94 -0
- package/dist/commands/review-comparative.d.ts +4 -0
- package/dist/commands/review-comparative.js +149 -0
- package/dist/commands/review-compare-version.d.ts +4 -0
- package/dist/commands/review-compare-version.js +108 -0
- package/dist/commands/review-compare.d.ts +4 -0
- package/dist/commands/review-compare.js +200 -0
- package/dist/commands/review-compliance-check.d.ts +4 -0
- package/dist/commands/review-compliance-check.js +202 -0
- package/dist/commands/review-compliance-gate.d.ts +4 -0
- package/dist/commands/review-compliance-gate.js +151 -0
- package/dist/commands/review-compliance-map.d.ts +4 -0
- package/dist/commands/review-compliance-map.js +110 -0
- package/dist/commands/review-compliance-report.d.ts +4 -0
- package/dist/commands/review-compliance-report.js +127 -0
- package/dist/commands/review-confidence-explain.d.ts +1 -0
- package/dist/commands/review-confidence-explain.js +99 -0
- package/dist/commands/review-config-diff.d.ts +4 -0
- package/dist/commands/review-config-diff.js +108 -0
- package/dist/commands/review-config-export.d.ts +4 -0
- package/dist/commands/review-config-export.js +124 -0
- package/dist/commands/review-config-health.d.ts +1 -0
- package/dist/commands/review-config-health.js +172 -0
- package/dist/commands/review-config-migrate.d.ts +4 -0
- package/dist/commands/review-config-migrate.js +123 -0
- package/dist/commands/review-config-template.d.ts +4 -0
- package/dist/commands/review-config-template.js +112 -0
- package/dist/commands/review-config-validate.d.ts +4 -0
- package/dist/commands/review-config-validate.js +110 -0
- package/dist/commands/review-contract.d.ts +4 -0
- package/dist/commands/review-contract.js +199 -0
- package/dist/commands/review-coverage-gap.d.ts +4 -0
- package/dist/commands/review-coverage-gap.js +120 -0
- package/dist/commands/review-coverage-map.d.ts +4 -0
- package/dist/commands/review-coverage-map.js +194 -0
- package/dist/commands/review-custom-judge-config.d.ts +4 -0
- package/dist/commands/review-custom-judge-config.js +103 -0
- package/dist/commands/review-custom-judge.d.ts +4 -0
- package/dist/commands/review-custom-judge.js +182 -0
- package/dist/commands/review-custom-prompt.d.ts +4 -0
- package/dist/commands/review-custom-prompt.js +170 -0
- package/dist/commands/review-custom-rule.d.ts +4 -0
- package/dist/commands/review-custom-rule.js +169 -0
- package/dist/commands/review-dashboard-data.d.ts +4 -0
- package/dist/commands/review-dashboard-data.js +142 -0
- package/dist/commands/review-dashboard.d.ts +4 -0
- package/dist/commands/review-dashboard.js +140 -0
- package/dist/commands/review-data-retention.d.ts +4 -0
- package/dist/commands/review-data-retention.js +119 -0
- package/dist/commands/review-dependency-graph.d.ts +4 -0
- package/dist/commands/review-dependency-graph.js +94 -0
- package/dist/commands/review-dependency-review.d.ts +1 -0
- package/dist/commands/review-dependency-review.js +104 -0
- package/dist/commands/review-deployment-gate.d.ts +4 -0
- package/dist/commands/review-deployment-gate.js +94 -0
- package/dist/commands/review-depth.d.ts +4 -0
- package/dist/commands/review-depth.js +142 -0
- package/dist/commands/review-diff-annotate.d.ts +4 -0
- package/dist/commands/review-diff-annotate.js +104 -0
- package/dist/commands/review-diff-context.d.ts +4 -0
- package/dist/commands/review-diff-context.js +158 -0
- package/dist/commands/review-diff-highlight.d.ts +4 -0
- package/dist/commands/review-diff-highlight.js +179 -0
- package/dist/commands/review-diff-stats.d.ts +4 -0
- package/dist/commands/review-diff-stats.js +90 -0
- package/dist/commands/review-diff-summary.d.ts +4 -0
- package/dist/commands/review-diff-summary.js +154 -0
- package/dist/commands/review-digest-gen.d.ts +1 -0
- package/dist/commands/review-digest-gen.js +100 -0
- package/dist/commands/review-digest.d.ts +4 -0
- package/dist/commands/review-digest.js +265 -0
- package/dist/commands/review-dry-run.d.ts +4 -0
- package/dist/commands/review-dry-run.js +120 -0
- package/dist/commands/review-engagement-score.d.ts +1 -0
- package/dist/commands/review-engagement-score.js +111 -0
- package/dist/commands/review-env-check.d.ts +4 -0
- package/dist/commands/review-env-check.js +115 -0
- package/dist/commands/review-environment-config.d.ts +4 -0
- package/dist/commands/review-environment-config.js +102 -0
- package/dist/commands/review-escalation-path.d.ts +1 -0
- package/dist/commands/review-escalation-path.js +86 -0
- package/dist/commands/review-exclude-vendor.d.ts +4 -0
- package/dist/commands/review-exclude-vendor.js +158 -0
- package/dist/commands/review-explain.d.ts +5 -0
- package/dist/commands/review-explain.js +194 -0
- package/dist/commands/review-export-pdf.d.ts +7 -0
- package/dist/commands/review-export-pdf.js +131 -0
- package/dist/commands/review-export.d.ts +4 -0
- package/dist/commands/review-export.js +179 -0
- package/dist/commands/review-feedback-loop.d.ts +4 -0
- package/dist/commands/review-feedback-loop.js +113 -0
- package/dist/commands/review-feedback-summary.d.ts +1 -0
- package/dist/commands/review-feedback-summary.js +130 -0
- package/dist/commands/review-feedback.d.ts +4 -0
- package/dist/commands/review-feedback.js +145 -0
- package/dist/commands/review-file-complexity.d.ts +4 -0
- package/dist/commands/review-file-complexity.js +137 -0
- package/dist/commands/review-file-filter.d.ts +4 -0
- package/dist/commands/review-file-filter.js +121 -0
- package/dist/commands/review-file-stats.d.ts +4 -0
- package/dist/commands/review-file-stats.js +130 -0
- package/dist/commands/review-filter.d.ts +4 -0
- package/dist/commands/review-filter.js +161 -0
- package/dist/commands/review-finding-link.d.ts +7 -0
- package/dist/commands/review-finding-link.js +115 -0
- package/dist/commands/review-focus-area.d.ts +1 -0
- package/dist/commands/review-focus-area.js +96 -0
- package/dist/commands/review-focus.d.ts +4 -0
- package/dist/commands/review-focus.js +196 -0
- package/dist/commands/review-gate-config.d.ts +4 -0
- package/dist/commands/review-gate-config.js +153 -0
- package/dist/commands/review-gate.d.ts +4 -0
- package/dist/commands/review-gate.js +212 -0
- package/dist/commands/review-goal-track.d.ts +1 -0
- package/dist/commands/review-goal-track.js +123 -0
- package/dist/commands/review-guardrail.d.ts +4 -0
- package/dist/commands/review-guardrail.js +155 -0
- package/dist/commands/review-handoff.d.ts +4 -0
- package/dist/commands/review-handoff.js +208 -0
- package/dist/commands/review-health-check.d.ts +4 -0
- package/dist/commands/review-health-check.js +148 -0
- package/dist/commands/review-health-trend.d.ts +1 -0
- package/dist/commands/review-health-trend.js +107 -0
- package/dist/commands/review-history-compare.d.ts +4 -0
- package/dist/commands/review-history-compare.js +93 -0
- package/dist/commands/review-history-search.d.ts +4 -0
- package/dist/commands/review-history-search.js +214 -0
- package/dist/commands/review-ide-sync.d.ts +4 -0
- package/dist/commands/review-ide-sync.js +91 -0
- package/dist/commands/review-ignore-path.d.ts +4 -0
- package/dist/commands/review-ignore-path.js +147 -0
- package/dist/commands/review-ignore-pattern.d.ts +5 -0
- package/dist/commands/review-ignore-pattern.js +138 -0
- package/dist/commands/review-incident-link.d.ts +4 -0
- package/dist/commands/review-incident-link.js +93 -0
- package/dist/commands/review-incremental.d.ts +4 -0
- package/dist/commands/review-incremental.js +128 -0
- package/dist/commands/review-integration-health.d.ts +4 -0
- package/dist/commands/review-integration-health.js +84 -0
- package/dist/commands/review-integration-test.d.ts +4 -0
- package/dist/commands/review-integration-test.js +145 -0
- package/dist/commands/review-integration.d.ts +4 -0
- package/dist/commands/review-integration.js +236 -0
- package/dist/commands/review-interactive.d.ts +4 -0
- package/dist/commands/review-interactive.js +85 -0
- package/dist/commands/review-knowledge-capture.d.ts +1 -0
- package/dist/commands/review-knowledge-capture.js +94 -0
- package/dist/commands/review-language-profile.d.ts +4 -0
- package/dist/commands/review-language-profile.js +72 -0
- package/dist/commands/review-language-stats.d.ts +4 -0
- package/dist/commands/review-language-stats.js +152 -0
- package/dist/commands/review-lock-file.d.ts +4 -0
- package/dist/commands/review-lock-file.js +153 -0
- package/dist/commands/review-lock.d.ts +4 -0
- package/dist/commands/review-lock.js +107 -0
- package/dist/commands/review-log.d.ts +22 -0
- package/dist/commands/review-log.js +164 -0
- package/dist/commands/review-mentor-suggest.d.ts +1 -0
- package/dist/commands/review-mentor-suggest.js +112 -0
- package/dist/commands/review-merge-check.d.ts +4 -0
- package/dist/commands/review-merge-check.js +101 -0
- package/dist/commands/review-merge-config.d.ts +4 -0
- package/dist/commands/review-merge-config.js +119 -0
- package/dist/commands/review-merge-readiness.d.ts +1 -0
- package/dist/commands/review-merge-readiness.js +90 -0
- package/dist/commands/review-merge-request.d.ts +4 -0
- package/dist/commands/review-merge-request.js +95 -0
- package/dist/commands/review-merge.d.ts +4 -0
- package/dist/commands/review-merge.js +145 -0
- package/dist/commands/review-metric-export.d.ts +4 -0
- package/dist/commands/review-metric-export.js +62 -0
- package/dist/commands/review-milestone.d.ts +4 -0
- package/dist/commands/review-milestone.js +136 -0
- package/dist/commands/review-multi-repo-sync.d.ts +4 -0
- package/dist/commands/review-multi-repo-sync.js +115 -0
- package/dist/commands/review-multi-repo.d.ts +4 -0
- package/dist/commands/review-multi-repo.js +145 -0
- package/dist/commands/review-note.d.ts +4 -0
- package/dist/commands/review-note.js +104 -0
- package/dist/commands/review-notification-config.d.ts +4 -0
- package/dist/commands/review-notification-config.js +122 -0
- package/dist/commands/review-notification-digest.d.ts +4 -0
- package/dist/commands/review-notification-digest.js +64 -0
- package/dist/commands/review-notification.d.ts +4 -0
- package/dist/commands/review-notification.js +126 -0
- package/dist/commands/review-notify.d.ts +4 -0
- package/dist/commands/review-notify.js +143 -0
- package/dist/commands/review-offline.d.ts +4 -0
- package/dist/commands/review-offline.js +125 -0
- package/dist/commands/review-onboard-checklist.d.ts +4 -0
- package/dist/commands/review-onboard-checklist.js +119 -0
- package/dist/commands/review-onboard-wizard.d.ts +4 -0
- package/dist/commands/review-onboard-wizard.js +92 -0
- package/dist/commands/review-onboard.d.ts +4 -0
- package/dist/commands/review-onboard.js +154 -0
- package/dist/commands/review-onboarding-check.d.ts +1 -0
- package/dist/commands/review-onboarding-check.js +93 -0
- package/dist/commands/review-org-dashboard.d.ts +4 -0
- package/dist/commands/review-org-dashboard.js +68 -0
- package/dist/commands/review-output-filter.d.ts +4 -0
- package/dist/commands/review-output-filter.js +112 -0
- package/dist/commands/review-output-format.d.ts +4 -0
- package/dist/commands/review-output-format.js +144 -0
- package/dist/commands/review-output-transform.d.ts +4 -0
- package/dist/commands/review-output-transform.js +119 -0
- package/dist/commands/review-owner.d.ts +4 -0
- package/dist/commands/review-owner.js +129 -0
- package/dist/commands/review-parallel-diff.d.ts +4 -0
- package/dist/commands/review-parallel-diff.js +146 -0
- package/dist/commands/review-parallel-files.d.ts +7 -0
- package/dist/commands/review-parallel-files.js +134 -0
- package/dist/commands/review-parallel-run.d.ts +4 -0
- package/dist/commands/review-parallel-run.js +116 -0
- package/dist/commands/review-parallel.d.ts +4 -0
- package/dist/commands/review-parallel.js +164 -0
- package/dist/commands/review-perf-profile.d.ts +4 -0
- package/dist/commands/review-perf-profile.js +98 -0
- package/dist/commands/review-permission-model.d.ts +4 -0
- package/dist/commands/review-permission-model.js +149 -0
- package/dist/commands/review-pipeline-status.d.ts +4 -0
- package/dist/commands/review-pipeline-status.js +54 -0
- package/dist/commands/review-plugin-config.d.ts +4 -0
- package/dist/commands/review-plugin-config.js +167 -0
- package/dist/commands/review-plugin-list.d.ts +4 -0
- package/dist/commands/review-plugin-list.js +99 -0
- package/dist/commands/review-plugin-manage.d.ts +4 -0
- package/dist/commands/review-plugin-manage.js +137 -0
- package/dist/commands/review-plugin-status.d.ts +4 -0
- package/dist/commands/review-plugin-status.js +53 -0
- package/dist/commands/review-policy-enforce.d.ts +1 -0
- package/dist/commands/review-policy-enforce.js +92 -0
- package/dist/commands/review-policy-engine.d.ts +4 -0
- package/dist/commands/review-policy-engine.js +135 -0
- package/dist/commands/review-pr-comment-gen.d.ts +4 -0
- package/dist/commands/review-pr-comment-gen.js +62 -0
- package/dist/commands/review-pr-comment.d.ts +4 -0
- package/dist/commands/review-pr-comment.js +106 -0
- package/dist/commands/review-pr-label-suggest.d.ts +1 -0
- package/dist/commands/review-pr-label-suggest.js +77 -0
- package/dist/commands/review-pr-size-check.d.ts +1 -0
- package/dist/commands/review-pr-size-check.js +98 -0
- package/dist/commands/review-pr-template.d.ts +4 -0
- package/dist/commands/review-pr-template.js +104 -0
- package/dist/commands/review-preset-save.d.ts +4 -0
- package/dist/commands/review-preset-save.js +159 -0
- package/dist/commands/review-priority.d.ts +4 -0
- package/dist/commands/review-priority.js +157 -0
- package/dist/commands/review-profile.d.ts +4 -0
- package/dist/commands/review-profile.js +168 -0
- package/dist/commands/review-progress-bar.d.ts +4 -0
- package/dist/commands/review-progress-bar.js +157 -0
- package/dist/commands/review-progress-report.d.ts +1 -0
- package/dist/commands/review-progress-report.js +95 -0
- package/dist/commands/review-progress-track.d.ts +4 -0
- package/dist/commands/review-progress-track.js +94 -0
- package/dist/commands/review-quality-baseline.d.ts +1 -0
- package/dist/commands/review-quality-baseline.js +134 -0
- package/dist/commands/review-quality-gate.d.ts +1 -0
- package/dist/commands/review-quality-gate.js +86 -0
- package/dist/commands/review-quality-score.d.ts +4 -0
- package/dist/commands/review-quality-score.js +127 -0
- package/dist/commands/review-quality-trend.d.ts +4 -0
- package/dist/commands/review-quality-trend.js +57 -0
- package/dist/commands/review-queue.d.ts +33 -0
- package/dist/commands/review-queue.js +225 -0
- package/dist/commands/review-quickstart.d.ts +4 -0
- package/dist/commands/review-quickstart.js +107 -0
- package/dist/commands/review-quota-check.d.ts +4 -0
- package/dist/commands/review-quota-check.js +97 -0
- package/dist/commands/review-quota.d.ts +4 -0
- package/dist/commands/review-quota.js +126 -0
- package/dist/commands/review-rate-limit.d.ts +4 -0
- package/dist/commands/review-rate-limit.js +130 -0
- package/dist/commands/review-readiness-check.d.ts +1 -0
- package/dist/commands/review-readiness-check.js +98 -0
- package/dist/commands/review-receipt.d.ts +4 -0
- package/dist/commands/review-receipt.js +220 -0
- package/dist/commands/review-release-gate.d.ts +1 -0
- package/dist/commands/review-release-gate.js +81 -0
- package/dist/commands/review-replay.d.ts +8 -0
- package/dist/commands/review-replay.js +264 -0
- package/dist/commands/review-repo-onboard.d.ts +4 -0
- package/dist/commands/review-repo-onboard.js +114 -0
- package/dist/commands/review-report-archive.d.ts +4 -0
- package/dist/commands/review-report-archive.js +100 -0
- package/dist/commands/review-report-merge.d.ts +4 -0
- package/dist/commands/review-report-merge.js +90 -0
- package/dist/commands/review-report-pdf.d.ts +4 -0
- package/dist/commands/review-report-pdf.js +163 -0
- package/dist/commands/review-report-schedule.d.ts +4 -0
- package/dist/commands/review-report-schedule.js +96 -0
- package/dist/commands/review-retrospective.d.ts +1 -0
- package/dist/commands/review-retrospective.js +118 -0
- package/dist/commands/review-retry.d.ts +4 -0
- package/dist/commands/review-retry.js +91 -0
- package/dist/commands/review-review-cadence.d.ts +1 -0
- package/dist/commands/review-review-cadence.js +85 -0
- package/dist/commands/review-review-comments.d.ts +4 -0
- package/dist/commands/review-review-comments.js +84 -0
- package/dist/commands/review-reviewer-match.d.ts +1 -0
- package/dist/commands/review-reviewer-match.js +108 -0
- package/dist/commands/review-risk-matrix.d.ts +1 -0
- package/dist/commands/review-risk-matrix.js +96 -0
- package/dist/commands/review-risk-score.d.ts +4 -0
- package/dist/commands/review-risk-score.js +156 -0
- package/dist/commands/review-role-assignment.d.ts +4 -0
- package/dist/commands/review-role-assignment.js +98 -0
- package/dist/commands/review-rollback.d.ts +4 -0
- package/dist/commands/review-rollback.js +171 -0
- package/dist/commands/review-rollout-plan.d.ts +4 -0
- package/dist/commands/review-rollout-plan.js +123 -0
- package/dist/commands/review-rule-filter.d.ts +4 -0
- package/dist/commands/review-rule-filter.js +116 -0
- package/dist/commands/review-rule-stats.d.ts +4 -0
- package/dist/commands/review-rule-stats.js +161 -0
- package/dist/commands/review-sandbox.d.ts +4 -0
- package/dist/commands/review-sandbox.js +191 -0
- package/dist/commands/review-schedule.d.ts +4 -0
- package/dist/commands/review-schedule.js +169 -0
- package/dist/commands/review-scope-limit.d.ts +4 -0
- package/dist/commands/review-scope-limit.js +100 -0
- package/dist/commands/review-scope-lock.d.ts +7 -0
- package/dist/commands/review-scope-lock.js +138 -0
- package/dist/commands/review-scope-select.d.ts +4 -0
- package/dist/commands/review-scope-select.js +98 -0
- package/dist/commands/review-scope-suggest.d.ts +1 -0
- package/dist/commands/review-scope-suggest.js +112 -0
- package/dist/commands/review-scope.d.ts +4 -0
- package/dist/commands/review-scope.js +197 -0
- package/dist/commands/review-score-history.d.ts +4 -0
- package/dist/commands/review-score-history.js +137 -0
- package/dist/commands/review-security-posture.d.ts +1 -0
- package/dist/commands/review-security-posture.js +105 -0
- package/dist/commands/review-session-replay.d.ts +4 -0
- package/dist/commands/review-session-replay.js +81 -0
- package/dist/commands/review-session-save.d.ts +4 -0
- package/dist/commands/review-session-save.js +173 -0
- package/dist/commands/review-session.d.ts +4 -0
- package/dist/commands/review-session.js +150 -0
- package/dist/commands/review-skip-list.d.ts +4 -0
- package/dist/commands/review-skip-list.js +135 -0
- package/dist/commands/review-skip-rule.d.ts +4 -0
- package/dist/commands/review-skip-rule.js +105 -0
- package/dist/commands/review-sla-config.d.ts +4 -0
- package/dist/commands/review-sla-config.js +88 -0
- package/dist/commands/review-slack-format.d.ts +4 -0
- package/dist/commands/review-slack-format.js +113 -0
- package/dist/commands/review-snapshot-diff.d.ts +4 -0
- package/dist/commands/review-snapshot-diff.js +100 -0
- package/dist/commands/review-sprint-plan.d.ts +1 -0
- package/dist/commands/review-sprint-plan.js +79 -0
- package/dist/commands/review-stakeholder-notify.d.ts +1 -0
- package/dist/commands/review-stakeholder-notify.js +134 -0
- package/dist/commands/review-stakeholder-report.d.ts +4 -0
- package/dist/commands/review-stakeholder-report.js +75 -0
- package/dist/commands/review-stale-finding-clean.d.ts +1 -0
- package/dist/commands/review-stale-finding-clean.js +81 -0
- package/dist/commands/review-standup.d.ts +4 -0
- package/dist/commands/review-standup.js +95 -0
- package/dist/commands/review-stats.d.ts +4 -0
- package/dist/commands/review-stats.js +175 -0
- package/dist/commands/review-status-badge.d.ts +4 -0
- package/dist/commands/review-status-badge.js +120 -0
- package/dist/commands/review-streak.d.ts +4 -0
- package/dist/commands/review-streak.js +150 -0
- package/dist/commands/review-summary-dashboard.d.ts +4 -0
- package/dist/commands/review-summary-dashboard.js +96 -0
- package/dist/commands/review-summary-email.d.ts +4 -0
- package/dist/commands/review-summary-email.js +102 -0
- package/dist/commands/review-summary.d.ts +4 -0
- package/dist/commands/review-summary.js +174 -0
- package/dist/commands/review-tag-manager.d.ts +4 -0
- package/dist/commands/review-tag-manager.js +128 -0
- package/dist/commands/review-tag.d.ts +4 -0
- package/dist/commands/review-tag.js +136 -0
- package/dist/commands/review-team-analytics.d.ts +1 -0
- package/dist/commands/review-team-analytics.js +94 -0
- package/dist/commands/review-team-assign.d.ts +7 -0
- package/dist/commands/review-team-assign.js +211 -0
- package/dist/commands/review-team-coverage.d.ts +1 -0
- package/dist/commands/review-team-coverage.js +95 -0
- package/dist/commands/review-team-dashboard.d.ts +4 -0
- package/dist/commands/review-team-dashboard.js +98 -0
- package/dist/commands/review-team-rotation.d.ts +1 -0
- package/dist/commands/review-team-rotation.js +99 -0
- package/dist/commands/review-team-skill-map.d.ts +1 -0
- package/dist/commands/review-team-skill-map.js +102 -0
- package/dist/commands/review-team-stats.d.ts +4 -0
- package/dist/commands/review-team-stats.js +97 -0
- package/dist/commands/review-team-summary.d.ts +4 -0
- package/dist/commands/review-team-summary.js +155 -0
- package/dist/commands/review-team-velocity.d.ts +1 -0
- package/dist/commands/review-team-velocity.js +103 -0
- package/dist/commands/review-template-export.d.ts +4 -0
- package/dist/commands/review-template-export.js +146 -0
- package/dist/commands/review-template-library.d.ts +4 -0
- package/dist/commands/review-template-library.js +155 -0
- package/dist/commands/review-template-suggest.d.ts +1 -0
- package/dist/commands/review-template-suggest.js +119 -0
- package/dist/commands/review-template.d.ts +4 -0
- package/dist/commands/review-template.js +212 -0
- package/dist/commands/review-tenant-config.d.ts +4 -0
- package/dist/commands/review-tenant-config.js +116 -0
- package/dist/commands/review-threshold-tune.d.ts +4 -0
- package/dist/commands/review-threshold-tune.js +135 -0
- package/dist/commands/review-timeline.d.ts +4 -0
- package/dist/commands/review-timeline.js +76 -0
- package/dist/commands/review-token-budget.d.ts +4 -0
- package/dist/commands/review-token-budget.js +117 -0
- package/dist/commands/review-velocity-track.d.ts +1 -0
- package/dist/commands/review-velocity-track.js +94 -0
- package/dist/commands/review-watch-mode.d.ts +7 -0
- package/dist/commands/review-watch-mode.js +132 -0
- package/dist/commands/review-webhook-dispatch.d.ts +4 -0
- package/dist/commands/review-webhook-dispatch.js +99 -0
- package/dist/commands/review-webhook-notify.d.ts +4 -0
- package/dist/commands/review-webhook-notify.js +145 -0
- package/dist/commands/review-webhook.d.ts +4 -0
- package/dist/commands/review-webhook.js +140 -0
- package/dist/commands/review-whitelist.d.ts +4 -0
- package/dist/commands/review-whitelist.js +150 -0
- package/dist/commands/review-workflow-suggest.d.ts +1 -0
- package/dist/commands/review-workflow-suggest.js +129 -0
- package/dist/commands/review-workload-balance.d.ts +1 -0
- package/dist/commands/review-workload-balance.js +86 -0
- package/dist/commands/review-workspace-init.d.ts +4 -0
- package/dist/commands/review-workspace-init.js +104 -0
- package/dist/commands/review-workspace-scan.d.ts +4 -0
- package/dist/commands/review-workspace-scan.js +144 -0
- package/dist/commands/review.d.ts +155 -0
- package/dist/commands/review.js +1114 -0
- package/dist/commands/risk-heatmap.d.ts +7 -0
- package/dist/commands/risk-heatmap.js +223 -0
- package/dist/commands/rollback-safety.d.ts +4 -0
- package/dist/commands/rollback-safety.js +191 -0
- package/dist/commands/rule-catalog.d.ts +4 -0
- package/dist/commands/rule-catalog.js +128 -0
- package/dist/commands/rule-metrics.d.ts +43 -0
- package/dist/commands/rule-metrics.js +113 -0
- package/dist/commands/rule-owner.d.ts +30 -0
- package/dist/commands/rule-owner.js +181 -0
- package/dist/commands/rule-share.d.ts +34 -0
- package/dist/commands/rule-share.js +202 -0
- package/dist/commands/rule-test.d.ts +4 -0
- package/dist/commands/rule-test.js +201 -0
- package/dist/commands/rule.d.ts +114 -0
- package/dist/commands/rule.js +295 -0
- package/dist/commands/sbom-export.d.ts +7 -0
- package/dist/commands/sbom-export.js +161 -0
- package/dist/commands/scaffold-plugin.d.ts +15 -0
- package/dist/commands/scaffold-plugin.js +270 -0
- package/dist/commands/secret-age.d.ts +5 -0
- package/dist/commands/secret-age.js +214 -0
- package/dist/commands/secret-scan.d.ts +7 -0
- package/dist/commands/secret-scan.js +244 -0
- package/dist/commands/security-maturity.d.ts +7 -0
- package/dist/commands/security-maturity.js +312 -0
- package/dist/commands/security-theater.d.ts +4 -0
- package/dist/commands/security-theater.js +278 -0
- package/dist/commands/setup-wizard.d.ts +4 -0
- package/dist/commands/setup-wizard.js +174 -0
- package/dist/commands/severity-tune.d.ts +4 -0
- package/dist/commands/severity-tune.js +208 -0
- package/dist/commands/sla-track.d.ts +56 -0
- package/dist/commands/sla-track.js +268 -0
- package/dist/commands/smart-output.d.ts +38 -0
- package/dist/commands/smart-output.js +175 -0
- package/dist/commands/smart-select.d.ts +26 -0
- package/dist/commands/smart-select.js +345 -0
- package/dist/commands/snapshot.d.ts +139 -0
- package/dist/commands/snapshot.js +478 -0
- package/dist/commands/snippet-eval.d.ts +7 -0
- package/dist/commands/snippet-eval.js +223 -0
- package/dist/commands/spec-conform.d.ts +4 -0
- package/dist/commands/spec-conform.js +304 -0
- package/dist/commands/stale-pattern.d.ts +4 -0
- package/dist/commands/stale-pattern.js +293 -0
- package/dist/commands/state-integrity.d.ts +4 -0
- package/dist/commands/state-integrity.js +283 -0
- package/dist/commands/suppress.d.ts +39 -0
- package/dist/commands/suppress.js +203 -0
- package/dist/commands/team-config.d.ts +4 -0
- package/dist/commands/team-config.js +234 -0
- package/dist/commands/team-leaderboard.d.ts +24 -0
- package/dist/commands/team-leaderboard.js +227 -0
- package/dist/commands/team-rules-sync.d.ts +7 -0
- package/dist/commands/team-rules-sync.js +250 -0
- package/dist/commands/team-trust.d.ts +7 -0
- package/dist/commands/team-trust.js +174 -0
- package/dist/commands/test-correlate.d.ts +7 -0
- package/dist/commands/test-correlate.js +221 -0
- package/dist/commands/test-isolation.d.ts +5 -0
- package/dist/commands/test-isolation.js +234 -0
- package/dist/commands/test-quality.d.ts +5 -0
- package/dist/commands/test-quality.js +160 -0
- package/dist/commands/test-suggest.d.ts +8 -0
- package/dist/commands/test-suggest.js +247 -0
- package/dist/commands/ticket-sync.d.ts +25 -0
- package/dist/commands/ticket-sync.js +235 -0
- package/dist/commands/timeout-audit.d.ts +4 -0
- package/dist/commands/timeout-audit.js +210 -0
- package/dist/commands/trace.d.ts +64 -0
- package/dist/commands/trace.js +245 -0
- package/dist/commands/trend-report.d.ts +4 -0
- package/dist/commands/trend-report.js +148 -0
- package/dist/commands/triage.d.ts +15 -0
- package/dist/commands/triage.js +171 -0
- package/dist/commands/trust-adaptive.d.ts +8 -0
- package/dist/commands/trust-adaptive.js +193 -0
- package/dist/commands/trust-ramp.d.ts +29 -0
- package/dist/commands/trust-ramp.js +189 -0
- package/dist/commands/tune.d.ts +24 -0
- package/dist/commands/tune.js +380 -0
- package/dist/commands/type-boundary.d.ts +4 -0
- package/dist/commands/type-boundary.js +235 -0
- package/dist/commands/upload.d.ts +13 -0
- package/dist/commands/upload.js +172 -0
- package/dist/commands/validate-config.d.ts +16 -0
- package/dist/commands/validate-config.js +267 -0
- package/dist/commands/vendor-lock-detect.d.ts +7 -0
- package/dist/commands/vendor-lock-detect.js +288 -0
- package/dist/commands/vote.d.ts +31 -0
- package/dist/commands/vote.js +200 -0
- package/dist/commands/warm-cache.d.ts +30 -0
- package/dist/commands/warm-cache.js +165 -0
- package/dist/commands/watch-judge.d.ts +7 -0
- package/dist/commands/watch-judge.js +179 -0
- package/dist/commands/watch.d.ts +22 -0
- package/dist/commands/watch.js +147 -0
- package/dist/comparison.d.ts +67 -0
- package/dist/comparison.js +253 -0
- package/dist/config.d.ts +108 -0
- package/dist/config.js +694 -0
- package/dist/context/context-snippets.d.ts +15 -0
- package/dist/context/context-snippets.js +36 -0
- package/dist/context/embedding-cache.d.ts +30 -0
- package/dist/context/embedding-cache.js +48 -0
- package/dist/data-adapter.d.ts +123 -0
- package/dist/data-adapter.js +212 -0
- package/dist/dedup.d.ts +105 -0
- package/dist/dedup.js +606 -0
- package/dist/disk-cache.d.ts +59 -0
- package/dist/disk-cache.js +236 -0
- package/dist/errors.d.ts +43 -0
- package/dist/errors.js +63 -0
- package/dist/escalation.d.ts +100 -0
- package/dist/escalation.js +292 -0
- package/dist/evaluation-session.d.ts +74 -0
- package/dist/evaluation-session.js +152 -0
- package/dist/evaluators/accessibility.d.ts +2 -0
- package/dist/evaluators/accessibility.js +559 -0
- package/dist/evaluators/agent-instructions.d.ts +2 -0
- package/dist/evaluators/agent-instructions.js +214 -0
- package/dist/evaluators/ai-code-safety.d.ts +8 -0
- package/dist/evaluators/ai-code-safety.js +410 -0
- package/dist/evaluators/api-contract.d.ts +9 -0
- package/dist/evaluators/api-contract.js +203 -0
- package/dist/evaluators/api-design.d.ts +2 -0
- package/dist/evaluators/api-design.js +260 -0
- package/dist/evaluators/app-builder.d.ts +33 -0
- package/dist/evaluators/app-builder.js +155 -0
- package/dist/evaluators/authentication.d.ts +2 -0
- package/dist/evaluators/authentication.js +455 -0
- package/dist/evaluators/backwards-compatibility.d.ts +2 -0
- package/dist/evaluators/backwards-compatibility.js +168 -0
- package/dist/evaluators/caching.d.ts +2 -0
- package/dist/evaluators/caching.js +171 -0
- package/dist/evaluators/ci-cd.d.ts +2 -0
- package/dist/evaluators/ci-cd.js +218 -0
- package/dist/evaluators/cloud-readiness.d.ts +2 -0
- package/dist/evaluators/cloud-readiness.js +231 -0
- package/dist/evaluators/code-structure.d.ts +21 -0
- package/dist/evaluators/code-structure.js +195 -0
- package/dist/evaluators/compliance.d.ts +2 -0
- package/dist/evaluators/compliance.js +329 -0
- package/dist/evaluators/concurrency.d.ts +2 -0
- package/dist/evaluators/concurrency.js +307 -0
- package/dist/evaluators/configuration-management.d.ts +2 -0
- package/dist/evaluators/configuration-management.js +232 -0
- package/dist/evaluators/cost-effectiveness.d.ts +2 -0
- package/dist/evaluators/cost-effectiveness.js +418 -0
- package/dist/evaluators/cybersecurity.d.ts +2 -0
- package/dist/evaluators/cybersecurity.js +1197 -0
- package/dist/evaluators/data-security.d.ts +2 -0
- package/dist/evaluators/data-security.js +467 -0
- package/dist/evaluators/data-sovereignty.d.ts +2 -0
- package/dist/evaluators/data-sovereignty.js +495 -0
- package/dist/evaluators/database.d.ts +2 -0
- package/dist/evaluators/database.js +240 -0
- package/dist/evaluators/dependencies.d.ts +5 -0
- package/dist/evaluators/dependencies.js +228 -0
- package/dist/evaluators/dependency-health.d.ts +2 -0
- package/dist/evaluators/dependency-health.js +477 -0
- package/dist/evaluators/documentation.d.ts +2 -0
- package/dist/evaluators/documentation.js +432 -0
- package/dist/evaluators/error-handling.d.ts +2 -0
- package/dist/evaluators/error-handling.js +426 -0
- package/dist/evaluators/ethics-bias.d.ts +2 -0
- package/dist/evaluators/ethics-bias.js +263 -0
- package/dist/evaluators/false-positive-review.d.ts +21 -0
- package/dist/evaluators/false-positive-review.js +1246 -0
- package/dist/evaluators/framework-rules.d.ts +58 -0
- package/dist/evaluators/framework-rules.js +291 -0
- package/dist/evaluators/framework-safety.d.ts +12 -0
- package/dist/evaluators/framework-safety.js +1205 -0
- package/dist/evaluators/hallucination-detection.d.ts +2 -0
- package/dist/evaluators/hallucination-detection.js +1250 -0
- package/dist/evaluators/iac-security.d.ts +8 -0
- package/dist/evaluators/iac-security.js +701 -0
- package/dist/evaluators/index.d.ts +167 -0
- package/dist/evaluators/index.js +994 -0
- package/dist/evaluators/intent-alignment.d.ts +18 -0
- package/dist/evaluators/intent-alignment.js +405 -0
- package/dist/evaluators/internationalization.d.ts +2 -0
- package/dist/evaluators/internationalization.js +287 -0
- package/dist/evaluators/judge-selector.d.ts +19 -0
- package/dist/evaluators/judge-selector.js +141 -0
- package/dist/evaluators/logging-privacy.d.ts +2 -0
- package/dist/evaluators/logging-privacy.js +190 -0
- package/dist/evaluators/logic-review.d.ts +2 -0
- package/dist/evaluators/logic-review.js +289 -0
- package/dist/evaluators/maintainability.d.ts +2 -0
- package/dist/evaluators/maintainability.js +430 -0
- package/dist/evaluators/model-fingerprint.d.ts +2 -0
- package/dist/evaluators/model-fingerprint.js +151 -0
- package/dist/evaluators/multi-turn-coherence.d.ts +13 -0
- package/dist/evaluators/multi-turn-coherence.js +149 -0
- package/dist/evaluators/observability.d.ts +2 -0
- package/dist/evaluators/observability.js +238 -0
- package/dist/evaluators/over-engineering.d.ts +2 -0
- package/dist/evaluators/over-engineering.js +160 -0
- package/dist/evaluators/performance.d.ts +2 -0
- package/dist/evaluators/performance.js +649 -0
- package/dist/evaluators/portability.d.ts +2 -0
- package/dist/evaluators/portability.js +254 -0
- package/dist/evaluators/project.d.ts +48 -0
- package/dist/evaluators/project.js +817 -0
- package/dist/evaluators/rate-limiting.d.ts +2 -0
- package/dist/evaluators/rate-limiting.js +193 -0
- package/dist/evaluators/recall-boost.d.ts +27 -0
- package/dist/evaluators/recall-boost.js +409 -0
- package/dist/evaluators/reliability.d.ts +2 -0
- package/dist/evaluators/reliability.js +245 -0
- package/dist/evaluators/scalability.d.ts +2 -0
- package/dist/evaluators/scalability.js +230 -0
- package/dist/evaluators/security.d.ts +12 -0
- package/dist/evaluators/security.js +1013 -0
- package/dist/evaluators/shared.d.ts +219 -0
- package/dist/evaluators/shared.js +1169 -0
- package/dist/evaluators/software-practices.d.ts +2 -0
- package/dist/evaluators/software-practices.js +395 -0
- package/dist/evaluators/suppressions.d.ts +49 -0
- package/dist/evaluators/suppressions.js +185 -0
- package/dist/evaluators/testing.d.ts +2 -0
- package/dist/evaluators/testing.js +348 -0
- package/dist/evaluators/ux.d.ts +2 -0
- package/dist/evaluators/ux.js +309 -0
- package/dist/evaluators/v2.d.ts +26 -0
- package/dist/evaluators/v2.js +354 -0
- package/dist/ext-to-lang.d.ts +16 -0
- package/dist/ext-to-lang.js +60 -0
- package/dist/feedback-loop.d.ts +62 -0
- package/dist/feedback-loop.js +179 -0
- package/dist/finding-lifecycle.d.ts +215 -0
- package/dist/finding-lifecycle.js +547 -0
- package/dist/fingerprint.d.ts +39 -0
- package/dist/fingerprint.js +179 -0
- package/dist/fix-history.d.ts +103 -0
- package/dist/fix-history.js +164 -0
- package/dist/formatters/badge.d.ts +16 -0
- package/dist/formatters/badge.js +78 -0
- package/dist/formatters/codeclimate.d.ts +24 -0
- package/dist/formatters/codeclimate.js +80 -0
- package/dist/formatters/csv.d.ts +16 -0
- package/dist/formatters/csv.js +53 -0
- package/dist/formatters/diagnostics.d.ts +81 -0
- package/dist/formatters/diagnostics.js +152 -0
- package/dist/formatters/github-actions.d.ts +6 -0
- package/dist/formatters/github-actions.js +68 -0
- package/dist/formatters/html.d.ts +12 -0
- package/dist/formatters/html.js +194 -0
- package/dist/formatters/junit.d.ts +6 -0
- package/dist/formatters/junit.js +68 -0
- package/dist/formatters/pdf.d.ts +12 -0
- package/dist/formatters/pdf.js +114 -0
- package/dist/formatters/sarif.d.ts +92 -0
- package/dist/formatters/sarif.js +256 -0
- package/dist/formatters/shared.d.ts +4 -0
- package/dist/formatters/shared.js +29 -0
- package/dist/git-diff.d.ts +62 -0
- package/dist/git-diff.js +282 -0
- package/dist/github-app.d.ts +152 -0
- package/dist/github-app.js +716 -0
- package/dist/import-resolver.d.ts +51 -0
- package/dist/import-resolver.js +213 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +38 -0
- package/dist/judge-registry.d.ts +156 -0
- package/dist/judge-registry.js +272 -0
- package/dist/judges/accessibility.d.ts +2 -0
- package/dist/judges/accessibility.js +46 -0
- package/dist/judges/agent-instructions.d.ts +2 -0
- package/dist/judges/agent-instructions.js +46 -0
- package/dist/judges/ai-code-safety.d.ts +2 -0
- package/dist/judges/ai-code-safety.js +57 -0
- package/dist/judges/api-contract.d.ts +2 -0
- package/dist/judges/api-contract.js +40 -0
- package/dist/judges/api-design.d.ts +2 -0
- package/dist/judges/api-design.js +57 -0
- package/dist/judges/authentication.d.ts +2 -0
- package/dist/judges/authentication.js +63 -0
- package/dist/judges/backwards-compatibility.d.ts +2 -0
- package/dist/judges/backwards-compatibility.js +46 -0
- package/dist/judges/caching.d.ts +2 -0
- package/dist/judges/caching.js +46 -0
- package/dist/judges/ci-cd.d.ts +2 -0
- package/dist/judges/ci-cd.js +46 -0
- package/dist/judges/cloud-readiness.d.ts +2 -0
- package/dist/judges/cloud-readiness.js +53 -0
- package/dist/judges/code-structure.d.ts +2 -0
- package/dist/judges/code-structure.js +50 -0
- package/dist/judges/compliance.d.ts +2 -0
- package/dist/judges/compliance.js +49 -0
- package/dist/judges/concurrency.d.ts +2 -0
- package/dist/judges/concurrency.js +48 -0
- package/dist/judges/configuration-management.d.ts +2 -0
- package/dist/judges/configuration-management.js +46 -0
- package/dist/judges/cost-effectiveness.d.ts +2 -0
- package/dist/judges/cost-effectiveness.js +42 -0
- package/dist/judges/cybersecurity.d.ts +2 -0
- package/dist/judges/cybersecurity.js +63 -0
- package/dist/judges/data-security.d.ts +2 -0
- package/dist/judges/data-security.js +50 -0
- package/dist/judges/data-sovereignty.d.ts +2 -0
- package/dist/judges/data-sovereignty.js +60 -0
- package/dist/judges/database.d.ts +2 -0
- package/dist/judges/database.js +51 -0
- package/dist/judges/dependency-health.d.ts +2 -0
- package/dist/judges/dependency-health.js +48 -0
- package/dist/judges/documentation.d.ts +2 -0
- package/dist/judges/documentation.js +55 -0
- package/dist/judges/error-handling.d.ts +2 -0
- package/dist/judges/error-handling.js +55 -0
- package/dist/judges/ethics-bias.d.ts +2 -0
- package/dist/judges/ethics-bias.js +48 -0
- package/dist/judges/false-positive-review.d.ts +2 -0
- package/dist/judges/false-positive-review.js +85 -0
- package/dist/judges/framework-safety.d.ts +2 -0
- package/dist/judges/framework-safety.js +49 -0
- package/dist/judges/hallucination-detection.d.ts +2 -0
- package/dist/judges/hallucination-detection.js +48 -0
- package/dist/judges/iac-security.d.ts +2 -0
- package/dist/judges/iac-security.js +47 -0
- package/dist/judges/index.d.ts +88 -0
- package/dist/judges/index.js +128 -0
- package/dist/judges/intent-alignment.d.ts +2 -0
- package/dist/judges/intent-alignment.js +46 -0
- package/dist/judges/internationalization.d.ts +2 -0
- package/dist/judges/internationalization.js +44 -0
- package/dist/judges/logging-privacy.d.ts +2 -0
- package/dist/judges/logging-privacy.js +46 -0
- package/dist/judges/logic-review.d.ts +2 -0
- package/dist/judges/logic-review.js +36 -0
- package/dist/judges/maintainability.d.ts +2 -0
- package/dist/judges/maintainability.js +46 -0
- package/dist/judges/model-fingerprint.d.ts +2 -0
- package/dist/judges/model-fingerprint.js +35 -0
- package/dist/judges/multi-turn-coherence.d.ts +2 -0
- package/dist/judges/multi-turn-coherence.js +39 -0
- package/dist/judges/observability.d.ts +2 -0
- package/dist/judges/observability.js +54 -0
- package/dist/judges/over-engineering.d.ts +2 -0
- package/dist/judges/over-engineering.js +50 -0
- package/dist/judges/performance.d.ts +2 -0
- package/dist/judges/performance.js +46 -0
- package/dist/judges/portability.d.ts +2 -0
- package/dist/judges/portability.js +46 -0
- package/dist/judges/rate-limiting.d.ts +2 -0
- package/dist/judges/rate-limiting.js +55 -0
- package/dist/judges/reliability.d.ts +2 -0
- package/dist/judges/reliability.js +57 -0
- package/dist/judges/scalability.d.ts +2 -0
- package/dist/judges/scalability.js +52 -0
- package/dist/judges/security.d.ts +2 -0
- package/dist/judges/security.js +64 -0
- package/dist/judges/software-practices.d.ts +2 -0
- package/dist/judges/software-practices.js +56 -0
- package/dist/judges/testing.d.ts +2 -0
- package/dist/judges/testing.js +54 -0
- package/dist/judges/ux.d.ts +2 -0
- package/dist/judges/ux.js +46 -0
- package/dist/language-patterns.d.ts +653 -0
- package/dist/language-patterns.js +851 -0
- package/dist/parallel.d.ts +52 -0
- package/dist/parallel.js +157 -0
- package/dist/patches/apply.d.ts +15 -0
- package/dist/patches/apply.js +37 -0
- package/dist/patches/index.d.ts +9 -0
- package/dist/patches/index.js +2544 -0
- package/dist/plugins.d.ts +59 -0
- package/dist/plugins.js +76 -0
- package/dist/presets.d.ts +35 -0
- package/dist/presets.js +406 -0
- package/dist/probabilistic/llm-response-validator.d.ts +26 -0
- package/dist/probabilistic/llm-response-validator.js +122 -0
- package/dist/reports/public-repo-report.d.ts +42 -0
- package/dist/reports/public-repo-report.js +579 -0
- package/dist/review-conversation.d.ts +87 -0
- package/dist/review-conversation.js +307 -0
- package/dist/sast-integration.d.ts +112 -0
- package/dist/sast-integration.js +215 -0
- package/dist/scoring.d.ts +36 -0
- package/dist/scoring.js +437 -0
- package/dist/security-ids.d.ts +23 -0
- package/dist/security-ids.js +239 -0
- package/dist/skill-loader.d.ts +33 -0
- package/dist/skill-loader.js +167 -0
- package/dist/tools/command-safety.d.ts +13 -0
- package/dist/tools/command-safety.js +95 -0
- package/dist/tools/deep-review.d.ts +38 -0
- package/dist/tools/deep-review.js +302 -0
- package/dist/tools/prompts.d.ts +27 -0
- package/dist/tools/prompts.js +122 -0
- package/dist/tools/register-evaluation.d.ts +6 -0
- package/dist/tools/register-evaluation.js +587 -0
- package/dist/tools/register-fix.d.ts +5 -0
- package/dist/tools/register-fix.js +175 -0
- package/dist/tools/register-resources.d.ts +6 -0
- package/dist/tools/register-resources.js +177 -0
- package/dist/tools/register-review.d.ts +6 -0
- package/dist/tools/register-review.js +564 -0
- package/dist/tools/register-scaffold.d.ts +2 -0
- package/dist/tools/register-scaffold.js +398 -0
- package/dist/tools/register-workflow.d.ts +6 -0
- package/dist/tools/register-workflow.js +1037 -0
- package/dist/tools/register-workspace.d.ts +2 -0
- package/dist/tools/register-workspace.js +214 -0
- package/dist/tools/register.d.ts +6 -0
- package/dist/tools/register.js +21 -0
- package/dist/tools/schemas.d.ts +25 -0
- package/dist/tools/schemas.js +41 -0
- package/dist/tools/validation.d.ts +13 -0
- package/dist/tools/validation.js +77 -0
- package/dist/types.d.ts +898 -0
- package/dist/types.js +1 -0
- package/package.json +54 -0
- package/skills/ai-code-review.skill.md +57 -0
- package/skills/release-gate.skill.md +27 -0
- package/skills/security-review.skill.md +32 -0
package/dist/cli.js
ADDED
|
@@ -0,0 +1,1487 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// NOTE: keep logic in pure helpers to allow coverage
|
|
3
|
+
/**
|
|
4
|
+
* Judges Panel ā CLI Evaluator
|
|
5
|
+
*
|
|
6
|
+
* Evaluate code directly from the command line without MCP setup.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* judges eval --file src/app.ts # evaluate a file
|
|
10
|
+
* judges eval --file src/app.ts --language python # explicit language
|
|
11
|
+
* judges eval --file src/app.ts --format sarif # SARIF output
|
|
12
|
+
* judges eval --file src/app.ts --format html # HTML report
|
|
13
|
+
* judges eval --file src/app.ts --judge cybersecurity # single judge
|
|
14
|
+
* judges eval --fail-on-findings src/app.ts # exit 1 on fail
|
|
15
|
+
* cat src/app.ts | judges eval --language typescript # stdin pipe
|
|
16
|
+
* judges init # interactive setup
|
|
17
|
+
* judges fix src/app.ts --apply # auto-fix findings
|
|
18
|
+
* judges watch src/ # watch mode
|
|
19
|
+
* judges report . # project report
|
|
20
|
+
* judges hook install # install pre-commit
|
|
21
|
+
* judges eval --help # show help
|
|
22
|
+
*/
|
|
23
|
+
import { readFileSync, existsSync, writeFileSync, readdirSync, statSync } from "fs";
|
|
24
|
+
import { resolve, extname, dirname, join, relative } from "path";
|
|
25
|
+
import { fileURLToPath } from "url";
|
|
26
|
+
import { matchesGlob } from "./cli-helpers.js";
|
|
27
|
+
// Re-export helpers for tests/backward compatibility
|
|
28
|
+
export { globToRegex, matchesGlob } from "./cli-helpers.js";
|
|
29
|
+
import { evaluateWithTribunal, evaluateWithJudge, formatVerdictAsMarkdown, formatEvaluationAsMarkdown, } from "./evaluators/index.js";
|
|
30
|
+
import { runSkill } from "./skill-loader.js";
|
|
31
|
+
import { getJudge, getJudgeSummaries } from "./judges/index.js";
|
|
32
|
+
import { verdictToHtml } from "./formatters/html.js";
|
|
33
|
+
import { verdictToJUnit } from "./formatters/junit.js";
|
|
34
|
+
import { verdictToPdfHtml } from "./formatters/pdf.js";
|
|
35
|
+
import { verdictToCodeClimate } from "./formatters/codeclimate.js";
|
|
36
|
+
import { loadBaselineData, isBaselined } from "./commands/baseline.js";
|
|
37
|
+
import { getPreset, listPresets, composePresets } from "./presets.js";
|
|
38
|
+
import { parseConfig } from "./config.js";
|
|
39
|
+
import { applyPatches } from "./commands/fix.js";
|
|
40
|
+
import { DiskCache } from "./disk-cache.js";
|
|
41
|
+
import { contentHash } from "./cache.js";
|
|
42
|
+
import { formatComparisonReport, formatFullComparisonMatrix, TOOL_PROFILES } from "./comparison.js";
|
|
43
|
+
import { loadOverrideStore, applyOverrides } from "./commands/override.js";
|
|
44
|
+
import { runGit } from "./tools/command-safety.js";
|
|
45
|
+
import { detectLanguageFromPath, SUPPORTED_EXTENSIONS } from "./ext-to-lang.js";
|
|
46
|
+
import { formatTribunalOutput, writeOutputIfSpecified, formatSingleJudgeTextOutput, } from "./cli-formatters.js";
|
|
47
|
+
import { COMMAND_TABLE } from "./cli-dispatch.js";
|
|
48
|
+
// āāā Language Detection āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
49
|
+
function detectLanguage(filePath) {
|
|
50
|
+
if (!filePath)
|
|
51
|
+
return undefined;
|
|
52
|
+
return detectLanguageFromPath(filePath);
|
|
53
|
+
}
|
|
54
|
+
function parseCliArgs(argv) {
|
|
55
|
+
const args = {
|
|
56
|
+
command: undefined,
|
|
57
|
+
file: undefined,
|
|
58
|
+
language: undefined,
|
|
59
|
+
format: "text",
|
|
60
|
+
judge: undefined,
|
|
61
|
+
help: false,
|
|
62
|
+
failOnFindings: false,
|
|
63
|
+
baseline: undefined,
|
|
64
|
+
summary: false,
|
|
65
|
+
config: undefined,
|
|
66
|
+
preset: undefined,
|
|
67
|
+
minScore: undefined,
|
|
68
|
+
minSeverity: undefined,
|
|
69
|
+
noColor: false,
|
|
70
|
+
verbose: false,
|
|
71
|
+
quiet: false,
|
|
72
|
+
fix: false,
|
|
73
|
+
exclude: [],
|
|
74
|
+
include: [],
|
|
75
|
+
maxFiles: undefined,
|
|
76
|
+
changedOnly: false,
|
|
77
|
+
stagedOnly: false,
|
|
78
|
+
explain: false,
|
|
79
|
+
sample: false,
|
|
80
|
+
trace: false,
|
|
81
|
+
incremental: false,
|
|
82
|
+
noCache: false,
|
|
83
|
+
output: undefined,
|
|
84
|
+
skill: undefined,
|
|
85
|
+
skillsDir: undefined,
|
|
86
|
+
};
|
|
87
|
+
// First non-flag arg is the command
|
|
88
|
+
let i = 2; // skip node + script
|
|
89
|
+
if (i < argv.length && !argv[i].startsWith("-")) {
|
|
90
|
+
args.command = argv[i];
|
|
91
|
+
i++;
|
|
92
|
+
}
|
|
93
|
+
for (; i < argv.length; i++) {
|
|
94
|
+
let arg = argv[i];
|
|
95
|
+
// Support --flag=value syntax
|
|
96
|
+
let inlineValue;
|
|
97
|
+
if (arg.startsWith("--") && arg.includes("=")) {
|
|
98
|
+
const parts = arg.split(/=(.*)/s);
|
|
99
|
+
arg = parts[0];
|
|
100
|
+
inlineValue = parts[1];
|
|
101
|
+
}
|
|
102
|
+
const nextValue = () => (inlineValue !== undefined ? inlineValue : argv[++i]);
|
|
103
|
+
switch (arg) {
|
|
104
|
+
case "--file":
|
|
105
|
+
case "-f":
|
|
106
|
+
args.file = nextValue();
|
|
107
|
+
break;
|
|
108
|
+
case "--language":
|
|
109
|
+
case "-l":
|
|
110
|
+
args.language = nextValue();
|
|
111
|
+
break;
|
|
112
|
+
case "--format":
|
|
113
|
+
case "-F":
|
|
114
|
+
args.format = nextValue();
|
|
115
|
+
break;
|
|
116
|
+
case "--output":
|
|
117
|
+
case "-o":
|
|
118
|
+
args.output = nextValue();
|
|
119
|
+
break;
|
|
120
|
+
case "--judge":
|
|
121
|
+
case "-j":
|
|
122
|
+
args.judge = argv[++i];
|
|
123
|
+
break;
|
|
124
|
+
case "--skill":
|
|
125
|
+
case "-S":
|
|
126
|
+
args.skill = argv[++i];
|
|
127
|
+
if (!args.command)
|
|
128
|
+
args.command = "skill";
|
|
129
|
+
break;
|
|
130
|
+
case "--skills-dir":
|
|
131
|
+
args.skillsDir = argv[++i];
|
|
132
|
+
break;
|
|
133
|
+
case "--help":
|
|
134
|
+
case "-h":
|
|
135
|
+
args.help = true;
|
|
136
|
+
break;
|
|
137
|
+
case "--fail-on-findings":
|
|
138
|
+
args.failOnFindings = true;
|
|
139
|
+
break;
|
|
140
|
+
case "--baseline":
|
|
141
|
+
case "-b":
|
|
142
|
+
args.baseline = argv[++i];
|
|
143
|
+
break;
|
|
144
|
+
case "--summary":
|
|
145
|
+
args.summary = true;
|
|
146
|
+
break;
|
|
147
|
+
case "--config":
|
|
148
|
+
case "-c":
|
|
149
|
+
args.config = argv[++i];
|
|
150
|
+
break;
|
|
151
|
+
case "--preset":
|
|
152
|
+
case "-p":
|
|
153
|
+
args.preset = argv[++i];
|
|
154
|
+
break;
|
|
155
|
+
case "--min-score":
|
|
156
|
+
args.minScore = parseInt(nextValue(), 10);
|
|
157
|
+
break;
|
|
158
|
+
case "--min-severity":
|
|
159
|
+
args.minSeverity = nextValue();
|
|
160
|
+
break;
|
|
161
|
+
case "--no-color":
|
|
162
|
+
args.noColor = true;
|
|
163
|
+
break;
|
|
164
|
+
case "--verbose":
|
|
165
|
+
args.verbose = true;
|
|
166
|
+
break;
|
|
167
|
+
case "--quiet":
|
|
168
|
+
args.quiet = true;
|
|
169
|
+
break;
|
|
170
|
+
case "--fix":
|
|
171
|
+
args.fix = true;
|
|
172
|
+
break;
|
|
173
|
+
case "--changed-only":
|
|
174
|
+
args.changedOnly = true;
|
|
175
|
+
break;
|
|
176
|
+
case "--staged-only":
|
|
177
|
+
args.stagedOnly = true;
|
|
178
|
+
break;
|
|
179
|
+
case "--explain":
|
|
180
|
+
args.explain = true;
|
|
181
|
+
break;
|
|
182
|
+
case "--exclude":
|
|
183
|
+
case "-x":
|
|
184
|
+
args.exclude.push(argv[++i]);
|
|
185
|
+
break;
|
|
186
|
+
case "--include":
|
|
187
|
+
case "-i":
|
|
188
|
+
args.include.push(argv[++i]);
|
|
189
|
+
break;
|
|
190
|
+
case "--max-files":
|
|
191
|
+
args.maxFiles = parseInt(argv[++i], 10);
|
|
192
|
+
break;
|
|
193
|
+
case "--sample":
|
|
194
|
+
args.sample = true;
|
|
195
|
+
break;
|
|
196
|
+
case "--trace":
|
|
197
|
+
args.trace = true;
|
|
198
|
+
break;
|
|
199
|
+
case "--incremental":
|
|
200
|
+
args.incremental = true;
|
|
201
|
+
break;
|
|
202
|
+
case "--no-cache":
|
|
203
|
+
args.noCache = true;
|
|
204
|
+
break;
|
|
205
|
+
default:
|
|
206
|
+
// Positional skill id support: `judges skill ai-code-review --file src/app.ts`
|
|
207
|
+
if (args.command === "skill" && !arg.startsWith("-") && !args.skill) {
|
|
208
|
+
args.skill = arg;
|
|
209
|
+
break;
|
|
210
|
+
}
|
|
211
|
+
// If it looks like a file path (not a flag), treat as --file
|
|
212
|
+
if (!arg.startsWith("-") && !args.file) {
|
|
213
|
+
args.file = arg;
|
|
214
|
+
}
|
|
215
|
+
break;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
return args;
|
|
219
|
+
}
|
|
220
|
+
// āāā Help Text āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
221
|
+
function printHelp() {
|
|
222
|
+
const showExperimental = process.env.JUDGES_SHOW_EXPERIMENTAL === "1";
|
|
223
|
+
/**
|
|
224
|
+
* Only show GA/implemented commands by default. Experimental/placeholder
|
|
225
|
+
* commands can be revealed via JUDGES_SHOW_EXPERIMENTAL=1 to avoid
|
|
226
|
+
* over-promising features that aren't wired yet.
|
|
227
|
+
*/
|
|
228
|
+
const coreCommands = [
|
|
229
|
+
["judges eval [options] [file]", "Evaluate code with the full tribunal"],
|
|
230
|
+
["judges eval --judge <id> [file]", "Evaluate with a single judge"],
|
|
231
|
+
["judges init", "Interactive project setup wizard"],
|
|
232
|
+
["judges fix <file> [--apply]", "Preview / apply auto-fixes"],
|
|
233
|
+
["judges fix-pr <path>", "Create a PR with auto-fix patches"],
|
|
234
|
+
["judges watch <path>", "Watch files and re-evaluate on save"],
|
|
235
|
+
["judges lsp", "Start LSP server for editor integration"],
|
|
236
|
+
["judges report <dir>", "Generate project-level report"],
|
|
237
|
+
["judges skill <skill-id> [--file <path>]", "Run an agentic skill workflow"],
|
|
238
|
+
["judges skills", "List available skills"],
|
|
239
|
+
["judges hook install", "Install pre-commit git hook"],
|
|
240
|
+
["judges diff", "Evaluate only changed lines from a diff"],
|
|
241
|
+
["judges deps [dir]", "Analyze dependencies for supply-chain risks"],
|
|
242
|
+
["judges license-scan", "Dependency license compliance scan"],
|
|
243
|
+
["judges doctor", "Run diagnostic healthcheck"],
|
|
244
|
+
["judges baseline create <file>", "Create a findings baseline"],
|
|
245
|
+
["judges ci-templates <provider>", "Generate CI pipeline template"],
|
|
246
|
+
["judges completions <shell>", "Generate shell completions"],
|
|
247
|
+
["judges docs", "Generate rule documentation"],
|
|
248
|
+
["judges feedback", "Track finding feedback (false positives)"],
|
|
249
|
+
["judges override", "Manage per-path rule overrides"],
|
|
250
|
+
["judges benchmark", "Run detection accuracy benchmarks"],
|
|
251
|
+
["judges config", "Export/import shared team configs"],
|
|
252
|
+
["judges review", "Post inline review comments on a GitHub PR"],
|
|
253
|
+
["judges app serve", "Start GitHub App webhook server"],
|
|
254
|
+
["judges tune", "Auto-tune presets and config"],
|
|
255
|
+
];
|
|
256
|
+
console.log("\nJudges Panel ā CLI Code Evaluator\n");
|
|
257
|
+
console.log("USAGE:\n judges <command> [options]\n");
|
|
258
|
+
console.log("Core commands:");
|
|
259
|
+
for (const [cmd, desc] of coreCommands) {
|
|
260
|
+
console.log(` ${cmd.padEnd(32)} ${desc}`);
|
|
261
|
+
}
|
|
262
|
+
console.log("\nTIP: set JUDGES_SHOW_EXPERIMENTAL=1 to print the full experimental command matrix.\n");
|
|
263
|
+
if (!showExperimental)
|
|
264
|
+
return;
|
|
265
|
+
console.log("Experimental / roadmap commands (may be stubbed):\n");
|
|
266
|
+
const experimentalCommands = [
|
|
267
|
+
["judges quality-gate", "Evaluate composite quality gate policies"],
|
|
268
|
+
["judges auto-calibrate", "Auto-tune thresholds from feedback history"],
|
|
269
|
+
["judges dep-audit", "Correlate dependency vulnerabilities with code findings"],
|
|
270
|
+
["judges monorepo", "Discover and evaluate monorepo packages"],
|
|
271
|
+
["judges config-migrate", "Migrate .judgesrc to current schema"],
|
|
272
|
+
["judges deprecated", "List deprecated rules with migration guidance"],
|
|
273
|
+
["judges dedup-report", "Cross-run finding deduplication report"],
|
|
274
|
+
["judges upload", "Upload SARIF results to GitHub Code Scanning"],
|
|
275
|
+
["judges smart-select", "Show which judges are relevant for a file"],
|
|
276
|
+
["judges pr-summary", "Post a PR summary comment with verdict"],
|
|
277
|
+
["judges profile", "Performance profiling for judge evaluations"],
|
|
278
|
+
["judges group", "Group findings by category, severity, or file"],
|
|
279
|
+
["judges diff-only", "Evaluate only changed lines in a PR diff"],
|
|
280
|
+
["judges auto-triage", "Auto-suppress low-confidence findings"],
|
|
281
|
+
["judges validate-config", "Validate .judgesrc configuration"],
|
|
282
|
+
["judges coverage-map", "Show which rules apply to which languages"],
|
|
283
|
+
["judges warm-cache", "Pre-populate eval cache for faster CI"],
|
|
284
|
+
["judges policy-audit", "Compliance audit trail with policy snapshots"],
|
|
285
|
+
["judges remediation <rule-id>", "Step-by-step fix guide for a finding"],
|
|
286
|
+
["judges hook-install", "Install git pre-commit/pre-push hooks"],
|
|
287
|
+
["judges false-negatives", "Track and report false-negative feedback"],
|
|
288
|
+
["judges assign", "Assign findings to team members"],
|
|
289
|
+
["judges ticket-sync", "Create tickets from findings (Jira/Linear/GitHub)"],
|
|
290
|
+
["judges sla-track", "SLA tracking and violation detection"],
|
|
291
|
+
["judges regression-alert", "Detect quality regressions between scans"],
|
|
292
|
+
["judges suppress", "Batch false-positive suppression"],
|
|
293
|
+
["judges rule-owner", "Map rules to team owners"],
|
|
294
|
+
["judges noise-advisor", "Analyze rule performance and recommend tuning"],
|
|
295
|
+
["judges review-queue", "Human review queue for low-confidence findings"],
|
|
296
|
+
["judges report-template", "Generate reports from templates"],
|
|
297
|
+
["judges burndown", "Track finding resolution progress"],
|
|
298
|
+
["judges kb", "Team knowledge base for rule decisions"],
|
|
299
|
+
["judges recommend", "Analyze project and recommend judges"],
|
|
300
|
+
["judges vote", "Consensus voting on findings"],
|
|
301
|
+
["judges query", "Advanced finding search and filter"],
|
|
302
|
+
["judges judge-reputation", "Per-judge accuracy and FP tracking"],
|
|
303
|
+
["judges correlate", "Finding correlation and root-cause analysis"],
|
|
304
|
+
["judges digest", "Periodic finding digest and trend reports"],
|
|
305
|
+
["judges rule-share", "Export/import custom rule configurations"],
|
|
306
|
+
["judges explain-finding", "Detailed finding explanation with context"],
|
|
307
|
+
["judges compare-runs", "Compare evaluation runs side by side"],
|
|
308
|
+
["judges audit-bundle", "Assemble auditor-ready evidence package"],
|
|
309
|
+
["judges dev-score", "Developer security growth score"],
|
|
310
|
+
["judges model-risk", "AI model vulnerability risk profiles"],
|
|
311
|
+
["judges retro", "Security incident retrospective analysis"],
|
|
312
|
+
["judges config-drift", "Detect config divergence from baseline"],
|
|
313
|
+
["judges reg-watch", "Regulatory standard coverage monitor"],
|
|
314
|
+
["judges learn", "Personalized developer learning paths"],
|
|
315
|
+
["judges generate", "Secure code template generator"],
|
|
316
|
+
["judges ai-model-trust", "AI model confidence scoring"],
|
|
317
|
+
["judges team-rules-sync", "Fast team onboarding with shared rules"],
|
|
318
|
+
["judges cost-forecast", "Security debt cost projections"],
|
|
319
|
+
["judges team-leaderboard", "Gamified security review engagement"],
|
|
320
|
+
["judges code-owner-suggest", "Auto-recommend CODEOWNERS entries"],
|
|
321
|
+
["judges pr-quality-gate", "Automated PR pass/fail quality gate"],
|
|
322
|
+
["judges ai-prompt-audit", "Scan for prompt injection risks"],
|
|
323
|
+
["judges adoption-report", "Team adoption metrics dashboard"],
|
|
324
|
+
["judges auto-fix", "Automated fix suggestions for findings"],
|
|
325
|
+
];
|
|
326
|
+
for (const [cmd, desc] of experimentalCommands) {
|
|
327
|
+
console.log(` ${cmd.padEnd(32)} ${desc}`);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
// āāā Read Code Input āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
331
|
+
function readCode(filePath) {
|
|
332
|
+
if (filePath) {
|
|
333
|
+
const resolved = resolve(filePath);
|
|
334
|
+
if (!existsSync(resolved)) {
|
|
335
|
+
console.error(`Error: File not found: ${resolved}`);
|
|
336
|
+
process.exit(1);
|
|
337
|
+
}
|
|
338
|
+
return { code: readFileSync(resolved, "utf-8"), resolvedPath: resolved };
|
|
339
|
+
}
|
|
340
|
+
// Try reading from stdin
|
|
341
|
+
if (!process.stdin.isTTY) {
|
|
342
|
+
try {
|
|
343
|
+
const code = readFileSync(0, "utf-8"); // fd 0 = stdin
|
|
344
|
+
return { code, resolvedPath: undefined };
|
|
345
|
+
}
|
|
346
|
+
catch {
|
|
347
|
+
console.error("Error: Could not read from stdin");
|
|
348
|
+
process.exit(1);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
console.error("Error: No file specified and no stdin input detected.");
|
|
352
|
+
console.error("Usage: judges eval --file <path> or cat file | judges eval --language <lang>");
|
|
353
|
+
process.exit(1);
|
|
354
|
+
}
|
|
355
|
+
// Glob helpers moved to cli-helpers.ts for testability
|
|
356
|
+
// āāā Glob / Multi-File Resolution āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
357
|
+
const DEFAULT_SKIP_DIRS = new Set([
|
|
358
|
+
"node_modules",
|
|
359
|
+
".git",
|
|
360
|
+
"dist",
|
|
361
|
+
"build",
|
|
362
|
+
".next",
|
|
363
|
+
"__pycache__",
|
|
364
|
+
"target",
|
|
365
|
+
"vendor",
|
|
366
|
+
]);
|
|
367
|
+
// collectFiles moved to cli-helpers for testability; keep export for backward compat
|
|
368
|
+
export function collectFiles(target, options = {}) {
|
|
369
|
+
const resolved = resolve(target);
|
|
370
|
+
if (!existsSync(resolved))
|
|
371
|
+
return [];
|
|
372
|
+
const stat = statSync(resolved);
|
|
373
|
+
if (stat.isFile())
|
|
374
|
+
return [resolved];
|
|
375
|
+
if (stat.isDirectory()) {
|
|
376
|
+
const files = [];
|
|
377
|
+
walkDir(resolved, resolved, files, { ...options, maxFiles: options.sample ? undefined : options.maxFiles });
|
|
378
|
+
if (options.maxFiles && files.length > options.maxFiles) {
|
|
379
|
+
if (options.sample) {
|
|
380
|
+
// Fisher-Yates shuffle then take first N
|
|
381
|
+
for (let i = files.length - 1; i > 0; i--) {
|
|
382
|
+
const j = Math.floor(Math.random() * (i + 1));
|
|
383
|
+
[files[i], files[j]] = [files[j], files[i]];
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
return files.slice(0, options.maxFiles);
|
|
387
|
+
}
|
|
388
|
+
return files;
|
|
389
|
+
}
|
|
390
|
+
return [];
|
|
391
|
+
}
|
|
392
|
+
function walkDir(dir, root, results, options) {
|
|
393
|
+
const entries = readdirSync(dir, { withFileTypes: true });
|
|
394
|
+
for (const entry of entries) {
|
|
395
|
+
const fullPath = join(dir, entry.name);
|
|
396
|
+
const relPath = relative(root, fullPath);
|
|
397
|
+
// Skip common non-source directories
|
|
398
|
+
if (entry.isDirectory()) {
|
|
399
|
+
if (DEFAULT_SKIP_DIRS.has(entry.name))
|
|
400
|
+
continue;
|
|
401
|
+
// Check if directory matches an exclude pattern
|
|
402
|
+
if (options.exclude && matchesGlob(relPath + "/", options.exclude))
|
|
403
|
+
continue;
|
|
404
|
+
walkDir(fullPath, root, results, options);
|
|
405
|
+
}
|
|
406
|
+
else if (entry.isFile()) {
|
|
407
|
+
// Apply exclude patterns
|
|
408
|
+
if (options.exclude && matchesGlob(relPath, options.exclude))
|
|
409
|
+
continue;
|
|
410
|
+
// Apply include patterns ā if include patterns are specified, ONLY include matching files
|
|
411
|
+
if (options.include && options.include.length > 0) {
|
|
412
|
+
if (!matchesGlob(relPath, options.include))
|
|
413
|
+
continue;
|
|
414
|
+
}
|
|
415
|
+
else {
|
|
416
|
+
// Default: only include files with supported extensions
|
|
417
|
+
const ext = extname(entry.name);
|
|
418
|
+
if (!SUPPORTED_EXTENSIONS.has(ext))
|
|
419
|
+
continue;
|
|
420
|
+
}
|
|
421
|
+
results.push(fullPath);
|
|
422
|
+
// Early exit if we've hit maxFiles
|
|
423
|
+
if (options.maxFiles && results.length >= options.maxFiles)
|
|
424
|
+
return;
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
function isDirectory(filePath) {
|
|
429
|
+
try {
|
|
430
|
+
return statSync(resolve(filePath)).isDirectory();
|
|
431
|
+
}
|
|
432
|
+
catch {
|
|
433
|
+
return false;
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
// āāā Git Changed Files (for --changed-only) āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
437
|
+
/**
|
|
438
|
+
* Get files changed since the last commit using git diff.
|
|
439
|
+
* Includes staged, unstaged, and untracked files.
|
|
440
|
+
*/
|
|
441
|
+
function getGitChangedFiles(cwd) {
|
|
442
|
+
try {
|
|
443
|
+
const resolvedCwd = resolve(cwd);
|
|
444
|
+
// Changed files (staged + unstaged) relative to HEAD
|
|
445
|
+
const diffOutput = runGit(["diff", "--name-only", "HEAD"], { cwd: resolvedCwd });
|
|
446
|
+
// Untracked files
|
|
447
|
+
const untrackedOutput = runGit(["ls-files", "--others", "--exclude-standard"], { cwd: resolvedCwd });
|
|
448
|
+
const files = new Set();
|
|
449
|
+
for (const f of diffOutput.split("\n").filter(Boolean)) {
|
|
450
|
+
files.add(resolve(resolvedCwd, f));
|
|
451
|
+
}
|
|
452
|
+
for (const f of untrackedOutput.split("\n").filter(Boolean)) {
|
|
453
|
+
files.add(resolve(resolvedCwd, f));
|
|
454
|
+
}
|
|
455
|
+
return [...files];
|
|
456
|
+
}
|
|
457
|
+
catch {
|
|
458
|
+
// Not a git repo or git not available ā return empty (evaluate nothing)
|
|
459
|
+
return [];
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
function getStagedFiles(cwd) {
|
|
463
|
+
try {
|
|
464
|
+
const resolvedCwd = resolve(cwd);
|
|
465
|
+
const output = runGit(["diff", "--cached", "--name-only", "--diff-filter=ACM"], { cwd: resolvedCwd });
|
|
466
|
+
return output
|
|
467
|
+
.split("\n")
|
|
468
|
+
.filter(Boolean)
|
|
469
|
+
.map((f) => resolve(resolvedCwd, f));
|
|
470
|
+
}
|
|
471
|
+
catch {
|
|
472
|
+
return [];
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
// āāā List Judges āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
476
|
+
function listJudges() {
|
|
477
|
+
const judges = getJudgeSummaries();
|
|
478
|
+
console.log("");
|
|
479
|
+
console.log(" Available Judges:");
|
|
480
|
+
console.log(" " + "ā".repeat(60));
|
|
481
|
+
for (const j of judges) {
|
|
482
|
+
console.log(` ${j.id.padEnd(30)} ${j.name}`);
|
|
483
|
+
}
|
|
484
|
+
console.log("");
|
|
485
|
+
console.log(` Total: ${judges.length} judges`);
|
|
486
|
+
console.log("");
|
|
487
|
+
}
|
|
488
|
+
// āāā Version āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
489
|
+
function getPackageVersion() {
|
|
490
|
+
try {
|
|
491
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
492
|
+
const __dirname = dirname(__filename);
|
|
493
|
+
const pkgPath = resolve(__dirname, "..", "package.json");
|
|
494
|
+
if (existsSync(pkgPath)) {
|
|
495
|
+
const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
|
|
496
|
+
return pkg.version || "unknown";
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
catch {
|
|
500
|
+
// fallback
|
|
501
|
+
}
|
|
502
|
+
return "unknown";
|
|
503
|
+
}
|
|
504
|
+
function printVersion() {
|
|
505
|
+
const version = getPackageVersion();
|
|
506
|
+
console.log(`@kevinrabun/judges v${version}`);
|
|
507
|
+
console.log(`Node.js ${process.version}`);
|
|
508
|
+
console.log(`Platform: ${process.platform} ${process.arch}`);
|
|
509
|
+
}
|
|
510
|
+
// āāā Main CLI Entry Point āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
511
|
+
export async function runCli(argv) {
|
|
512
|
+
const args = parseCliArgs(argv);
|
|
513
|
+
// āāā Version Command āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
514
|
+
if (args.command === "version" || args.command === "--version" || argv.includes("--version") || argv.includes("-V")) {
|
|
515
|
+
printVersion();
|
|
516
|
+
return;
|
|
517
|
+
}
|
|
518
|
+
if (args.help || (!args.command && !args.file)) {
|
|
519
|
+
printHelp();
|
|
520
|
+
process.exit(0);
|
|
521
|
+
}
|
|
522
|
+
// āāā Skill Command āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
523
|
+
if (args.command === "skills" || args.command === "skills:list") {
|
|
524
|
+
const { listSkills } = await import("./skill-loader.js");
|
|
525
|
+
const skillsDir = args.skillsDir || resolve(fileURLToPath(import.meta.url), "..", "..", "skills");
|
|
526
|
+
const skills = listSkills(skillsDir);
|
|
527
|
+
// Pretty print
|
|
528
|
+
const rows = skills.map((s) => ({
|
|
529
|
+
id: s.id,
|
|
530
|
+
name: s.name,
|
|
531
|
+
tags: (s.tags || []).join(", "),
|
|
532
|
+
agents: s.agents.join(", "),
|
|
533
|
+
description: s.description,
|
|
534
|
+
}));
|
|
535
|
+
console.table(rows);
|
|
536
|
+
return;
|
|
537
|
+
}
|
|
538
|
+
if (args.command === "skill") {
|
|
539
|
+
const skillId = args.skill || args.judge; // allow --skill or --judge alias
|
|
540
|
+
if (!skillId) {
|
|
541
|
+
console.error("Missing skill id. Usage: judges skill <skill-id> --file <path>");
|
|
542
|
+
process.exit(1);
|
|
543
|
+
}
|
|
544
|
+
const code = args.file ? readFileSync(args.file, "utf-8") : readFileSync(0, "utf-8");
|
|
545
|
+
const language = args.language || detectLanguage(args.file);
|
|
546
|
+
if (!language) {
|
|
547
|
+
console.error("Unable to detect language. Provide --language.");
|
|
548
|
+
process.exit(1);
|
|
549
|
+
}
|
|
550
|
+
const verdict = await runSkill(skillId, code, language, { skillsDir: args.skillsDir });
|
|
551
|
+
if (args.format === "json") {
|
|
552
|
+
console.log(JSON.stringify(verdict, null, 2));
|
|
553
|
+
}
|
|
554
|
+
else {
|
|
555
|
+
const markdown = formatVerdictAsMarkdown(verdict);
|
|
556
|
+
console.log(markdown);
|
|
557
|
+
}
|
|
558
|
+
return;
|
|
559
|
+
}
|
|
560
|
+
// āāā Init Command āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
561
|
+
if (args.command === "init") {
|
|
562
|
+
const { runInit } = await import("./commands/init.js");
|
|
563
|
+
await runInit(args.file || ".");
|
|
564
|
+
process.exit(0);
|
|
565
|
+
}
|
|
566
|
+
// āāā Watch Command āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
567
|
+
if (args.command === "watch") {
|
|
568
|
+
const { runWatch } = await import("./commands/watch.js");
|
|
569
|
+
// Allow tests to run without hanging
|
|
570
|
+
if (process.env.JUDGES_TEST_DRY_RUN)
|
|
571
|
+
return;
|
|
572
|
+
runWatch(argv);
|
|
573
|
+
return; // Watch runs indefinitely
|
|
574
|
+
}
|
|
575
|
+
// āāā LSP Command āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
576
|
+
if (args.command === "lsp") {
|
|
577
|
+
const { runLsp } = await import("./commands/lsp.js");
|
|
578
|
+
if (process.env.JUDGES_TEST_DRY_RUN)
|
|
579
|
+
return;
|
|
580
|
+
runLsp(argv);
|
|
581
|
+
return; // LSP server runs indefinitely
|
|
582
|
+
}
|
|
583
|
+
// āāā CI Templates Command āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
584
|
+
if (args.command === "ci-templates") {
|
|
585
|
+
await runCiTemplates(argv);
|
|
586
|
+
return;
|
|
587
|
+
}
|
|
588
|
+
// āāā Compliance-Report Command āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
589
|
+
if (args.command === "compliance-report") {
|
|
590
|
+
const { buildComplianceReport, formatComplianceReportText } = await import("./commands/compliance-report.js");
|
|
591
|
+
const target = args.file || ".";
|
|
592
|
+
const code = args.file ? (await import("fs")).readFileSync(args.file, "utf-8") : "";
|
|
593
|
+
let findings = [];
|
|
594
|
+
if (code) {
|
|
595
|
+
const lang = detectLanguage(args.file) || "typescript";
|
|
596
|
+
const result = evaluateWithTribunal(code, lang);
|
|
597
|
+
findings = result.findings;
|
|
598
|
+
}
|
|
599
|
+
const framework = argv.find((a, i) => argv[i - 1] === "--framework") || undefined;
|
|
600
|
+
const report = buildComplianceReport(target, findings, framework);
|
|
601
|
+
if (argv.includes("--json")) {
|
|
602
|
+
console.log(JSON.stringify(report, null, 2));
|
|
603
|
+
}
|
|
604
|
+
else {
|
|
605
|
+
console.log(formatComplianceReportText(report));
|
|
606
|
+
}
|
|
607
|
+
return;
|
|
608
|
+
}
|
|
609
|
+
// āāā App Command (GitHub App) āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
610
|
+
if (args.command === "app") {
|
|
611
|
+
const { runAppCommand } = await import("./github-app.js");
|
|
612
|
+
runAppCommand(argv.slice(3));
|
|
613
|
+
return;
|
|
614
|
+
}
|
|
615
|
+
// āāā Compare Command āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
616
|
+
if (args.command === "compare") {
|
|
617
|
+
const toolName = argv[3];
|
|
618
|
+
if (!toolName || toolName === "--help" || toolName === "-h" || toolName === "all") {
|
|
619
|
+
console.log(formatFullComparisonMatrix());
|
|
620
|
+
}
|
|
621
|
+
else {
|
|
622
|
+
const profile = TOOL_PROFILES.find((t) => t.name.toLowerCase() === toolName.toLowerCase());
|
|
623
|
+
if (!profile) {
|
|
624
|
+
console.error(`Unknown tool: ${toolName}`);
|
|
625
|
+
console.error(`Available: ${TOOL_PROFILES.map((t) => t.name).join(", ")}, all`);
|
|
626
|
+
process.exit(1);
|
|
627
|
+
}
|
|
628
|
+
console.log(formatComparisonReport(toolName));
|
|
629
|
+
}
|
|
630
|
+
process.exit(0);
|
|
631
|
+
}
|
|
632
|
+
// āāā Trend Command āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
633
|
+
if (args.command === "trend") {
|
|
634
|
+
const { loadSnapshotStore, computeTrend, formatTrendReport, formatTrendReportHtml, detectRegressions, formatRegressionAlerts, } = await import("./commands/snapshot.js");
|
|
635
|
+
const snapshotFile = argv.find((a, i) => i >= 3 && !a.startsWith("-") && !["html", "json", "text"].includes(a)) ||
|
|
636
|
+
".judges-snapshots.json";
|
|
637
|
+
const formatArg = argv.includes("--format") ? argv[argv.indexOf("--format") + 1] : "text";
|
|
638
|
+
const outputArg = argv.includes("--output") ? argv[argv.indexOf("--output") + 1] : undefined;
|
|
639
|
+
const store = loadSnapshotStore(snapshotFile);
|
|
640
|
+
if (store.snapshots.length === 0) {
|
|
641
|
+
console.log("No snapshot data found. Run evaluations with --snapshot to collect trend data.");
|
|
642
|
+
console.log(` Expected file: ${snapshotFile}`);
|
|
643
|
+
}
|
|
644
|
+
else {
|
|
645
|
+
const report = computeTrend(store);
|
|
646
|
+
let output;
|
|
647
|
+
if (formatArg === "html") {
|
|
648
|
+
output = formatTrendReportHtml(report);
|
|
649
|
+
}
|
|
650
|
+
else if (formatArg === "json") {
|
|
651
|
+
output = JSON.stringify(report, null, 2);
|
|
652
|
+
}
|
|
653
|
+
else {
|
|
654
|
+
output = formatTrendReport(report);
|
|
655
|
+
}
|
|
656
|
+
if (outputArg) {
|
|
657
|
+
writeFileSync(outputArg, output, "utf-8");
|
|
658
|
+
console.log(` ā
Trend report written to ${outputArg}`);
|
|
659
|
+
}
|
|
660
|
+
else {
|
|
661
|
+
console.log(output);
|
|
662
|
+
}
|
|
663
|
+
// Regression alerts
|
|
664
|
+
const regressions = detectRegressions(store);
|
|
665
|
+
if (regressions.length > 0) {
|
|
666
|
+
console.log(formatRegressionAlerts(regressions));
|
|
667
|
+
if (args.failOnFindings && regressions.some((r) => r.severity === "error")) {
|
|
668
|
+
process.exit(1);
|
|
669
|
+
}
|
|
670
|
+
}
|
|
671
|
+
}
|
|
672
|
+
process.exit(0);
|
|
673
|
+
}
|
|
674
|
+
// āāā Command Table Dispatch āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
675
|
+
const tableEntry = args.command ? COMMAND_TABLE[args.command] : undefined;
|
|
676
|
+
if (tableEntry) {
|
|
677
|
+
const [modulePath, fnName] = tableEntry;
|
|
678
|
+
const mod = await import(modulePath);
|
|
679
|
+
await mod[fnName](argv);
|
|
680
|
+
return;
|
|
681
|
+
}
|
|
682
|
+
// āāā List Command āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
683
|
+
if (args.command === "list") {
|
|
684
|
+
listJudges();
|
|
685
|
+
process.exit(0);
|
|
686
|
+
}
|
|
687
|
+
// āāā Eval Command āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
688
|
+
if (args.command === "eval" || args.file) {
|
|
689
|
+
const startTime = Date.now();
|
|
690
|
+
// Resolve output file if provided
|
|
691
|
+
const outputPath = args.output ? resolve(args.output) : undefined;
|
|
692
|
+
// Load config from file or preset
|
|
693
|
+
let evalConfig = loadEvalConfig(args);
|
|
694
|
+
// CLI flag override for min-severity (fallback if not provided via config)
|
|
695
|
+
if (args.minSeverity) {
|
|
696
|
+
evalConfig = evalConfig || {};
|
|
697
|
+
evalConfig.minSeverity = args.minSeverity;
|
|
698
|
+
}
|
|
699
|
+
// Load baseline if specified (from CLI flag ā config doesn't carry baseline)
|
|
700
|
+
let loadedBaseline;
|
|
701
|
+
if (args.baseline) {
|
|
702
|
+
loadedBaseline = loadBaselineData(args.baseline);
|
|
703
|
+
}
|
|
704
|
+
// Build evaluation options from config
|
|
705
|
+
const evalOptions = evalConfig ? { config: evalConfig } : undefined;
|
|
706
|
+
// āā Multi-file / directory mode āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
707
|
+
const target = args.file || ".";
|
|
708
|
+
if (target && isDirectory(target)) {
|
|
709
|
+
// Merge exclude/include from config if not overridden by CLI
|
|
710
|
+
const excludePatterns = args.exclude.length > 0 ? args.exclude : (evalConfig?.exclude ?? []);
|
|
711
|
+
const includePatterns = args.include.length > 0 ? args.include : (evalConfig?.include ?? []);
|
|
712
|
+
const maxFilesLimit = args.maxFiles ?? evalConfig?.maxFiles;
|
|
713
|
+
let files = collectFiles(target, {
|
|
714
|
+
exclude: excludePatterns,
|
|
715
|
+
include: includePatterns,
|
|
716
|
+
maxFiles: maxFilesLimit,
|
|
717
|
+
sample: args.sample,
|
|
718
|
+
});
|
|
719
|
+
// āā --changed-only: scope to git-changed files āā
|
|
720
|
+
if (args.changedOnly) {
|
|
721
|
+
const changedFiles = getGitChangedFiles(target);
|
|
722
|
+
const changedSet = new Set(changedFiles.map((f) => resolve(f)));
|
|
723
|
+
files = files.filter((f) => changedSet.has(resolve(f)));
|
|
724
|
+
}
|
|
725
|
+
// āā --staged-only: scope to git-staged files āā
|
|
726
|
+
if (args.stagedOnly) {
|
|
727
|
+
const stagedFiles = getStagedFiles(target);
|
|
728
|
+
const stagedSet = new Set(stagedFiles.map((f) => resolve(f)));
|
|
729
|
+
files = files.filter((f) => stagedSet.has(resolve(f)));
|
|
730
|
+
}
|
|
731
|
+
if (files.length === 0) {
|
|
732
|
+
console.error(`No supported source files found in: ${target}${args.changedOnly ? " (changed-only)" : ""}`);
|
|
733
|
+
process.exit(1);
|
|
734
|
+
}
|
|
735
|
+
if (!args.quiet) {
|
|
736
|
+
console.log(`\n Scanning ${files.length} file(s) in ${target}ā¦\n`);
|
|
737
|
+
}
|
|
738
|
+
let totalFindings = 0;
|
|
739
|
+
let totalCritical = 0;
|
|
740
|
+
let totalHigh = 0;
|
|
741
|
+
let failCount = 0;
|
|
742
|
+
let totalFixed = 0;
|
|
743
|
+
let totalFixable = 0;
|
|
744
|
+
let cacheHits = 0;
|
|
745
|
+
const fileVerdicts = [];
|
|
746
|
+
// Incremental evaluation: use disk cache to skip unchanged files
|
|
747
|
+
const diskCache = args.noCache ? undefined : new DiskCache();
|
|
748
|
+
for (let idx = 0; idx < files.length; idx++) {
|
|
749
|
+
const filePath = files[idx];
|
|
750
|
+
const relPath = relative(resolve("."), filePath);
|
|
751
|
+
if (!args.quiet) {
|
|
752
|
+
process.stderr.write(` [${idx + 1}/${files.length}] ${relPath}ā¦`);
|
|
753
|
+
}
|
|
754
|
+
const fileCode = readFileSync(filePath, "utf-8");
|
|
755
|
+
const fileLang = args.language || detectLanguage(filePath) || "typescript";
|
|
756
|
+
// Check disk cache for incremental mode (always when cache available)
|
|
757
|
+
const hash = contentHash(fileCode, fileLang);
|
|
758
|
+
let verdict;
|
|
759
|
+
if (diskCache) {
|
|
760
|
+
verdict = diskCache.get(hash);
|
|
761
|
+
}
|
|
762
|
+
if (verdict) {
|
|
763
|
+
cacheHits++;
|
|
764
|
+
}
|
|
765
|
+
else {
|
|
766
|
+
verdict = evaluateWithTribunal(fileCode, fileLang, undefined, evalOptions);
|
|
767
|
+
if (diskCache) {
|
|
768
|
+
diskCache.set(hash, verdict, relPath);
|
|
769
|
+
}
|
|
770
|
+
}
|
|
771
|
+
// Apply baseline suppression
|
|
772
|
+
if (loadedBaseline) {
|
|
773
|
+
for (const evaluation of verdict.evaluations) {
|
|
774
|
+
evaluation.findings = evaluation.findings.filter((f) => !isBaselined(f, loadedBaseline, fileCode, relPath));
|
|
775
|
+
}
|
|
776
|
+
verdict.findings = verdict.findings.filter((f) => !isBaselined(f, loadedBaseline, fileCode, relPath));
|
|
777
|
+
}
|
|
778
|
+
// Apply override suppressions for multi-file mode
|
|
779
|
+
{
|
|
780
|
+
const overrideStore = loadOverrideStore();
|
|
781
|
+
if (overrideStore.overrides.length > 0) {
|
|
782
|
+
for (const evaluation of verdict.evaluations) {
|
|
783
|
+
const result = applyOverrides(evaluation.findings, overrideStore, relPath);
|
|
784
|
+
evaluation.findings = result.active;
|
|
785
|
+
}
|
|
786
|
+
const topResult = applyOverrides(verdict.findings, overrideStore, relPath);
|
|
787
|
+
verdict.findings = topResult.active;
|
|
788
|
+
}
|
|
789
|
+
}
|
|
790
|
+
const fileFindings = verdict.evaluations.reduce((s, e) => s + e.findings.length, 0);
|
|
791
|
+
const fileFixable = verdict.evaluations.reduce((s, e) => s + e.findings.filter((f) => f.patch).length, 0);
|
|
792
|
+
totalFindings += fileFindings;
|
|
793
|
+
totalFixable += fileFixable;
|
|
794
|
+
totalCritical += verdict.criticalCount;
|
|
795
|
+
totalHigh += verdict.highCount;
|
|
796
|
+
if (verdict.overallVerdict === "fail")
|
|
797
|
+
failCount++;
|
|
798
|
+
if (!args.quiet) {
|
|
799
|
+
const icon = verdict.overallVerdict === "pass" ? "ā
" : verdict.overallVerdict === "warning" ? "ā ļø" : "ā";
|
|
800
|
+
const fixSuffix = fileFixable > 0 ? `, ${fileFixable} fixable` : "";
|
|
801
|
+
process.stderr.write(` ${icon} ${verdict.overallScore}/100 (${fileFindings} findings${fixSuffix})\n`);
|
|
802
|
+
}
|
|
803
|
+
// Auto-fix in multi-file mode
|
|
804
|
+
if (args.fix) {
|
|
805
|
+
const allFileFindings = verdict.evaluations.flatMap((e) => e.findings);
|
|
806
|
+
const fixable = allFileFindings
|
|
807
|
+
.filter((f) => f.patch)
|
|
808
|
+
.map((f) => ({
|
|
809
|
+
ruleId: f.ruleId,
|
|
810
|
+
title: f.title,
|
|
811
|
+
severity: f.severity,
|
|
812
|
+
patch: f.patch,
|
|
813
|
+
lineNumbers: f.lineNumbers,
|
|
814
|
+
}));
|
|
815
|
+
if (fixable.length > 0) {
|
|
816
|
+
const patchResult = applyPatches(fileCode, fixable);
|
|
817
|
+
writeFileSync(filePath, patchResult.result, "utf-8");
|
|
818
|
+
totalFixed += patchResult.applied;
|
|
819
|
+
}
|
|
820
|
+
}
|
|
821
|
+
// Collect for merged output
|
|
822
|
+
fileVerdicts.push({ filePath: relPath, verdict });
|
|
823
|
+
}
|
|
824
|
+
const elapsed = Date.now() - startTime;
|
|
825
|
+
// Summary
|
|
826
|
+
console.log("");
|
|
827
|
+
console.log("āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā");
|
|
828
|
+
console.log("ā Judges Panel ā Multi-File Summary ā");
|
|
829
|
+
console.log("āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā");
|
|
830
|
+
console.log("");
|
|
831
|
+
console.log(` Files : ${files.length}`);
|
|
832
|
+
console.log(` Findings : ${totalFindings}${totalFixable > 0 ? ` (${totalFixable} auto-fixable)` : ""}`);
|
|
833
|
+
console.log(` Critical : ${totalCritical}`);
|
|
834
|
+
console.log(` High : ${totalHigh}`);
|
|
835
|
+
console.log(` Failed : ${failCount} file(s)`);
|
|
836
|
+
if (args.fix && totalFixed > 0) {
|
|
837
|
+
console.log(` Fixed : ${totalFixed} patch(es) applied`);
|
|
838
|
+
}
|
|
839
|
+
if (cacheHits > 0) {
|
|
840
|
+
console.log(` Cached : ${cacheHits} file(s) unchanged (skipped re-evaluation)`);
|
|
841
|
+
}
|
|
842
|
+
console.log(` Time : ${elapsed}ms`);
|
|
843
|
+
console.log("");
|
|
844
|
+
// Write merged output when --output is specified
|
|
845
|
+
if (outputPath && fileVerdicts.length > 0) {
|
|
846
|
+
// Merge all per-file verdicts into a single combined verdict
|
|
847
|
+
const allFindings = fileVerdicts.flatMap(({ verdict: v }) => v.findings);
|
|
848
|
+
const allEvaluations = fileVerdicts.flatMap(({ verdict: v }) => v.evaluations);
|
|
849
|
+
const mergedVerdict = {
|
|
850
|
+
overallVerdict: failCount > 0 ? "fail" : totalFindings > 0 ? "warning" : "pass",
|
|
851
|
+
overallScore: fileVerdicts.length > 0
|
|
852
|
+
? Math.round(fileVerdicts.reduce((s, { verdict: v }) => s + v.overallScore, 0) / fileVerdicts.length)
|
|
853
|
+
: 100,
|
|
854
|
+
summary: `Multi-file scan: ${files.length} files, ${totalFindings} findings`,
|
|
855
|
+
evaluations: allEvaluations,
|
|
856
|
+
findings: allFindings,
|
|
857
|
+
criticalCount: totalCritical,
|
|
858
|
+
highCount: totalHigh,
|
|
859
|
+
timestamp: new Date().toISOString(),
|
|
860
|
+
};
|
|
861
|
+
const out = formatTribunalOutput(mergedVerdict, args.format, target);
|
|
862
|
+
writeOutputIfSpecified(outputPath, out);
|
|
863
|
+
if (!args.quiet)
|
|
864
|
+
console.log(` ā
Report written to ${args.output}`);
|
|
865
|
+
}
|
|
866
|
+
if (args.failOnFindings && failCount > 0)
|
|
867
|
+
process.exit(1);
|
|
868
|
+
process.exit(0);
|
|
869
|
+
}
|
|
870
|
+
// āā Single-file mode āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
871
|
+
const { code, resolvedPath } = readCode(args.file);
|
|
872
|
+
const language = args.language || detectLanguage(args.file || resolvedPath) || "typescript";
|
|
873
|
+
if (args.judge) {
|
|
874
|
+
// Single judge mode
|
|
875
|
+
const judge = getJudge(args.judge);
|
|
876
|
+
if (!judge) {
|
|
877
|
+
console.error(`Error: Unknown judge "${args.judge}"`);
|
|
878
|
+
console.error("Run 'judges list' to see available judges.");
|
|
879
|
+
process.exit(1);
|
|
880
|
+
}
|
|
881
|
+
const evaluation = evaluateWithJudge(judge, code, language);
|
|
882
|
+
// Apply baseline suppression
|
|
883
|
+
if (loadedBaseline) {
|
|
884
|
+
evaluation.findings = evaluation.findings.filter((f) => !isBaselined(f, loadedBaseline, code));
|
|
885
|
+
}
|
|
886
|
+
// Apply min-severity filter from config
|
|
887
|
+
if (evalConfig?.minSeverity) {
|
|
888
|
+
evaluation.findings = filterBySeverity(evaluation.findings, evalConfig.minSeverity);
|
|
889
|
+
}
|
|
890
|
+
// Enrich with learning context when --explain is set
|
|
891
|
+
if (args.explain) {
|
|
892
|
+
evaluation.findings = enrichWithExplanations(evaluation.findings);
|
|
893
|
+
}
|
|
894
|
+
const elapsed = Date.now() - startTime;
|
|
895
|
+
if (args.summary) {
|
|
896
|
+
printSummaryLine(evaluation.verdict, evaluation.score, evaluation.findings.length, evaluation.findings.filter((f) => f.patch).length);
|
|
897
|
+
}
|
|
898
|
+
else if (args.format === "json") {
|
|
899
|
+
const json = JSON.stringify(evaluation, null, 2);
|
|
900
|
+
if (outputPath) {
|
|
901
|
+
writeOutputIfSpecified(outputPath, json);
|
|
902
|
+
if (!args.quiet)
|
|
903
|
+
console.log(` ā
JSON report written to ${args.output}`);
|
|
904
|
+
}
|
|
905
|
+
else {
|
|
906
|
+
console.log(json);
|
|
907
|
+
}
|
|
908
|
+
}
|
|
909
|
+
else if (args.format === "markdown") {
|
|
910
|
+
const md = formatEvaluationAsMarkdown(evaluation);
|
|
911
|
+
if (outputPath) {
|
|
912
|
+
writeOutputIfSpecified(outputPath, md);
|
|
913
|
+
if (!args.quiet)
|
|
914
|
+
console.log(` ā
Markdown report written to ${args.output}`);
|
|
915
|
+
}
|
|
916
|
+
else {
|
|
917
|
+
console.log(md);
|
|
918
|
+
}
|
|
919
|
+
}
|
|
920
|
+
else if (args.format === "html") {
|
|
921
|
+
// Wrap single evaluation as a tribunal-like verdict for HTML
|
|
922
|
+
const wrappedVerdict = {
|
|
923
|
+
overallVerdict: evaluation.verdict,
|
|
924
|
+
overallScore: evaluation.score,
|
|
925
|
+
summary: evaluation.summary,
|
|
926
|
+
evaluations: [evaluation],
|
|
927
|
+
findings: evaluation.findings,
|
|
928
|
+
criticalCount: evaluation.findings.filter((f) => f.severity === "critical").length,
|
|
929
|
+
highCount: evaluation.findings.filter((f) => f.severity === "high").length,
|
|
930
|
+
timestamp: new Date().toISOString(),
|
|
931
|
+
};
|
|
932
|
+
const html = verdictToHtml(wrappedVerdict, resolvedPath || args.file);
|
|
933
|
+
if (outputPath) {
|
|
934
|
+
writeOutputIfSpecified(outputPath, html);
|
|
935
|
+
if (!args.quiet)
|
|
936
|
+
console.log(` ā
HTML report written to ${args.output}`);
|
|
937
|
+
}
|
|
938
|
+
else {
|
|
939
|
+
console.log(html);
|
|
940
|
+
}
|
|
941
|
+
}
|
|
942
|
+
else if (args.format === "pdf") {
|
|
943
|
+
const wrappedForPdf = {
|
|
944
|
+
overallVerdict: evaluation.verdict,
|
|
945
|
+
overallScore: evaluation.score,
|
|
946
|
+
summary: evaluation.summary,
|
|
947
|
+
evaluations: [evaluation],
|
|
948
|
+
findings: evaluation.findings,
|
|
949
|
+
criticalCount: evaluation.findings.filter((f) => f.severity === "critical").length,
|
|
950
|
+
highCount: evaluation.findings.filter((f) => f.severity === "high").length,
|
|
951
|
+
timestamp: new Date().toISOString(),
|
|
952
|
+
};
|
|
953
|
+
const pdf = verdictToPdfHtml(wrappedForPdf, resolvedPath || args.file);
|
|
954
|
+
if (outputPath) {
|
|
955
|
+
writeOutputIfSpecified(outputPath, pdf);
|
|
956
|
+
if (!args.quiet)
|
|
957
|
+
console.log(` ā
PDF (HTML) report written to ${args.output}`);
|
|
958
|
+
}
|
|
959
|
+
else {
|
|
960
|
+
console.log(pdf);
|
|
961
|
+
}
|
|
962
|
+
}
|
|
963
|
+
else {
|
|
964
|
+
const out = formatSingleJudgeTextOutput(evaluation);
|
|
965
|
+
if (outputPath) {
|
|
966
|
+
writeOutputIfSpecified(outputPath, out);
|
|
967
|
+
if (!args.quiet)
|
|
968
|
+
console.log(` ā
Report written to ${args.output}`);
|
|
969
|
+
}
|
|
970
|
+
else {
|
|
971
|
+
console.log(out);
|
|
972
|
+
}
|
|
973
|
+
}
|
|
974
|
+
if (args.verbose) {
|
|
975
|
+
console.log(` ā± Evaluated in ${elapsed}ms`);
|
|
976
|
+
}
|
|
977
|
+
// Trace output ā show pipeline decision trace
|
|
978
|
+
if (args.trace) {
|
|
979
|
+
const { buildEvaluationTrace, formatTraceText } = await import("./commands/trace.js");
|
|
980
|
+
const wrappedForTrace = {
|
|
981
|
+
overallVerdict: evaluation.verdict,
|
|
982
|
+
overallScore: evaluation.score,
|
|
983
|
+
summary: evaluation.summary,
|
|
984
|
+
evaluations: [evaluation],
|
|
985
|
+
findings: evaluation.findings,
|
|
986
|
+
criticalCount: evaluation.findings.filter((f) => f.severity === "critical").length,
|
|
987
|
+
highCount: evaluation.findings.filter((f) => f.severity === "high").length,
|
|
988
|
+
timestamp: new Date().toISOString(),
|
|
989
|
+
};
|
|
990
|
+
const trace = buildEvaluationTrace(wrappedForTrace, resolvedPath || args.file, language);
|
|
991
|
+
if (args.format === "json") {
|
|
992
|
+
console.log(JSON.stringify(trace, null, 2));
|
|
993
|
+
}
|
|
994
|
+
else {
|
|
995
|
+
console.log(formatTraceText(trace));
|
|
996
|
+
}
|
|
997
|
+
}
|
|
998
|
+
// Exit code ā fail-on-findings or min-score
|
|
999
|
+
if (args.failOnFindings && evaluation.verdict === "fail")
|
|
1000
|
+
process.exit(1);
|
|
1001
|
+
if (args.minScore !== undefined && evaluation.score < args.minScore) {
|
|
1002
|
+
console.error(`Score ${evaluation.score} is below minimum threshold ${args.minScore}`);
|
|
1003
|
+
process.exit(1);
|
|
1004
|
+
}
|
|
1005
|
+
// Auto-fix if --fix flag is set (single judge mode)
|
|
1006
|
+
if (args.fix && resolvedPath) {
|
|
1007
|
+
const fixable = evaluation.findings
|
|
1008
|
+
.filter((f) => f.patch)
|
|
1009
|
+
.map((f) => ({
|
|
1010
|
+
ruleId: f.ruleId,
|
|
1011
|
+
title: f.title,
|
|
1012
|
+
severity: f.severity,
|
|
1013
|
+
patch: f.patch,
|
|
1014
|
+
lineNumbers: f.lineNumbers,
|
|
1015
|
+
}));
|
|
1016
|
+
if (fixable.length > 0) {
|
|
1017
|
+
const { result, applied, skipped } = applyPatches(code, fixable);
|
|
1018
|
+
writeFileSync(resolvedPath, result, "utf-8");
|
|
1019
|
+
console.log(`\n ā
Applied ${applied} fix(es) to ${args.file || resolvedPath}`);
|
|
1020
|
+
if (skipped > 0) {
|
|
1021
|
+
console.log(` ā Skipped ${skipped} fix(es) (source text changed)`);
|
|
1022
|
+
}
|
|
1023
|
+
}
|
|
1024
|
+
else if (!args.quiet) {
|
|
1025
|
+
console.log("\n No auto-fixable findings.");
|
|
1026
|
+
}
|
|
1027
|
+
}
|
|
1028
|
+
}
|
|
1029
|
+
else {
|
|
1030
|
+
// Full tribunal mode
|
|
1031
|
+
const verdict = evaluateWithTribunal(code, language, undefined, evalOptions);
|
|
1032
|
+
// Apply baseline suppression
|
|
1033
|
+
if (loadedBaseline) {
|
|
1034
|
+
for (const evaluation of verdict.evaluations) {
|
|
1035
|
+
evaluation.findings = evaluation.findings.filter((f) => !isBaselined(f, loadedBaseline, code));
|
|
1036
|
+
}
|
|
1037
|
+
verdict.findings = verdict.findings.filter((f) => !isBaselined(f, loadedBaseline, code));
|
|
1038
|
+
}
|
|
1039
|
+
// Apply min-severity filter from config
|
|
1040
|
+
if (evalConfig?.minSeverity) {
|
|
1041
|
+
for (const evaluation of verdict.evaluations) {
|
|
1042
|
+
evaluation.findings = filterBySeverity(evaluation.findings, evalConfig.minSeverity);
|
|
1043
|
+
}
|
|
1044
|
+
verdict.findings = filterBySeverity(verdict.findings, evalConfig.minSeverity);
|
|
1045
|
+
}
|
|
1046
|
+
// Apply override suppressions
|
|
1047
|
+
{
|
|
1048
|
+
const overrideStore = loadOverrideStore();
|
|
1049
|
+
if (overrideStore.overrides.length > 0) {
|
|
1050
|
+
const fileSrc = resolvedPath || args.file;
|
|
1051
|
+
for (const evaluation of verdict.evaluations) {
|
|
1052
|
+
const result = applyOverrides(evaluation.findings, overrideStore, fileSrc);
|
|
1053
|
+
evaluation.findings = result.active;
|
|
1054
|
+
}
|
|
1055
|
+
const topResult = applyOverrides(verdict.findings, overrideStore, fileSrc);
|
|
1056
|
+
verdict.findings = topResult.active;
|
|
1057
|
+
if (topResult.overridden.length > 0 && !args.quiet) {
|
|
1058
|
+
console.log(` ā¹ļø ${topResult.overridden.length} finding(s) suppressed by overrides`);
|
|
1059
|
+
}
|
|
1060
|
+
}
|
|
1061
|
+
}
|
|
1062
|
+
// Enrich with learning context when --explain is set
|
|
1063
|
+
if (args.explain) {
|
|
1064
|
+
for (const evaluation of verdict.evaluations) {
|
|
1065
|
+
evaluation.findings = enrichWithExplanations(evaluation.findings);
|
|
1066
|
+
}
|
|
1067
|
+
verdict.findings = enrichWithExplanations(verdict.findings);
|
|
1068
|
+
}
|
|
1069
|
+
const elapsed = Date.now() - startTime;
|
|
1070
|
+
if (args.summary) {
|
|
1071
|
+
const totalFindings = verdict.evaluations.reduce((s, e) => s + e.findings.length, 0);
|
|
1072
|
+
const totalFixable = verdict.evaluations.reduce((s, e) => s + e.findings.filter((f) => f.patch).length, 0);
|
|
1073
|
+
printSummaryLine(verdict.overallVerdict, verdict.overallScore, totalFindings, totalFixable);
|
|
1074
|
+
}
|
|
1075
|
+
else if (args.format === "html") {
|
|
1076
|
+
const html = verdictToHtml(verdict, resolvedPath || args.file);
|
|
1077
|
+
if (outputPath) {
|
|
1078
|
+
writeOutputIfSpecified(outputPath, html);
|
|
1079
|
+
if (!args.quiet)
|
|
1080
|
+
console.log(` ā
HTML report written to ${args.output}`);
|
|
1081
|
+
}
|
|
1082
|
+
else {
|
|
1083
|
+
console.log(html);
|
|
1084
|
+
}
|
|
1085
|
+
}
|
|
1086
|
+
else if (args.format === "pdf") {
|
|
1087
|
+
const pdf = verdictToPdfHtml(verdict, resolvedPath || args.file);
|
|
1088
|
+
if (outputPath) {
|
|
1089
|
+
writeOutputIfSpecified(outputPath, pdf);
|
|
1090
|
+
if (!args.quiet)
|
|
1091
|
+
console.log(` ā
PDF (HTML) report written to ${args.output}`);
|
|
1092
|
+
}
|
|
1093
|
+
else {
|
|
1094
|
+
console.log(pdf);
|
|
1095
|
+
}
|
|
1096
|
+
}
|
|
1097
|
+
else if (args.format === "junit") {
|
|
1098
|
+
const junit = verdictToJUnit(verdict, resolvedPath || args.file);
|
|
1099
|
+
if (outputPath) {
|
|
1100
|
+
writeOutputIfSpecified(outputPath, junit);
|
|
1101
|
+
if (!args.quiet)
|
|
1102
|
+
console.log(` ā
JUnit report written to ${args.output}`);
|
|
1103
|
+
}
|
|
1104
|
+
else {
|
|
1105
|
+
console.log(junit);
|
|
1106
|
+
}
|
|
1107
|
+
}
|
|
1108
|
+
else if (args.format === "codeclimate") {
|
|
1109
|
+
const cc = JSON.stringify(verdictToCodeClimate(verdict, resolvedPath || args.file), null, 2);
|
|
1110
|
+
if (outputPath) {
|
|
1111
|
+
writeOutputIfSpecified(outputPath, cc);
|
|
1112
|
+
if (!args.quiet)
|
|
1113
|
+
console.log(` ā
CodeClimate report written to ${args.output}`);
|
|
1114
|
+
}
|
|
1115
|
+
else {
|
|
1116
|
+
console.log(cc);
|
|
1117
|
+
}
|
|
1118
|
+
}
|
|
1119
|
+
else {
|
|
1120
|
+
const out = formatTribunalOutput(verdict, args.format, resolvedPath || args.file);
|
|
1121
|
+
if (outputPath) {
|
|
1122
|
+
writeOutputIfSpecified(outputPath, out);
|
|
1123
|
+
if (!args.quiet)
|
|
1124
|
+
console.log(` ā
Report written to ${args.output}`);
|
|
1125
|
+
}
|
|
1126
|
+
else {
|
|
1127
|
+
console.log(out);
|
|
1128
|
+
}
|
|
1129
|
+
}
|
|
1130
|
+
if (args.verbose) {
|
|
1131
|
+
console.log(` ā± Evaluated in ${elapsed}ms`);
|
|
1132
|
+
console.log(` š ${verdict.evaluations.length} judges, ${verdict.findings.length} total findings`);
|
|
1133
|
+
}
|
|
1134
|
+
// Trace output ā show pipeline decision trace
|
|
1135
|
+
if (args.trace) {
|
|
1136
|
+
const { buildEvaluationTrace, formatTraceText } = await import("./commands/trace.js");
|
|
1137
|
+
const trace = buildEvaluationTrace(verdict, resolvedPath || args.file, language);
|
|
1138
|
+
if (args.format === "json") {
|
|
1139
|
+
console.log(JSON.stringify(trace, null, 2));
|
|
1140
|
+
}
|
|
1141
|
+
else {
|
|
1142
|
+
console.log(formatTraceText(trace));
|
|
1143
|
+
}
|
|
1144
|
+
}
|
|
1145
|
+
// Exit code ā fail-on-findings or min-score
|
|
1146
|
+
if (args.failOnFindings && verdict.overallVerdict === "fail")
|
|
1147
|
+
process.exit(1);
|
|
1148
|
+
if (args.minScore !== undefined && verdict.overallScore < args.minScore) {
|
|
1149
|
+
console.error(`Score ${verdict.overallScore} is below minimum threshold ${args.minScore}`);
|
|
1150
|
+
process.exit(1);
|
|
1151
|
+
}
|
|
1152
|
+
// Auto-fix if --fix flag is set
|
|
1153
|
+
if (args.fix && resolvedPath) {
|
|
1154
|
+
const allFindings = verdict.evaluations.flatMap((e) => e.findings);
|
|
1155
|
+
const fixable = allFindings
|
|
1156
|
+
.filter((f) => f.patch)
|
|
1157
|
+
.map((f) => ({
|
|
1158
|
+
ruleId: f.ruleId,
|
|
1159
|
+
title: f.title,
|
|
1160
|
+
severity: f.severity,
|
|
1161
|
+
patch: f.patch,
|
|
1162
|
+
lineNumbers: f.lineNumbers,
|
|
1163
|
+
}));
|
|
1164
|
+
if (fixable.length > 0) {
|
|
1165
|
+
const { result, applied, skipped } = applyPatches(code, fixable);
|
|
1166
|
+
writeFileSync(resolvedPath, result, "utf-8");
|
|
1167
|
+
console.log(`\n ā
Applied ${applied} fix(es) to ${args.file || resolvedPath}`);
|
|
1168
|
+
if (skipped > 0) {
|
|
1169
|
+
console.log(` ā Skipped ${skipped} fix(es) (source text changed)`);
|
|
1170
|
+
}
|
|
1171
|
+
}
|
|
1172
|
+
else if (!args.quiet) {
|
|
1173
|
+
console.log("\n No auto-fixable findings.");
|
|
1174
|
+
}
|
|
1175
|
+
}
|
|
1176
|
+
}
|
|
1177
|
+
process.exit(0);
|
|
1178
|
+
}
|
|
1179
|
+
// Unknown command
|
|
1180
|
+
console.error(`Unknown command: ${args.command}`);
|
|
1181
|
+
printHelp();
|
|
1182
|
+
process.exit(1);
|
|
1183
|
+
}
|
|
1184
|
+
// āāā Baseline Support āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
1185
|
+
// Baseline loading and matching is now handled by src/commands/baseline.ts
|
|
1186
|
+
// Exports: loadBaselineData, isBaselined, LoadedBaseline
|
|
1187
|
+
// āāā Summary Line Output āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
1188
|
+
function printSummaryLine(verdict, score, findings, fixable = 0) {
|
|
1189
|
+
const icon = verdict === "pass" ? "ā
" : verdict === "warning" ? "ā ļø" : "ā";
|
|
1190
|
+
const fixSuffix = fixable > 0 ? `, ${fixable} auto-fixable` : "";
|
|
1191
|
+
console.log(`${icon} ${verdict.toUpperCase()} ${score}/100 (${findings} findings${fixSuffix})`);
|
|
1192
|
+
}
|
|
1193
|
+
// āāā Config / Preset Loader āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
1194
|
+
function loadEvalConfig(args) {
|
|
1195
|
+
let config;
|
|
1196
|
+
// 1. Load from CLI --preset (supports comma-separated composition: "security-only,performance")
|
|
1197
|
+
if (args.preset) {
|
|
1198
|
+
const presetNames = args.preset.split(",").map((n) => n.trim());
|
|
1199
|
+
if (presetNames.length === 1) {
|
|
1200
|
+
const preset = getPreset(presetNames[0]);
|
|
1201
|
+
if (!preset) {
|
|
1202
|
+
console.error(`Unknown preset: ${presetNames[0]}`);
|
|
1203
|
+
console.error(`Available: ${listPresets()
|
|
1204
|
+
.map((p) => p.name)
|
|
1205
|
+
.join(", ")}`);
|
|
1206
|
+
process.exit(1);
|
|
1207
|
+
}
|
|
1208
|
+
config = { ...preset.config };
|
|
1209
|
+
}
|
|
1210
|
+
else {
|
|
1211
|
+
// Multi-preset composition
|
|
1212
|
+
const composed = composePresets(presetNames);
|
|
1213
|
+
if (!composed) {
|
|
1214
|
+
console.error(`No valid presets found in: ${args.preset}`);
|
|
1215
|
+
console.error(`Available: ${listPresets()
|
|
1216
|
+
.map((p) => p.name)
|
|
1217
|
+
.join(", ")}`);
|
|
1218
|
+
process.exit(1);
|
|
1219
|
+
}
|
|
1220
|
+
config = { ...composed.config };
|
|
1221
|
+
}
|
|
1222
|
+
}
|
|
1223
|
+
// 2. Load from --config file (overrides preset)
|
|
1224
|
+
if (args.config) {
|
|
1225
|
+
const configPath = resolve(args.config);
|
|
1226
|
+
if (!existsSync(configPath)) {
|
|
1227
|
+
console.error(`Config file not found: ${configPath}`);
|
|
1228
|
+
process.exit(1);
|
|
1229
|
+
}
|
|
1230
|
+
const fileConfig = parseConfig(readFileSync(configPath, "utf-8"));
|
|
1231
|
+
config = config ? { ...config, ...fileConfig } : fileConfig;
|
|
1232
|
+
}
|
|
1233
|
+
// 3. Auto-discover .judgesrc or .judgesrc.json if no explicit config
|
|
1234
|
+
if (!config && !args.config) {
|
|
1235
|
+
for (const name of [".judgesrc", ".judgesrc.json"]) {
|
|
1236
|
+
const p = resolve(name);
|
|
1237
|
+
if (existsSync(p)) {
|
|
1238
|
+
try {
|
|
1239
|
+
config = parseConfig(readFileSync(p, "utf-8"));
|
|
1240
|
+
}
|
|
1241
|
+
catch {
|
|
1242
|
+
// Silently skip invalid auto-discovered configs
|
|
1243
|
+
}
|
|
1244
|
+
break;
|
|
1245
|
+
}
|
|
1246
|
+
}
|
|
1247
|
+
}
|
|
1248
|
+
// 3b. No config found anywhere ā apply onboarding preset for first-time users
|
|
1249
|
+
if (!config && !args.config && !args.preset) {
|
|
1250
|
+
const onboarding = getPreset("onboarding");
|
|
1251
|
+
if (onboarding) {
|
|
1252
|
+
config = { ...onboarding.config };
|
|
1253
|
+
console.error("ā¹ No .judgesrc found ā using onboarding preset (high-severity only). Run 'judges init' for full control.");
|
|
1254
|
+
}
|
|
1255
|
+
}
|
|
1256
|
+
// 4. Apply config.preset if no CLI --preset was given
|
|
1257
|
+
if (config?.preset && !args.preset) {
|
|
1258
|
+
const presetNames = config.preset.split(",").map((n) => n.trim());
|
|
1259
|
+
let presetConfig;
|
|
1260
|
+
if (presetNames.length === 1) {
|
|
1261
|
+
const preset = getPreset(presetNames[0]);
|
|
1262
|
+
if (preset)
|
|
1263
|
+
presetConfig = { ...preset.config };
|
|
1264
|
+
}
|
|
1265
|
+
else {
|
|
1266
|
+
const composed = composePresets(presetNames);
|
|
1267
|
+
if (composed)
|
|
1268
|
+
presetConfig = { ...composed.config };
|
|
1269
|
+
}
|
|
1270
|
+
if (presetConfig) {
|
|
1271
|
+
// Preset is the base; config file properties override it
|
|
1272
|
+
const { preset: _p, ...rest } = config;
|
|
1273
|
+
config = { ...presetConfig, ...rest };
|
|
1274
|
+
}
|
|
1275
|
+
}
|
|
1276
|
+
// 5. Apply config-based defaults to CLI args (CLI flags always win)
|
|
1277
|
+
if (config) {
|
|
1278
|
+
if (config.failOnFindings && !args.failOnFindings) {
|
|
1279
|
+
args.failOnFindings = true;
|
|
1280
|
+
}
|
|
1281
|
+
if (config.baseline && !args.baseline) {
|
|
1282
|
+
args.baseline = config.baseline;
|
|
1283
|
+
}
|
|
1284
|
+
if (config.format && args.format === "text") {
|
|
1285
|
+
// Only apply config format if CLI didn't explicitly set one
|
|
1286
|
+
args.format = config.format;
|
|
1287
|
+
}
|
|
1288
|
+
if (config.failOnScoreBelow !== undefined && args.minScore === undefined) {
|
|
1289
|
+
// Config uses 0-10 scale; CLI --min-score uses 0-100 (matches overallScore)
|
|
1290
|
+
args.minScore = config.failOnScoreBelow * 10;
|
|
1291
|
+
}
|
|
1292
|
+
}
|
|
1293
|
+
return config;
|
|
1294
|
+
}
|
|
1295
|
+
// āāā Explain Mode ā Learning Context Enrichment āāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
1296
|
+
const RULE_PREFIX_CONTEXT = {
|
|
1297
|
+
SEC: {
|
|
1298
|
+
owasp: "A03:2021 Injection",
|
|
1299
|
+
cwe: "CWE-79/CWE-89",
|
|
1300
|
+
learn: "Input validation prevents injection attacks where untrusted data is sent to an interpreter.",
|
|
1301
|
+
},
|
|
1302
|
+
AUTH: {
|
|
1303
|
+
owasp: "A07:2021 Identification and Authentication Failures",
|
|
1304
|
+
cwe: "CWE-287",
|
|
1305
|
+
learn: "Authentication flaws let attackers compromise passwords, keys, or session tokens.",
|
|
1306
|
+
},
|
|
1307
|
+
CRYPTO: {
|
|
1308
|
+
owasp: "A02:2021 Cryptographic Failures",
|
|
1309
|
+
cwe: "CWE-327/CWE-328",
|
|
1310
|
+
learn: "Weak or missing cryptography exposes sensitive data to interception and tampering.",
|
|
1311
|
+
},
|
|
1312
|
+
DATA: {
|
|
1313
|
+
owasp: "A02:2021 Cryptographic Failures",
|
|
1314
|
+
cwe: "CWE-200/CWE-312",
|
|
1315
|
+
learn: "Sensitive data exposure occurs when applications do not adequately protect data at rest or in transit.",
|
|
1316
|
+
},
|
|
1317
|
+
CYBER: {
|
|
1318
|
+
owasp: "A01:2021 Broken Access Control",
|
|
1319
|
+
cwe: "CWE-284",
|
|
1320
|
+
learn: "Access control enforces policy so users cannot act outside their intended permissions.",
|
|
1321
|
+
},
|
|
1322
|
+
INJ: {
|
|
1323
|
+
owasp: "A03:2021 Injection",
|
|
1324
|
+
cwe: "CWE-89/CWE-78",
|
|
1325
|
+
learn: "Injection flaws occur when hostile data is sent to an interpreter as part of a command or query.",
|
|
1326
|
+
},
|
|
1327
|
+
XSS: {
|
|
1328
|
+
owasp: "A03:2021 Injection",
|
|
1329
|
+
cwe: "CWE-79",
|
|
1330
|
+
learn: "Cross-site scripting (XSS) lets attackers inject scripts into web pages viewed by other users.",
|
|
1331
|
+
},
|
|
1332
|
+
SSRF: {
|
|
1333
|
+
owasp: "A10:2021 Server-Side Request Forgery",
|
|
1334
|
+
cwe: "CWE-918",
|
|
1335
|
+
learn: "SSRF lets attackers make the server send requests to unintended locations, potentially accessing internal services.",
|
|
1336
|
+
},
|
|
1337
|
+
PERF: { learn: "Performance issues cause slow response times, high resource usage, or scalability bottlenecks." },
|
|
1338
|
+
A11Y: {
|
|
1339
|
+
learn: "Accessibility ensures applications are usable by people with disabilities, per WCAG 2.1 guidelines.",
|
|
1340
|
+
},
|
|
1341
|
+
DOC: { learn: "Good documentation improves maintainability, onboarding, and reduces defect rates." },
|
|
1342
|
+
TEST: { learn: "Adequate test coverage catches regressions, validates behaviour, and enables safe refactoring." },
|
|
1343
|
+
AICS: {
|
|
1344
|
+
owasp: "OWASP AI Security",
|
|
1345
|
+
learn: "AI code safety rules detect prompt injection, model poisoning, and unsafe AI integration patterns.",
|
|
1346
|
+
},
|
|
1347
|
+
IAC: {
|
|
1348
|
+
learn: "Infrastructure as Code security ensures cloud resources are provisioned with least-privilege, encryption, and audit logging.",
|
|
1349
|
+
},
|
|
1350
|
+
SOV: {
|
|
1351
|
+
learn: "Data sovereignty rules verify data residency, jurisdictional compliance, and cross-border transfer controls.",
|
|
1352
|
+
},
|
|
1353
|
+
COMP: { learn: "Compliance rules enforce regulatory requirements like GDPR, HIPAA, PCI-DSS, and SOC 2." },
|
|
1354
|
+
INTENT: {
|
|
1355
|
+
learn: "Intent alignment detects mismatches between declared purpose (names, comments) and actual implementation.",
|
|
1356
|
+
},
|
|
1357
|
+
DSEC: {
|
|
1358
|
+
learn: "Dependency security rules flag known-vulnerable packages, outdated dependencies, and supply-chain risks.",
|
|
1359
|
+
},
|
|
1360
|
+
MFPR: {
|
|
1361
|
+
learn: "Model fingerprint detection identifies stylistic patterns characteristic of specific AI generators (GPT, Claude, Copilot, Gemini).",
|
|
1362
|
+
},
|
|
1363
|
+
API: {
|
|
1364
|
+
learn: "API contract rules enforce input validation, proper status codes, content-type, rate limiting, and versioning on REST endpoints.",
|
|
1365
|
+
},
|
|
1366
|
+
COH: {
|
|
1367
|
+
learn: "Coherence rules detect contradictory assignments, dead code, duplicate definitions, and other self-inconsistent patterns.",
|
|
1368
|
+
},
|
|
1369
|
+
HALLU: {
|
|
1370
|
+
learn: "Hallucination detection catches fabricated APIs, non-existent imports, and phantom methods commonly generated by AI models.",
|
|
1371
|
+
},
|
|
1372
|
+
};
|
|
1373
|
+
function enrichWithExplanations(findings) {
|
|
1374
|
+
return findings.map((f) => {
|
|
1375
|
+
const prefix = f.ruleId.replace(/-\d+$/, "");
|
|
1376
|
+
const ctx = RULE_PREFIX_CONTEXT[prefix];
|
|
1377
|
+
const parts = [f.description];
|
|
1378
|
+
// Layer 2: evidence-based explanation
|
|
1379
|
+
if (f.confidence !== undefined) {
|
|
1380
|
+
parts.push(`\nšÆ Confidence: ${Math.round(f.confidence * 100)}%`);
|
|
1381
|
+
}
|
|
1382
|
+
if (f.provenance) {
|
|
1383
|
+
parts.push(`š Detection: ${f.provenance}`);
|
|
1384
|
+
}
|
|
1385
|
+
if (f.evidenceBasis) {
|
|
1386
|
+
parts.push(`š Evidence: ${f.evidenceBasis}`);
|
|
1387
|
+
}
|
|
1388
|
+
if (f.evidenceChain && f.evidenceChain.steps.length > 0) {
|
|
1389
|
+
parts.push(`\nā” Why this matters: ${f.evidenceChain.impactStatement}`);
|
|
1390
|
+
parts.push(" Evidence chain:");
|
|
1391
|
+
for (const step of f.evidenceChain.steps.slice(0, 5)) {
|
|
1392
|
+
const loc = step.line ? ` (L${step.line})` : "";
|
|
1393
|
+
parts.push(` ā [${step.source}]${loc} ${step.observation}`);
|
|
1394
|
+
}
|
|
1395
|
+
}
|
|
1396
|
+
// Layer 1: OWASP/CWE reference context
|
|
1397
|
+
if (ctx) {
|
|
1398
|
+
if (ctx.owasp)
|
|
1399
|
+
parts.push(`\nš OWASP: ${ctx.owasp}`);
|
|
1400
|
+
if (ctx.cwe)
|
|
1401
|
+
parts.push(`CWE: ${ctx.cwe}`);
|
|
1402
|
+
parts.push(`š” ${ctx.learn}`);
|
|
1403
|
+
}
|
|
1404
|
+
return {
|
|
1405
|
+
...f,
|
|
1406
|
+
description: parts.join(" "),
|
|
1407
|
+
reference: f.reference || (ctx ? [ctx.owasp, ctx.cwe].filter(Boolean).join(" / ") : undefined) || f.reference,
|
|
1408
|
+
};
|
|
1409
|
+
});
|
|
1410
|
+
}
|
|
1411
|
+
// āāā Severity Filter āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
1412
|
+
const SEVERITY_ORDER = ["critical", "high", "medium", "low", "info"];
|
|
1413
|
+
function filterBySeverity(findings, minSeverity) {
|
|
1414
|
+
const minIndex = SEVERITY_ORDER.indexOf(minSeverity);
|
|
1415
|
+
if (minIndex < 0)
|
|
1416
|
+
return findings;
|
|
1417
|
+
return findings.filter((f) => {
|
|
1418
|
+
const idx = SEVERITY_ORDER.indexOf(f.severity);
|
|
1419
|
+
return idx >= 0 && idx <= minIndex;
|
|
1420
|
+
});
|
|
1421
|
+
}
|
|
1422
|
+
// āāā CI Templates CLI āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
1423
|
+
async function runCiTemplates(argv) {
|
|
1424
|
+
const provider = argv[3];
|
|
1425
|
+
if (!provider || provider === "--help" || provider === "-h") {
|
|
1426
|
+
console.log(`
|
|
1427
|
+
Judges Panel ā CI Template Generator
|
|
1428
|
+
|
|
1429
|
+
USAGE:
|
|
1430
|
+
`);
|
|
1431
|
+
process.exit(0);
|
|
1432
|
+
}
|
|
1433
|
+
switch (provider) {
|
|
1434
|
+
case "github":
|
|
1435
|
+
console.log(generateGitHubActions());
|
|
1436
|
+
break;
|
|
1437
|
+
case "gitlab":
|
|
1438
|
+
console.log((await import("./commands/ci-templates.js")).generateGitLabCi());
|
|
1439
|
+
break;
|
|
1440
|
+
case "azure":
|
|
1441
|
+
console.log((await import("./commands/ci-templates.js")).generateAzurePipelines());
|
|
1442
|
+
break;
|
|
1443
|
+
case "bitbucket":
|
|
1444
|
+
console.log((await import("./commands/ci-templates.js")).generateBitbucketPipelines());
|
|
1445
|
+
break;
|
|
1446
|
+
default:
|
|
1447
|
+
console.error(`Unknown provider: ${provider}`);
|
|
1448
|
+
console.error("Supported: github, gitlab, azure, bitbucket");
|
|
1449
|
+
process.exit(1);
|
|
1450
|
+
}
|
|
1451
|
+
process.exit(0);
|
|
1452
|
+
}
|
|
1453
|
+
function generateGitHubActions() {
|
|
1454
|
+
return `# .github/workflows/judges.yml
|
|
1455
|
+
name: Judges Panel Code Review
|
|
1456
|
+
|
|
1457
|
+
on:
|
|
1458
|
+
pull_request:
|
|
1459
|
+
branches: [main]
|
|
1460
|
+
push:
|
|
1461
|
+
branches: [main]
|
|
1462
|
+
|
|
1463
|
+
jobs:
|
|
1464
|
+
runs-on: ubuntu-latest
|
|
1465
|
+
steps:
|
|
1466
|
+
- uses: actions/checkout@v4
|
|
1467
|
+
|
|
1468
|
+
- uses: actions/setup-node@v4
|
|
1469
|
+
with:
|
|
1470
|
+
node-version: '22'
|
|
1471
|
+
|
|
1472
|
+
- name: Install Judges
|
|
1473
|
+
run: npm install -g @kevinrabun/judges-cli
|
|
1474
|
+
|
|
1475
|
+
- name: Run Judges Evaluation
|
|
1476
|
+
run: |
|
|
1477
|
+
for file in $(git diff --name-only HEAD~1 -- '*.ts' '*.js' '*.py' '*.go' '*.rs' '*.java' '*.cs'); do
|
|
1478
|
+
judges eval --file "$file" --format sarif --fail-on-findings >> results.sarif || true
|
|
1479
|
+
done
|
|
1480
|
+
|
|
1481
|
+
- name: Upload SARIF
|
|
1482
|
+
if: always()
|
|
1483
|
+
uses: github/codeql-action/upload-sarif@v3
|
|
1484
|
+
with:
|
|
1485
|
+
sarif_file: results.sarif
|
|
1486
|
+
`;
|
|
1487
|
+
}
|