content: [project]
  name = "seed-gen"
  version = "0.1.0"
  description = "LLM seed generation and vulnerability discovery"
  readme = "README.md"
  authors = [
      { name = "Trail of Bits", email = "opensource@trailofbits.com" },
  ]
  dependencies = [
      "redis ~= 5.2.1",
      "common",
      "wasmtime ~= 29.0.0",
      "program-model",
      "numpy ~= 2.2.3",
      "rapidfuzz ~= 3.12.2",
      "langgraph ~= 0.3.20",
      "pydantic ~= 2.10.6",
      "python-dotenv>=1.0.1",
  ]
  requires-python = ">=3.12,<3.13"
  
  [tool.uv.sources]
  common = { path = "../common", editable = true }
  program-model = { path = "../program-model", editable = true }
  
  [tool.hatch.build.targets.wheel]
  packages = ["src/buttercup"]
  
  [build-system]
  requires = ["hatchling"]
  build-backend = "hatchling.build"
  
  [project.optional-dependencies]
  dev = [
      "mypy ~= 1.15.0",
      "pytest ~= 8.3.4",
      "ruff ~= 0.6.2",
      "tqdm ~= 4.67.1",
  ]
  
  [project.scripts]
  "seed-gen" = "buttercup.seed_gen._cli:main"
  
  [tool.coverage.run]
  # don't attempt code coverage for the CLI entrypoints
  omit = ["src/seed_gen/_cli.py"]
  
  [tool.mypy]
  plugins = ["pydantic.mypy"]
  mypy_path = "src"
  packages = "buttercup"
  allow_redefinition = true
  check_untyped_defs = true
  disallow_incomplete_defs = true
  disallow_untyped_defs = true
  ignore_missing_imports = true
  no_implicit_optional = true
  show_error_codes = true
  sqlite_cache = true
  strict_equality = true
  warn_no_return = true
  warn_redundant_casts = true
  warn_return_any = true
  warn_unreachable = true
  warn_unused_configs = true
  warn_unused_ignores = true
  
  [tool.ruff]
  line-length = 100
  include = ["src/**/*.py", "test/**/*.py", "eval/**/*.py"]
  
  [tool.ruff.lint]
  select = ["E", "F", "I", "W", "UP"]
  # D203 and D213 are incompatible with D211 and D212 respectively.
  # COM812 and ISC001 can cause conflicts when using ruff as a formatter.
  # See https://docs.astral.sh/ruff/formatter/#conflicting-lint-rules.
  ignore = ["D203", "D213", "COM812", "ISC001"]
  
  [tool.ruff.lint.per-file-ignores]
  "src/seed_gen/_cli.py" = [
      "T201", # allow `print` in cli module
  ]
  "test/**/*.py" = [
      "D",    # no docstrings in tests
      "S101", # asserts are expected in tests
  ]
  [tool.interrogate]
  # don't enforce documentation coverage for packaging, testing, the virtual
  # environment, or the CLI (which is documented separately).
  exclude = ["env", "test", "src/seed_gen/_cli.py"]
  ignore-semiprivate = true
  fail-under = 100
  