""" Mock source-verifier agent for A2A testing. Exposes a CAP-compatible FastAPI endpoint. Run with: uvicorn mock_agents.source_verifier:app --port 8001 """ from __future__ import annotations import hashlib import json from datetime import datetime, timezone from typing import List, Optional from fastapi import FastAPI from pydantic import BaseModel app = FastAPI(title="Source Verifier Mock Agent", version="0.1.0") class VerifySourcesRequest(BaseModel): evidence_urls: Optional[List[str]] = None github_url: Optional[str] = None listing_url: Optional[str] = None class VerifySourcesResult(BaseModel): job_id: str status: str verified_urls: List[str] reachable_count: int summary: str result_hash: str completed_at: str @app.get("/health") async def health(): return {"status": "ok", "agent": "source-verifier-mock", "version": "0.1.0"} @app.post("/jobs/verify_sources", response_model=VerifySourcesResult) async def verify_sources(req: VerifySourcesRequest): urls = req.evidence_urls or [] if req.github_url: urls.append(req.github_url) if req.listing_url: urls.append(req.listing_url) job_id = f"sv_mock_{datetime.now(timezone.utc).strftime('%Y%m%d_%H%M%S')}" result = { "job_id": job_id, "verified_urls": urls, "reachable_count": len(urls), "summary": f"Mock verification: {len(urls)} URL(s) checked. All appear reachable.", } result_hash = f"sha256:{hashlib.sha256(json.dumps(result, sort_keys=True).encode()).hexdigest()}" return VerifySourcesResult( job_id=job_id, status="done", verified_urls=urls, reachable_count=len(urls), summary=result["summary"], result_hash=result_hash, completed_at=datetime.now(timezone.utc).isoformat(), )