[project]
name = "AstrBot"
version = "4.0.0-beta.3"
description = "易上手的多平台 LLM 聊天机器人及开发框架"
readme = "README.md"
requires-python = ">=3.10"
dependencies = [
    "aiocqhttp>=1.4.4",
    "aiodocker>=0.24.0",
    "aiohttp>=3.11.18",
    "aiosqlite>=0.21.0",
    "anthropic>=0.51.0",
    "apscheduler>=3.11.0",
    "beautifulsoup4>=4.13.4",
    "certifi>=2025.4.26",
    "chardet~=5.1.0",
    "colorlog>=6.9.0",
    "cryptography>=44.0.3",
    "dashscope>=1.23.2",
    "defusedxml>=0.7.1",
    "deprecated>=1.2.18",
    "dingtalk-stream>=0.22.1",
    "docstring-parser>=0.16",
    "faiss-cpu>=1.10.0",
    "filelock>=3.18.0",
    "google-genai>=1.14.0",
    "googlesearch-python>=1.3.0",
    "lark-oapi>=1.4.15",
    "lxml-html-clean>=0.4.2",
    "mcp>=1.8.0",
    "openai>=1.78.0",
    "ormsgpack>=1.9.1",
    "pillow>=11.2.1",
    "pip>=25.1.1",
    "psutil>=5.8.0",
    "py-cord>=2.6.1",
    "pydantic~=2.10.3",
    "pydub>=0.25.1",
    "pyjwt>=2.10.1",
    "python-telegram-bot>=22.0",
    "qq-botpy>=1.2.1",
    "quart>=0.20.0",
    "readability-lxml>=0.8.4.1",
    "silk-python>=0.2.6",
    "slack-sdk>=3.35.0",
    "sqlalchemy[asyncio]>=2.0.41",
    "sqlmodel>=0.0.24",
    "telegramify-markdown>=0.5.1",
    "watchfiles>=1.0.5",
    "websockets>=15.0.1",
    "wechatpy>=1.8.18",
]

[project.scripts]
astrbot = "astrbot.cli.__main__:cli"

[build-system]
requires = ["hatchling", "uv-dynamic-versioning"]
build-backend = "hatchling.build"

[tool.ruff]
exclude = [
  "astrbot/core/utils/t2i/local_strategy.py",
  "astrbot/api/all.py",
]
line-length = 88
lint.ignore = [
    "F403", 
    "F405", 
    "E501",
    "ASYNC230" # TODO: handle ASYNC230 in AstrBot
]
lint.select = [
  "F", # Pyflakes
  "W", # pycodestyle warnings
  "E", # pycodestyle errors
  "ASYNC", # flake8-async
  "C4", # flake8-comprehensions
  "Q", # flake8-quotes
]
target-version = "py310"

[dependency-groups]
dev = [
    "pytest>=8.4.1",
    "pytest-asyncio>=1.1.0",
    "pytest-cov>=6.2.1",
    "ruff>=0.12.8",
]
