- 新增 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>
687 lines
11 KiB
Markdown
687 lines
11 KiB
Markdown
# Swarm Command Center - API 接口文档
|
||
|
||
后端服务已完整实现并通过测试。本文档描述前端与后端交互的 API 接口。
|
||
|
||
## 基础信息
|
||
|
||
- **API 基础地址**: `http://localhost:8000/api`
|
||
- **数据格式**: JSON
|
||
- **字符编码**: UTF-8
|
||
|
||
## 服务状态
|
||
|
||
| 服务 | 状态 | 说明 |
|
||
|------|------|------|
|
||
| StorageService | ✅ 已测试 | JSON 文件存储 |
|
||
| FileLockService | ✅ 已测试 | 文件锁管理 |
|
||
| HeartbeatService | ✅ 已测试 | Agent 心跳与超时检测 |
|
||
| AgentRegistry | ✅ 已测试 | Agent 注册与状态管理 |
|
||
| MeetingScheduler | ✅ 已测试 | 会议栅栏同步 |
|
||
| MeetingRecorder | ✅ 已测试 | 会议记录与 Markdown |
|
||
| ResourceManager | ✅ 已测试 | 资源整合管理 |
|
||
| WorkflowEngine | ✅ 已测试 | YAML 工作流 |
|
||
| RoleAllocator | ✅ 已测试 | AI 角色分配 |
|
||
|
||
---
|
||
|
||
## 1. Agent 管理接口
|
||
|
||
### 1.1 列出所有 Agent
|
||
|
||
```http
|
||
GET /api/agents
|
||
```
|
||
|
||
**响应示例**:
|
||
```json
|
||
{
|
||
"agents": [
|
||
{
|
||
"agent_id": "claude-001",
|
||
"name": "Claude Code",
|
||
"role": "architect",
|
||
"model": "claude-opus-4.6",
|
||
"status": "idle",
|
||
"created_at": "2026-03-05T10:30:00"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
### 1.2 注册新 Agent
|
||
|
||
```http
|
||
POST /api/agents/register
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"agent_id": "claude-001",
|
||
"name": "Claude Code",
|
||
"role": "architect",
|
||
"model": "claude-opus-4.6",
|
||
"description": "负责架构设计"
|
||
}
|
||
```
|
||
|
||
**角色可选值**: `architect`, `pm`, `developer`, `qa`, `reviewer`, `human`
|
||
|
||
### 1.3 获取 Agent 详情
|
||
|
||
```http
|
||
GET /api/agents/:agent_id
|
||
```
|
||
|
||
**响应示例**:
|
||
```json
|
||
{
|
||
"agent_id": "claude-001",
|
||
"name": "Claude Code",
|
||
"role": "architect",
|
||
"model": "claude-opus-4.6",
|
||
"status": "working",
|
||
"created_at": "2026-03-05T10:30:00"
|
||
}
|
||
```
|
||
|
||
### 1.4 获取 Agent 状态
|
||
|
||
```http
|
||
GET /api/agents/:agent_id/state
|
||
```
|
||
|
||
**响应示例**:
|
||
```json
|
||
{
|
||
"agent_id": "claude-001",
|
||
"current_task": "修复登录bug",
|
||
"progress": 75,
|
||
"working_files": ["src/auth/login.py"],
|
||
"last_update": "2026-03-05T10:35:00"
|
||
}
|
||
```
|
||
|
||
### 1.5 更新 Agent 状态
|
||
|
||
```http
|
||
POST /api/agents/:agent_id/state
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"task": "编写测试用例",
|
||
"progress": 50,
|
||
"working_files": ["tests/test_auth.py"]
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 2. 文件锁接口
|
||
|
||
### 2.1 获取所有锁
|
||
|
||
```http
|
||
GET /api/locks
|
||
```
|
||
|
||
**响应示例**:
|
||
```json
|
||
{
|
||
"locks": [
|
||
{
|
||
"file_path": "src/auth/login.py",
|
||
"agent_id": "claude-001",
|
||
"agent_name": "CLA",
|
||
"acquired_at": "2026-03-05T10:30:00",
|
||
"elapsed_display": "5m 30s"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
### 2.2 获取文件锁
|
||
|
||
```http
|
||
POST /api/locks/acquire
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"file_path": "src/auth/login.py",
|
||
"agent_id": "claude-001",
|
||
"agent_name": "CLA"
|
||
}
|
||
```
|
||
|
||
**响应示例**:
|
||
```json
|
||
{
|
||
"success": true,
|
||
"file_path": "src/auth/login.py",
|
||
"agent_id": "claude-001"
|
||
}
|
||
```
|
||
|
||
### 2.3 释放文件锁
|
||
|
||
```http
|
||
POST /api/locks/release
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"file_path": "src/auth/login.py",
|
||
"agent_id": "claude-001"
|
||
}
|
||
```
|
||
|
||
### 2.4 检查文件锁定状态
|
||
|
||
```http
|
||
GET /api/locks/check?file_path=src/auth/login.py
|
||
```
|
||
|
||
**响应示例**:
|
||
```json
|
||
{
|
||
"file_path": "src/auth/login.py",
|
||
"locked": true,
|
||
"locked_by": "claude-001"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 3. 心跳接口
|
||
|
||
### 3.1 获取所有心跳
|
||
|
||
```http
|
||
GET /api/heartbeats
|
||
```
|
||
|
||
**响应示例**:
|
||
```json
|
||
{
|
||
"heartbeats": {
|
||
"claude-001": {
|
||
"agent_id": "claude-001",
|
||
"status": "working",
|
||
"current_task": "修复bug",
|
||
"progress": 50,
|
||
"elapsed_display": "2m 15s",
|
||
"is_timeout": false
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
### 3.2 更新心跳
|
||
|
||
```http
|
||
POST /api/heartbeats/:agent_id
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"status": "working",
|
||
"current_task": "实现功能",
|
||
"progress": 75
|
||
}
|
||
```
|
||
|
||
**状态可选值**: `working`, `waiting`, `idle`, `error`
|
||
|
||
### 3.3 检查超时 Agent
|
||
|
||
```http
|
||
GET /api/heartbeats/timeouts?timeout_seconds=60
|
||
```
|
||
|
||
**响应示例**:
|
||
```json
|
||
{
|
||
"timeout_seconds": 60,
|
||
"timeout_agents": ["agent-002", "agent-003"]
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 4. 会议调度接口
|
||
|
||
### 4.1 创建会议
|
||
|
||
```http
|
||
POST /api/meetings/create
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"meeting_id": "design-review-001",
|
||
"title": "设计评审会议",
|
||
"expected_attendees": ["claude-001", "kimi-002", "opencode-003"],
|
||
"min_required": 2
|
||
}
|
||
```
|
||
|
||
### 4.2 获取会议队列
|
||
|
||
```http
|
||
GET /api/meetings/:meeting_id/queue
|
||
```
|
||
|
||
**响应示例**:
|
||
```json
|
||
{
|
||
"meeting_id": "design-review-001",
|
||
"title": "设计评审会议",
|
||
"status": "waiting",
|
||
"expected_attendees": ["claude-001", "kimi-002", "opencode-003"],
|
||
"arrived_attendees": ["claude-001", "kimi-002"],
|
||
"missing_attendees": ["opencode-003"],
|
||
"progress": "2/3",
|
||
"is_ready": false
|
||
}
|
||
```
|
||
|
||
### 4.3 等待会议开始(栅栏同步)
|
||
|
||
```http
|
||
POST /api/meetings/:meeting_id/wait
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"agent_id": "claude-001",
|
||
"timeout": 300
|
||
}
|
||
```
|
||
|
||
**响应示例**:
|
||
```json
|
||
{
|
||
"result": "started",
|
||
"meeting_id": "design-review-001",
|
||
"agent_id": "claude-001"
|
||
}
|
||
```
|
||
|
||
**result 说明**:
|
||
- `started`: 会议已开始(最后一个到达者触发)
|
||
- `timeout`: 等待超时
|
||
- `error`: 发生错误
|
||
|
||
### 4.4 结束会议
|
||
|
||
```http
|
||
POST /api/meetings/:meeting_id/end
|
||
```
|
||
|
||
---
|
||
|
||
## 5. 会议记录接口
|
||
|
||
### 5.1 创建会议记录
|
||
|
||
```http
|
||
POST /api/meetings/record/create
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"meeting_id": "design-review-001",
|
||
"title": "设计评审",
|
||
"attendees": ["claude-001", "kimi-002"],
|
||
"steps": ["收集想法", "讨论迭代", "生成共识"]
|
||
}
|
||
```
|
||
|
||
### 5.2 添加讨论记录
|
||
|
||
```http
|
||
POST /api/meetings/:meeting_id/discuss
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"agent_id": "claude-001",
|
||
"agent_name": "Claude",
|
||
"content": "我建议使用 JWT 认证方案",
|
||
"step": "讨论迭代"
|
||
}
|
||
```
|
||
|
||
### 5.3 更新会议进度
|
||
|
||
```http
|
||
POST /api/meetings/:meeting_id/progress
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"step": "讨论迭代"
|
||
}
|
||
```
|
||
|
||
### 5.4 获取会议详情
|
||
|
||
```http
|
||
GET /api/meetings/:meeting_id?date=2026-03-05
|
||
```
|
||
|
||
**响应示例**:
|
||
```json
|
||
{
|
||
"meeting_id": "design-review-001",
|
||
"title": "设计评审",
|
||
"date": "2026-03-05",
|
||
"status": "in_progress",
|
||
"attendees": ["claude-001", "kimi-002"],
|
||
"steps": [
|
||
{"step_id": "step_1", "label": "收集想法", "status": "completed"},
|
||
{"step_id": "step_2", "label": "讨论迭代", "status": "active"},
|
||
{"step_id": "step_3", "label": "生成共识", "status": "pending"}
|
||
],
|
||
"discussions": [
|
||
{
|
||
"agent_id": "claude-001",
|
||
"agent_name": "Claude",
|
||
"content": "我建议使用 JWT",
|
||
"timestamp": "2026-03-05T10:30:00",
|
||
"step": "讨论迭代"
|
||
}
|
||
],
|
||
"progress_summary": "1/3",
|
||
"consensus": ""
|
||
}
|
||
```
|
||
|
||
### 5.5 完成会议
|
||
|
||
```http
|
||
POST /api/meetings/:meeting_id/finish
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"consensus": "采用 JWT + Redis 方案"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 6. 资源管理接口
|
||
|
||
### 6.1 执行任务
|
||
|
||
```http
|
||
POST /api/execute
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"agent_id": "claude-001",
|
||
"task": "修复 src/auth/login.py 中的 bug",
|
||
"timeout": 300
|
||
}
|
||
```
|
||
|
||
**响应示例**:
|
||
```json
|
||
{
|
||
"success": true,
|
||
"message": "Task executed: 修复 src/auth/login.py 中的 bug",
|
||
"files_locked": ["src/auth/login.py"],
|
||
"duration_seconds": 1.25
|
||
}
|
||
```
|
||
|
||
### 6.2 获取所有 Agent 状态
|
||
|
||
```http
|
||
GET /api/status
|
||
```
|
||
|
||
**响应示例**:
|
||
```json
|
||
{
|
||
"agents": [
|
||
{
|
||
"agent_id": "claude-001",
|
||
"info": {
|
||
"name": "Claude Code",
|
||
"role": "architect",
|
||
"model": "claude-opus-4.6"
|
||
},
|
||
"heartbeat": {
|
||
"status": "working",
|
||
"current_task": "修复bug",
|
||
"progress": 50,
|
||
"elapsed": "3m 20s"
|
||
},
|
||
"locks": [
|
||
{"file": "src/auth/login.py", "elapsed": "2m 10s"}
|
||
],
|
||
"state": {
|
||
"task": "修复bug",
|
||
"progress": 50,
|
||
"working_files": ["src/auth/login.py"]
|
||
}
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
### 6.3 解析任务文件
|
||
|
||
```http
|
||
POST /api/parse-task
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"task": "修复 src/auth/login.py 和 src/utils/helper.js"
|
||
}
|
||
```
|
||
|
||
**响应示例**:
|
||
```json
|
||
{
|
||
"task": "修复 src/auth/login.py 和 src/utils/helper.js",
|
||
"files": ["src/auth/login.py", "src/utils/helper.js"]
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 7. 工作流接口
|
||
|
||
### 7.1 加载工作流
|
||
|
||
```http
|
||
POST /api/workflows/load
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"path": "example.yaml"
|
||
}
|
||
```
|
||
|
||
**响应示例**:
|
||
```json
|
||
{
|
||
"workflow_id": "example_project",
|
||
"name": "示例项目工作流",
|
||
"description": "展示多智能体协作的典型工作流",
|
||
"status": "pending",
|
||
"progress": "0/4",
|
||
"meetings": [
|
||
{"meeting_id": "requirements-review", "title": "需求评审", "completed": false},
|
||
{"meeting_id": "design-review", "title": "设计评审", "completed": false}
|
||
]
|
||
}
|
||
```
|
||
|
||
### 7.2 获取工作流状态
|
||
|
||
```http
|
||
GET /api/workflows/:workflow_id/status
|
||
```
|
||
|
||
### 7.3 获取下一个会议
|
||
|
||
```http
|
||
GET /api/workflows/:workflow_id/next
|
||
```
|
||
|
||
### 7.4 标记会议完成
|
||
|
||
```http
|
||
POST /api/workflows/:workflow_id/complete
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"meeting_id": "requirements-review"
|
||
}
|
||
```
|
||
|
||
### 7.5 列出可用工作流文件
|
||
|
||
```http
|
||
GET /api/workflows/files
|
||
```
|
||
|
||
**响应示例**:
|
||
```json
|
||
{
|
||
"files": ["example.yaml", "project-a.yaml"]
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 8. 角色分配接口
|
||
|
||
### 8.1 获取任务主要角色
|
||
|
||
```http
|
||
POST /api/roles/primary
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"task": "实现登录功能并编写测试用例"
|
||
}
|
||
```
|
||
|
||
**响应示例**:
|
||
```json
|
||
{
|
||
"task": "实现登录功能并编写测试用例",
|
||
"primary_role": "pm",
|
||
"role_scores": {
|
||
"pm": 1.5,
|
||
"qa": 1.2,
|
||
"developer": 1.0,
|
||
"architect": 0.15,
|
||
"reviewer": 0.13
|
||
}
|
||
}
|
||
```
|
||
|
||
### 8.2 分配角色
|
||
|
||
```http
|
||
POST /api/roles/allocate
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"task": "设计数据库架构并实现 API",
|
||
"agents": ["claude-001", "kimi-002", "opencode-003"]
|
||
}
|
||
```
|
||
|
||
**响应示例**:
|
||
```json
|
||
{
|
||
"task": "设计数据库架构并实现 API",
|
||
"primary_role": "architect",
|
||
"allocation": {
|
||
"claude-001": "architect",
|
||
"kimi-002": "developer",
|
||
"opencode-003": "pm"
|
||
}
|
||
}
|
||
```
|
||
|
||
### 8.3 解释角色分配
|
||
|
||
```http
|
||
POST /api/roles/explain
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"task": "修复bug",
|
||
"agents": ["claude-001", "kimi-002"]
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 9. 系统接口
|
||
|
||
### 9.1 健康检查
|
||
|
||
```http
|
||
GET /health
|
||
```
|
||
|
||
**响应示例**:
|
||
```json
|
||
{
|
||
"status": "healthy",
|
||
"version": "0.1.0",
|
||
"services": {
|
||
"api": "ok",
|
||
"storage": "ok"
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 错误处理
|
||
|
||
所有 API 错误返回统一格式:
|
||
|
||
```json
|
||
{
|
||
"error": true,
|
||
"code": "RESOURCE_NOT_FOUND",
|
||
"message": "Agent not found: claude-001"
|
||
}
|
||
```
|
||
|
||
**常见错误码**:
|
||
- `400` - Bad Request (请求参数错误)
|
||
- `404` - Not Found (资源不存在)
|
||
- `409` - Conflict (资源冲突,如文件已被锁定)
|
||
- `500` - Internal Server Error (服务器内部错误)
|
||
|
||
---
|
||
|
||
## 前端集成建议
|
||
|
||
### 实时更新
|
||
- 使用轮询(polling)获取 Agent 状态和会议进度
|
||
- 建议轮询间隔: 5-10 秒
|
||
|
||
### 错误处理
|
||
- 所有 API 调用应包含错误处理
|
||
- 网络错误时显示友好提示
|
||
|
||
### 状态管理
|
||
- 建议使用 React Query / SWR 管理服务器状态
|
||
- 本地状态使用 Zustand / Redux Toolkit
|
||
|
||
---
|
||
|
||
## 测试验证
|
||
|
||
后端所有服务已通过自动化测试:
|
||
|
||
```bash
|
||
cd backend
|
||
python test_all_services.py
|
||
```
|
||
|
||
**测试结果**: 9/9 通过 ✅
|