# Forge Mutation Tester Configuration Example
# Copy this file to mutation-config.toml and update with your settings

[repository]
# Choose ONE of the following options:

# Option 1: Remote repository
# url = "https://github.com/OpenZeppelin/openzeppelin-contracts"
# branch = "master"  # Optional, defaults to 'main'
# token = "ghp_your_github_token"  # Optional, only needed for private repos

# Option 2: Local repository
local_path = "./my-solidity-project"

[openai]
# Optional: OpenAI configuration for AI-powered test generation
# If omitted, the tool will only run mutation testing without generating tests
# api_key = "sk-your-openai-api-key-here"
# model = "gpt-4-turbo-preview"  # Optional, defaults to gpt-4-turbo-preview

[output]
# Optional: Output directory for mutation results and generated tests
# directory = "mutation-results"  # Default

# Optional: Whether to clean up cloned repositories after testing
# cleanup = true  # Default (only applies to remote repos, never cleans local)

[testing]
# Optional: Iterative testing mode (defaults to true)
# Allows you to add tests and re-run to see improvement
# iterative = true  # Set to false to run only once

# Optional: Number of mutants to generate per file (defaults to 25)
# num_mutants = 25  # Increase for more thorough testing, decrease for faster runs

[files]
# Optional: File filtering for large repositories
# Use glob patterns to include or exclude specific files from mutation testing

# Include only specific files or directories (if not specified, all files are included)
# include = [
#   "src/core/**/*.sol",        # All Solidity files in src/core and subdirectories
#   "src/utils/Math*.sol",      # All Math-related files in src/utils
#   "contracts/Token.sol"       # Specific single file
# ]

# Exclude specific files or directories (applied after include patterns)
# exclude = [
#   "**/*Test.sol",             # All test files
#   "**/*Mock*.sol",            # All mock contracts
#   "**/test/**",               # Everything in test directories
#   "**/interfaces/**",         # Interface files (no implementation to mutate)
#   "contracts/deprecated/**"   # Deprecated contracts
# ]

# Example for focusing on critical contracts only:
# include = ["contracts/core/**/*.sol", "contracts/governance/**/*.sol"]
# exclude = ["**/*Test.sol", "**/mocks/**"]

[solidity]
# Optional: Custom Solidity compiler remappings
# Use this when auto-detected remappings are insufficient or causing issues
# Format: "import_prefix=actual_path"
# remappings = [
#   "@openzeppelin/=lib/openzeppelin-contracts/",
#   "@solmate-6.2.0/=dependencies/solmate-6.2.0/src/",
#   "solmate/=dependencies/solmate-6.2.0/src/",
#   "@uniswap/v3-core/=lib/v3-core/",
#   "forge-std/=lib/forge-std/src/"
# ]

# Example for a project with custom dependency structure:
# remappings = [
#   "@myproject/=src/",
#   "contracts/=contracts/",
#   "@external/=node_modules/@external/"
# ]