[project] name = "aiatlas" version = "0.1.0" description = "AI Atlas — the global intelligence layer for artificial intelligence: first-party connectors, raw historical archive, temporal knowledge graph, local LLM extraction factory and public API" requires-python = ">=3.12" dependencies = [ "fastapi>=0.115", "uvicorn[standard]>=0.30", "pydantic>=2.8", "pydantic-settings>=2.4", "sqlalchemy[asyncio]>=2.0.35", "asyncpg>=0.30", "alembic>=1.13", "httpx[http2]>=0.27", "orjson>=3.10", "typer>=0.12", "rich>=13", "redis>=5.1", "apscheduler>=3.10,<4", "python-ulid>=2.7", "pyyaml>=6", "python-dateutil>=2.9", "tenacity>=9", "python-slugify>=8", "selectolax>=0.3.21", "feedparser>=6.0.11", "markdown-it-py>=3.0", "pypdf>=5.0", "rapidfuzz>=3.9", "pgvector>=0.3", "numpy>=2", ] [project.optional-dependencies] dev = ["pytest>=8", "pytest-asyncio>=0.24", "ruff>=0.6", "respx>=0.21"] browser = ["playwright>=1.47"] [project.scripts] aia = "aiatlas.cli:app" [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] packages = ["src/aiatlas"] [tool.ruff] line-length = 120 target-version = "py312" [tool.pytest.ini_options] testpaths = ["tests"] asyncio_mode = "auto" markers = ["live: hits real external endpoints (skipped unless -m live)"]