# OPC-Agents 开发依赖
# 版本: 0.5.4

-r requirements.txt

# 测试
pytest>=7.4.0
pytest-cov>=4.1.0
pytest-asyncio>=0.21.0,<1.5.0  # Pin <1.4.0: 1.4.0 event loop recovery conflicts with asyncio.run() in worker threads (task_engine_v3_executors.py:647, skill_marketplace.py:425). TODO: refactor asyncio.run() to new_event_loop()+run_until_complete() then unpin.
pytest-timeout>=2.2.0
psutil>=7.2.2  # test_memory_optimization.py memory profiling (P1 fix: was missing, tests silently returned 0)
httpx>=0.27.0  # TestClient for skill_marketplace_api.py FastAPI endpoint testing
fastapi>=0.100.0  # Required for skill_marketplace_api.py tests (CI installs requirements-dev.txt, not marketplace extras)
sse-starlette>=1.6.0  # Required for mcp_transport.py SSE endpoint tests
responses>=0.26.2  # v0.3.35 T7.2: HTTP mock library for test_simple_llm_service.py (replaces @patch("requests.post"))

# UI E2E (真实浏览器自动化，满足 HARD_CONSTRAINTS Q1/Q2)
playwright>=1.61.0

# 代码质量
black>=26.3.1
ruff>=0.15.22  # Phase 2: select=[E4,E7,E9,F] in pyproject.toml locks rule set, upper bound no longer needed
flake8>=7.0.0
bandit>=1.7.0
pip-audit>=2.7.0
mypy>=1.11.2,<1.12  # Pin upper bound: mypy 新版本可能引入新检查导致 CI fail（与 CI 配置统一）
radon>=6.0.1  # Cyclomatic complexity analysis (CI non-blocking report)
types-requests>=2.33.0.20260712  # v0.3.34 L1.1: mypy stubs for requests
types-PyYAML>=6.0.12.20260518  # v0.3.34 L1.1: mypy stubs for PyYAML
