Files
multiAgentTry/backend/app/routers/humans.py
Claude Code dc398d7c7b 完整实现 Swarm 多智能体协作系统
- 新增 CLIPluginAdapter 统一接口 (backend/app/core/agent_adapter.py)
- 新增 LLM 服务层,支持 Anthropic/OpenAI/DeepSeek/Ollama (backend/app/services/llm_service.py)
- 新增 Agent 执行引擎,支持文件锁自动管理 (backend/app/services/agent_executor.py)
- 新增 NativeLLMAgent 原生 LLM 适配器 (backend/app/adapters/native_llm_agent.py)
- 新增进程管理器 (backend/app/services/process_manager.py)
- 新增 Agent 控制 API (backend/app/routers/agents_control.py)
- 新增 WebSocket 实时通信 (backend/app/routers/websocket.py)
- 更新前端 AgentsPage,支持启动/停止 Agent
- 测试通过:Agent 启动、批量操作、栅栏同步

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 17:32:11 +08:00

237 lines
6.3 KiB
Python

"""
人类输入 API 路由
"""
from fastapi import APIRouter, HTTPException
from pydantic import BaseModel
from typing import List, Optional
from app.services.human_input import get_human_input_service
router = APIRouter()
# ========== 请求/响应模型 ==========
class TaskRequest(BaseModel):
"""任务请求"""
content: str
from_user: str = "user001"
priority: str = "medium"
title: str = ""
target_files: List[str] = []
suggested_agent: str = ""
urgent: bool = False
class CommentRequest(BaseModel):
"""评论请求"""
meeting_id: str
content: str
from_user: str = "user001"
comment_type: str = "proposal"
priority: str = "normal"
class ParticipantRegister(BaseModel):
"""参与者注册"""
user_id: str
name: str
role: str = ""
avatar: str = "👤"
class UserStatusUpdate(BaseModel):
"""用户状态更新"""
status: str
current_focus: str = ""
# ========== API 端点 ==========
@router.get("/summary")
async def get_summary():
"""获取人类输入服务摘要"""
service = get_human_input_service()
summary = await service.get_summary()
return summary
@router.post("/register")
async def register_participant(request: ParticipantRegister):
"""注册人类参与者"""
service = get_human_input_service()
await service.register_participant(
request.user_id,
request.name,
request.role,
request.avatar
)
return {"success": True, "user_id": request.user_id}
@router.get("/participants")
async def get_participants():
"""获取所有参与者"""
service = get_human_input_service()
participants = await service.get_participants()
return {
"participants": [
{
"id": p.id,
"name": p.name,
"role": p.role,
"status": p.status,
"avatar": p.avatar
}
for p in participants
]
}
@router.post("/tasks")
async def add_task_request(request: TaskRequest):
"""提交任务请求"""
service = get_human_input_service()
task_id = await service.add_task_request(
from_user=request.from_user,
content=request.content,
priority=request.priority,
title=request.title,
target_files=request.target_files,
suggested_agent=request.suggested_agent,
urgent=request.urgent
)
return {"success": True, "task_id": task_id}
@router.get("/tasks")
async def get_pending_tasks(
priority: Optional[str] = None,
agent: Optional[str] = None
):
"""获取待处理任务"""
service = get_human_input_service()
tasks = await service.get_pending_tasks(
priority_filter=priority,
agent_filter=agent
)
return {
"tasks": [
{
"id": t.id,
"from_user": t.from_user,
"timestamp": t.timestamp,
"priority": t.priority,
"type": t.type,
"title": t.title,
"content": t.content,
"target_files": t.target_files,
"suggested_agent": t.suggested_agent,
"urgent": t.urgent,
"is_urgent": t.is_urgent
}
for t in tasks
],
"count": len(tasks)
}
@router.get("/tasks/urgent")
async def get_urgent_tasks():
"""获取紧急任务"""
service = get_human_input_service()
tasks = await service.get_urgent_tasks()
return {
"tasks": [
{
"id": t.id,
"from_user": t.from_user,
"content": t.content,
"title": t.title,
"suggested_agent": t.suggested_agent
}
for t in tasks
],
"count": len(tasks)
}
@router.put("/tasks/{task_id}/processing")
async def mark_task_processing(task_id: str):
"""标记任务为处理中"""
service = get_human_input_service()
success = await service.mark_task_processing(task_id)
if not success:
raise HTTPException(status_code=404, detail="Task not found")
return {"success": True}
@router.put("/tasks/{task_id}/complete")
async def mark_task_completed(task_id: str):
"""标记任务为已完成"""
service = get_human_input_service()
success = await service.mark_task_completed(task_id)
if not success:
raise HTTPException(status_code=404, detail="Task not found")
return {"success": True}
@router.post("/comments")
async def add_meeting_comment(request: CommentRequest):
"""提交会议评论"""
service = get_human_input_service()
comment_id = await service.add_meeting_comment(
from_user=request.from_user,
meeting_id=request.meeting_id,
content=request.content,
comment_type=request.comment_type,
priority=request.priority
)
return {"success": True, "comment_id": comment_id}
@router.get("/comments")
async def get_pending_comments(meeting_id: Optional[str] = None):
"""获取待处理评论"""
service = get_human_input_service()
comments = await service.get_pending_comments(meeting_id)
return {
"comments": [
{
"id": c.id,
"from_user": c.from_user,
"meeting_id": c.meeting_id,
"timestamp": c.timestamp,
"type": c.type,
"priority": c.priority,
"content": c.content
}
for c in comments
],
"count": len(comments)
}
@router.put("/comments/{comment_id}/addressed")
async def mark_comment_addressed(comment_id: str):
"""标记评论为已处理"""
service = get_human_input_service()
success = await service.mark_comment_addressed(comment_id)
if not success:
raise HTTPException(status_code=404, detail="Comment not found")
return {"success": True}
@router.put("/users/{user_id}/status")
async def update_user_status(user_id: str, request: UserStatusUpdate):
"""更新用户状态"""
service = get_human_input_service()
success = await service.update_user_status(
user_id,
request.status,
request.current_focus
)
if not success:
raise HTTPException(status_code=404, detail="User not found")
return {"success": True}