[project]
name = "deer-flow"
version = "2.1.0"
description = "LangGraph-based AI agent system with sandbox execution capabilities"
readme = "README.md"
requires-python = ">=3.12"
dependencies = [
    "deerflow-harness",
    "fastapi>=0.115.0",
    "httpx>=0.28.0",
    "python-multipart>=0.0.31",
    "sse-starlette>=2.1.0",
    "uvicorn[standard]>=0.34.0",
    "lark-oapi>=1.4.0",
    "slack-sdk>=3.33.0",
    "python-telegram-bot>=21.0",
    "langgraph-sdk>=0.1.51",
    "markdown-to-mrkdwn>=0.3.1",
    "wecom-aibot-python-sdk>=0.1.6",
    "dingtalk-stream>=0.24.3",
    "bcrypt>=4.0.0",
    "pyjwt>=2.13.0",
    "email-validator>=2.0.0",
]

[project.optional-dependencies]
postgres = ["deerflow-harness[postgres]"]
discord = ["discord.py>=2.7.0"]

[dependency-groups]
dev = [
    "blockbuster>=1.5.26,<1.6",
    "prompt-toolkit>=3.0.0",
    "pytest>=9.0.3",
    "pytest-asyncio>=1.3.0",
    "ruff>=0.14.11",
    # TUI runtime dep (also declared as the deerflow-harness[tui] extra); kept in
    # the dev group so the terminal workbench can be run and tested locally / in CI.
    "textual>=0.80",
]

[tool.pytest.ini_options]
markers = [
    "no_auto_user: disable the conftest autouse contextvar fixture for this test",
    "allow_blocking_io: opt out of the strict Blockbuster gate in tests/blocking_io/",
]

[tool.uv]
index-url = "https://pypi.org/simple"

[tool.uv.workspace]
members = ["packages/harness"]

[tool.uv.sources]
deerflow-harness = { workspace = true }
