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

[project]
name = "aastf"
version = "0.10.0"
description = "Agentic AI Security Testing Framework - OWASP ASI Top 10"
readme = "README.md"
license = { text = "MIT" }
requires-python = ">=3.10"
keywords = ["security", "ai", "agents", "testing", "llm", "owasp"]
classifiers = [
    "Development Status :: 3 - Alpha",
    "Intended Audience :: Developers",
    "License :: OSI Approved :: MIT License",
    "Programming Language :: Python :: 3.10",
    "Programming Language :: Python :: 3.11",
    "Programming Language :: Python :: 3.12",
    "Programming Language :: Python :: 3.13",
    "Topic :: Security",
]
dependencies = [
    "pydantic>=2.5",
    "typer>=0.12",
    "rich>=13.0",
    "loguru>=0.7",
    "fastapi>=0.110",
    "uvicorn>=0.27",
    "httpx>=0.27",
    "PyYAML>=6.0",
    "jinja2>=3.1",
    "anyio>=4.0",
]

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

[project.optional-dependencies]
langgraph = ["langgraph>=1.0", "langchain-core>=0.3"]
openai-agents = ["openai>=1.30"]
crewai = ["crewai>=0.28"]
pydantic-ai = ["pydantic-ai>=0.0.13"]
google-adk = ["google-adk>=0.1"]
ms-agent = ["semantic-kernel>=1.0"]
dev = [
    "pytest>=8.0",
    "pytest-asyncio>=0.23",
    "hypothesis>=6.0",
    "ruff>=0.4",
]
all = ["aastf[langgraph,openai-agents,crewai,pydantic-ai,google-adk,ms-agent]"]

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

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

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

[tool.ruff.lint]
select = ["E", "F", "I", "UP", "B", "SIM"]
ignore = ["E501", "B008"]  # B008: typer requires Option/Argument in defaults

[tool.pytest.ini_options]
asyncio_mode = "auto"
testpaths = ["tests"]
markers = [
    "integration: requires real LLM API key",
    "slow: takes more than 10s",
]

[tool.ruff.lint.isort]
known-first-party = ["aastf"]

[tool.coverage.run]
source = ["src/aastf"]
omit = [
    # Framework adapters require live SDK connections — not unit-testable
    "src/aastf/harness/adapters/langgraph.py",
    "src/aastf/harness/adapters/crewai.py",
    "src/aastf/harness/adapters/openai_agents.py",
    "src/aastf/harness/adapters/google_adk.py",
    "src/aastf/harness/adapters/ms_agent.py",
    # CLI command dispatch — logic tested via get_blocking_findings; typer
    # invocation itself requires a subprocess or live agent
    "src/aastf/cli/app.py",
    "src/aastf/cli/commands/report.py",
    "src/aastf/cli/commands/scenario.py",
    "src/aastf/cli/commands/serve.py",
    # Sandbox FastAPI server — covered by integration tests, not unit tests
    "src/aastf/sandbox/server.py",
    "src/aastf/sandbox/tools.py",
]

[tool.coverage.report]
fail_under = 85
show_missing = true
skip_covered = false
