Tools (18 total): - calculate: Safe AST-based math expression evaluator - fetch: Async HTTP with SSRF protection - files: Sandboxed read/write/list/delete - shell: Command execution with blocklist - search: Web search (SerpAPI, Google, Bing) - keyvalue: In-memory key-value store - librarian: exist-db XML database integration - convert: XML↔JSON conversion + XPath extraction Infrastructure: - CLI with run/init/check/version commands - Config loader for organism.yaml - Feature detection for optional dependencies - Optional extras in pyproject.toml LLM: - Fixed llm_connection.py to wrap working router WASM: - Documented WASM listener interface - Stub implementation for future work MCP: - Reddit sentiment MCP server example Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
115 lines
3.1 KiB
TOML
115 lines
3.1 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"]
|
|
|
|
# All optional features
|
|
all = [
|
|
"xml-pipeline[anthropic,openai,redis,search,auth,server]",
|
|
]
|
|
|
|
# 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
|