[project]
name = "Mudabbir"
version = "0.5.3"
description = "Mudabbir: the AI agent that runs on your laptop, not a datacenter."
readme = "README.md"
license = "MIT"
requires-python = ">=3.11"
keywords = [
    "ai", "agent", "telegram", "assistant", "automation",
    "browser", "llm", "ollama", "openai", "anthropic",
    "self-hosted", "local-first", "privacy"
]
authors = [
    { name = "Mudabbir Team", email = "hello@mudabbir.ai" }
]
classifiers = [
    "Development Status :: 4 - Beta",
    "Environment :: Console",
    "Intended Audience :: End Users/Desktop",
    "Intended Audience :: Developers",
    "License :: OSI Approved :: MIT License",
    "Operating System :: OS Independent",
    "Operating System :: MacOS",
    "Operating System :: Microsoft :: Windows",
    "Operating System :: POSIX :: Linux",
    "Programming Language :: Python :: 3",
    "Programming Language :: Python :: 3.11",
    "Programming Language :: Python :: 3.12",
    "Programming Language :: Python :: 3.13",
    "Topic :: Home Automation",
    "Topic :: Scientific/Engineering :: Artificial Intelligence",
    "Topic :: Internet :: WWW/HTTP :: Browsers",
    "Typing :: Typed",
]

dependencies = [
    # Config
    "pydantic>=2.10.0",
    "pydantic-settings>=2.1.0",
    # HTTP client (used everywhere)
    "httpx>=0.26.0",
    # LLM Clients
    "openai>=1.60.0",
    "anthropic>=0.45.0",
    # Agent Backend (recommended default)
    "claude-agent-sdk>=0.1.30",
    # Dashboard (default mode — must be in core so `pip install Mudabbir` just works)
    "fastapi>=0.115.0",
    "uvicorn[standard]>=0.31.1",
    "jinja2>=3.1.0",
    "qrcode[pil]>=7.4",
    "python-multipart>=0.0.22",
    # Logging & CLI
    "rich>=13.0.0",
    "InquirerPy>=0.3.4",
    "pystray>=0.19.5",
    # Scheduling
    "apscheduler>=3.10.0",
    "python-dateutil>=2.8.0",
    # Credential Encryption
    "cryptography>=42.0",
    # Image basics
    "pillow>=10.0.0",
]

[project.optional-dependencies]
# --- Feature extras ---
dashboard = [
    # Kept for backward compat — dashboard deps are now in core.
    # Users with `pip install Mudabbir[dashboard]` in scripts won't break.
]
telegram = [
    "python-telegram-bot>=21.0",
]
browser = [
    "playwright>=1.50.0",
]
desktop = [
    "psutil>=5.9.0",
    "pyautogui>=0.9.54",
]
native = [
    "open-interpreter>=0.2.0,<0.5.0",
]
openai-agents = [
    "openai-agents",
]
google-adk = [
    "google-adk",
]
copilot-sdk = [
    "github-copilot-sdk",
]
memory = [
    "mem0ai>=0.1.115",
    "ollama>=0.6.1",
]

# --- Channel extras ---
discord = [
    "discord.py>=2.3.0",
]
slack = [
    "slack-bolt>=1.20.0",
]
whatsapp-personal = [
    "neonize>=0.3.0",
]
matrix = [
    "matrix-nio>=0.24.0",
]
teams = [
    "botbuilder-core>=4.16.0",
    "botbuilder-integration-aiohttp>=4.16.0",
]
gchat = [
    "google-api-python-client>=2.100.0",
    "google-auth>=2.25.0",
]

# --- Tool extras ---
image = [
    "google-genai>=1.0.0",
]
extract = [
    "html2text>=2020.1.16",
]
voice = [
    "elevenlabs>=1.0.0",
]
ocr = [
    "pytesseract>=0.3.10",
]
sarvam = [
    "sarvamai>=0.1.25",
]
mcp = [
    "mcp>=1.0.0",
]

# --- Composite extras ---
recommended = [
    "Mudabbir[browser,memory,desktop]",
]
channels = [
    "Mudabbir[discord,slack,telegram]",
]
all-channels = [
    "Mudabbir[telegram,discord,slack,whatsapp-personal,matrix,teams,gchat]",
]
all-tools = [
    "Mudabbir[browser,desktop,image,extract,voice,ocr,sarvam,mcp,memory]",
]
all-backends = [
    "Mudabbir[native,openai-agents,google-adk,copilot-sdk]",
]
all = [
    "Mudabbir[recommended,all-channels,all-tools,all-backends]",
]
dev = [
    "Mudabbir[all]",
    "pytest>=8.0.0",
    "pytest-asyncio>=0.23.0",
    "pytest-playwright>=0.4.0",
    "ruff>=0.4.0",
    "mypy>=1.8.0",
]

[project.scripts]
Mudabbir = "Mudabbir.__main__:main"
mudabbir = "Mudabbir.__main__:main"

[project.urls]
Homepage = "https://github.com/Ahmed5754/Mudabbir"
Repository = "https://github.com/Ahmed5754/Mudabbir"
Issues = "https://github.com/Ahmed5754/Mudabbir/issues"
Documentation = "https://github.com/Ahmed5754/Mudabbir#readme"
Twitter = "https://twitter.com/MudabbirAI"

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

[tool.hatch.build.targets.wheel]
packages = ["src/Mudabbir"]

[tool.ruff]
line-length = 100
target-version = "py311"

[tool.ruff.lint]
select = ["E", "F", "I", "UP"]

[dependency-groups]
dev = [
    "Mudabbir[all]",
    "pytest>=8.0.0",
    "pytest-asyncio>=0.23.0",
    "ruff>=0.4.0",
    "mypy>=1.8.0",
]

[tool.pytest.ini_options]
asyncio_mode = "auto"



