完整实现 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>
This commit is contained in:
9
.doc/agents/arch-001/info.json
Normal file
9
.doc/agents/arch-001/info.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"agent_id": "arch-001",
|
||||
"name": "Architect",
|
||||
"role": "architect",
|
||||
"model": "claude-opus-4.6",
|
||||
"description": "Architect - architect",
|
||||
"created_at": "2026-03-09T17:23:06.837127",
|
||||
"status": "idle"
|
||||
}
|
||||
7
.doc/agents/arch-001/state.json
Normal file
7
.doc/agents/arch-001/state.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"agent_id": "arch-001",
|
||||
"current_task": "",
|
||||
"progress": 0,
|
||||
"working_files": [],
|
||||
"last_update": "2026-03-09T17:23:06.852720"
|
||||
}
|
||||
9
.doc/agents/claude-001/info.json
Normal file
9
.doc/agents/claude-001/info.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"agent_id": "claude-001",
|
||||
"name": "Claude Code",
|
||||
"role": "architect",
|
||||
"model": "claude-opus-4.6",
|
||||
"description": "",
|
||||
"created_at": "2026-03-05T10:17:03.114275",
|
||||
"status": "idle"
|
||||
}
|
||||
7
.doc/agents/claude-001/state.json
Normal file
7
.doc/agents/claude-001/state.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"agent_id": "claude-001",
|
||||
"current_task": "fixing bug",
|
||||
"progress": 68,
|
||||
"working_files": [],
|
||||
"last_update": "2026-03-05T10:17:06.914810"
|
||||
}
|
||||
9
.doc/agents/dev-001/info.json
Normal file
9
.doc/agents/dev-001/info.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"agent_id": "dev-001",
|
||||
"name": "Developer",
|
||||
"role": "developer",
|
||||
"model": "claude-sonnet-4.6",
|
||||
"description": "Developer - developer",
|
||||
"created_at": "2026-03-09T17:23:06.864073",
|
||||
"status": "idle"
|
||||
}
|
||||
7
.doc/agents/dev-001/state.json
Normal file
7
.doc/agents/dev-001/state.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"agent_id": "dev-001",
|
||||
"current_task": "",
|
||||
"progress": 0,
|
||||
"working_files": [],
|
||||
"last_update": "2026-03-09T17:23:06.867216"
|
||||
}
|
||||
9
.doc/agents/kimi-002/info.json
Normal file
9
.doc/agents/kimi-002/info.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"agent_id": "kimi-002",
|
||||
"name": "Kimi CLI",
|
||||
"role": "pm",
|
||||
"model": "moonshot-v1-8k",
|
||||
"description": "",
|
||||
"created_at": "2026-03-05T10:17:04.382854",
|
||||
"status": "idle"
|
||||
}
|
||||
7
.doc/agents/kimi-002/state.json
Normal file
7
.doc/agents/kimi-002/state.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"agent_id": "kimi-002",
|
||||
"current_task": "",
|
||||
"progress": 0,
|
||||
"working_files": [],
|
||||
"last_update": "2026-03-05T10:17:04.387780"
|
||||
}
|
||||
9
.doc/agents/qa-001/info.json
Normal file
9
.doc/agents/qa-001/info.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"agent_id": "qa-001",
|
||||
"name": "QA Engineer",
|
||||
"role": "qa",
|
||||
"model": "claude-haiku-4.6",
|
||||
"description": "QA Engineer - qa",
|
||||
"created_at": "2026-03-09T17:23:06.877677",
|
||||
"status": "idle"
|
||||
}
|
||||
7
.doc/agents/qa-001/state.json
Normal file
7
.doc/agents/qa-001/state.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"agent_id": "qa-001",
|
||||
"current_task": "",
|
||||
"progress": 0,
|
||||
"working_files": [],
|
||||
"last_update": "2026-03-09T17:23:06.880737"
|
||||
}
|
||||
9
.doc/agents/test-001/info.json
Normal file
9
.doc/agents/test-001/info.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"agent_id": "test-001",
|
||||
"name": "Test Agent",
|
||||
"role": "developer",
|
||||
"model": "claude-sonnet-4.6",
|
||||
"description": "Test Agent - developer",
|
||||
"created_at": "2026-03-09T17:22:39.234290",
|
||||
"status": "idle"
|
||||
}
|
||||
7
.doc/agents/test-001/state.json
Normal file
7
.doc/agents/test-001/state.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"agent_id": "test-001",
|
||||
"current_task": "",
|
||||
"progress": 0,
|
||||
"working_files": [],
|
||||
"last_update": "2026-03-09T17:22:39.236368"
|
||||
}
|
||||
9
.doc/agents/test-agent-001/info.json
Normal file
9
.doc/agents/test-agent-001/info.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"agent_id": "test-agent-001",
|
||||
"name": "Test Agent",
|
||||
"role": "developer",
|
||||
"model": "claude-opus-4.6",
|
||||
"description": "测试用的 Agent",
|
||||
"created_at": "2026-03-09T09:28:05.266992",
|
||||
"status": "idle"
|
||||
}
|
||||
7
.doc/agents/test-agent-001/state.json
Normal file
7
.doc/agents/test-agent-001/state.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"agent_id": "test-agent-001",
|
||||
"current_task": "修复 bug",
|
||||
"progress": 75,
|
||||
"working_files": [],
|
||||
"last_update": "2026-03-09T09:28:05.280849"
|
||||
}
|
||||
1
.doc/cache/file_locks.json
vendored
Normal file
1
.doc/cache/file_locks.json
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{}
|
||||
51
.doc/cache/heartbeats.json
vendored
Normal file
51
.doc/cache/heartbeats.json
vendored
Normal file
@@ -0,0 +1,51 @@
|
||||
{
|
||||
"claude-001": {
|
||||
"agent_id": "claude-001",
|
||||
"last_heartbeat": "2026-03-05T10:31:09.197892",
|
||||
"status": "idle",
|
||||
"current_task": "",
|
||||
"progress": 100
|
||||
},
|
||||
"kimi-002": {
|
||||
"agent_id": "kimi-002",
|
||||
"last_heartbeat": "2026-03-05T10:16:03.435209",
|
||||
"status": "waiting",
|
||||
"current_task": "waiting for meeting",
|
||||
"progress": 0
|
||||
},
|
||||
"agent-001": {
|
||||
"agent_id": "agent-001",
|
||||
"last_heartbeat": "2026-03-09T09:28:05.259883",
|
||||
"status": "working",
|
||||
"current_task": "测试任务",
|
||||
"progress": 50
|
||||
},
|
||||
"test-001": {
|
||||
"agent_id": "test-001",
|
||||
"last_heartbeat": "2026-03-09T17:23:02.120192",
|
||||
"status": "offline",
|
||||
"current_task": "",
|
||||
"progress": 0
|
||||
},
|
||||
"arch-001": {
|
||||
"agent_id": "arch-001",
|
||||
"last_heartbeat": "2026-03-09T17:23:43.464396",
|
||||
"status": "waiting",
|
||||
"current_task": "等待会议: meeting-002",
|
||||
"progress": 0
|
||||
},
|
||||
"dev-001": {
|
||||
"agent_id": "dev-001",
|
||||
"last_heartbeat": "2026-03-09T17:23:43.476403",
|
||||
"status": "waiting",
|
||||
"current_task": "等待会议: meeting-002",
|
||||
"progress": 0
|
||||
},
|
||||
"qa-001": {
|
||||
"agent_id": "qa-001",
|
||||
"last_heartbeat": "2026-03-09T17:23:43.485633",
|
||||
"status": "waiting",
|
||||
"current_task": "等待会议: meeting-002",
|
||||
"progress": 0
|
||||
}
|
||||
}
|
||||
84
.doc/cache/meeting_queue.json
vendored
Normal file
84
.doc/cache/meeting_queue.json
vendored
Normal file
@@ -0,0 +1,84 @@
|
||||
{
|
||||
"design-review": {
|
||||
"meeting_id": "design-review",
|
||||
"title": "Design Review",
|
||||
"expected_attendees": [
|
||||
"claude-001",
|
||||
"kimi-002",
|
||||
"opencode-003"
|
||||
],
|
||||
"arrived_attendees": [
|
||||
"claude-001",
|
||||
"kimi-002",
|
||||
"opencode-003"
|
||||
],
|
||||
"status": "waiting",
|
||||
"created_at": "2026-03-05T10:18:10.717613",
|
||||
"started_at": "",
|
||||
"min_required": 3
|
||||
},
|
||||
"quick-test": {
|
||||
"meeting_id": "quick-test",
|
||||
"title": "Quick Test",
|
||||
"expected_attendees": [
|
||||
"agent-1"
|
||||
],
|
||||
"arrived_attendees": [
|
||||
"agent-1"
|
||||
],
|
||||
"status": "ready",
|
||||
"created_at": "2026-03-05T10:23:53.403438",
|
||||
"started_at": "2026-03-05T10:23:53.430888",
|
||||
"min_required": 1
|
||||
},
|
||||
"test-meeting-001": {
|
||||
"meeting_id": "test-meeting-001",
|
||||
"title": "测试会议",
|
||||
"expected_attendees": [
|
||||
"agent-001",
|
||||
"agent-002"
|
||||
],
|
||||
"arrived_attendees": [
|
||||
"agent-001",
|
||||
"agent-002"
|
||||
],
|
||||
"status": "ended",
|
||||
"created_at": "2026-03-09T09:28:05.309297",
|
||||
"started_at": "2026-03-09T09:28:05.357846",
|
||||
"min_required": 2
|
||||
},
|
||||
"meeting-001": {
|
||||
"meeting_id": "meeting-001",
|
||||
"title": "项目设计讨论",
|
||||
"expected_attendees": [
|
||||
"arch-001",
|
||||
"dev-001",
|
||||
"qa-001"
|
||||
],
|
||||
"arrived_attendees": [
|
||||
"arch-001"
|
||||
],
|
||||
"status": "waiting",
|
||||
"created_at": "2026-03-09T17:23:17.393649",
|
||||
"started_at": "",
|
||||
"min_required": 3
|
||||
},
|
||||
"meeting-002": {
|
||||
"meeting_id": "meeting-002",
|
||||
"title": "测试会议",
|
||||
"expected_attendees": [
|
||||
"arch-001",
|
||||
"dev-001",
|
||||
"qa-001"
|
||||
],
|
||||
"arrived_attendees": [
|
||||
"arch-001",
|
||||
"dev-001",
|
||||
"qa-001"
|
||||
],
|
||||
"status": "ready",
|
||||
"created_at": "2026-03-09T17:23:43.445453",
|
||||
"started_at": "2026-03-09T17:23:43.501216",
|
||||
"min_required": 3
|
||||
}
|
||||
}
|
||||
16
.doc/humans.json
Normal file
16
.doc/humans.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"version": "1.0",
|
||||
"last_updated": "2026-03-09T16:12:21.544408",
|
||||
"participants": {
|
||||
"user001": {
|
||||
"id": "user001",
|
||||
"name": "开发者",
|
||||
"role": "tech_lead",
|
||||
"status": "offline",
|
||||
"avatar": "👨💻"
|
||||
}
|
||||
},
|
||||
"task_requests": [],
|
||||
"meeting_comments": [],
|
||||
"human_states": {}
|
||||
}
|
||||
49
.doc/meetings/2026-03-05/auth-review.json
Normal file
49
.doc/meetings/2026-03-05/auth-review.json
Normal file
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"meeting_id": "auth-review",
|
||||
"title": "认证方案设计评审",
|
||||
"date": "2026-03-05",
|
||||
"attendees": [
|
||||
"claude-001",
|
||||
"kimi-002",
|
||||
"opencode-003"
|
||||
],
|
||||
"steps": [
|
||||
{
|
||||
"step_id": "step_1",
|
||||
"label": "收集初步想法",
|
||||
"status": "pending",
|
||||
"completed_at": ""
|
||||
},
|
||||
{
|
||||
"step_id": "step_2",
|
||||
"label": "讨论与迭代",
|
||||
"status": "active",
|
||||
"completed_at": ""
|
||||
},
|
||||
{
|
||||
"step_id": "step_3",
|
||||
"label": "生成共识版本",
|
||||
"status": "pending",
|
||||
"completed_at": ""
|
||||
},
|
||||
{
|
||||
"step_id": "step_4",
|
||||
"label": "记录会议文件",
|
||||
"status": "pending",
|
||||
"completed_at": ""
|
||||
}
|
||||
],
|
||||
"discussions": [
|
||||
{
|
||||
"agent_id": "claude-001",
|
||||
"agent_name": "CLA",
|
||||
"content": "建议使用 JWT",
|
||||
"timestamp": "2026-03-05T10:29:55.080827",
|
||||
"step": "收集初步想法"
|
||||
}
|
||||
],
|
||||
"status": "in_progress",
|
||||
"created_at": "2026-03-05T10:29:22.772247",
|
||||
"ended_at": "",
|
||||
"consensus": ""
|
||||
}
|
||||
24
.doc/meetings/2026-03-05/auth-review.md
Normal file
24
.doc/meetings/2026-03-05/auth-review.md
Normal file
@@ -0,0 +1,24 @@
|
||||
# 认证方案设计评审
|
||||
|
||||
**会议 ID**: auth-review
|
||||
**日期**: 2026-03-05
|
||||
**状态**: in_progress
|
||||
**参会者**: claude-001, kimi-002, opencode-003
|
||||
|
||||
## 会议进度
|
||||
|
||||
- ○ **收集初步想法**
|
||||
- ◐ **讨论与迭代**
|
||||
- ○ **生成共识版本**
|
||||
- ○ **记录会议文件**
|
||||
|
||||
## 讨论记录
|
||||
|
||||
### CLA - 2026-03-05T10:29:55
|
||||
*步骤: 收集初步想法*
|
||||
|
||||
建议使用 JWT
|
||||
|
||||
---
|
||||
|
||||
**创建时间**: 2026-03-05T10:29:22.772247
|
||||
49
.doc/meetings/2026-03-09/test-record-001.json
Normal file
49
.doc/meetings/2026-03-09/test-record-001.json
Normal file
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"meeting_id": "test-record-001",
|
||||
"title": "测试记录会议",
|
||||
"date": "2026-03-09",
|
||||
"attendees": [
|
||||
"agent-001",
|
||||
"agent-002"
|
||||
],
|
||||
"steps": [
|
||||
{
|
||||
"step_id": "step_1",
|
||||
"label": "步骤1",
|
||||
"status": "completed",
|
||||
"completed_at": "2026-03-09T09:28:05.413770"
|
||||
},
|
||||
{
|
||||
"step_id": "step_2",
|
||||
"label": "步骤2",
|
||||
"status": "pending",
|
||||
"completed_at": ""
|
||||
},
|
||||
{
|
||||
"step_id": "step_3",
|
||||
"label": "步骤3",
|
||||
"status": "pending",
|
||||
"completed_at": ""
|
||||
}
|
||||
],
|
||||
"discussions": [
|
||||
{
|
||||
"agent_id": "agent-001",
|
||||
"agent_name": "Agent1",
|
||||
"content": "这是第一条讨论",
|
||||
"timestamp": "2026-03-09T09:28:05.386072",
|
||||
"step": ""
|
||||
},
|
||||
{
|
||||
"agent_id": "agent-002",
|
||||
"agent_name": "Agent2",
|
||||
"content": "这是第二条讨论",
|
||||
"timestamp": "2026-03-09T09:28:05.393792",
|
||||
"step": ""
|
||||
}
|
||||
],
|
||||
"status": "completed",
|
||||
"created_at": "2026-03-09T09:28:05.378802",
|
||||
"ended_at": "2026-03-09T09:28:05.413764",
|
||||
"consensus": "达成共识:继续开发"
|
||||
}
|
||||
31
.doc/meetings/2026-03-09/test-record-001.md
Normal file
31
.doc/meetings/2026-03-09/test-record-001.md
Normal file
@@ -0,0 +1,31 @@
|
||||
# 测试记录会议
|
||||
|
||||
**会议 ID**: test-record-001
|
||||
**日期**: 2026-03-09
|
||||
**状态**: completed
|
||||
**参会者**: agent-001, agent-002
|
||||
|
||||
## 会议进度
|
||||
|
||||
- ● **步骤1** (2026-03-09T09:28:05.413770)
|
||||
- ○ **步骤2**
|
||||
- ○ **步骤3**
|
||||
|
||||
## 讨论记录
|
||||
|
||||
### Agent1 - 2026-03-09T09:28:05
|
||||
|
||||
这是第一条讨论
|
||||
|
||||
### Agent2 - 2026-03-09T09:28:05
|
||||
|
||||
这是第二条讨论
|
||||
|
||||
## 共识
|
||||
|
||||
达成共识:继续开发
|
||||
|
||||
---
|
||||
|
||||
**创建时间**: 2026-03-09T09:28:05.378802
|
||||
**结束时间**: 2026-03-09T09:28:05.413764
|
||||
67
.doc/workflow/default-dev-flow.yaml
Normal file
67
.doc/workflow/default-dev-flow.yaml
Normal file
@@ -0,0 +1,67 @@
|
||||
# 默认开发工作流
|
||||
# 标准软件开发流程:需求 → 分配 → 执行 → 对齐 → 测试
|
||||
workflow_id: "default-dev-flow"
|
||||
name: "默认开发工作流"
|
||||
description: "标准软件开发全流程,包含需求分析、任务分配、执行、对齐、测试等阶段"
|
||||
|
||||
meetings:
|
||||
# 1. 需求会议 - 讨论和确认项目需求
|
||||
- meeting_id: "requirements-meeting"
|
||||
title: "需求会议"
|
||||
node_type: "meeting"
|
||||
attendees: ["pm-001", "architect-001", "developer-001"]
|
||||
depends_on: []
|
||||
|
||||
# 2. 任务分配会议 - 将需求分解为具体任务并分配
|
||||
- meeting_id: "task-allocation-meeting"
|
||||
title: "任务分配会议"
|
||||
node_type: "meeting"
|
||||
attendees: ["pm-001", "architect-001", "qa-001", "developer-001"]
|
||||
depends_on: ["requirements-meeting"]
|
||||
|
||||
# 3. 任务执行 - Agent 并行执行分配的任务
|
||||
- meeting_id: "task-execution"
|
||||
title: "任务执行"
|
||||
node_type: "execution"
|
||||
attendees: ["developer-001", "developer-002"]
|
||||
min_required: 2
|
||||
depends_on: ["task-allocation-meeting"]
|
||||
|
||||
# 4. 中段任务对齐会议 - 检查进度,同步状态,解决问题
|
||||
- meeting_id: "mid-alignment-meeting"
|
||||
title: "中段任务对齐会议"
|
||||
node_type: "meeting"
|
||||
attendees: ["developer-001", "developer-002", "qa-001"]
|
||||
depends_on: ["task-execution"]
|
||||
|
||||
# 5. 任务继续 - 根据对齐结果继续完成剩余任务
|
||||
- meeting_id: "task-continue"
|
||||
title: "任务继续"
|
||||
node_type: "execution"
|
||||
attendees: ["developer-001", "developer-002"]
|
||||
min_required: 2
|
||||
depends_on: ["mid-alignment-meeting"]
|
||||
|
||||
# 6. 测试任务会议 - 制定测试计划和测试用例
|
||||
- meeting_id: "test-planning-meeting"
|
||||
title: "测试任务会议"
|
||||
node_type: "meeting"
|
||||
attendees: ["qa-001", "developer-001", "pm-001"]
|
||||
depends_on: ["task-continue"]
|
||||
|
||||
# 7. 测试任务执行 - QA 执行测试
|
||||
- meeting_id: "test-execution"
|
||||
title: "测试任务执行"
|
||||
node_type: "execution"
|
||||
attendees: ["qa-001"]
|
||||
min_required: 1
|
||||
depends_on: ["test-planning-meeting"]
|
||||
|
||||
# 8. 测试结果研读会议 - 分析测试结果,决定下一步
|
||||
# 如果测试不通过,跳转回任务分配会议进行修复
|
||||
- meeting_id: "test-review-meeting"
|
||||
title: "测试结果研读会议"
|
||||
node_type: "meeting"
|
||||
attendees: ["pm-001", "qa-001", "developer-001", "architect-001"]
|
||||
depends_on: ["test-execution"]
|
||||
on_failure: "task-allocation-meeting" # 测试不通过时回到任务分配
|
||||
25
.doc/workflow/example.yaml
Normal file
25
.doc/workflow/example.yaml
Normal file
@@ -0,0 +1,25 @@
|
||||
# 示例工作流定义
|
||||
workflow_id: "example_project"
|
||||
name: "示例项目工作流"
|
||||
description: "展示多智能体协作的典型工作流"
|
||||
|
||||
meetings:
|
||||
- meeting_id: "requirements-review"
|
||||
title: "需求评审"
|
||||
attendees: ["claude-001", "kimi-002"]
|
||||
depends_on: []
|
||||
|
||||
- meeting_id: "design-review"
|
||||
title: "设计评审"
|
||||
attendees: ["claude-001", "opencode-003"]
|
||||
depends_on: ["requirements-review"]
|
||||
|
||||
- meeting_id: "implementation-planning"
|
||||
title: "实现计划"
|
||||
attendees: ["claude-001", "kimi-002", "opencode-003"]
|
||||
depends_on: ["design-review"]
|
||||
|
||||
- meeting_id: "code-review"
|
||||
title: "代码评审"
|
||||
attendees: ["claude-001", "opencode-003"]
|
||||
depends_on: ["implementation-planning"]
|
||||
13
.doc/workflow/test.yaml
Normal file
13
.doc/workflow/test.yaml
Normal file
@@ -0,0 +1,13 @@
|
||||
|
||||
workflow_id: "test-workflow"
|
||||
name: "测试工作流"
|
||||
description: "用于测试的工作流"
|
||||
meetings:
|
||||
- meeting_id: "step1"
|
||||
title: "第一步"
|
||||
attendees: ["agent-001"]
|
||||
depends_on: []
|
||||
- meeting_id: "step2"
|
||||
title: "第二步"
|
||||
attendees: ["agent-001", "agent-002"]
|
||||
depends_on: ["step1"]
|
||||
Reference in New Issue
Block a user