diff --git a/app/api/routers/calendar.py b/app/api/routers/calendar.py index 1d00c98..d9b84f0 100644 --- a/app/api/routers/calendar.py +++ b/app/api/routers/calendar.py @@ -561,6 +561,29 @@ def agent_update_virtual_slot( return TimeSlotEditResponse(slot=_slot_to_response(slot), warnings=[]) +@router.get( + "/agent/status", + summary="Read an agent's current runtime status (no side effects)", +) +def get_agent_status( + agent_id: str = Query(..., description="Target agent_id"), + x_claw_identifier: str = Header(..., alias="X-Claw-Identifier"), + db: Session = Depends(get_db), +): + """Return `{agent_id, status}` so callers (Fabric.OpenclawPlugin's + triage on-call gate, etc.) can decide whether the agent is currently + eligible without flipping their state. + + No-op for unknown agents — returns 404 with `{detail: 'Agent not + found'}` so the caller can decide whether to fail-open or fail-closed. + """ + agent = _require_agent(db, agent_id, x_claw_identifier) + return { + "agent_id": agent.agent_id, + "status": agent.status.value if hasattr(agent.status, 'value') else str(agent.status), + } + + @router.post( "/agent/status", summary="Update agent runtime status from plugin",