[project] name = "archon" version = "0.2.2" description = "Archon - the command center for AI coding assistants." readme = "README.md" requires-python = ">=3.12" # Base dependencies - empty since we're using dependency groups dependencies = [ "browser-use>=0.3.2", "langchain-google-genai>=2.1.5", "mcp>=1.12.2", "pydantic-ai==1.44.0", "tenacity>=9.1.4", ] [dependency-groups] # Development dependencies for linting and testing dev = [ "mypy>=1.17.0", "pytest>=8.0.0", "pytest-asyncio>=0.21.0", "pytest-mock>=3.12.0", "pytest-timeout>=2.3.0", "pytest-cov>=6.2.1", "ruff>=0.12.5", "requests>=2.31.0", "factory-boy>=3.3.0", "types-aiofiles>=25.1.0.20260409", "respx>=0.21.0", ] # Server container dependencies server = [ # Web framework "fastapi>=0.104.0", "uvicorn>=0.24.0", "python-multipart>=0.0.20", "watchfiles>=0.18", # Web crawling "crawl4ai==0.7.4", # Database and storage "supabase==2.15.1", "asyncpg>=0.29.0", "psycopg2-binary>=2.9.9", # AI/ML libraries "openai==2.37.0", "google-genai>=0.3.0", # Document processing "pypdf2>=3.0.1", "pdfplumber>=0.11.6", "python-docx>=1.1.2", "markdown>=3.8", # Security and utilities "python-jose[cryptography]>=3.3.0", "cryptography>=41.0.0", "slowapi>=0.1.9", # Core utilities "httpx>=0.24.0", "pydantic>=2.0.0", "python-dotenv>=1.0.0", "docker>=6.1.0", # Logging "logfire>=0.30.0", # Testing (needed for UI-triggered tests) "pytest>=8.0.0", "pytest-asyncio>=0.21.0", "pytest-mock>=3.12.0", "beautifulsoup4>=4.13.4", "lxml>=5.4.0", "APScheduler>=3.10.0", "pydantic-ai==1.44.0", # ML Reranking (Phase 5.7.4: Restored to server as lightweight ONNX) "numpy==1.26.4", "onnxruntime>=1.17.0,<1.20.0", "huggingface-hub>=0.23.0", "transformers==4.44.2", ] # Optional reranking dependencies for server (Deprecated in Phase 5.7.4 as ONNX is now in server) server-reranking = [] # MCP container dependencies (Hardened for Phase 4.6.28 - Fully grounded) mcp = [ "mcp>=1.18.0", "httpx>=0.24.0", "pydantic>=2.0.0", "python-dotenv>=1.0.0", "logfire>=0.30.0", "fastapi>=0.104.0", "psutil>=5.9.0", "aiofiles==25.1.0", "supabase==2.15.1", "openai==2.37.0", "cryptography>=41.0.0", "python-jose[cryptography]==3.3.0", "beautifulsoup4==4.13.4", "lxml==5.4.0", "crawl4ai==0.7.4", "tenacity>=9.1.4", ] # Agents container dependencies agents = [ "pydantic-ai==1.44.0", "pydantic>=2.0.0", "fastapi>=0.104.0", "uvicorn>=0.24.0", "httpx>=0.24.0", "python-dotenv>=1.0.0", "structlog>=23.1.0", "python-jose[cryptography]>=3.3.0", "supabase==2.15.1", "psutil>=5.9.0", # ML Reranking dependencies (Physically transferred for Phase 4.6.28) "numpy==1.26.4", "onnxruntime>=1.17.0,<1.20.0", "huggingface-hub>=0.23.0", "transformers==4.44.2", "crawl4ai==0.7.4", ] # All dependencies for running unit tests locally all = [ "fastapi>=0.104.0", "uvicorn>=0.24.0", "python-multipart>=0.0.20", "watchfiles>=0.18", "crawl4ai==0.7.4", "supabase==2.15.1", "asyncpg>=0.29.0", "openai==2.37.0", "pypdf2>=3.0.1", "pdfplumber>=0.11.6", "python-docx>=1.1.2", "markdown>=3.8", "python-jose[cryptography]>=3.3.0", "cryptography>=41.0.0", "slowapi>=0.1.9", "docker>=6.1.0", "logfire>=0.30.0", "APScheduler>=3.10.0", "mcp>=1.18.0", "pydantic-ai==1.44.0", "structlog>=23.1.0", "httpx>=0.24.0", "pydantic>=2.0.0", "python-dotenv>=1.0.0", "pytest>=8.0.0", "pytest-asyncio>=0.21.0", "pytest-mock>=3.12.0", "pytest-timeout>=2.3.0", "requests>=2.31.0", "factory-boy>=3.3.0", "beautifulsoup4>=4.13.4", "lxml>=5.4.0", "aiofiles==25.1.0", ] [tool.ruff] line-length = 120 target-version = "py312" [tool.ruff.lint] select = ["E", "W", "F", "I", "B", "C4", "UP"] ignore = ["E501", "B008", "C901", "W191"] [tool.ruff.format] quote-style = "double" indent-style = "space" skip-magic-trailing-comma = false line-ending = "auto" [tool.mypy] python_version = "3.12" warn_return_any = true warn_unused_configs = true disallow_untyped_defs = false disallow_any_unimported = false no_implicit_optional = true warn_redundant_casts = true warn_unused_ignores = true warn_no_return = true check_untyped_defs = true ignore_missing_imports = true