/ pyproject.toml
pyproject.toml
  1  [build-system]
  2  requires = ["hatchling"]
  3  build-backend = "hatchling.build"
  4  
  5  [project]
  6  name = "mureo"
  7  version = "0.6.0"
  8  description = "Local-first, safety-gated AI ad-ops framework for Claude Code, Codex, Cursor & Gemini"
  9  requires-python = ">=3.10"
 10  license = "Apache-2.0"
 11  readme = "README.md"
 12  authors = [{name = "Logly, Inc."}]
 13  keywords = ["advertising", "google-ads", "meta-ads", "mcp", "cli", "ai-agent", "orchestration", "workflow", "strategy"]
 14  classifiers = [
 15      "Development Status :: 3 - Alpha",
 16      "Intended Audience :: Developers",
 17      "License :: OSI Approved :: Apache Software License",
 18      "Programming Language :: Python :: 3",
 19      "Programming Language :: Python :: 3.10",
 20      "Programming Language :: Python :: 3.11",
 21      "Programming Language :: Python :: 3.12",
 22      "Topic :: Software Development :: Libraries",
 23  ]
 24  
 25  dependencies = [
 26      "google-ads>=28.0,<30",
 27      "google-auth>=2.28,<3",
 28      "google-auth-oauthlib>=1.2,<2",
 29      "facebook-business>=20.0,<22",
 30      "httpx>=0.27,<1",
 31      "beautifulsoup4>=4.12,<5",
 32      "lxml>=6.1,<7",
 33      "pydantic>=2.5,<3",
 34      "typer>=0.12,<1",
 35      "rich>=13.0,<14",
 36      "simple-term-menu>=1.6,<2",
 37      "mcp>=1.0,<2",
 38  ]
 39  
 40  [project.optional-dependencies]
 41  dev = [
 42      "pytest>=7.4,<9",
 43      "pytest-asyncio>=0.23,<1",
 44      "pytest-cov>=4.1,<7",
 45      "pytest-mock>=3.12,<4",
 46      "black>=23.12,<25",
 47      "ruff>=0.3,<1",
 48      "mypy>=1.8,<2",
 49  ]
 50  
 51  [project.scripts]
 52  mureo = "mureo.cli.main:app"
 53  
 54  [project.urls]
 55  Homepage = "https://github.com/logly/mureo"
 56  Documentation = "https://github.com/logly/mureo/tree/main/docs"
 57  Repository = "https://github.com/logly/mureo"
 58  Issues = "https://github.com/logly/mureo/issues"
 59  Changelog = "https://github.com/logly/mureo/blob/main/CHANGELOG.md"
 60  
 61  [tool.hatch.build.targets.wheel]
 62  packages = ["mureo"]
 63  
 64  # NB: the previous ``[tool.hatch.build.targets.wheel.force-include]``
 65  # block that copied top-level ``.claude/commands/`` and ``skills/`` into
 66  # ``mureo/_data/`` was removed because it duplicated files already
 67  # included via ``packages = ["mureo"]``. The duplicate ZIP entries
 68  # produced a wheel that PyPI rejects with
 69  # ``400 Invalid distribution file. ZIP archive not accepted:
 70  # Mis-matched data size.`` The bundled runtime data lives under
 71  # ``mureo/_data/`` in the package tree and is sufficient on its own.
 72  
 73  [tool.black]
 74  line-length = 88
 75  target-version = ["py310"]
 76  
 77  [tool.ruff]
 78  line-length = 88
 79  target-version = "py310"
 80  
 81  [tool.ruff.lint]
 82  select = ["E", "F", "I", "N", "W", "UP", "B", "A", "SIM", "TCH"]
 83  ignore = ["E501"]
 84  
 85  [tool.ruff.lint.isort]
 86  known-first-party = ["mureo"]
 87  
 88  [tool.pytest.ini_options]
 89  testpaths = ["tests"]
 90  asyncio_mode = "auto"
 91  markers = [
 92      "unit: Unit tests",
 93      "integration: Integration tests",
 94  ]
 95  
 96  [tool.mypy]
 97  python_version = "3.10"
 98  strict = true
 99  
100  [[tool.mypy.overrides]]
101  module = "google.ads.googleads.*"
102  ignore_missing_imports = true
103  
104  [tool.coverage.run]
105  source = ["mureo"]
106  omit = ["tests/*", "mureo/mcp/*"]
107  
108  [tool.coverage.report]
109  fail_under = 80
110  show_missing = true