Initial upload of ai-code-audit-cli project
This commit is contained in:
347
README.md
347
README.md
@@ -1,3 +1,346 @@
|
|||||||
# ai-code-audit-cli
|
# AI Code Audit CLI
|
||||||
|
|
||||||
A CLI tool that validates AI-generated code for common issues, anti-patterns, and security vulnerabilities
|
A CLI tool that validates AI-generated code for common issues, anti-patterns, and security vulnerabilities. It analyzes code produced by AI assistants (like GitHub Copilot, Claude Code, etc.) and generates quality reports with improvement suggestions and confidence scores.
|
||||||
|
|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- **Security Vulnerability Detection**: Detect hardcoded secrets, SQL injection risks, command injection, and other security issues
|
||||||
|
- **Code Smell Detection**: Identify code smells like unused imports, mutable defaults, complex functions, and poor error handling
|
||||||
|
- **Multi-language Support**: Analyze Python, JavaScript, and TypeScript code
|
||||||
|
- **Confidence Scoring**: Get a 0-100 score reflecting code quality and security posture
|
||||||
|
- **Multiple Output Formats**: Terminal output with Rich formatting, JSON, and Markdown export options
|
||||||
|
- **Severity-based Filtering**: Filter issues by severity level (critical, high, medium, low, info)
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
### From Source
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://7000pct.gitea.bloupla.net/7000pctAUTO/ai-code-audit-cli.git
|
||||||
|
cd ai-code-audit-cli
|
||||||
|
pip install -e .
|
||||||
|
```
|
||||||
|
|
||||||
|
### Using pip
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pip install ai-code-audit-cli
|
||||||
|
```
|
||||||
|
|
||||||
|
## Quick Start
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Audit a single file
|
||||||
|
audit scan path/to/file.py
|
||||||
|
|
||||||
|
# Audit a directory recursively
|
||||||
|
audit scan path/to/project/
|
||||||
|
|
||||||
|
# Audit with JSON output
|
||||||
|
audit scan path/to/code/ --format json
|
||||||
|
|
||||||
|
# Audit with verbose output
|
||||||
|
audit scan path/to/code/ --verbose
|
||||||
|
|
||||||
|
# Filter by language
|
||||||
|
audit scan path/to/code/ --language python
|
||||||
|
|
||||||
|
# Filter by severity
|
||||||
|
audit scan path/to/code/ --severity high
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
### Basic Scanning
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Scan a Python file
|
||||||
|
audit scan my_script.py
|
||||||
|
|
||||||
|
# Scan a JavaScript file
|
||||||
|
audit scan index.js
|
||||||
|
|
||||||
|
# Scan a TypeScript file
|
||||||
|
audit scan app.ts
|
||||||
|
|
||||||
|
# Scan a directory
|
||||||
|
audit scan src/
|
||||||
|
```
|
||||||
|
|
||||||
|
### Output Options
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Rich terminal output (default)
|
||||||
|
audit scan path/to/code/
|
||||||
|
|
||||||
|
# JSON output for CI/CD
|
||||||
|
audit scan path/to/code/ --format json
|
||||||
|
|
||||||
|
# Markdown report
|
||||||
|
audit scan path/to/code/ --format markdown
|
||||||
|
|
||||||
|
# Quiet mode (minimal output)
|
||||||
|
audit scan path/to/code/ --quiet
|
||||||
|
```
|
||||||
|
|
||||||
|
### Filtering Options
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Only scan Python files
|
||||||
|
audit scan path/to/code/ --language python
|
||||||
|
|
||||||
|
# Only show critical and high severity issues
|
||||||
|
audit scan path/to/code/ --severity critical high
|
||||||
|
|
||||||
|
# Skip color output
|
||||||
|
audit scan path/to/code/ --no-color
|
||||||
|
|
||||||
|
# Verbose output with more details
|
||||||
|
audit scan path/to/code/ --verbose
|
||||||
|
```
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
### Audit Configuration File
|
||||||
|
|
||||||
|
Create an `audit.toml` file in your project root:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[severity]
|
||||||
|
critical = true
|
||||||
|
high = true
|
||||||
|
medium = true
|
||||||
|
low = true
|
||||||
|
info = false
|
||||||
|
|
||||||
|
[languages]
|
||||||
|
python = true
|
||||||
|
javascript = true
|
||||||
|
typescript = true
|
||||||
|
|
||||||
|
[scanners]
|
||||||
|
bandit = true
|
||||||
|
ruff = true
|
||||||
|
tree_sitter = true
|
||||||
|
|
||||||
|
[confidence]
|
||||||
|
min_score = 70
|
||||||
|
```
|
||||||
|
|
||||||
|
### PyProject.toml Integration
|
||||||
|
|
||||||
|
The tool automatically reads Ruff configuration from your `pyproject.toml`:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[tool.ruff]
|
||||||
|
line-length = 88
|
||||||
|
select = ["E", "F", "W", "C90", "I", "N", "UP", "B", "SIM"]
|
||||||
|
ignore = ["E501"]
|
||||||
|
|
||||||
|
[tool.ruff.per-file-ignores]
|
||||||
|
"__init__.py" = ["F401"]
|
||||||
|
```
|
||||||
|
|
||||||
|
## Output Formats
|
||||||
|
|
||||||
|
### Terminal Output
|
||||||
|
|
||||||
|
The default terminal output uses Rich formatting to display:
|
||||||
|
|
||||||
|
```
|
||||||
|
AI Code Audit Report
|
||||||
|
|
||||||
|
Summary:
|
||||||
|
┌─────────────────────────────────────────────┐
|
||||||
|
│ Files Scanned │ 15 │
|
||||||
|
│ Issues Found │ 23 │
|
||||||
|
│ Confidence Score │ 78 │
|
||||||
|
└─────────────────────────────────────────────┘
|
||||||
|
|
||||||
|
Issues by Severity:
|
||||||
|
├─ Critical: 2
|
||||||
|
├─ High: 5
|
||||||
|
├─ Medium: 8
|
||||||
|
├─ Low: 6
|
||||||
|
└─ Info: 2
|
||||||
|
```
|
||||||
|
|
||||||
|
### JSON Output
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"summary": {
|
||||||
|
"files_scanned": 15,
|
||||||
|
"total_issues": 23,
|
||||||
|
"confidence_score": 78
|
||||||
|
},
|
||||||
|
"issues": [
|
||||||
|
{
|
||||||
|
"id": "B001",
|
||||||
|
"severity": "high",
|
||||||
|
"category": "security",
|
||||||
|
"message": "Possible hardcoded password detected",
|
||||||
|
"file": "src/auth.py",
|
||||||
|
"line": 42
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Markdown Output
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
# AI Code Audit Report
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
|
||||||
|
| Metric | Value |
|
||||||
|
|--------|-------|
|
||||||
|
| Files Scanned | 15 |
|
||||||
|
| Issues Found | 23 |
|
||||||
|
| Confidence Score | 78 |
|
||||||
|
|
||||||
|
## Issues
|
||||||
|
|
||||||
|
### Critical
|
||||||
|
|
||||||
|
| File | Line | Issue |
|
||||||
|
|------|------|-------|
|
||||||
|
| src/auth.py | 42 | Possible hardcoded password |
|
||||||
|
```
|
||||||
|
|
||||||
|
## Confidence Score
|
||||||
|
|
||||||
|
The confidence score (0-100) reflects the overall quality and security posture of the analyzed code:
|
||||||
|
|
||||||
|
- **90-100**: Excellent - Code is well-structured and secure
|
||||||
|
- **70-89**: Good - Minor issues found, generally safe to use
|
||||||
|
- **50-69**: Moderate - Several issues, review recommended
|
||||||
|
- **30-49**: Poor - Significant issues, refactoring advised
|
||||||
|
- **0-29**: Critical - Major problems, do not deploy
|
||||||
|
|
||||||
|
### Score Calculation
|
||||||
|
|
||||||
|
The score is calculated based on:
|
||||||
|
|
||||||
|
1. **Security Issues (40% weight)**: Critical issues have highest impact
|
||||||
|
2. **Code Smells (30% weight)**: Anti-patterns and poor practices
|
||||||
|
3. **Complexity (20% weight)**: Function complexity and file size
|
||||||
|
4. **Error Handling (10% weight)**: Missing exception handling
|
||||||
|
|
||||||
|
## Supported Languages
|
||||||
|
|
||||||
|
| Language | Security Scanning | Linting | Pattern Detection |
|
||||||
|
|----------|------------------|---------|-------------------|
|
||||||
|
| Python | ✅ Bandit | ✅ Ruff | ✅ Tree-sitter |
|
||||||
|
| JavaScript | ⚠️ Basic | ✅ Ruff | ✅ Tree-sitter |
|
||||||
|
| TypeScript | ⚠️ Basic | ✅ Ruff | ✅ Tree-sitter |
|
||||||
|
|
||||||
|
## Scanner Details
|
||||||
|
|
||||||
|
### Bandit Scanner
|
||||||
|
|
||||||
|
Detects common security issues in Python code:
|
||||||
|
|
||||||
|
- Hardcoded passwords and secrets
|
||||||
|
- SQL injection vulnerabilities
|
||||||
|
- Command injection risks
|
||||||
|
- Insecure cryptographic usage
|
||||||
|
- Path traversal issues
|
||||||
|
|
||||||
|
### Ruff Scanner
|
||||||
|
|
||||||
|
Fast linting for code quality:
|
||||||
|
|
||||||
|
- PEP 8 compliance
|
||||||
|
- Import sorting
|
||||||
|
- Code complexity
|
||||||
|
- Anti-patterns
|
||||||
|
- Unused code
|
||||||
|
|
||||||
|
### Tree-sitter Scanner
|
||||||
|
|
||||||
|
Multi-language pattern detection:
|
||||||
|
|
||||||
|
- API key and credential patterns
|
||||||
|
- SQL injection patterns
|
||||||
|
- Dangerous function usage
|
||||||
|
- Deprecated API calls
|
||||||
|
|
||||||
|
## API Usage
|
||||||
|
|
||||||
|
### Python API
|
||||||
|
|
||||||
|
```python
|
||||||
|
from src.core.scanner import Scanner
|
||||||
|
from src.reporting.confidence import ConfidenceScorer
|
||||||
|
|
||||||
|
# Initialize scanner
|
||||||
|
scanner = Scanner()
|
||||||
|
|
||||||
|
# Scan a directory
|
||||||
|
results = scanner.scan_directory("path/to/code")
|
||||||
|
|
||||||
|
# Calculate confidence score
|
||||||
|
scorer = ConfidenceScorer()
|
||||||
|
score = scorer.calculate(results)
|
||||||
|
|
||||||
|
# Print results
|
||||||
|
scanner.print_report(results)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Custom Configuration
|
||||||
|
|
||||||
|
```python
|
||||||
|
from src.core.config import AuditConfig
|
||||||
|
|
||||||
|
config = AuditConfig(
|
||||||
|
severity_filter={"critical", "high", "medium"},
|
||||||
|
language_filter={"python"},
|
||||||
|
scanners={"bandit", "ruff"}
|
||||||
|
)
|
||||||
|
|
||||||
|
scanner = Scanner(config=config)
|
||||||
|
results = scanner.scan("path/to/code")
|
||||||
|
```
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
1. Fork the repository
|
||||||
|
2. Create a feature branch (`git checkout -b feature/amazing-feature`)
|
||||||
|
3. Commit your changes (`git commit -m 'Add amazing feature'`)
|
||||||
|
4. Push to the branch (`git push origin feature/amazing-feature`)
|
||||||
|
5. Open a Pull Request
|
||||||
|
|
||||||
|
### Development Setup
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://7000pct.gitea.bloupla.net/7000pctAUTO/ai-code-audit-cli.git
|
||||||
|
cd ai-code-audit-cli
|
||||||
|
pip install -e ".[dev]"
|
||||||
|
|
||||||
|
# Run tests
|
||||||
|
pytest tests/ -v --cov=src
|
||||||
|
|
||||||
|
# Run linting
|
||||||
|
ruff check .
|
||||||
|
|
||||||
|
# Type checking
|
||||||
|
mypy src/
|
||||||
|
```
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
||||||
|
|
||||||
|
## Acknowledgments
|
||||||
|
|
||||||
|
- [Bandit](https://bandit.readthedocs.io/) for Python security scanning
|
||||||
|
- [Ruff](https://github.com/astral-sh/ruff) for fast linting
|
||||||
|
- [Tree-sitter](https://tree-sitter.github.io/tree-sitter/) for code parsing
|
||||||
|
- [Typer](https://typer.tiangolo.com/) for CLI interface
|
||||||
|
- [Rich](https://rich.readthedocs.io/) for beautiful terminal output
|
||||||
|
|||||||
Reference in New Issue
Block a user