"""Analysis router.""" from __future__ import annotations import logging from fastapi import APIRouter, Depends, HTTPException from pydantic import BaseModel, Field from hermes.agents.orchestrator.agent import OrchestratorAgent from hermes.api.middleware import sanitize_repo_name from hermes.core.auth import get_api_key_dependency logger = logging.getLogger(__name__) router = APIRouter(dependencies=[Depends(get_api_key_dependency)]) class RepoAnalysisRequest(BaseModel): owner: str = Field(..., max_length=100, description="Repository owner") repo: str = Field(..., max_length=100, description="Repository name") class AnalysisResponse(BaseModel): task_id: str status: str title: str summary: str findings_count: int orchestrator = OrchestratorAgent() @router.post("/analyze-repo", response_model=AnalysisResponse) async def analyze_repo(request: RepoAnalysisRequest) -> AnalysisResponse: try: owner = sanitize_repo_name(request.owner) repo = sanitize_repo_name(request.repo) except ValueError as e: raise HTTPException(status_code=422, detail=str(e)) from e try: report = await orchestrator.execute_repo_analysis(owner, repo) return AnalysisResponse( task_id=report.id, status="completed", title=report.title, summary=report.summary, findings_count=len(report.findings), ) except Exception as e: logger.error(f"Analysis failed: {e}", exc_info=True) raise HTTPException(status_code=500, detail="Repository analysis failed") from e