"""预留 Agent 协议接口:register / unregister / heartbeat / result。""" from fastapi import APIRouter, Depends, Request from app.models.schemas import AgentHeartbeat, AgentInfo, AgentRegister, TaskResult from app.services.agent_service import AgentService from app.services.relay import RelayService from app.services.security import require_auth router = APIRouter() def get_agent_service(request: Request) -> AgentService: return AgentService(request.app.state.redis) def get_relay_service(request: Request) -> RelayService: return RelayService(request.app.state.redis) @router.post("/register", response_model=AgentInfo, summary="Agent 注册") async def register(body: AgentRegister, svc: AgentService = Depends(get_agent_service)): require_auth(body.auth) return await svc.register(body) @router.post("/unregister", summary="Agent 注销") async def unregister(body: dict, svc: AgentService = Depends(get_agent_service)): from fastapi import HTTPException require_auth(body.get("auth", "")) agent_id = body.get("agent_id") if not agent_id: raise HTTPException(status_code=400, detail="agent_id required") if not await svc.unregister(agent_id): raise HTTPException(status_code=404, detail="agent not found") return {"ok": True} @router.post("/heartbeat", summary="Agent 心跳") async def heartbeat(body: AgentHeartbeat, svc: AgentService = Depends(get_agent_service)): from fastapi import HTTPException require_auth(body.auth) if not await svc.heartbeat(body): raise HTTPException(status_code=404, detail="agent not registered") return {"ok": True} @router.post("/result", summary="Agent 结果回传") async def result(body: TaskResult, relay: RelayService = Depends(get_relay_service)): from fastapi import HTTPException require_auth(body.auth) if not await relay.on_result(body): raise HTTPException(status_code=400, detail="result rejected") return {"ok": True}