content: [tool.uv.sources]
  "microsoft-teams-apps" = { workspace = true }
  "microsoft-teams-api" = { workspace = true }
  "microsoft-teams-common" = { workspace = true }
  "microsoft-teams-cards" = { workspace = true }
  "microsoft-teams-devtools" = { workspace = true }
  "microsoft-teams-graph" = { workspace = true }
  "microsoft-teams-ai" = { workspace = true }
  "microsoft-teams-openai" = { workspace = true }
  "microsoft-teams-mcpplugin" = { workspace = true }
  "microsoft-teams-a2a" = { workspace = true }
  
  [tool.uv.workspace]
  members = ["packages/*", "tests/*"]
  
  [build-system]
  requires = ["hatchling"]
  build-backend = "hatchling.build"
  
  [dependency-groups]
  dev = [
      "poethepoet>=0.35.0",
      "pre-commit>=4.2.0",
      "ruff>=0.11.13",
      "pyright>=1.1.404",
      "cookiecutter>=2.6.0",
  ]
  
  [tool.ruff]
  line-length = 120
  fix = true
  extend-exclude = ["[{][{]cookiecutter.pypi_package_name[}][}]"]
  
  [tool.ruff.format]
  docstring-code-format = true
  
  [tool.ruff.lint]
  select = ["E", "F", "W", "B", "Q", "I", "ASYNC"]
  
  [tool.ruff.lint.flake8-tidy-imports]
  [tool.ruff.lint.flake8-tidy-imports.banned-api]
  "unittest".msg = "Use `pytest` instead."
  
  [tool.ruff.lint.per-file-ignores]
  "packages/cards/**/*.py" = ["E501"]
  "packages/cards/**/__init__.py" = ["F403"]
  
  [tool.poe.tasks]
  fmt = "ruff format"
  lint = "ruff check"
  check = ["fmt", "lint"]
  test = "pytest"
  
  [tool.hatch.build.targets.wheel]
  packages = ["packages/*"]
  