xml-pipeline/pyproject.toml
2026-01-18 18:00:11 -08:00

118 lines
3.2 KiB
TOML

# pyproject.toml
[build-system]
requires = ["setuptools>=45", "wheel"]
build-backend = "setuptools.build_meta"
[project]
name = "xml-pipeline"
version = "0.2.0"
description = "Tamper-proof nervous system for multi-agent organisms"
readme = "README.md"
requires-python = ">=3.11"
license = {text = "MIT"}
keywords = ["xml", "multi-agent", "message-bus", "aiostream"]
classifiers = [
"Development Status :: 3 - Alpha",
"Intended Audience :: Developers",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Framework :: AsyncIO",
]
# =============================================================================
# CORE DEPENDENCIES - minimal, always installed
# =============================================================================
dependencies = [
# XML processing
"lxml",
# Async streaming
"aiostream>=0.5",
# Config & serialization
"pyyaml",
"pyhumps",
# Crypto (for identity keys)
"cryptography",
# Console
"prompt_toolkit>=3.0",
"termcolor",
# HTTP client for LLM backends
"httpx>=0.27",
]
# =============================================================================
# OPTIONAL DEPENDENCIES - user opts into what they need
# =============================================================================
[project.optional-dependencies]
# LLM provider SDKs (alternative to raw httpx)
anthropic = ["anthropic>=0.39"]
openai = ["openai>=1.0"]
# Tool backends
redis = ["redis>=5.0"] # For distributed keyvalue
search = ["duckduckgo-search"] # For search tool
# Auth (only for multi-tenant/remote deployments)
auth = [
"pyotp", # TOTP for privileged channel
"argon2-cffi", # Password hashing
]
# WebSocket server (for remote connections)
server = ["websockets"]
# LSP support for config editor (requires yaml-language-server: npm install -g yaml-language-server)
lsp = ["lsp-client>=0.3.0"]
# All optional features
all = [
"xml-pipeline[anthropic,openai,redis,search,auth,server,lsp]",
]
# Development
test = [
"pytest>=7.0",
"pytest-asyncio>=0.21",
]
dev = [
"xml-pipeline[test,all]",
"mypy",
"ruff",
]
# =============================================================================
# CLI ENTRY POINTS
# =============================================================================
[project.scripts]
xml-pipeline = "agentserver.cli:main"
xp = "agentserver.cli:main"
# =============================================================================
# TOOL CONFIGURATION
# =============================================================================
[tool.pytest.ini_options]
asyncio_mode = "auto"
asyncio_default_fixture_loop_scope = "function"
testpaths = ["tests"]
python_files = ["test_*.py"]
norecursedirs = [".git", "__pycache__", "*.egg-info"]
[tool.setuptools.packages.find]
where = ["."]
include = ["agentserver*", "third_party*"]
[tool.ruff]
line-length = 100
target-version = "py311"
[tool.ruff.lint]
select = ["E", "F", "I", "N", "W", "UP"]
ignore = ["E501"]
[tool.mypy]
python_version = "3.11"
warn_return_any = true
warn_unused_ignores = true
disallow_untyped_defs = true