[build-system]
requires = ["setuptools>=68.0", "wheel"]
build-backend = "setuptools.build_meta"

[project]
name = "fischer-agentkit"
version = "0.1.0"
description = "Unified Agent Framework with Tool/Skill plugins, Memory, Self-Evolution, MCP support, and Multi-Agent orchestration"
readme = "README.md"
requires-python = ">=3.11"
license = {text = "MIT"}
authors = [
    {name = "Fischer Team"},
]
dependencies = [
    "pydantic>=2.0",
    "redis[hiredis]>=5.0",
    "sqlalchemy[asyncio]>=2.0",
    "asyncpg>=0.29",
    "httpx>=0.27",
    "pyyaml>=6.0",
    "jsonschema>=4.0",
    "typer>=0.12",
    "pyjwt>=2.8",
    "bcrypt>=4.0",
    "aiosqlite>=0.20",
    # 加密 secrets store (U10 — 多端消息适配器 AES-256-GCM)
    "cryptography>=42.0",
    # U15 — LiteLLM 统一 Provider 适配层（替换 6 个直接 API provider）
    "litellm>=1.50",
    # Calendar & schedule (RRULE expansion)
    "python-dateutil>=2.9",
    # Calendar ICS import/export (U8)
    "icalendar>=5.0",
    # Calendar CalDAV sync — Apple Calendar (U6)
    "caldav>=1.3",
    # Document processing (U1-U9)
    "python-docx>=1.1",
    "openpyxl>=3.1",
    "reportlab>=4.0",
    "docxtpl>=0.16",
    "jinja2>=3.1",
    "markdown>=3.5",
    # RAG platform (P1 — LlamaIndex + pgvector)
    "llama-index-core>=0.12",
    "llama-index-vector-stores-postgres>=0.4",
    "llama-index-embeddings-openai>=0.3",
    "pgvector>=0.3",
    "jieba>=0.42",
    # 异步任务队列（U8 — 文档向量化）
    "taskiq>=0.11",
    "taskiq-redis>=0.5",
]

[project.scripts]
agentkit = "agentkit.cli.main:app"

[project.optional-dependencies]
server = [
    "fastapi>=0.110",
    "uvicorn>=0.27",
    "sse-starlette>=2.0",
]
mcp = [
    "mcp>=1.0",
    # U16 — langchain-mcp-adapters 替换自研 MCP 客户端传输层
    "langchain-mcp-adapters>=0.1",
]
evolution = [
    "scipy>=1.12",
]
dev = [
    "pytest>=8.0",
    "pytest-asyncio>=0.23",
    "pytest-cov>=5.0",
    "pytest-httpx>=0.30",
    "pytest-timeout>=2.2",
    "pytest-html>=4.1",
    "testcontainers[postgres,redis]>=4.0",
    "ruff>=0.4",
    "fastapi>=0.110",
    "uvicorn>=0.27",
    "websockets>=12.0",
]

[tool.setuptools.packages.find]
where = ["src"]

[tool.pytest.ini_options]
asyncio_mode = "auto"
testpaths = ["tests"]
markers = [
    "integration: mark test as integration test (requires docker)",
    "redis: mark test as requiring Redis",
    "postgres: mark test as requiring PostgreSQL",
    "e2e: end-to-end backtest (requires server)",
    "e2e_basic: basic function correctness test",
    "e2e_capability: agent intelligence capability test",
]

[tool.ruff]
target-version = "py311"
line-length = 100
