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

[project]
name = "lambdagent"
version = "1.4.2"
description = "A Lambda Calculus Agent DSL — every agent is a function, every composition is function composition, every loop is a Y combinator."
readme = "README.md"
license = "BUSL-1.1"
requires-python = ">=3.10"
authors = [
    {name = "Qin Liu", email = "qinliu@nju.edu.cn"},
]
maintainers = [
    {name = "Qin Liu", email = "qinliu@nju.edu.cn"},
]
keywords = ["agent", "lambda-calculus", "dsl", "llm", "ai"]
classifiers = [
    "Development Status :: 3 - Alpha",
    "Intended Audience :: Developers",
    "Intended Audience :: Science/Research",
    "Programming Language :: Python :: 3",
    "Programming Language :: Python :: 3.10",
    "Programming Language :: Python :: 3.11",
    "Programming Language :: Python :: 3.12",
    "Topic :: Scientific/Engineering :: Artificial Intelligence",
    "Topic :: Software Development :: Libraries :: Python Modules",
]
dependencies = [
    "pyyaml",
]

[project.optional-dependencies]
# LLM providers
anthropic = ["anthropic>=0.20.0"]
openai = ["openai>=1.0.0"]

# RAG / vector backends
rag = ["chromadb>=0.4.0"]

# Knowledge / document ingestion (PDF, DOCX, OCR, HTML)
knowledge = [
    "PyPDF2>=3.0.0",
    "pdfplumber>=0.10.0",
    "python-docx>=1.0.0",
    "markdown>=3.4.0",
    "markdownify>=0.11.0",
    "html2text>=2024.0.0",
]
ocr = ["paddleocr>=2.7.0"]
pdfgen = ["weasyprint>=60.0"]

# Sandbox / process isolation
sandbox = ["cloudpickle>=2.2.0", "dill>=0.3.6"]

# Checkpoint encryption
checkpoint-crypto = ["cryptography>=41.0.0"]

# Memory backends
redis = ["redis>=5.0.0"]

# Observability
otel = ["opentelemetry-api>=1.20.0", "opentelemetry-sdk>=1.20.0"]

# Terminal UI
tui = ["rich>=13.0.0"]

# Dev / contributor toolchain
dev = [
    "pytest>=7.0.0",
    "pytest-asyncio>=0.21.0",
    "pytest-cov>=4.0.0",
    "ruff>=0.1.0",
    "build>=1.0.0",
]

# Everything (no dev / no ocr — too heavy)
all = [
    "anthropic>=0.20.0",
    "openai>=1.0.0",
    "chromadb>=0.4.0",
    "PyPDF2>=3.0.0",
    "python-docx>=1.0.0",
    "markdown>=3.4.0",
    "markdownify>=0.11.0",
    "html2text>=2024.0.0",
    "cloudpickle>=2.2.0",
    "dill>=0.3.6",
    "cryptography>=41.0.0",
    "redis>=5.0.0",
    "opentelemetry-api>=1.20.0",
    "opentelemetry-sdk>=1.20.0",
    "rich>=13.0.0",
]

[project.scripts]
lambdagent = "lambdagent.cli.main:main"

[project.urls]
Homepage = "https://github.com/kenny67nju/lambdagent"
Repository = "https://github.com/kenny67nju/lambdagent"
Issues = "https://github.com/kenny67nju/lambdagent/issues"

[tool.pytest.ini_options]
testpaths = ["tests"]
filterwarnings = [
    "ignore::DeprecationWarning:lambdagent.from_config",
    "ignore::DeprecationWarning:lambdagent.lint",
]

[tool.setuptools]
package-dir = {"" = "src"}

[tool.setuptools.packages.find]
where = ["src"]
include = ["lambdagent*"]

[tool.setuptools.package-data]
lambdagent = ["py.typed"]
