[project]
name = "jarvis-backend"
version = "0.1.0"
description = "Jarvis Personal AI Assistant - Backend"
readme = "README.md"
requires-python = ">=3.12"
license = { text = "MIT" }

dependencies = [
    # Web 框架
    "fastapi>=0.115.0",
    "uvicorn[standard]>=0.30.0",
    "python-multipart>=0.0.12",
    "websockets>=12.0",
    "aiofiles>=24.0.0",

    # Agent 框架
    "langgraph>=0.2.36",
    "langchain-anthropic>=0.3.14",
    "langchain-openai>=0.3.18",
    "langchain-core>=0.3.52",
    "langchain-ollama>=0.4.0",
    "langsmith>=0.1.0",

    # 知识库框架
    "llama-index>=0.12.0",
    "llama-index-vector-stores-chroma>=0.3.0",
    "chromadb>=0.5.0",

    # 数据库
    "sqlalchemy>=2.0.0",
    "aiosqlite>=0.20.0",
    "alembic>=1.13.0",

    # 认证 & 安全
    "python-jose[cryptography]>=3.3.0",
    "passlib[bcrypt]>=1.7.4",
    "bcrypt>=4.0.0,<5.0.0",

    # 配置 & 验证
    "pydantic>=2.0.0",
    "pydantic-settings>=2.0.0",
    "email-validator>=2.0.0",

    # 定时任务
    "APScheduler>=3.10.0",

    # 工具
    "python-dotenv>=1.0.0",
    "httpx>=0.27.0",
]

[project.optional-dependencies]
dev = [
    "pytest>=8.0.0",
    "pytest-asyncio>=0.23.0",
    "pytest-cov>=4.1.0",
    "ruff>=0.5.0",
    "mypy>=1.10.0",
    "pre-commit>=3.7.0",
]

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

[tool.hatch.build.targets.wheel]
packages = ["app"]

[tool.ruff]
target-version = "py312"
line-length = 100
select = ["E", "F", "I", "N", "W", "UP"]

[tool.pytest.ini_options]
asyncio_mode = "auto"
testpaths = ["tests"]
