from fastapi import FastAPI, HTTPException from fastapi.responses import HTMLResponse from datetime import datetime import uuid from codex_logic import ( list_capabilities, invoke_capability, wake_module ) app = FastAPI( title="CodexHF API Gateway", version="1.0.0", description="Sovereign orchestration gateway for Codex Spaces", ) # ------------------------- # Human-facing landing page # ------------------------- @app.get("/", response_class=HTMLResponse) def root(): return """ CodexHF Sovereign API Gateway

🧠 CodexHF Sovereign API Gateway

✅ Status: Running

Use /invoke via POST

View API Documentation

""" # ------------------------- # Machine-readable status # ------------------------- @app.get("/status") def status(): return { "service": "CodexHF API Gateway", "status": "running", "timestamp": datetime.utcnow().isoformat(), "endpoints": { "health": "/health", "status": "/status", "capabilities": "/capabilities", "invoke": "/invoke", "wake": "/wake", "docs": "/docs" } } # ------------------------- # Health check # ------------------------- @app.get("/health") def health(): return { "status": "ok", "timestamp": datetime.utcnow().isoformat() } # ------------------------- # Capability registry # ------------------------- @app.get("/capabilities") def capabilities(): return { "capabilities": list_capabilities() } # ------------------------- # Invocation endpoint # ------------------------- @app.post("/invoke") async def invoke(request: dict): trace_id = request.get("trace_id", str(uuid.uuid4())) capability = request.get("capability") payload = request.get("payload", {}) mode = request.get("execution_mode", "sync") if not capability: raise HTTPException(status_code=400, detail="Missing capability") if mode == "async": return { "trace_id": trace_id, "status": "accepted" } result, duration = await invoke_capability(capability, payload) return { "trace_id": trace_id, "result": result, "duration_ms": duration } # ------------------------- # Wake a downstream Space # ------------------------- @app.post("/wake") async def wake(request: dict): module = request.get("module") if not module: raise HTTPException(status_code=400, detail="Missing module") await wake_module(module) return { "status": "awakened", "module": module }