[project]
name = "fuzzforge-cargo-fuzzer"
version = "0.1.0"
description = "Runs continuous coverage-guided fuzzing on Rust targets using cargo-fuzz"
authors = []
readme = "README.md"
requires-python = ">=3.14"
dependencies = [
    "fuzzforge-modules-sdk==0.0.1",
    "pydantic==2.12.4",
    "structlog==25.5.0",
]

[project.optional-dependencies]
lints = [
    "bandit==1.8.6",
    "mypy==1.18.2",
    "ruff==0.14.4",
]
tests = [
    "pytest==9.0.2",
]

[project.scripts]
module = "module.__main__:main"

[tool.uv.sources]
fuzzforge-modules-sdk = { workspace = true }

[tool.uv]
package = true

# FuzzForge module metadata for AI agent discovery
[tool.fuzzforge.module]
identifier = "fuzzforge-cargo-fuzzer"
suggested_predecessors = ["fuzzforge-harness-tester"]
continuous_mode = true

use_cases = [
    "Run continuous coverage-guided fuzzing on Rust targets with libFuzzer",
    "Execute cargo-fuzz on validated harnesses",
    "Produce crash artifacts for analysis",
    "Long-running fuzzing campaign"
]

common_inputs = [
    "validated-harnesses",
    "Cargo.toml",
    "rust-source-code"
]

output_artifacts = [
    "crashes/",
    "coverage-data/",
    "corpus/",
    "fuzzing-stats.json"
]

output_treatment = "Show fuzzing-stats.json as a live summary with total_executions, exec/sec, coverage_percent, and crashes_found. List files in crashes/ directory if any crashes found. The corpus/ and coverage-data/ directories are artifacts for downstream modules, don't display their contents."
