重构 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>
This commit is contained in:
57
backend/app/routers/orchestrator.py
Normal file
57
backend/app/routers/orchestrator.py
Normal file
@@ -0,0 +1,57 @@
|
||||
"""
|
||||
工作流编排器 API
|
||||
|
||||
提供启动自动工作流、查看运行状态的端点
|
||||
"""
|
||||
|
||||
from fastapi import APIRouter, HTTPException
|
||||
from pydantic import BaseModel
|
||||
from typing import Dict, Optional
|
||||
|
||||
from ..services.workflow_orchestrator import get_workflow_orchestrator
|
||||
|
||||
router = APIRouter(prefix="/orchestrator", tags=["orchestrator"])
|
||||
|
||||
|
||||
class StartWorkflowRequest(BaseModel):
|
||||
"""启动工作流请求"""
|
||||
workflow_path: str # YAML 文件名,如 dinner-decision.yaml
|
||||
agent_overrides: Optional[Dict[str, str]] = None # agent_id → model 覆盖
|
||||
|
||||
|
||||
@router.post("/start")
|
||||
async def start_workflow(request: StartWorkflowRequest):
|
||||
"""启动一个工作流的自动编排(后台异步执行)"""
|
||||
orchestrator = get_workflow_orchestrator()
|
||||
try:
|
||||
run = await orchestrator.start_workflow(
|
||||
workflow_path=request.workflow_path,
|
||||
agent_overrides=request.agent_overrides,
|
||||
)
|
||||
return {
|
||||
"success": True,
|
||||
"message": f"工作流已启动: {run.workflow_name}",
|
||||
"run_id": run.run_id,
|
||||
"workflow_id": run.workflow_id,
|
||||
}
|
||||
except FileNotFoundError:
|
||||
raise HTTPException(status_code=404, detail=f"工作流文件不存在: {request.workflow_path}")
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
|
||||
|
||||
@router.get("/runs")
|
||||
async def list_runs():
|
||||
"""列出所有编排运行"""
|
||||
orchestrator = get_workflow_orchestrator()
|
||||
return {"runs": orchestrator.list_runs()}
|
||||
|
||||
|
||||
@router.get("/runs/{run_id}")
|
||||
async def get_run(run_id: str):
|
||||
"""获取指定运行的详细状态"""
|
||||
orchestrator = get_workflow_orchestrator()
|
||||
run = orchestrator.get_run(run_id)
|
||||
if not run:
|
||||
raise HTTPException(status_code=404, detail=f"运行不存在: {run_id}")
|
||||
return run.to_dict()
|
||||
Reference in New Issue
Block a user