[project]
name = "tools"
version = "0.1.0"
description = "Tools library for the Aden agent framework"
readme = "README.md"
requires-python = ">=3.11"
license = { text = "Apache-2.0" }
authors = [{ name = "Aden", email = "team@aden.ai" }]
keywords = ["ai", "agents", "tools", "llm"]
classifiers = [
  "Development Status :: 3 - Alpha",
  "Intended Audience :: Developers",
  "License :: OSI Approved :: Apache Software License",
  "Programming Language :: Python :: 3",
  "Programming Language :: Python :: 3.11",
  "Programming Language :: Python :: 3.12",
]

dependencies = [
    "pydantic>=2.0.0",
    "httpx>=0.27.0",
    "beautifulsoup4>=4.12.0",
    "pypdf>=4.0.0",
    "pandas>=2.0.0",
    "jsonpath-ng>=1.6.0",
    "fastmcp>=2.0.0",
    "diff-match-patch>=20230430",
    "python-dotenv>=1.0.0",
    "litellm==1.81.7",  # pinned: supply chain attack in >=1.82.7 (adenhq/hive#6783)
    "dnspython>=2.4.0",
    "resend>=2.0.0",
    "asana>=3.2.0",
    "google-analytics-data>=0.18.0",
    "framework",
    "stripe>=14.3.0",
    "arxiv>=2.1.0",
    "requests>=2.31.0",
    "websockets>=12.0",
    "psycopg2-binary>=2.9.0",
]

[project.optional-dependencies]
dev = [
    "pytest>=7.0.0",
    "pytest-asyncio>=0.21.0",
]
sandbox = [
    "RestrictedPython>=7.0",
]
browser = [
    "pillow>=10.0.0",
    "playwright>=1.40.0",
    "playwright-stealth>=2.0.0",
]
ocr = [
    "pytesseract>=0.3.10",
    "pillow>=10.0.0",
]
excel = [
    "openpyxl>=3.1.0",
]
sql = [
    "duckdb>=1.0.0",
]
bigquery = [
    "google-cloud-bigquery>=3.0.0",
]
databricks = [
    "databricks-sdk>=0.30.0",
    "databricks-mcp>=0.1.0",
]
all = [
    "RestrictedPython>=7.0",
    "pytesseract>=0.3.10",
    "pillow>=10.0.0",
    "duckdb>=1.0.0",
    "openpyxl>=3.1.0",
    "google-cloud-bigquery>=3.0.0",
    "databricks-sdk>=0.30.0",
    "databricks-mcp>=0.1.0",
    "playwright>=1.40.0",
    "playwright-stealth>=2.0.0",
]

[tool.uv.sources]
framework = { workspace = true }

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

[tool.hatch.build.targets.wheel]
packages = ["src/aden_tools"]

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

lint.select = [
  "B",   # bugbear errors
  "C4",  # flake8-comprehensions errors
  "E",   # pycodestyle errors
  "F",   # pyflakes errors
  "I",   # import sorting
  "Q",   # flake8-quotes errors
  "UP",  # py-upgrade
  "W",   # pycodestyle warnings
]

lint.isort.combine-as-imports = true
lint.isort.known-first-party = ["aden_tools"]
lint.isort.section-order = [
  "future",
  "standard-library",
  "third-party",
  "first-party",
  "local-folder",
]

[tool.pytest.ini_options]
testpaths = ["tests"]
asyncio_mode = "auto"
addopts = "-m 'not live'"
markers = [
    "live: Tests that call real external APIs (require credentials, never run in CI)",
]

[dependency-groups]
dev = [
    "ty>=0.0.13",
    "ruff>=0.14.14",
    "duckdb>=1.4.4",
]
