08 /
main.py
Entrypoint
PY
FastAPI App + Startup
main.py
from __future__ import annotations import asyncio, logging from contextlib import asynccontextmanager from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from core.state import SystemState from core.ssot import get_all_tasks from core.heartbeat import heartbeat_loop from api.webhook import router as webhook_router from api.events import router as events_router from api.actions import router as actions_router logging.basicConfig(level=logging.INFO, format="%(asctime)s %(name)s %(levelname)s %(message)s") log = logging.getLogger("main") @asynccontextmanager async def lifespan(app: FastAPI): # ── Startup ────────────────────────────────────── log.info("AgentOS Backend starting...") # 1. Warm up SystemState from SSOT tasks = get_all_tasks() for t in tasks: from core.state import TaskSnapshot from datetime import timezone import datetime as dt snap = TaskSnapshot( task_id=t["task_id"], status=t.get("status", "unknown"), risk_level=t.get("risk_level", "medium"), reject_count=t.get("reject_count", 0), branch=t.get("branch", ""), updated_at=dt.datetime.now(timezone.utc), ) await SystemState.get().update_task(snap) log.info(f"Loaded {len(tasks)} tasks from SSOT") # 2. Start heartbeat monitor as background task hb_task = asyncio.create_task(heartbeat_loop()) log.info("Heartbeat monitor started") yield # ── Running ── # ── Shutdown ───────────────────────────────────── hb_task.cancel() try: await hb_task except asyncio.CancelledError: pass log.info("AgentOS Backend shut down cleanly") app = FastAPI( title="AgentOS Backend", version="0.1.0", lifespan=lifespan, ) app.add_middleware( CORSMiddleware, allow_origins=["http://localhost:*", "https://*.zixiangzhang.com"], allow_methods=["*"], allow_headers=["*"], ) app.include_router(webhook_router) app.include_router(events_router) app.include_router(actions_router)