from contextlib import asynccontextmanager from fastapi import FastAPI from app.api.routes import router from app.services.scheduler import scheduler_service from app.services.opencode_client import opencode_client from app.services.session_manager import session_manager from app.services.history import history_service from app.services.persistent_session import persistent_session_manager from app.core.config import settings from app.core.logging import logger @asynccontextmanager async def lifespan(app: FastAPI): logger.info("Starting XCClaw server...") history_service.load() session_manager.load() scheduler_service.load() persistent_session_manager.load() scheduler_service.start() yield logger.info("Shutting down XCClaw server...") scheduler_service.shutdown() await opencode_client.close() app = FastAPI( title="XCClaw", description="基于 OpenCode Agent 的任务调度系统", version="0.1.0", lifespan=lifespan, ) app.include_router(router) if __name__ == "__main__": import uvicorn uvicorn.run( "app.main:app", host=settings.app_host, port=settings.app_port, reload=True, )