from contextlib import asynccontextmanager from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from app.config.settings import settings @asynccontextmanager async def lifespan(app: FastAPI): # Startup: initialise DB connection pool and agent registry from app.core.agent_registry import registry # noqa: F401 — triggers module load import app.agents # noqa: F401 — triggers @registry.register decorators yield # Shutdown: nothing to clean up for now def create_app() -> FastAPI: app = FastAPI( title="Adiuva Cloud API", version="0.1.0", docs_url="/docs" if settings.ENV == "dev" else None, redoc_url=None, lifespan=lifespan, ) app.add_middleware( CORSMiddleware, allow_origins=settings.CORS_ORIGINS, allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # Routers (registered when implemented) # from app.api.routes import auth, chat, plans, backup, billing # app.include_router(auth.router, prefix="/api/v1") # app.include_router(chat.router, prefix="/api/v1") # app.include_router(plans.router, prefix="/api/v1") # app.include_router(backup.router, prefix="/api/v1") # app.include_router(billing.router, prefix="/api/v1") @app.get("/api/v1/health", tags=["health"]) async def health() -> dict: return {"status": "ok", "version": app.version} return app app = create_app()