from __future__ import annotations from typing import Any from fastapi import Request from app.config import Settings def build_agent_card(settings: Settings, request: Request) -> dict[str, Any]: base_url = _resolve_base_url(settings=settings, request=request) return { "name": settings.a2a_agent_name, "description": settings.a2a_agent_description, "url": f"{base_url}/a2a/rpc", "version": "0.1.0", "protocolVersion": "1.0", "defaultInputModes": ["application/json"], "defaultOutputModes": ["application/json"], "capabilities": { "streaming": False, "pushNotifications": False, "stateTransitionHistory": False, }, "securitySchemes": { "bearerAuth": { "type": "http", "scheme": "bearer", "description": "Use the same Bearer/API key auth as the REST API.", } }, "security": [{"bearerAuth": []}], "skills": [ { "id": "availability.query", "name": "Check Availability", "description": "Checks Google Calendar availability for a given time range.", "tags": ["calendar", "availability", "scheduling"], "examples": [ "SendMessage with params.start/end/calendar_ids to check free/busy for a time window." ], "inputModes": ["application/json"], "outputModes": ["application/json"], } ], } def _resolve_base_url(*, settings: Settings, request: Request) -> str: if settings.a2a_public_base_url: return settings.a2a_public_base_url.rstrip("/") return str(request.base_url).rstrip("/")