Files
multiAgentTry/backend/app/routers/agents.py
Claude Code 1719d1f1f9 重构 API 路由并新增工作流编排功能
后端:
- 重构 agents, heartbeats, locks, meetings, resources, roles, workflows 路由
- 新增 orchestrator 和 providers 路由
- 新增 CLI 调用器和流程编排服务
- 添加日志配置和依赖项

前端:
- 更新 AgentsPage、SettingsPage、WorkflowPage 页面
- 扩展 api.ts 新增 API 接口

其他:
- 清理测试 agent 数据文件
- 新增示例工作流和项目审计报告

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 16:36:25 +08:00

100 lines
2.7 KiB
Python

"""
Agent 管理 API 路由
接入 AgentRegistry 服务,提供 Agent 注册、查询、状态管理
"""
from fastapi import APIRouter, HTTPException
from pydantic import BaseModel
from typing import Optional
from dataclasses import asdict
from ..services.agent_registry import get_agent_registry
router = APIRouter()
class AgentCreate(BaseModel):
agent_id: str
name: str
role: str = "developer"
model: str
description: Optional[str] = None
class AgentStateUpdate(BaseModel):
task: Optional[str] = ""
progress: Optional[int] = 0
working_files: Optional[list] = None
status: Optional[str] = "idle"
@router.get("")
@router.get("/")
async def list_agents():
"""获取所有 Agent 列表"""
registry = get_agent_registry()
agents = await registry.list_agents()
return {
"agents": [asdict(agent) for agent in agents]
}
@router.post("/register")
async def register_agent(agent: AgentCreate):
"""注册新 Agent"""
registry = get_agent_registry()
agent_info = await registry.register_agent(
agent_id=agent.agent_id,
name=agent.name,
role=agent.role,
model=agent.model,
description=agent.description or ""
)
return asdict(agent_info)
@router.get("/{agent_id}")
async def get_agent(agent_id: str):
"""获取指定 Agent 信息"""
registry = get_agent_registry()
agent_info = await registry.get_agent(agent_id)
if not agent_info:
raise HTTPException(status_code=404, detail="Agent not found")
return asdict(agent_info)
@router.delete("/{agent_id}")
async def delete_agent(agent_id: str):
"""删除 Agent"""
registry = get_agent_registry()
success = await registry.unregister_agent(agent_id)
if not success:
raise HTTPException(status_code=404, detail="Agent not found")
return {"message": "Agent deleted"}
@router.get("/{agent_id}/state")
async def get_agent_state(agent_id: str):
"""获取 Agent 状态"""
registry = get_agent_registry()
state = await registry.get_state(agent_id)
if not state:
raise HTTPException(status_code=404, detail="Agent state not found")
return asdict(state)
@router.post("/{agent_id}/state")
async def update_agent_state(agent_id: str, data: AgentStateUpdate):
"""更新 Agent 状态"""
registry = get_agent_registry()
agent_info = await registry.get_agent(agent_id)
if not agent_info:
raise HTTPException(status_code=404, detail="Agent not found")
await registry.update_state(
agent_id=agent_id,
task=data.task or "",
progress=data.progress or 0,
working_files=data.working_files
)
return {"success": True}