[project] name = "AstrBot" version = "4.25.0" description = "Easy-to-use multi-platform LLM chatbot and development framework" readme = "README.md" requires-python = ">=3.12,<3.14" keywords = ["Astrbot", "Astrbot Module", "Astrbot Plugin"] 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", "loguru>=0.7.2", "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.12.0", "filelock>=3.18.0", "google-genai>=1.56.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,<7.2.0", "py-cord>=2.6.1", "pydantic>=2.12.5", "quart>=0.19.0,<0.20.0", "pyjwt>=2.10.1", "qrcode>=8.2", "python-telegram-bot>=22.6", "qq-botpy>=1.2.1", "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>=1.0.0", "watchfiles>=1.0.5", "websockets>=15.0.1", "wechatpy>=1.8.18", "audioop-lts ; python_full_version >= '3.13'", "click>=8.2.1", "pypdf>=6.1.1", "aiofiles>=25.1.0", "rank-bm25>=0.2.2", "jieba>=0.42.1", "markitdown-no-magika[docx,xls,xlsx]>=0.1.2", "xinference-client", "tenacity>=9.1.2", "shipyard-python-sdk>=0.2.4", "shipyard-neo-sdk>=0.2.0", "python-socks>=2.8.0", "packaging>=24.2", "quart-cors>=0.8.0", "anyio>=4.12.1", "argon2-cffi>=23.1.0", "plumbum>=1.10.0", "textual>=8.1.1", "openai-agents>=0.12.5", "fastapi>=0.135.1", ] [project.scripts] astrbot = "astrbot.cli.__main__:cli" astrbot-rs = "astrbot._internal.runtime.rust:cli" [dependency-groups] dev = [ "commitizen>=4.9.1", "mypy>=1.19.1", "pytest>=8.4.1", "pytest-asyncio>=1.1.0", "pytest-cov>=6.2.1", "ruff>=0.15.0", "textual-dev>=1.8.0", ] [tool.ruff] exclude = ["astrbot/core/utils/t2i/local_strategy.py", "astrbot/api/all.py", "tests"] line-length = 88 target-version = "py310" [tool.ruff.lint] select = [ "F", # Pyflakes "W", # pycodestyle warnings "E", # pycodestyle errors "I", # isort "UP", # pyupgrade "ASYNC", # flake8-async "C4", # flake8-comprehensions "T10", # flake8-debugger "T20", # flake8-print "PYI", # flake8-pyi "PT", # flake8-pytest-style "Q", # flake8-quotes "TID", # flake8-tidy-imports "RUF", # Ruff-specific rules ] ignore = [ "E501", ] [tool.pyright] typeCheckingMode = "basic" pythonVersion = "3.10" reportMissingTypeStubs = false reportMissingImports = false include = ["astrbot"] exclude = ["dashboard", "node_modules", "dist", "data", "tests"] [tool.hatch.metadata] allow-direct-references = true # AstrBot Core Rust extension #:schema strict = false [tool.maturin] manifest-path = "rust/Cargo.toml" module-name = "astrbot._internal.runtime.rust._core" build-hook = "buildHooks.custom:pre_build_hook" [build-system] requires = ["maturin>=1.12.0"] build-backend = "maturin"