from fastapi import APIRouter, HTTPException from pydantic import BaseModel from typing import List, Optional from src.agents.hermes_agent import HermesCodingAgent from src.agents.base import AgentContext router = APIRouter(prefix="/coding", tags=["coding", "controller"]) class ChatRequest(BaseModel): prompt: str memoryFiles: Optional[List[str]] = None class FileReadRequest(BaseModel): filePath: str class FileWriteRequest(BaseModel): filePath: str content: str class TerminalRequest(BaseModel): command: str args: List[str] = [] @router.post("/chat") async def chat(request: ChatRequest): agent = HermesCodingAgent() result = await agent.execute(AgentContext(), prompt=request.prompt, memory_files=request.memoryFiles or []) if "error" in result: raise HTTPException(status_code=400, detail=result["error"]) return result @router.post("/file/read") async def file_read(request: FileReadRequest): agent = HermesCodingAgent() res = agent.execute(AgentContext(), tool="file_read", file_path=request.filePath) if "error" in res: raise HTTPException(status_code=400, detail=res["error"]) return res @router.post("/file/write") async def file_write(request: FileWriteRequest): agent = HermesCodingAgent() res = agent.execute(AgentContext(), tool="file_write", file_path=request.filePath, content=request.content) if "error" in res: raise HTTPException(status_code=400, detail=res["error"]) return res @router.post("/terminal") async def terminal(request: TerminalRequest): agent = HermesCodingAgent() res = agent.execute(AgentContext(), tool="terminal", command=request.command, args=request.args) if "error" in res: raise HTTPException(status_code=400, detail=res["error"]) return res