[project] name = "deerflow-harness" version = "2.1.0" description = "DeerFlow agent harness framework" requires-python = ">=3.12" dependencies = [ "agent-client-protocol>=0.4.0", "agent-sandbox>=0.0.30", "croniter>=6.0.0", "dotenv>=0.9.9", "exa-py>=1.0.0", "httpx>=0.28.0", "kubernetes>=30.0.0", # Lower bound reflects what the lockfile resolves and tests run against # (langgraph 1.2.9 pulls langchain >=1.3 transitively). "langchain>=1.3", "langchain-anthropic>=1.4.1", "langchain-deepseek>=1.0.1", "langchain-mcp-adapters>=0.2.2", "langchain-openai>=1.2.1", "langfuse>=3.4.1", "langgraph>=1.2.9,<1.3", "langgraph-api>=0.8.1", "langgraph-cli>=0.4.24", "langgraph-runtime-inmem>=0.28.0", "markdownify>=1.2.2", "markitdown[all,xlsx]>=0.0.1a2", "pydantic>=2.12.5", "pyyaml>=6.0.3", "readabilipy>=0.3.0", "tavily-python>=0.7.17", "firecrawl-py>=1.15.0", "tiktoken>=0.8.0", "ddgs>=9.10.0", "duckdb>=1.4.4", "langchain-google-genai>=4.2.1", "langgraph-checkpoint-sqlite>=3.1.0,<3.2", "langgraph-sdk>=0.1.51", "sqlalchemy[asyncio]>=2.0,<3.0", "aiosqlite>=0.19", "alembic>=1.13", "cryptography>=48.0.1", "e2b-code-interpreter>=2.8.0", ] [project.scripts] deerflow = "deerflow.tui.cli:main" [project.optional-dependencies] # Terminal workbench (TUI). Kept optional so the core harness install stays lean; # the `deerflow` console script degrades to headless help when textual is absent. tui = ["textual>=0.80"] # GroundRoute needs no extra packages (httpx is already a core dependency). This # empty extra exists so the documented `uv add 'deerflow-harness[groundroute]'` # install command resolves cleanly without an "unknown extra" warning. groundroute = [] ollama = ["langchain-ollama>=0.3.0"] postgres = [ "asyncpg>=0.29", "langgraph-checkpoint-postgres>=3.1.0,<3.2", "psycopg[binary]>=3.3.3", "psycopg-pool>=3.3.0", ] # Cross-process SSE stream bridge (stream_bridge.type: redis). Optional so # single-process / memory-bridge installs do not pull redis. The Docker image # always installs this extra because Docker defaults to the redis bridge. redis = ["redis>=5.0.0"] pymupdf = ["pymupdf4llm>=0.0.17"] boxlite = ["boxlite>=0.9.7"] # Tenki cloud sandbox provider (deerflow.community.tenki). Optional so a default # install stays free of the Tenki SDK; only pulled in when the provider is used. tenki = ["tenki-sandbox>=0.4.0"] # Agent observability (Monocle). Optional so a default install stays free of the # OpenTelemetry stack; only pulled in when MONOCLE_TRACING is used. monocle = ["monocle_apptrace>=0.8.8"] # Agentic browser control (browser_navigate/click/type/... tool group). Optional # so the core harness install stays lean; import is lazy inside the private # Playwright loop. After install, run `playwright install chromium` once. browser = ["playwright>=1.40"] # Optional Chinese tokenization for the FTS5 memory retrieval adapter. memory-zh = ["jieba>=0.42.1"] [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] packages = ["deerflow"]