[build-system] requires = ["hatchling>=1.27"] build-backend = "hatchling.build" [project] name = "netscaler-triage" version = "1.0.0" description = "Offline NetScaler evidence analysis with inspectable decoding and provenance" readme = "README.md" license = "MIT" license-files = ["LICENSE.txt"] requires-python = ">=3.14" dependencies = [ "py7zr>=1.0", "regex>=2025.11", "tzdata>=2025.2", "rich>=14.1", "rich-argparse>=1.7", "pyzipper>=0.3.6", "pysigma>=1.5.1", ] [project.scripts] netscaler-triage = "netscaler_triage.cli:main" [tool.hatch.build.targets.wheel] packages = ["src/netscaler_triage"] [tool.hatch.build.targets.sdist] include = ["src/", "tests/", "typing_stubs/", "examples/", "config/threat_intel.json", "README.md", "README.txt", "RULES.txt", "VALIDATION.txt", "THREAT_INTELLIGENCE.txt", "LICENSE.txt", "uv.lock", ".python-version", ".gitignore", "pyproject.toml"] [dependency-groups] dev = [ "mypy>=2.3.1", "ruff>=0.14", "types-pyyaml>=6.0.12.20260906", "types-regex>=2026.9.10.20260911", ] [tool.ruff] line-length = 100 target-version = "py314" [tool.ruff.lint] select = ["E", "F", "I", "UP", "B", "SIM", "RUF", "PERF"] [tool.mypy] strict = true warn_unreachable = true mypy_path = "typing_stubs" python_version = "3.14" files = ["src", "tests"] check_untyped_defs = true disallow_untyped_defs = true warn_return_any = true warn_unused_ignores = true warn_redundant_casts = true strict_equality = true no_implicit_optional = true pretty = true