codeslick-cli 1.3.0 → 1.4.1
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 +50 -11
- package/dist/packages/cli/src/commands/scan.d.ts.map +1 -1
- package/dist/packages/cli/src/commands/scan.js +7 -3
- package/dist/packages/cli/src/commands/scan.js.map +1 -1
- package/dist/packages/cli/src/reporters/cli-reporter.d.ts +11 -0
- package/dist/packages/cli/src/reporters/cli-reporter.d.ts.map +1 -1
- package/dist/packages/cli/src/reporters/cli-reporter.js +150 -45
- package/dist/packages/cli/src/reporters/cli-reporter.js.map +1 -1
- package/dist/packages/cli/src/scanner/local-scanner.d.ts +2 -2
- package/dist/packages/cli/src/scanner/local-scanner.d.ts.map +1 -1
- package/dist/packages/cli/src/scanner/local-scanner.js +49 -9
- package/dist/packages/cli/src/scanner/local-scanner.js.map +1 -1
- package/dist/src/lib/analyzers/go-analyzer.d.ts +12 -0
- package/dist/src/lib/analyzers/go-analyzer.d.ts.map +1 -1
- package/dist/src/lib/analyzers/go-analyzer.js +113 -0
- package/dist/src/lib/analyzers/go-analyzer.js.map +1 -1
- package/dist/src/lib/analyzers/iac/pii-detector.d.ts +27 -0
- package/dist/src/lib/analyzers/iac/pii-detector.d.ts.map +1 -0
- package/dist/src/lib/analyzers/iac/pii-detector.js +199 -0
- package/dist/src/lib/analyzers/iac/pii-detector.js.map +1 -0
- package/dist/src/lib/analyzers/iac/pii-patterns.d.ts +43 -0
- package/dist/src/lib/analyzers/iac/pii-patterns.d.ts.map +1 -0
- package/dist/src/lib/analyzers/iac/pii-patterns.js +228 -0
- package/dist/src/lib/analyzers/iac/pii-patterns.js.map +1 -0
- package/dist/src/lib/analyzers/java-analyzer.d.ts +5 -0
- package/dist/src/lib/analyzers/java-analyzer.d.ts.map +1 -1
- package/dist/src/lib/analyzers/java-analyzer.js +51 -0
- package/dist/src/lib/analyzers/java-analyzer.js.map +1 -1
- package/dist/src/lib/analyzers/javascript/quality-checks/ai-hallucinations.d.ts +8 -4
- package/dist/src/lib/analyzers/javascript/quality-checks/ai-hallucinations.d.ts.map +1 -1
- package/dist/src/lib/analyzers/javascript/quality-checks/ai-hallucinations.js +109 -13
- package/dist/src/lib/analyzers/javascript/quality-checks/ai-hallucinations.js.map +1 -1
- package/dist/src/lib/analyzers/javascript/quality-checks/reference-errors.d.ts.map +1 -1
- package/dist/src/lib/analyzers/javascript/quality-checks/reference-errors.js +7 -8
- package/dist/src/lib/analyzers/javascript/quality-checks/reference-errors.js.map +1 -1
- package/dist/src/lib/analyzers/javascript-analyzer.d.ts.map +1 -1
- package/dist/src/lib/analyzers/javascript-analyzer.js +16 -12
- package/dist/src/lib/analyzers/javascript-analyzer.js.map +1 -1
- package/dist/src/lib/analyzers/kubernetes/checks/network-security.d.ts +33 -0
- package/dist/src/lib/analyzers/kubernetes/checks/network-security.d.ts.map +1 -0
- package/dist/src/lib/analyzers/kubernetes/checks/network-security.js +184 -0
- package/dist/src/lib/analyzers/kubernetes/checks/network-security.js.map +1 -0
- package/dist/src/lib/analyzers/kubernetes/checks/pod-security.d.ts +60 -0
- package/dist/src/lib/analyzers/kubernetes/checks/pod-security.d.ts.map +1 -0
- package/dist/src/lib/analyzers/kubernetes/checks/pod-security.js +418 -0
- package/dist/src/lib/analyzers/kubernetes/checks/pod-security.js.map +1 -0
- package/dist/src/lib/analyzers/kubernetes/checks/rbac-security.d.ts +44 -0
- package/dist/src/lib/analyzers/kubernetes/checks/rbac-security.d.ts.map +1 -0
- package/dist/src/lib/analyzers/kubernetes/checks/rbac-security.js +275 -0
- package/dist/src/lib/analyzers/kubernetes/checks/rbac-security.js.map +1 -0
- package/dist/src/lib/analyzers/kubernetes/checks/resource-management.d.ts +32 -0
- package/dist/src/lib/analyzers/kubernetes/checks/resource-management.d.ts.map +1 -0
- package/dist/src/lib/analyzers/kubernetes/checks/resource-management.js +176 -0
- package/dist/src/lib/analyzers/kubernetes/checks/resource-management.js.map +1 -0
- package/dist/src/lib/analyzers/kubernetes/checks/secrets-management.d.ts +38 -0
- package/dist/src/lib/analyzers/kubernetes/checks/secrets-management.d.ts.map +1 -0
- package/dist/src/lib/analyzers/kubernetes/checks/secrets-management.js +266 -0
- package/dist/src/lib/analyzers/kubernetes/checks/secrets-management.js.map +1 -0
- package/dist/src/lib/analyzers/kubernetes/checks/service-security.d.ts +26 -0
- package/dist/src/lib/analyzers/kubernetes/checks/service-security.d.ts.map +1 -0
- package/dist/src/lib/analyzers/kubernetes/checks/service-security.js +120 -0
- package/dist/src/lib/analyzers/kubernetes/checks/service-security.js.map +1 -0
- package/dist/src/lib/analyzers/kubernetes/parser.d.ts +74 -0
- package/dist/src/lib/analyzers/kubernetes/parser.d.ts.map +1 -0
- package/dist/src/lib/analyzers/kubernetes/parser.js +233 -0
- package/dist/src/lib/analyzers/kubernetes/parser.js.map +1 -0
- package/dist/src/lib/analyzers/kubernetes/pii-detector.d.ts +34 -0
- package/dist/src/lib/analyzers/kubernetes/pii-detector.d.ts.map +1 -0
- package/dist/src/lib/analyzers/kubernetes/pii-detector.js +182 -0
- package/dist/src/lib/analyzers/kubernetes/pii-detector.js.map +1 -0
- package/dist/src/lib/analyzers/kubernetes/types.d.ts +266 -0
- package/dist/src/lib/analyzers/kubernetes/types.d.ts.map +1 -0
- package/dist/src/lib/analyzers/kubernetes/types.js +77 -0
- package/dist/src/lib/analyzers/kubernetes/types.js.map +1 -0
- package/dist/src/lib/analyzers/kubernetes-analyzer.d.ts +93 -0
- package/dist/src/lib/analyzers/kubernetes-analyzer.d.ts.map +1 -0
- package/dist/src/lib/analyzers/kubernetes-analyzer.js +215 -0
- package/dist/src/lib/analyzers/kubernetes-analyzer.js.map +1 -0
- package/dist/src/lib/analyzers/python-analyzer.d.ts.map +1 -1
- package/dist/src/lib/analyzers/python-analyzer.js +32 -48
- package/dist/src/lib/analyzers/python-analyzer.js.map +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/ai-providers.d.ts +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/ai-providers.d.ts.map +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/aws.d.ts +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/aws.d.ts.map +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/cloud-providers.d.ts +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/cloud-providers.d.ts.map +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/communication.d.ts +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/communication.d.ts.map +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/generic.d.ts +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/generic.d.ts.map +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/github.d.ts +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/github.d.ts.map +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/stripe.d.ts +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/stripe.d.ts.map +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/api-keys.d.ts +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/api-keys.d.ts.map +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/credentials.d.ts +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/credentials.d.ts.map +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/credentials.js +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/credentials.js.map +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/private-keys.d.ts +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/private-keys.d.ts.map +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/tokens.d.ts +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/tokens.d.ts.map +1 -1
- package/dist/src/lib/analyzers/secrets/secrets-analyzer.d.ts +6 -32
- package/dist/src/lib/analyzers/secrets/secrets-analyzer.d.ts.map +1 -1
- package/dist/src/lib/analyzers/secrets/secrets-analyzer.js +48 -4
- package/dist/src/lib/analyzers/secrets/secrets-analyzer.js.map +1 -1
- package/dist/src/lib/analyzers/secrets/types.d.ts +40 -0
- package/dist/src/lib/analyzers/secrets/types.d.ts.map +1 -0
- package/dist/src/lib/analyzers/secrets/types.js +10 -0
- package/dist/src/lib/analyzers/secrets/types.js.map +1 -0
- package/dist/src/lib/analyzers/terraform/aws-checks.d.ts +71 -0
- package/dist/src/lib/analyzers/terraform/aws-checks.d.ts.map +1 -0
- package/dist/src/lib/analyzers/terraform/aws-checks.js +538 -0
- package/dist/src/lib/analyzers/terraform/aws-checks.js.map +1 -0
- package/dist/src/lib/analyzers/terraform/parser.d.ts +14 -0
- package/dist/src/lib/analyzers/terraform/parser.d.ts.map +1 -0
- package/dist/src/lib/analyzers/terraform/parser.js +237 -0
- package/dist/src/lib/analyzers/terraform/parser.js.map +1 -0
- package/dist/src/lib/analyzers/terraform/types.d.ts +70 -0
- package/dist/src/lib/analyzers/terraform/types.d.ts.map +1 -0
- package/dist/src/lib/analyzers/terraform/types.js +9 -0
- package/dist/src/lib/analyzers/terraform/types.js.map +1 -0
- package/dist/src/lib/analyzers/terraform-analyzer.d.ts +50 -0
- package/dist/src/lib/analyzers/terraform-analyzer.d.ts.map +1 -0
- package/dist/src/lib/analyzers/terraform-analyzer.js +168 -0
- package/dist/src/lib/analyzers/terraform-analyzer.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/type-security.d.ts.map +1 -1
- package/dist/src/lib/analyzers/typescript/security-checks/type-security.js +23 -8
- package/dist/src/lib/analyzers/typescript/security-checks/type-security.js.map +1 -1
- package/dist/src/lib/analyzers/typescript-analyzer.d.ts +5 -0
- package/dist/src/lib/analyzers/typescript-analyzer.d.ts.map +1 -1
- package/dist/src/lib/analyzers/typescript-analyzer.js +76 -0
- package/dist/src/lib/analyzers/typescript-analyzer.js.map +1 -1
- package/dist/src/lib/analyzers/utils/false-positive-filter.d.ts +27 -0
- package/dist/src/lib/analyzers/utils/false-positive-filter.d.ts.map +1 -0
- package/dist/src/lib/analyzers/utils/false-positive-filter.js +176 -0
- package/dist/src/lib/analyzers/utils/false-positive-filter.js.map +1 -0
- package/dist/src/lib/security/epss-service.d.ts.map +1 -1
- package/dist/src/lib/security/epss-service.js +83 -50
- package/dist/src/lib/security/epss-service.js.map +1 -1
- package/dist/src/lib/security/severity-scoring.d.ts.map +1 -1
- package/dist/src/lib/security/severity-scoring.js +140 -0
- package/dist/src/lib/security/severity-scoring.js.map +1 -1
- package/dist/src/lib/types/index.d.ts +3 -3
- package/dist/src/lib/types/index.d.ts.map +1 -1
- package/dist/src/lib/utils/ignore-patterns.d.ts +60 -0
- package/dist/src/lib/utils/ignore-patterns.d.ts.map +1 -0
- package/dist/src/lib/utils/ignore-patterns.js +212 -0
- package/dist/src/lib/utils/ignore-patterns.js.map +1 -0
- package/package.json +10 -7
- package/src/commands/scan.ts +7 -3
- package/src/reporters/cli-reporter.ts +174 -48
- package/src/scanner/local-scanner.ts +65 -10
- package/tsconfig.tsbuildinfo +0 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @codeslick/cli
|
|
2
2
|
|
|
3
|
-
**CodeSlick CLI** - Pre-commit security scanner for JavaScript, TypeScript, Python, Java, and
|
|
3
|
+
**CodeSlick CLI** - Pre-commit security scanner for JavaScript, TypeScript, Python, Java, Go, and Terraform.
|
|
4
4
|
|
|
5
5
|
Catch security vulnerabilities before they enter your codebase with automated pre-commit scanning.
|
|
6
6
|
|
|
@@ -9,11 +9,12 @@ Catch security vulnerabilities before they enter your codebase with automated pr
|
|
|
9
9
|
- **Local Security Scanning** - No API calls required, fully offline
|
|
10
10
|
- **Pre-commit Hook Integration** - Automatically scans staged files before each commit
|
|
11
11
|
- **Fast Analysis** - <3s for 10 files using CodeSlick's analyzer engine
|
|
12
|
-
- **Multi-language Support** - JavaScript, TypeScript, Python, Java, Go
|
|
12
|
+
- **Multi-language Support** - JavaScript, TypeScript, Python, Java, Go, Terraform
|
|
13
|
+
- **IaC Security** - Detects AWS misconfigurations in Terraform (S3, IAM, and more)
|
|
13
14
|
- **Configurable Thresholds** - Block commits on CRITICAL, HIGH, MEDIUM, or LOW severity
|
|
14
15
|
- **Beautiful Terminal Output** - Color-coded results with CVSS scores and fix suggestions
|
|
15
16
|
- **CI/CD Ready** - JSON output mode for automation
|
|
16
|
-
- **OWASP Top 10:2025 Compliant** -
|
|
17
|
+
- **OWASP Top 10:2025 Compliant** - 304 comprehensive security checks
|
|
17
18
|
|
|
18
19
|
## Prerequisites
|
|
19
20
|
|
|
@@ -252,7 +253,7 @@ The `.codeslick.json` file controls how CodeSlick scans your code.
|
|
|
252
253
|
"**/test/**",
|
|
253
254
|
"**/tests/**"
|
|
254
255
|
],
|
|
255
|
-
"languages": ["javascript", "typescript", "python", "java", "go"],
|
|
256
|
+
"languages": ["javascript", "typescript", "python", "java", "go", "terraform"],
|
|
256
257
|
|
|
257
258
|
// NEW: Pass/Fail Thresholds (v1.3)
|
|
258
259
|
"thresholdEnabled": true,
|
|
@@ -276,7 +277,7 @@ The `.codeslick.json` file controls how CodeSlick scans your code.
|
|
|
276
277
|
| `severity` | string | `"critical"` | Severity threshold: `critical`, `high`, `medium`, `low` |
|
|
277
278
|
| `autofix` | boolean | `false` | Enable auto-fix (experimental) |
|
|
278
279
|
| `exclude` | string[] | See above | Glob patterns to exclude from scanning |
|
|
279
|
-
| `languages` | string[] | All | Languages to scan: `javascript`, `typescript`, `python`, `java`, `go` |
|
|
280
|
+
| `languages` | string[] | All | Languages to scan: `javascript`, `typescript`, `python`, `java`, `go`, `terraform` |
|
|
280
281
|
| `telemetry` | boolean | `true` | Enable anonymous usage analytics |
|
|
281
282
|
| **Thresholds (v1.3)** | | | |
|
|
282
283
|
| `thresholdEnabled` | boolean | `true` | Enable pass/fail threshold enforcement |
|
|
@@ -311,8 +312,9 @@ CodeSlick CLI uses the same analysis engine as the GitHub App and WebTool.
|
|
|
311
312
|
| **Python** | 47 checks | Django/Flask security, pickle, exec(), secrets |
|
|
312
313
|
| **Java** | 32 checks | Log4j, Spring Security, SQL injection, deserialization |
|
|
313
314
|
| **Go** | 26 checks | SQL injection, command injection, TLS misconfig, race conditions |
|
|
315
|
+
| **Terraform** | 10 checks | S3 public ACL, IAM wildcards, encryption, versioning, logging |
|
|
314
316
|
|
|
315
|
-
**Total**:
|
|
317
|
+
**Total**: 304 comprehensive security checks
|
|
316
318
|
|
|
317
319
|
### OWASP Top 10:2025 Compliance
|
|
318
320
|
|
|
@@ -559,6 +561,41 @@ MIT License - see [LICENSE](../../LICENSE) for details.
|
|
|
559
561
|
- **Issues**: https://github.com/VitorLourenco/codeslick2/issues
|
|
560
562
|
- **Email**: support@codeslick.dev
|
|
561
563
|
|
|
564
|
+
## What's New in v1.4 🚀
|
|
565
|
+
|
|
566
|
+
**Terraform IaC Security Scanning** (February 2026)
|
|
567
|
+
|
|
568
|
+
- **Terraform Language Support** - Full Infrastructure as Code security analysis
|
|
569
|
+
- **10 AWS Security Checks** - S3 buckets (public ACL, encryption, versioning, logging) + IAM policies (wildcard actions/resources, privilege escalation)
|
|
570
|
+
- **Multiline HCL Parsing** - Correctly handles multiline `jsonencode()` and nested objects
|
|
571
|
+
- **OWASP A01:2021 Compliance** - Detects Broken Access Control in cloud infrastructure
|
|
572
|
+
- **Pre-commit IaC Validation** - Block insecure Terraform before deployment
|
|
573
|
+
- **304 Total Security Checks** - Now supporting 6 languages
|
|
574
|
+
|
|
575
|
+
**Example:**
|
|
576
|
+
```bash
|
|
577
|
+
cs scan infrastructure/*.tf
|
|
578
|
+
# ✖ CRITICAL: S3 bucket has public ACL: "public-read"
|
|
579
|
+
# ✖ CRITICAL: IAM policy allows wildcard actions (Action: "*")
|
|
580
|
+
# ⚠ HIGH: S3 bucket does not have encryption enabled
|
|
581
|
+
# Exit code: 1 (blocked - 3 critical issues)
|
|
582
|
+
```
|
|
583
|
+
|
|
584
|
+
### Detected Terraform Vulnerabilities
|
|
585
|
+
|
|
586
|
+
| Check | Severity | OWASP | Description |
|
|
587
|
+
|-------|----------|-------|-------------|
|
|
588
|
+
| S3 Public ACL | CRITICAL | A01:2021 | Detects `acl = "public-read"` |
|
|
589
|
+
| S3 Encryption | HIGH | A02:2021 | Missing server-side encryption |
|
|
590
|
+
| S3 Versioning | MEDIUM | A09:2021 | No versioning enabled |
|
|
591
|
+
| S3 Logging | MEDIUM | A09:2021 | No access logs |
|
|
592
|
+
| IAM Wildcard Actions | CRITICAL | A01:2021 | `Action = "*"` detected |
|
|
593
|
+
| IAM Wildcard Resources | HIGH | A01:2021 | `Resource = "*"` detected |
|
|
594
|
+
| IAM Admin Policy | CRITICAL | A01:2021 | AdministratorAccess equivalent |
|
|
595
|
+
| IAM Privilege Escalation | CRITICAL | A01:2021 | Can grant self permissions |
|
|
596
|
+
|
|
597
|
+
---
|
|
598
|
+
|
|
562
599
|
## What's New in v1.3 ⭐
|
|
563
600
|
|
|
564
601
|
**Pass/Fail Thresholds + Test Execution Integration** (February 2026)
|
|
@@ -603,11 +640,13 @@ cs scan --verify # Run security scan + tests
|
|
|
603
640
|
|
|
604
641
|
## Roadmap
|
|
605
642
|
|
|
606
|
-
### v1.
|
|
607
|
-
-
|
|
608
|
-
-
|
|
609
|
-
-
|
|
610
|
-
-
|
|
643
|
+
### v1.5 (Coming Q2 2026)
|
|
644
|
+
- **More Terraform Providers** - Azure (azurerm_), GCP (google_) resources
|
|
645
|
+
- **Expanded IaC Coverage** - EC2, RDS, Lambda, VPC security checks (15+ new)
|
|
646
|
+
- **Custom Rule Configuration** - Define your own security rules via YAML/JSON
|
|
647
|
+
- **IDE Integration** - VS Code extension with inline security hints
|
|
648
|
+
- **Enhanced Auto-fix** - More intelligent fix suggestions for complex issues
|
|
649
|
+
- **Smart Exemptions** - ML-based false positive detection
|
|
611
650
|
|
|
612
651
|
---
|
|
613
652
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../../../../src/commands/scan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAkCH;;;;GAIG;AACH,UAAU,QAAQ;IAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IAClD,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IAGf,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAGjC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAwCD;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../../../../src/commands/scan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAkCH;;;;GAIG;AACH,UAAU,QAAQ;IAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IAClD,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IAGf,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAGjC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAwCD;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAwR/D"}
|
|
@@ -262,8 +262,10 @@ async function scanCommand(args) {
|
|
|
262
262
|
const totalLow = results.reduce((sum, r) => sum + r.low, 0);
|
|
263
263
|
// Collect unique languages scanned
|
|
264
264
|
const languages = [...new Set(results.map(r => r.language))];
|
|
265
|
-
// Send telemetry
|
|
266
|
-
(
|
|
265
|
+
// Send telemetry — store the promise so we can await it before process.exit.
|
|
266
|
+
// process.exit() terminates all pending async ops, so fire-and-forget never
|
|
267
|
+
// completes. The telemetry function has a 3-second timeout built in.
|
|
268
|
+
const telemetryDone = (0, telemetry_1.trackScan)({
|
|
267
269
|
filesScanned: results.length,
|
|
268
270
|
languages,
|
|
269
271
|
vulnerabilities: {
|
|
@@ -273,7 +275,7 @@ async function scanCommand(args) {
|
|
|
273
275
|
low: totalLow,
|
|
274
276
|
},
|
|
275
277
|
scanDuration: duration,
|
|
276
|
-
}).catch(() => { }); //
|
|
278
|
+
}).catch(() => { }); // Never let telemetry errors surface
|
|
277
279
|
// WR2: Build threshold configuration from CLI args or use defaults
|
|
278
280
|
// NOTE: For CLI, thresholds are ENABLED by default (unlike dashboard which is opt-in)
|
|
279
281
|
// This ensures pre-commit hooks block on security issues
|
|
@@ -346,6 +348,7 @@ async function scanCommand(args) {
|
|
|
346
348
|
console.log(chalk_1.default.red.bold('\n Tests failed - commit blocked\n'));
|
|
347
349
|
}
|
|
348
350
|
}
|
|
351
|
+
await telemetryDone; // Wait for telemetry before terminating process
|
|
349
352
|
process.exit(1); // Exit with failure
|
|
350
353
|
}
|
|
351
354
|
else {
|
|
@@ -355,6 +358,7 @@ async function scanCommand(args) {
|
|
|
355
358
|
console.log(chalk_1.default.green(' ✓ Tests passed'));
|
|
356
359
|
}
|
|
357
360
|
}
|
|
361
|
+
await telemetryDone; // Wait for telemetry before terminating process
|
|
358
362
|
process.exit(0); // Exit with success
|
|
359
363
|
}
|
|
360
364
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../../../../../src/commands/scan.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../../../../../src/commands/scan.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,6 +24,9 @@ export declare function getSeverityColor(severity: string): (text: string) => st
|
|
|
24
24
|
export declare function getSeveritySymbol(severity: string): string;
|
|
25
25
|
/**
|
|
26
26
|
* Print scan results summary table
|
|
27
|
+
*
|
|
28
|
+
* IMPORTANT: Recalculates counts from actual filtered vulnerabilities
|
|
29
|
+
* to ensure summary reflects false-positive filtering.
|
|
27
30
|
*/
|
|
28
31
|
export declare function printSummaryTable(results: FileScanResult[]): void;
|
|
29
32
|
/**
|
|
@@ -67,6 +70,8 @@ export declare function printCommitAllowed(): void;
|
|
|
67
70
|
/**
|
|
68
71
|
* Print summary table grouped by language
|
|
69
72
|
* Shows files scanned, issues found, and critical count per language
|
|
73
|
+
*
|
|
74
|
+
* IMPORTANT: Recalculates counts from actual filtered vulnerabilities.
|
|
70
75
|
*/
|
|
71
76
|
export declare function printLanguageSummary(results: FileScanResult[]): void;
|
|
72
77
|
/**
|
|
@@ -81,6 +86,10 @@ export declare function printUnsupportedFiles(skippedFiles: string[]): void;
|
|
|
81
86
|
export declare function printTop10Critical(results: FileScanResult[]): void;
|
|
82
87
|
/**
|
|
83
88
|
* Output results as JSON
|
|
89
|
+
*
|
|
90
|
+
* IMPORTANT: Summary counts are calculated from ACTUAL filtered vulnerabilities,
|
|
91
|
+
* not from pre-calculated counts. This ensures the summary reflects
|
|
92
|
+
* false-positive filtering applied during analysis.
|
|
84
93
|
*/
|
|
85
94
|
export declare function printJSONResults(results: FileScanResult[]): void;
|
|
86
95
|
/**
|
|
@@ -90,6 +99,8 @@ export declare function printJSONResults(results: FileScanResult[]): void;
|
|
|
90
99
|
export declare function generateMarkdownReport(results: FileScanResult[], skippedFiles: string[], duration: number): string;
|
|
91
100
|
/**
|
|
92
101
|
* Print brief summary for screen (when report is generated)
|
|
102
|
+
*
|
|
103
|
+
* IMPORTANT: Recalculates counts from actual filtered vulnerabilities.
|
|
93
104
|
*/
|
|
94
105
|
export declare function printBriefSummary(results: FileScanResult[], reportPath: string, duration: number): void;
|
|
95
106
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-reporter.d.ts","sourceRoot":"","sources":["../../../../../src/reporters/cli-reporter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG/D;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAa3E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAa1D;AAED
|
|
1
|
+
{"version":3,"file":"cli-reporter.d.ts","sourceRoot":"","sources":["../../../../../src/reporters/cli-reporter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG/D;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAa3E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAa1D;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,IAAI,CAsDjE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,UAAQ,GAAG,IAAI,CAgDtF;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,OAAO,UAAQ,GAAG,IAAI,CA8BrF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAItD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAGxD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAIhD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAIlD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAIlD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,GACV,IAAI,CAwBN;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAKzC;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,IAAI,CAgEpE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,IAAI,CAkClE;AA4BD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,IAAI,CAwDlE;AAUD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,IAAI,CAoEhE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,cAAc,EAAE,EACzB,YAAY,EAAE,MAAM,EAAE,EACtB,QAAQ,EAAE,MAAM,GACf,MAAM,CAoNR;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,cAAc,EAAE,EACzB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,IAAI,CA0CN;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAMpD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB,GAAG,IAAI,CAuDP"}
|
|
@@ -78,15 +78,33 @@ function getSeveritySymbol(severity) {
|
|
|
78
78
|
}
|
|
79
79
|
/**
|
|
80
80
|
* Print scan results summary table
|
|
81
|
+
*
|
|
82
|
+
* IMPORTANT: Recalculates counts from actual filtered vulnerabilities
|
|
83
|
+
* to ensure summary reflects false-positive filtering.
|
|
81
84
|
*/
|
|
82
85
|
function printSummaryTable(results) {
|
|
83
86
|
const totalFiles = results.length;
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
87
|
+
// Recalculate from actual vulnerabilities (post-filtering)
|
|
88
|
+
let totalCritical = 0;
|
|
89
|
+
let totalHigh = 0;
|
|
90
|
+
let totalMedium = 0;
|
|
91
|
+
let totalLow = 0;
|
|
92
|
+
let filesWithIssues = 0;
|
|
93
|
+
results.forEach((r) => {
|
|
94
|
+
const vulns = r.result.security?.vulnerabilities || [];
|
|
95
|
+
const crit = vulns.filter((v) => v.severity?.toLowerCase() === 'critical').length;
|
|
96
|
+
const high = vulns.filter((v) => v.severity?.toLowerCase() === 'high').length;
|
|
97
|
+
const med = vulns.filter((v) => v.severity?.toLowerCase() === 'medium').length;
|
|
98
|
+
const low = vulns.filter((v) => v.severity?.toLowerCase() === 'low').length;
|
|
99
|
+
totalCritical += crit;
|
|
100
|
+
totalHigh += high;
|
|
101
|
+
totalMedium += med;
|
|
102
|
+
totalLow += low;
|
|
103
|
+
if (crit + high + med + low > 0) {
|
|
104
|
+
filesWithIssues++;
|
|
105
|
+
}
|
|
106
|
+
});
|
|
88
107
|
const totalVulns = totalCritical + totalHigh + totalMedium + totalLow;
|
|
89
|
-
const filesWithIssues = results.filter((r) => r.critical > 0 || r.high > 0 || r.medium > 0 || r.low > 0).length;
|
|
90
108
|
console.log('');
|
|
91
109
|
console.log(chalk_1.default.bold('Scan Summary'));
|
|
92
110
|
console.log(chalk_1.default.gray('─'.repeat(50)));
|
|
@@ -244,6 +262,8 @@ function printCommitAllowed() {
|
|
|
244
262
|
/**
|
|
245
263
|
* Print summary table grouped by language
|
|
246
264
|
* Shows files scanned, issues found, and critical count per language
|
|
265
|
+
*
|
|
266
|
+
* IMPORTANT: Recalculates counts from actual filtered vulnerabilities.
|
|
247
267
|
*/
|
|
248
268
|
function printLanguageSummary(results) {
|
|
249
269
|
// Group results by language
|
|
@@ -251,12 +271,18 @@ function printLanguageSummary(results) {
|
|
|
251
271
|
for (const result of results) {
|
|
252
272
|
const lang = result.language;
|
|
253
273
|
const existing = byLanguage.get(lang) || { files: 0, issues: 0, critical: 0, high: 0, medium: 0, low: 0 };
|
|
274
|
+
// Recalculate from actual vulnerabilities
|
|
275
|
+
const vulns = result.result.security?.vulnerabilities || [];
|
|
276
|
+
const crit = vulns.filter((v) => v.severity?.toLowerCase() === 'critical').length;
|
|
277
|
+
const high = vulns.filter((v) => v.severity?.toLowerCase() === 'high').length;
|
|
278
|
+
const med = vulns.filter((v) => v.severity?.toLowerCase() === 'medium').length;
|
|
279
|
+
const low = vulns.filter((v) => v.severity?.toLowerCase() === 'low').length;
|
|
254
280
|
existing.files++;
|
|
255
|
-
existing.critical +=
|
|
256
|
-
existing.high +=
|
|
257
|
-
existing.medium +=
|
|
258
|
-
existing.low +=
|
|
259
|
-
existing.issues +=
|
|
281
|
+
existing.critical += crit;
|
|
282
|
+
existing.high += high;
|
|
283
|
+
existing.medium += med;
|
|
284
|
+
existing.low += low;
|
|
285
|
+
existing.issues += crit + high + med + low;
|
|
260
286
|
byLanguage.set(lang, existing);
|
|
261
287
|
}
|
|
262
288
|
if (byLanguage.size === 0) {
|
|
@@ -413,29 +439,67 @@ function truncateMessage(message, maxLength) {
|
|
|
413
439
|
}
|
|
414
440
|
/**
|
|
415
441
|
* Output results as JSON
|
|
442
|
+
*
|
|
443
|
+
* IMPORTANT: Summary counts are calculated from ACTUAL filtered vulnerabilities,
|
|
444
|
+
* not from pre-calculated counts. This ensures the summary reflects
|
|
445
|
+
* false-positive filtering applied during analysis.
|
|
416
446
|
*/
|
|
417
447
|
function printJSONResults(results) {
|
|
448
|
+
// Recalculate counts from actual filtered vulnerabilities
|
|
449
|
+
// This ensures summary matches the vulnerabilities array after false-positive filtering
|
|
450
|
+
const recalculateCountsFromVulnerabilities = (r) => {
|
|
451
|
+
const vulns = r.result.security?.vulnerabilities || [];
|
|
452
|
+
const counts = {
|
|
453
|
+
critical: vulns.filter((v) => v.severity?.toLowerCase() === 'critical').length,
|
|
454
|
+
high: vulns.filter((v) => v.severity?.toLowerCase() === 'high').length,
|
|
455
|
+
medium: vulns.filter((v) => v.severity?.toLowerCase() === 'medium').length,
|
|
456
|
+
low: vulns.filter((v) => v.severity?.toLowerCase() === 'low').length,
|
|
457
|
+
};
|
|
458
|
+
// Debug first file
|
|
459
|
+
if (process.env.DEBUG_COUNTS && r.relativePath === 'scripts/reset-quota.ts') {
|
|
460
|
+
console.error(`[DEBUG] ${r.relativePath}: old_high=${r.high}, new_high=${counts.high}, total_vulns=${vulns.length}`);
|
|
461
|
+
}
|
|
462
|
+
return counts;
|
|
463
|
+
};
|
|
464
|
+
// Calculate accurate summary from filtered vulnerabilities
|
|
465
|
+
let totalCritical = 0;
|
|
466
|
+
let totalHigh = 0;
|
|
467
|
+
let totalMedium = 0;
|
|
468
|
+
let totalLow = 0;
|
|
469
|
+
let filesWithIssues = 0;
|
|
470
|
+
const filesOutput = results.map((r) => {
|
|
471
|
+
const counts = recalculateCountsFromVulnerabilities(r);
|
|
472
|
+
// Debug: Log first mismatch
|
|
473
|
+
if (counts.high !== r.high && process.env.DEBUG_COUNTS) {
|
|
474
|
+
console.error(`[DEBUG] Mismatch in ${r.relativePath}: old=${r.high}, new=${counts.high}, vulns=${r.result.security?.vulnerabilities?.length || 0}`);
|
|
475
|
+
}
|
|
476
|
+
// Accumulate totals
|
|
477
|
+
totalCritical += counts.critical;
|
|
478
|
+
totalHigh += counts.high;
|
|
479
|
+
totalMedium += counts.medium;
|
|
480
|
+
totalLow += counts.low;
|
|
481
|
+
// Count files with issues
|
|
482
|
+
if (counts.critical + counts.high + counts.medium + counts.low > 0) {
|
|
483
|
+
filesWithIssues++;
|
|
484
|
+
}
|
|
485
|
+
return {
|
|
486
|
+
path: r.relativePath,
|
|
487
|
+
language: r.language,
|
|
488
|
+
vulnerabilities: r.result.security?.vulnerabilities || [],
|
|
489
|
+
counts,
|
|
490
|
+
};
|
|
491
|
+
});
|
|
418
492
|
const output = {
|
|
419
493
|
summary: {
|
|
420
494
|
filesScanned: results.length,
|
|
421
|
-
filesWithIssues
|
|
422
|
-
totalVulnerabilities:
|
|
423
|
-
critical:
|
|
424
|
-
high:
|
|
425
|
-
medium:
|
|
426
|
-
low:
|
|
495
|
+
filesWithIssues,
|
|
496
|
+
totalVulnerabilities: totalCritical + totalHigh + totalMedium + totalLow,
|
|
497
|
+
critical: totalCritical,
|
|
498
|
+
high: totalHigh,
|
|
499
|
+
medium: totalMedium,
|
|
500
|
+
low: totalLow,
|
|
427
501
|
},
|
|
428
|
-
files:
|
|
429
|
-
path: r.relativePath,
|
|
430
|
-
language: r.language,
|
|
431
|
-
vulnerabilities: r.result.security?.vulnerabilities || [],
|
|
432
|
-
counts: {
|
|
433
|
-
critical: r.critical,
|
|
434
|
-
high: r.high,
|
|
435
|
-
medium: r.medium,
|
|
436
|
-
low: r.low,
|
|
437
|
-
},
|
|
438
|
-
})),
|
|
502
|
+
files: filesOutput,
|
|
439
503
|
};
|
|
440
504
|
console.log(JSON.stringify(output, null, 2));
|
|
441
505
|
}
|
|
@@ -448,26 +512,41 @@ function generateMarkdownReport(results, skippedFiles, duration) {
|
|
|
448
512
|
const timestamp = now.toISOString().replace(/[:.]/g, '-').slice(0, 19);
|
|
449
513
|
const filename = `codeslick-report-${timestamp}.md`;
|
|
450
514
|
const filepath = (0, path_1.join)(process.cwd(), filename);
|
|
451
|
-
// Calculate totals
|
|
515
|
+
// Calculate totals from actual vulnerabilities (post-filtering)
|
|
452
516
|
const totalFiles = results.length;
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
// Group by language
|
|
517
|
+
let totalCritical = 0;
|
|
518
|
+
let totalHigh = 0;
|
|
519
|
+
let totalMedium = 0;
|
|
520
|
+
let totalLow = 0;
|
|
521
|
+
let filesWithIssues = 0;
|
|
522
|
+
// Group by language and recalculate counts
|
|
460
523
|
const byLanguage = new Map();
|
|
461
524
|
for (const result of results) {
|
|
462
525
|
const lang = result.language;
|
|
463
526
|
const existing = byLanguage.get(lang) || { files: 0, critical: 0, high: 0, medium: 0, low: 0 };
|
|
527
|
+
// Recalculate from actual vulnerabilities
|
|
528
|
+
const vulns = result.result.security?.vulnerabilities || [];
|
|
529
|
+
const crit = vulns.filter((v) => v.severity?.toLowerCase() === 'critical').length;
|
|
530
|
+
const high = vulns.filter((v) => v.severity?.toLowerCase() === 'high').length;
|
|
531
|
+
const med = vulns.filter((v) => v.severity?.toLowerCase() === 'medium').length;
|
|
532
|
+
const low = vulns.filter((v) => v.severity?.toLowerCase() === 'low').length;
|
|
464
533
|
existing.files++;
|
|
465
|
-
existing.critical +=
|
|
466
|
-
existing.high +=
|
|
467
|
-
existing.medium +=
|
|
468
|
-
existing.low +=
|
|
534
|
+
existing.critical += crit;
|
|
535
|
+
existing.high += high;
|
|
536
|
+
existing.medium += med;
|
|
537
|
+
existing.low += low;
|
|
469
538
|
byLanguage.set(lang, existing);
|
|
539
|
+
// Accumulate totals
|
|
540
|
+
totalCritical += crit;
|
|
541
|
+
totalHigh += high;
|
|
542
|
+
totalMedium += med;
|
|
543
|
+
totalLow += low;
|
|
544
|
+
// Count files with issues
|
|
545
|
+
if (crit + high + med + low > 0) {
|
|
546
|
+
filesWithIssues++;
|
|
547
|
+
}
|
|
470
548
|
}
|
|
549
|
+
const totalVulns = totalCritical + totalHigh + totalMedium + totalLow;
|
|
471
550
|
// Collect all vulnerabilities for Top 10
|
|
472
551
|
const allVulns = [];
|
|
473
552
|
for (const result of results) {
|
|
@@ -574,8 +653,24 @@ function generateMarkdownReport(results, skippedFiles, duration) {
|
|
|
574
653
|
}
|
|
575
654
|
md += `\n*Supported: .js, .jsx, .ts, .tsx, .py, .java*\n`;
|
|
576
655
|
}
|
|
577
|
-
// Files with issues (detailed)
|
|
578
|
-
const filesWithProblems = results
|
|
656
|
+
// Files with issues (detailed) - recalculate counts from actual vulnerabilities
|
|
657
|
+
const filesWithProblems = results
|
|
658
|
+
.map((r) => {
|
|
659
|
+
const vulns = r.result.security?.vulnerabilities || [];
|
|
660
|
+
const crit = vulns.filter((v) => v.severity?.toLowerCase() === 'critical').length;
|
|
661
|
+
const high = vulns.filter((v) => v.severity?.toLowerCase() === 'high').length;
|
|
662
|
+
const med = vulns.filter((v) => v.severity?.toLowerCase() === 'medium').length;
|
|
663
|
+
const low = vulns.filter((v) => v.severity?.toLowerCase() === 'low').length;
|
|
664
|
+
return {
|
|
665
|
+
relativePath: r.relativePath,
|
|
666
|
+
critical: crit,
|
|
667
|
+
high,
|
|
668
|
+
medium: med,
|
|
669
|
+
low,
|
|
670
|
+
total: crit + high + med + low,
|
|
671
|
+
};
|
|
672
|
+
})
|
|
673
|
+
.filter((f) => f.total > 0);
|
|
579
674
|
if (filesWithProblems.length > 0) {
|
|
580
675
|
md += `
|
|
581
676
|
---
|
|
@@ -607,12 +702,22 @@ function generateMarkdownReport(results, skippedFiles, duration) {
|
|
|
607
702
|
}
|
|
608
703
|
/**
|
|
609
704
|
* Print brief summary for screen (when report is generated)
|
|
705
|
+
*
|
|
706
|
+
* IMPORTANT: Recalculates counts from actual filtered vulnerabilities.
|
|
610
707
|
*/
|
|
611
708
|
function printBriefSummary(results, reportPath, duration) {
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
709
|
+
// Recalculate from actual vulnerabilities (post-filtering)
|
|
710
|
+
let totalCritical = 0;
|
|
711
|
+
let totalHigh = 0;
|
|
712
|
+
let totalMedium = 0;
|
|
713
|
+
let totalLow = 0;
|
|
714
|
+
results.forEach((r) => {
|
|
715
|
+
const vulns = r.result.security?.vulnerabilities || [];
|
|
716
|
+
totalCritical += vulns.filter((v) => v.severity?.toLowerCase() === 'critical').length;
|
|
717
|
+
totalHigh += vulns.filter((v) => v.severity?.toLowerCase() === 'high').length;
|
|
718
|
+
totalMedium += vulns.filter((v) => v.severity?.toLowerCase() === 'medium').length;
|
|
719
|
+
totalLow += vulns.filter((v) => v.severity?.toLowerCase() === 'low').length;
|
|
720
|
+
});
|
|
616
721
|
const totalVulns = totalCritical + totalHigh + totalMedium + totalLow;
|
|
617
722
|
console.log('');
|
|
618
723
|
console.log(chalk_1.default.bold('Scan Complete') + chalk_1.default.gray(` (${(duration / 1000).toFixed(1)}s)`));
|