# Pre-commit configuration for CleverAgents
# See https://pre-commit.com for more information
# Install: pre-commit install
# Run manually: pre-commit run --all-files

default_language_version:
    python: python3.13

repos:
    # ----- Branch Protection & General Checks -----
    - repo: https://github.com/pre-commit/pre-commit-hooks
      rev: v4.6.0
      hooks:
          - id: no-commit-to-branch
            name: Prevent direct commits to master
            args: ["--branch", "master"]
          - id: check-yaml
            name: Validate YAML syntax
            exclude: ^k8s/templates/
          - id: check-toml
            name: Validate TOML syntax
          - id: check-json
            name: Validate JSON syntax
            exclude: "^\\.vscode/"
          - id: check-merge-conflict
            name: Check for merge conflicts
          - id: check-added-large-files
            name: Prevent large file commits
            args: ["--maxkb=500"]
          - id: end-of-file-fixer
            name: Fix end of file
          - id: trailing-whitespace
            name: Trim trailing whitespace
            args: ["--markdown-linebreak-ext=md"]
          - id: debug-statements
            name: Detect debug statements (pdb, breakpoint)

    # ----- Ruff: Formatting & Linting -----
    - repo: https://github.com/astral-sh/ruff-pre-commit
      rev: v0.15.0
      hooks:
          - id: ruff-format
            name: Ruff format (auto-fix)
          - id: ruff
            name: Ruff lint (auto-fix safe rules)
            args: ["--fix", "--exit-non-zero-on-fix"]

    # ----- Bandit: Security Scanning -----
    - repo: https://github.com/PyCQA/bandit
      rev: 1.8.3
      hooks:
          - id: bandit
            name: Bandit security scan
            args: ["-c", "pyproject.toml", "-r", "--severity-level", "medium"]
            additional_dependencies: ["bandit[toml]"]
            files: "^src/"

    # ----- Vulture: Dead Code Detection -----
    - repo: https://github.com/jendrikseipp/vulture
      rev: v2.14
      hooks:
          - id: vulture
            name: Vulture dead code detection
            args:
                [
                    "src/cleveragents",
                    "vulture_whitelist.py",
                    "--min-confidence",
                    "80",
                    "--exclude",
                    "src/cleveragents/discovery",
                ]
            pass_filenames: false

    # ----- Local Hooks (use installed tools) -----
    - repo: local
      hooks:
          # Pyright: Type Checking (runs serially, uses local installation)
          - id: pyright
            name: Pyright type checking
            language: system
            entry: pyright
            types: [python]
            files: "^src/"
            pass_filenames: false
            stages: [pre-commit]
          # Semgrep: Advanced security scanning for eval/exec detection
          - id: semgrep-eval-exec
            name: Semgrep eval/exec detection
            language: system
            entry: semgrep --config=.semgrep.yml --error --quiet src/
            types: [python]
            files: "^src/"
            pass_filenames: false
            stages: [pre-commit]

    # ----- Commit Message Linting -----
    - repo: https://github.com/commitizen-tools/commitizen
      rev: v4.2.2
      hooks:
          - id: commitizen
            name: Conventional commit message check
            stages: [commit-msg]
