kekkai-cli 1.1.1__tar.gz → 2.0.0__tar.gz
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.
- kekkai_cli-2.0.0/PKG-INFO +317 -0
- kekkai_cli-2.0.0/README.md +306 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/pyproject.toml +3 -3
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/cli.py +114 -3
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/output.py +2 -3
- kekkai_cli-2.0.0/src/kekkai/triage/fix_screen.py +232 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/triage/screens.py +1 -0
- kekkai_cli-2.0.0/src/kekkai_cli.egg-info/PKG-INFO +317 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_cli.egg-info/SOURCES.txt +1 -0
- kekkai_cli-1.1.1/PKG-INFO +0 -379
- kekkai_cli-1.1.1/README.md +0 -368
- kekkai_cli-1.1.1/src/kekkai_cli.egg-info/PKG-INFO +0 -379
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/setup.cfg +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/__init__.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/compliance/__init__.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/compliance/hipaa.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/compliance/mappings.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/compliance/owasp.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/compliance/owasp_agentic.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/compliance/pci_dss.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/compliance/soc2.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/config.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/dojo.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/dojo_import.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/fix/__init__.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/fix/audit.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/fix/differ.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/fix/engine.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/fix/prompts.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/github/__init__.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/github/commenter.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/github/models.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/github/sanitizer.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/installer/__init__.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/installer/errors.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/installer/extract.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/installer/manager.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/installer/manifest.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/installer/verify.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/manifest.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/paths.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/policy.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/report/__init__.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/report/compliance_matrix.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/report/generator.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/report/html.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/report/pdf.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/report/unified.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/runner.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/scanners/__init__.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/scanners/backends/__init__.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/scanners/backends/base.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/scanners/backends/docker.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/scanners/backends/native.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/scanners/base.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/scanners/container.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/scanners/falco.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/scanners/gitleaks.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/scanners/semgrep.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/scanners/trivy.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/scanners/url_policy.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/scanners/zap.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/threatflow/__init__.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/threatflow/artifacts.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/threatflow/chunking.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/threatflow/core.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/threatflow/mermaid.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/threatflow/model_adapter.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/threatflow/prompts.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/threatflow/redaction.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/threatflow/sanitizer.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/triage/__init__.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/triage/app.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/triage/audit.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/triage/ignore.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/triage/loader.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/triage/models.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/triage/widgets.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_cli.egg-info/dependency_links.txt +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_cli.egg-info/entry_points.txt +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_cli.egg-info/requires.txt +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_cli.egg-info/top_level.txt +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_core/__init__.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_core/ci/__init__.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_core/ci/benchmarks.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_core/ci/metadata.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_core/ci/validators.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_core/docker/__init__.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_core/docker/metadata.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_core/docker/sbom.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_core/docker/security.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_core/docker/signing.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_core/redaction.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_core/slsa/__init__.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_core/slsa/verify.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_core/windows/__init__.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_core/windows/chocolatey.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_core/windows/installer.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_core/windows/scoop.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_core/windows/validators.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_cli_output.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_compliance.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_dojo_import.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_fix_engine.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_github_commenter_filter.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_github_commenter_format.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_github_commenter_limit.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_github_commenter_sanitize.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_installer_checksum.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_installer_extract.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_installer_manager.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_installer_manifest.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_installer_platform.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_kekkai_cli.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_kekkai_config.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_kekkai_dojo.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_kekkai_dojo_cli.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_kekkai_manifest.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_kekkai_paths.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_kekkai_runner.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_mermaid.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_policy.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_redaction.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_report.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_scanner_backends.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_scanner_base.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_scanner_container.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_scanner_digest_defaults.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_scanner_falco.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_scanner_gitleaks.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_scanner_native.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_scanner_semgrep.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_scanner_trivy.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_scanner_zap.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_slsa_provenance.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_threatflow_chunking.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_threatflow_model_adapter.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_threatflow_prompts.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_threatflow_redaction.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_threatflow_sanitizer.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_triage_audit.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_triage_ignore.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_triage_loader.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_triage_models.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_unified_report.py +0 -0
- {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_url_policy.py +0 -0
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: kekkai-cli
|
|
3
|
+
Version: 2.0.0
|
|
4
|
+
Summary: Terminal UI for Trivy/Semgrep/Gitleaks. Local-first security triage.
|
|
5
|
+
Requires-Python: >=3.12
|
|
6
|
+
Description-Content-Type: text/markdown
|
|
7
|
+
Requires-Dist: rich>=13.0.0
|
|
8
|
+
Requires-Dist: jsonschema>=4.20.0
|
|
9
|
+
Requires-Dist: textual>=0.50.0
|
|
10
|
+
Requires-Dist: httpx>=0.24.0
|
|
11
|
+
|
|
12
|
+
<p align="center">
|
|
13
|
+
<img src="https://raw.githubusercontent.com/kademoslabs/assets/main/logos/kekkai-slim.png" alt="Kekkai CLI Logo" width="250"/>
|
|
14
|
+
</p>
|
|
15
|
+
|
|
16
|
+
<p align="center"><strong>Stop parsing JSON. Security triage in your terminal.</strong></p>
|
|
17
|
+
|
|
18
|
+
<p align="center">
|
|
19
|
+
<img src="https://img.shields.io/github/actions/workflow/status/kademoslabs/kekkai/docker-publish.yml?logo=github"/>
|
|
20
|
+
<img src="https://img.shields.io/circleci/build/github/kademoslabs/kekkai?logo=circleci"/>
|
|
21
|
+
<img src="https://img.shields.io/pypi/v/kekkai-cli?pypiBaseUrl=https%3A%2F%2Fpypi.org&logo=pypi"/>
|
|
22
|
+
</p>
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
# Kekkai
|
|
27
|
+
|
|
28
|
+
**Interactive security triage in the terminal.**
|
|
29
|
+
|
|
30
|
+
Kekkai is a small open-source CLI that wraps existing security scanners (Trivy, Semgrep, Gitleaks) and focuses on the part that tends to be slow and frustrating: reviewing and triaging results.
|
|
31
|
+
|
|
32
|
+
Running scanners is easy. Interpreting noisy output, dealing with false positives, and making CI usable is not. Kekkai exists to make that part tolerable..
|
|
33
|
+
|
|
34
|
+

|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## What it does
|
|
39
|
+
|
|
40
|
+
- Runs Trivy (dependencies), Semgrep (code), and Gitleaks (secrets)
|
|
41
|
+
- Normalizes their outputs into a single report format
|
|
42
|
+
- Provides an interactive terminal UI for reviewing findings
|
|
43
|
+
- Lets you mark findings as false positives and persist decisions locally
|
|
44
|
+
- Supports CI mode with severity-based failure thresholds
|
|
45
|
+
|
|
46
|
+
Kekkai does not replace scanners or introduce proprietary detection logic. It sits on top of existing tools and focuses on workflow and UX.
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Quick Start
|
|
51
|
+
|
|
52
|
+
> Requires Docker and Python 3.12
|
|
53
|
+
|
|
54
|
+
### 1. Install
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
pipx install kekkai-cli
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### 2. Scan
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
kekkai scan
|
|
64
|
+
# Runs Trivy (CVEs), Semgrep (code), Gitleaks (secrets)
|
|
65
|
+
# Outputs unified kekkai-report.json
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### 3. Triage
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
kekkai triage
|
|
72
|
+
# Interactive TUI to review findings with keyboard navigation
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
No signup, no cloud service required.
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## Why Kekkai?
|
|
80
|
+
|
|
81
|
+
| Problem | Kekkai Solution |
|
|
82
|
+
|---------|-----------------|
|
|
83
|
+
| **Juggling 3+ tools** | One CLI for Trivy, Semgrep, Gitleaks |
|
|
84
|
+
| **Reading JSON logs** | Interactive terminal UI |
|
|
85
|
+
| **Installing scanners** | Auto-pulls Docker containers |
|
|
86
|
+
| **Parsing different formats** | Unified `kekkai-report.json` |
|
|
87
|
+
| **False positives** | Mark and ignore with `.kekkaiignore` |
|
|
88
|
+
| **CI/CD integration** | `kekkai scan --ci --fail-on high` |
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## Features
|
|
93
|
+
|
|
94
|
+
### Interactive Triage TUI
|
|
95
|
+
|
|
96
|
+
Stop reading JSON. Use keyboard navigation to review findings, mark false positives, and generate ignore files.
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
kekkai triage
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
**Controls:**
|
|
103
|
+
- `j/k` or `↑/↓`: Navigate findings
|
|
104
|
+
- `f`: Mark as false positive
|
|
105
|
+
- `c`: Confirm finding
|
|
106
|
+
- `d`: Defer/ignore
|
|
107
|
+
- `Ctrl+S`: Save decisions
|
|
108
|
+
- `q`: Quit
|
|
109
|
+
|
|
110
|
+
<!-- Screenshot placeholder:  -->
|
|
111
|
+
|
|
112
|
+
[Full Triage Documentation →](docs/triage/README.md)
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
### CI/CD Policy Gate
|
|
117
|
+
|
|
118
|
+
Break builds on severity thresholds.
|
|
119
|
+
|
|
120
|
+
Kekkai can be used as a CI gate based on severity thresholds.
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
# Fail on any critical or high findings
|
|
124
|
+
kekkai scan --ci --fail-on high
|
|
125
|
+
|
|
126
|
+
# Fail only on critical
|
|
127
|
+
kekkai scan --ci --fail-on critical
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
**Exit Codes:**
|
|
131
|
+
| Code | Meaning |
|
|
132
|
+
|------|---------|
|
|
133
|
+
| 0 | No findings above threshold |
|
|
134
|
+
| 1 | Findings exceed threshold |
|
|
135
|
+
| 2 | Scanner error |
|
|
136
|
+
|
|
137
|
+
**GitHub Actions Example:**
|
|
138
|
+
|
|
139
|
+
```yaml
|
|
140
|
+
- name: Security Scan
|
|
141
|
+
run: |
|
|
142
|
+
pipx install kekkai-cli
|
|
143
|
+
kekkai scan --ci --fail-on high
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
[Full CI Documentation →](docs/ci/ci-mode.md)
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
### GitHub PR Comments
|
|
151
|
+
|
|
152
|
+
Get security feedback directly in pull requests.
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
export GITHUB_TOKEN="ghp_..."
|
|
156
|
+
kekkai scan --pr-comment
|
|
157
|
+
```
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
### Unified Scanning
|
|
161
|
+
|
|
162
|
+
Run industry-standard scanners without installing them individually. Each scanner runs in an isolated Docker container.
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
kekkai scan # Scan current directory
|
|
166
|
+
kekkai scan --repo /path/to/project # Scan specific path
|
|
167
|
+
kekkai scan --output results.json # Custom output path
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
**Scanners Included:**
|
|
171
|
+
| Scanner | Finds | Image |
|
|
172
|
+
|---------|-------|-------|
|
|
173
|
+
| Trivy | CVEs in dependencies | `aquasec/trivy:latest` |
|
|
174
|
+
| Semgrep | Code vulnerabilities | `semgrep/semgrep:latest` |
|
|
175
|
+
| Gitleaks | Hardcoded secrets | `zricethezav/gitleaks:latest` |
|
|
176
|
+
|
|
177
|
+
**Container Security:**
|
|
178
|
+
- Read-only filesystem
|
|
179
|
+
- No network access
|
|
180
|
+
- Memory limited (2GB)
|
|
181
|
+
- No privilege escalation
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
#### Design choices
|
|
186
|
+
|
|
187
|
+
- Local-first: no SaaS required, runs entirely on your machine or CI
|
|
188
|
+
- No network access for scanner containers
|
|
189
|
+
- Read-only filesystems, memory-limited containers
|
|
190
|
+
- Uses existing tools instead of reimplementing scanners
|
|
191
|
+
- Terminal-first UX instead of dashboards
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## Optional features
|
|
196
|
+
|
|
197
|
+
These are opt-in and not required for basic use:
|
|
198
|
+
|
|
199
|
+
### Local-First AI Threat Modeling
|
|
200
|
+
|
|
201
|
+
Generate STRIDE threat models with AI that runs on **your machine**. No API keys. No cloud.
|
|
202
|
+
|
|
203
|
+
```bash
|
|
204
|
+
# Ollama (recommended - easy setup, privacy-preserving)
|
|
205
|
+
ollama pull mistral
|
|
206
|
+
kekkai threatflow --repo . --model-mode ollama --model-name mistral
|
|
207
|
+
|
|
208
|
+
# Output: THREATS.md with attack surface analysis and Mermaid.js diagrams
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
**Supports:**
|
|
212
|
+
- Ollama (recommended)
|
|
213
|
+
- Local GGUF models (llama.cpp)
|
|
214
|
+
- OpenAI/Anthropic (if you trust them with your code)
|
|
215
|
+
|
|
216
|
+
[Full Local-First AI Threat Modeling Documentation →](docs/threatflow/README.md)
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
### DefectDojo Integration
|
|
221
|
+
|
|
222
|
+
Spin up a vulnerability management dashboard locally if you need it.
|
|
223
|
+
|
|
224
|
+
```bash
|
|
225
|
+
kekkai dojo up --wait # Start DefectDojo
|
|
226
|
+
kekkai upload # Import scan results
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
**What You Get:**
|
|
230
|
+
- DefectDojo web UI at `http://localhost:8080`
|
|
231
|
+
- Automatic credential generation
|
|
232
|
+
- Pre-configured for Kekkai imports
|
|
233
|
+
|
|
234
|
+
[DefectDojo Quick Start →](docs/dojo/dojo-quickstart.md)
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
### AI-Powered Fix Engine
|
|
239
|
+
|
|
240
|
+
Generate code patches for findings (experimental).
|
|
241
|
+
|
|
242
|
+
```bash
|
|
243
|
+
kekkai fix --input scan-results.json --apply
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
### Compliance Reporting
|
|
249
|
+
|
|
250
|
+
Map findings to PCI-DSS, OWASP, HIPAA, SOC 2.
|
|
251
|
+
|
|
252
|
+
```bash
|
|
253
|
+
kekkai report --input scan-results.json --format pdf --frameworks PCI-DSS,OWASP
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
## What this is not
|
|
259
|
+
|
|
260
|
+
- Not a replacement for commercial AppSec platforms
|
|
261
|
+
- Not a new scanner or detection engine
|
|
262
|
+
- Not optimized for large enterprises (yet)
|
|
263
|
+
- Not a hosted service
|
|
264
|
+
|
|
265
|
+
Right now, Kekkai is aimed at individual developers and small teams who already run scanners but want better triage and less noise.
|
|
266
|
+
|
|
267
|
+
---
|
|
268
|
+
|
|
269
|
+
## Security
|
|
270
|
+
|
|
271
|
+
Kekkai is designed with security as a core principle:
|
|
272
|
+
|
|
273
|
+
- **Container Isolation**: Scanners run in hardened Docker containers
|
|
274
|
+
- **No Network Access**: Containers cannot reach external networks
|
|
275
|
+
- **Local-First AI**: run entirely on your machine
|
|
276
|
+
- **SLSA Level 3**: Release artifacts include provenance attestations
|
|
277
|
+
- **Signed Images**: Docker images are Cosign-signed
|
|
278
|
+
|
|
279
|
+
For vulnerability reports, see [SECURITY.md](SECURITY.md).
|
|
280
|
+
|
|
281
|
+
---
|
|
282
|
+
|
|
283
|
+
## Documentation
|
|
284
|
+
|
|
285
|
+
| Guide | Description |
|
|
286
|
+
|-------|-------------|
|
|
287
|
+
| [Installation](docs/README.md#installation-methods) | All installation methods |
|
|
288
|
+
| [ThreatFlow](docs/threatflow/README.md) | AI threat modeling setup |
|
|
289
|
+
| [Triage TUI](docs/triage/README.md) | Interactive finding review |
|
|
290
|
+
| [CI Mode](docs/ci/ci-mode.md) | Pipeline integration |
|
|
291
|
+
| [DefectDojo](docs/dojo/dojo-quickstart.md) | Optional vulnerability management |
|
|
292
|
+
| [Security](docs/security/slsa-provenance.md) | SLSA provenance verification |
|
|
293
|
+
|
|
294
|
+
---
|
|
295
|
+
|
|
296
|
+
## Roadmap (short-term)
|
|
297
|
+
|
|
298
|
+
1. Persistent triage state across runs (baselines)
|
|
299
|
+
2. “New findings only” diffs
|
|
300
|
+
3. Better PR-level workflows
|
|
301
|
+
4. Cleaner reporting for small teams
|
|
302
|
+
|
|
303
|
+
---
|
|
304
|
+
|
|
305
|
+
## Contributing
|
|
306
|
+
|
|
307
|
+
We welcome contributions! See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
|
|
308
|
+
|
|
309
|
+
---
|
|
310
|
+
|
|
311
|
+
## License
|
|
312
|
+
|
|
313
|
+
Apache-2.0 — See [LICENSE](LICENSE) for details.
|
|
314
|
+
|
|
315
|
+
---
|
|
316
|
+
|
|
317
|
+
<p align="center"><i>Built by <a href="https://kademos.org">Kademos Labs</a></i></p>
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="https://raw.githubusercontent.com/kademoslabs/assets/main/logos/kekkai-slim.png" alt="Kekkai CLI Logo" width="250"/>
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<p align="center"><strong>Stop parsing JSON. Security triage in your terminal.</strong></p>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
<img src="https://img.shields.io/github/actions/workflow/status/kademoslabs/kekkai/docker-publish.yml?logo=github"/>
|
|
9
|
+
<img src="https://img.shields.io/circleci/build/github/kademoslabs/kekkai?logo=circleci"/>
|
|
10
|
+
<img src="https://img.shields.io/pypi/v/kekkai-cli?pypiBaseUrl=https%3A%2F%2Fpypi.org&logo=pypi"/>
|
|
11
|
+
</p>
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Kekkai
|
|
16
|
+
|
|
17
|
+
**Interactive security triage in the terminal.**
|
|
18
|
+
|
|
19
|
+
Kekkai is a small open-source CLI that wraps existing security scanners (Trivy, Semgrep, Gitleaks) and focuses on the part that tends to be slow and frustrating: reviewing and triaging results.
|
|
20
|
+
|
|
21
|
+
Running scanners is easy. Interpreting noisy output, dealing with false positives, and making CI usable is not. Kekkai exists to make that part tolerable..
|
|
22
|
+
|
|
23
|
+

|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## What it does
|
|
28
|
+
|
|
29
|
+
- Runs Trivy (dependencies), Semgrep (code), and Gitleaks (secrets)
|
|
30
|
+
- Normalizes their outputs into a single report format
|
|
31
|
+
- Provides an interactive terminal UI for reviewing findings
|
|
32
|
+
- Lets you mark findings as false positives and persist decisions locally
|
|
33
|
+
- Supports CI mode with severity-based failure thresholds
|
|
34
|
+
|
|
35
|
+
Kekkai does not replace scanners or introduce proprietary detection logic. It sits on top of existing tools and focuses on workflow and UX.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Quick Start
|
|
40
|
+
|
|
41
|
+
> Requires Docker and Python 3.12
|
|
42
|
+
|
|
43
|
+
### 1. Install
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
pipx install kekkai-cli
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### 2. Scan
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
kekkai scan
|
|
53
|
+
# Runs Trivy (CVEs), Semgrep (code), Gitleaks (secrets)
|
|
54
|
+
# Outputs unified kekkai-report.json
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### 3. Triage
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
kekkai triage
|
|
61
|
+
# Interactive TUI to review findings with keyboard navigation
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
No signup, no cloud service required.
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Why Kekkai?
|
|
69
|
+
|
|
70
|
+
| Problem | Kekkai Solution |
|
|
71
|
+
|---------|-----------------|
|
|
72
|
+
| **Juggling 3+ tools** | One CLI for Trivy, Semgrep, Gitleaks |
|
|
73
|
+
| **Reading JSON logs** | Interactive terminal UI |
|
|
74
|
+
| **Installing scanners** | Auto-pulls Docker containers |
|
|
75
|
+
| **Parsing different formats** | Unified `kekkai-report.json` |
|
|
76
|
+
| **False positives** | Mark and ignore with `.kekkaiignore` |
|
|
77
|
+
| **CI/CD integration** | `kekkai scan --ci --fail-on high` |
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## Features
|
|
82
|
+
|
|
83
|
+
### Interactive Triage TUI
|
|
84
|
+
|
|
85
|
+
Stop reading JSON. Use keyboard navigation to review findings, mark false positives, and generate ignore files.
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
kekkai triage
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
**Controls:**
|
|
92
|
+
- `j/k` or `↑/↓`: Navigate findings
|
|
93
|
+
- `f`: Mark as false positive
|
|
94
|
+
- `c`: Confirm finding
|
|
95
|
+
- `d`: Defer/ignore
|
|
96
|
+
- `Ctrl+S`: Save decisions
|
|
97
|
+
- `q`: Quit
|
|
98
|
+
|
|
99
|
+
<!-- Screenshot placeholder:  -->
|
|
100
|
+
|
|
101
|
+
[Full Triage Documentation →](docs/triage/README.md)
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
### CI/CD Policy Gate
|
|
106
|
+
|
|
107
|
+
Break builds on severity thresholds.
|
|
108
|
+
|
|
109
|
+
Kekkai can be used as a CI gate based on severity thresholds.
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
# Fail on any critical or high findings
|
|
113
|
+
kekkai scan --ci --fail-on high
|
|
114
|
+
|
|
115
|
+
# Fail only on critical
|
|
116
|
+
kekkai scan --ci --fail-on critical
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
**Exit Codes:**
|
|
120
|
+
| Code | Meaning |
|
|
121
|
+
|------|---------|
|
|
122
|
+
| 0 | No findings above threshold |
|
|
123
|
+
| 1 | Findings exceed threshold |
|
|
124
|
+
| 2 | Scanner error |
|
|
125
|
+
|
|
126
|
+
**GitHub Actions Example:**
|
|
127
|
+
|
|
128
|
+
```yaml
|
|
129
|
+
- name: Security Scan
|
|
130
|
+
run: |
|
|
131
|
+
pipx install kekkai-cli
|
|
132
|
+
kekkai scan --ci --fail-on high
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
[Full CI Documentation →](docs/ci/ci-mode.md)
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
### GitHub PR Comments
|
|
140
|
+
|
|
141
|
+
Get security feedback directly in pull requests.
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
export GITHUB_TOKEN="ghp_..."
|
|
145
|
+
kekkai scan --pr-comment
|
|
146
|
+
```
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
### Unified Scanning
|
|
150
|
+
|
|
151
|
+
Run industry-standard scanners without installing them individually. Each scanner runs in an isolated Docker container.
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
kekkai scan # Scan current directory
|
|
155
|
+
kekkai scan --repo /path/to/project # Scan specific path
|
|
156
|
+
kekkai scan --output results.json # Custom output path
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
**Scanners Included:**
|
|
160
|
+
| Scanner | Finds | Image |
|
|
161
|
+
|---------|-------|-------|
|
|
162
|
+
| Trivy | CVEs in dependencies | `aquasec/trivy:latest` |
|
|
163
|
+
| Semgrep | Code vulnerabilities | `semgrep/semgrep:latest` |
|
|
164
|
+
| Gitleaks | Hardcoded secrets | `zricethezav/gitleaks:latest` |
|
|
165
|
+
|
|
166
|
+
**Container Security:**
|
|
167
|
+
- Read-only filesystem
|
|
168
|
+
- No network access
|
|
169
|
+
- Memory limited (2GB)
|
|
170
|
+
- No privilege escalation
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
#### Design choices
|
|
175
|
+
|
|
176
|
+
- Local-first: no SaaS required, runs entirely on your machine or CI
|
|
177
|
+
- No network access for scanner containers
|
|
178
|
+
- Read-only filesystems, memory-limited containers
|
|
179
|
+
- Uses existing tools instead of reimplementing scanners
|
|
180
|
+
- Terminal-first UX instead of dashboards
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
## Optional features
|
|
185
|
+
|
|
186
|
+
These are opt-in and not required for basic use:
|
|
187
|
+
|
|
188
|
+
### Local-First AI Threat Modeling
|
|
189
|
+
|
|
190
|
+
Generate STRIDE threat models with AI that runs on **your machine**. No API keys. No cloud.
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
# Ollama (recommended - easy setup, privacy-preserving)
|
|
194
|
+
ollama pull mistral
|
|
195
|
+
kekkai threatflow --repo . --model-mode ollama --model-name mistral
|
|
196
|
+
|
|
197
|
+
# Output: THREATS.md with attack surface analysis and Mermaid.js diagrams
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
**Supports:**
|
|
201
|
+
- Ollama (recommended)
|
|
202
|
+
- Local GGUF models (llama.cpp)
|
|
203
|
+
- OpenAI/Anthropic (if you trust them with your code)
|
|
204
|
+
|
|
205
|
+
[Full Local-First AI Threat Modeling Documentation →](docs/threatflow/README.md)
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
### DefectDojo Integration
|
|
210
|
+
|
|
211
|
+
Spin up a vulnerability management dashboard locally if you need it.
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
kekkai dojo up --wait # Start DefectDojo
|
|
215
|
+
kekkai upload # Import scan results
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
**What You Get:**
|
|
219
|
+
- DefectDojo web UI at `http://localhost:8080`
|
|
220
|
+
- Automatic credential generation
|
|
221
|
+
- Pre-configured for Kekkai imports
|
|
222
|
+
|
|
223
|
+
[DefectDojo Quick Start →](docs/dojo/dojo-quickstart.md)
|
|
224
|
+
|
|
225
|
+
---
|
|
226
|
+
|
|
227
|
+
### AI-Powered Fix Engine
|
|
228
|
+
|
|
229
|
+
Generate code patches for findings (experimental).
|
|
230
|
+
|
|
231
|
+
```bash
|
|
232
|
+
kekkai fix --input scan-results.json --apply
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
---
|
|
236
|
+
|
|
237
|
+
### Compliance Reporting
|
|
238
|
+
|
|
239
|
+
Map findings to PCI-DSS, OWASP, HIPAA, SOC 2.
|
|
240
|
+
|
|
241
|
+
```bash
|
|
242
|
+
kekkai report --input scan-results.json --format pdf --frameworks PCI-DSS,OWASP
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
## What this is not
|
|
248
|
+
|
|
249
|
+
- Not a replacement for commercial AppSec platforms
|
|
250
|
+
- Not a new scanner or detection engine
|
|
251
|
+
- Not optimized for large enterprises (yet)
|
|
252
|
+
- Not a hosted service
|
|
253
|
+
|
|
254
|
+
Right now, Kekkai is aimed at individual developers and small teams who already run scanners but want better triage and less noise.
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
## Security
|
|
259
|
+
|
|
260
|
+
Kekkai is designed with security as a core principle:
|
|
261
|
+
|
|
262
|
+
- **Container Isolation**: Scanners run in hardened Docker containers
|
|
263
|
+
- **No Network Access**: Containers cannot reach external networks
|
|
264
|
+
- **Local-First AI**: run entirely on your machine
|
|
265
|
+
- **SLSA Level 3**: Release artifacts include provenance attestations
|
|
266
|
+
- **Signed Images**: Docker images are Cosign-signed
|
|
267
|
+
|
|
268
|
+
For vulnerability reports, see [SECURITY.md](SECURITY.md).
|
|
269
|
+
|
|
270
|
+
---
|
|
271
|
+
|
|
272
|
+
## Documentation
|
|
273
|
+
|
|
274
|
+
| Guide | Description |
|
|
275
|
+
|-------|-------------|
|
|
276
|
+
| [Installation](docs/README.md#installation-methods) | All installation methods |
|
|
277
|
+
| [ThreatFlow](docs/threatflow/README.md) | AI threat modeling setup |
|
|
278
|
+
| [Triage TUI](docs/triage/README.md) | Interactive finding review |
|
|
279
|
+
| [CI Mode](docs/ci/ci-mode.md) | Pipeline integration |
|
|
280
|
+
| [DefectDojo](docs/dojo/dojo-quickstart.md) | Optional vulnerability management |
|
|
281
|
+
| [Security](docs/security/slsa-provenance.md) | SLSA provenance verification |
|
|
282
|
+
|
|
283
|
+
---
|
|
284
|
+
|
|
285
|
+
## Roadmap (short-term)
|
|
286
|
+
|
|
287
|
+
1. Persistent triage state across runs (baselines)
|
|
288
|
+
2. “New findings only” diffs
|
|
289
|
+
3. Better PR-level workflows
|
|
290
|
+
4. Cleaner reporting for small teams
|
|
291
|
+
|
|
292
|
+
---
|
|
293
|
+
|
|
294
|
+
## Contributing
|
|
295
|
+
|
|
296
|
+
We welcome contributions! See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
|
|
297
|
+
|
|
298
|
+
---
|
|
299
|
+
|
|
300
|
+
## License
|
|
301
|
+
|
|
302
|
+
Apache-2.0 — See [LICENSE](LICENSE) for details.
|
|
303
|
+
|
|
304
|
+
---
|
|
305
|
+
|
|
306
|
+
<p align="center"><i>Built by <a href="https://kademos.org">Kademos Labs</a></i></p>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "kekkai-cli"
|
|
3
|
-
version = "
|
|
4
|
-
description = "
|
|
3
|
+
version = "2.0.0"
|
|
4
|
+
description = "Terminal UI for Trivy/Semgrep/Gitleaks. Local-first security triage."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.12"
|
|
7
7
|
dependencies = [
|
|
@@ -55,7 +55,7 @@ source = ["src"]
|
|
|
55
55
|
[tool.coverage.report]
|
|
56
56
|
show_missing = true
|
|
57
57
|
skip_covered = false
|
|
58
|
-
fail_under =
|
|
58
|
+
fail_under = 65
|
|
59
59
|
exclude_lines = [
|
|
60
60
|
"pragma: no cover",
|
|
61
61
|
"if TYPE_CHECKING:",
|