content: [build-system]
  requires = ["hatchling >= 1.27.0"]
  build-backend = "hatchling.build"
  
  [project]
  name = "tracecat"
  description = "Open source Tines / Splunk SOAR alternative for security and IT engineers."
  readme = "README.md"
  requires-python = ">=3.12"
  license = "AGPL-3.0"
  authors = [{ name = "Tracecat", email = "founders@tracecat.com" }]
  classifiers = [
      "Development Status :: 4 - Beta",
      "License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)",
      "Programming Language :: Python :: 3 :: Only",
      "Programming Language :: Python :: 3.12",
      "Intended Audience :: Developers",
      "Intended Audience :: Information Technology",
      "Intended Audience :: System Administrators",
      "Topic :: Security",
      "Topic :: System :: Systems Administration",
  ]
  dependencies = [
      "alembic_utils==0.8.4",
      "alembic-postgresql-enum==1.7.0",
      "alembic==1.13.2",
      "async-lru==2.0.4",
      "asyncpg==0.29.0",
      "cloudpickle==3.0.0",
      "cramjam>=2.10.0",
      "cryptography==44.0.1",
      "dateparser>=1.2.1,<1.3.0",
      "defusedxml==0.7.1",
      "email-validator>=2.0.0",
      "fastapi-users[sqlalchemy,oauth]==14.0.1",
      "fastapi[standard]==0.118.0",
      "google-auth==2.37.0",
      "greenlet==3.0.3",
      "hatchling==1.27.0",
      "httpx==0.28.1",
      "jsonpath_ng>=1.7.0,<1.8.0",
      "lark==1.1.9",
      "loguru==0.7.2",
      "minio==7.2.18",
      "authlib==1.6.5",
      "orjson==3.10.3",
      "paramiko==3.5.0",
      "phonenumbers==8.13.55",
      "polyfile>=0.5.5,<0.6.0",
      "psycopg[binary]==3.1.19",
      "pyarrow==16.1.0",
      "pydantic-extra-types>=2.10.2,<3.0.0",
      "pydantic>=2.11.7,<3.0.0",
      "pydantic-ai-slim[openai,anthropic,bedrock,google,mcp]==1.0.8",
      "pysaml2==7.5.0",
      "python-slugify==8.0.4",
      "ray[default]==2.43.0",
      "redis[hiredis]>=5.0.0",
      "sentry-sdk==2.24.1",
      "sqlmodel==0.0.18",
      "starlette>=0.47.2",
      "temporalio==1.17.0",
      "tenacity==8.3.0",
      "tomli==2.2.1",
      "tracecat-ee",
      "tracecat-registry",
      "uv==0.8.6",
      "uvicorn>=0.33.0,<0.34",
      "virtualenv==20.27.0",
      # This is required until https://github.com/ray-project/ray/issues/54134 is released.
      "pip>=25.2,<26.0",
      "pygithub>=2.7.0",
      "croniter>=6.0.0",
  ]
  dynamic = ["version"]
  
  [project.urls]
  Homepage = "https://tracecat.com"
  Documentation = "https://docs.tracecat.com/"
  Repository = "https://github.com/TracecatHQ/tracecat"
  
  
  [tool.uv.sources]
  tracecat-registry = { workspace = true }
  tracecat-ee = { workspace = true }
  
  [tool.uv.workspace]
  members = ["packages/*"]
  
  [dependency-groups]
  dev = [
      "mypy==1.15.0",
      "pre-commit==4.1.0",
      "psycopg>=3.1.19",
      "pytest-mock==3.14.0",
      "pytest-repeat==0.9.3",
      "pytest==8.3.2",
      "python-dotenv==1.1.1",
      "respx==0.22.0",
      "ruff==0.13.0",
  ]
  
  [tool.hatch.version]
  path = "tracecat/__init__.py"
  
  [tool.hatch.metadata]
  allow-direct-references = true
  
  [tool.mypy]
  strict = true
  ignore_missing_imports = true
  
  [tool.ruff]
  line-length = 88
  fix = true
  
  [tool.ruff.lint]
  select = [
      "E",  # pycodestyle errors
      "W",  # pycodestyle warnings
      "F",  # pyflakes
      "I",  # isort
      "B",  # flake8-bugbear
      "C4", # flake8-comprehensions
      "UP", # pyupgrade
  ]
  ignore = [
      "E501", # line too long, handled by ruff
      "B008", # do not perform function calls in argument defaults
      "W191", # indentation contains tabs
  ]
  
  [tool.ruff.lint.pyupgrade]
  # Preserve types, even if a file imports `from __future__ import annotations`.
  keep-runtime-typing = true
  
  [tool.pytest.ini_options]
  addopts = ["--strict-config", "--strict-markers", "-vvrP"]
  xfail_strict = true
  log_level = "ERROR"
  log_cli = true
  log_cli_level = "ERROR"
  markers = [
      "anyio: marks tests as requiring the anyio pytest plugin",
      "webtest: marks tests that require the web",
      "slow: marks tests as slow",
      "dbtest: marks tests that make database calls",
      "disable_fixture: marks tests that disable fixtures",
      "integration: marks tests that perform live network calls and container operations",
      "llm: marks tests that perform LLM calls",
      "ollama: mark tests that require Ollama",
  ]
  