Phase 7: Built-in Hooks (audit_log, dangerous_confirmation, security_scan) Phase 8: Plugin system (PluginManager, PluginSandbox, PluginManifest) Phase 9: Skills registry (SkillRegistry, local/plugin/MCP loaders) Phase 10: TeamLeader, RemoteTransport, BackgroundTaskManager
122 lines
2.9 KiB
Python
122 lines
2.9 KiB
Python
"""Team 多 Agent 协作 - Phase 10.1"""
|
|
|
|
from dataclasses import dataclass, field
|
|
from typing import Any
|
|
from enum import Enum
|
|
|
|
|
|
class TaskStatus(Enum):
|
|
PENDING = "pending"
|
|
IN_PROGRESS = "in_progress"
|
|
COMPLETED = "completed"
|
|
FAILED = "failed"
|
|
|
|
|
|
@dataclass
|
|
class TeamTask:
|
|
"""团队任务"""
|
|
|
|
id: str
|
|
description: str
|
|
assignee: str | None = None
|
|
status: TaskStatus = TaskStatus.PENDING
|
|
result: Any = None
|
|
error: str | None = None
|
|
|
|
|
|
class TeamLeader:
|
|
"""团队领导者
|
|
|
|
协调多个 Agent 成员执行任务。
|
|
"""
|
|
|
|
def __init__(self, team_id: str, members: list[str]):
|
|
"""
|
|
Args:
|
|
team_id: 团队 ID
|
|
members: 成员 ID 列表
|
|
"""
|
|
self.team_id = team_id
|
|
self.members = members
|
|
self._tasks: dict[str, TeamTask] = {}
|
|
|
|
def create_task(self, description: str) -> str:
|
|
"""创建任务
|
|
|
|
Args:
|
|
description: 任务描述
|
|
|
|
Returns:
|
|
任务 ID
|
|
"""
|
|
import uuid
|
|
|
|
task_id = str(uuid.uuid4())[:8]
|
|
self._tasks[task_id] = TeamTask(
|
|
id=task_id,
|
|
description=description,
|
|
)
|
|
return task_id
|
|
|
|
def assign_task(self, task_id: str, member: str) -> bool:
|
|
"""分配任务
|
|
|
|
Args:
|
|
task_id: 任务 ID
|
|
member: 成员 ID
|
|
|
|
Returns:
|
|
是否成功
|
|
"""
|
|
if task_id not in self._tasks:
|
|
return False
|
|
|
|
if member not in self.members:
|
|
return False
|
|
|
|
self._tasks[task_id].assignee = member
|
|
self._tasks[task_id].status = TaskStatus.IN_PROGRESS
|
|
return True
|
|
|
|
def broadcast_task(self, description: str) -> list[str]:
|
|
"""广播任务给所有成员
|
|
|
|
Args:
|
|
description: 任务描述
|
|
|
|
Returns:
|
|
创建的任务 ID 列表
|
|
"""
|
|
task_ids = []
|
|
for member in self.members:
|
|
task_id = self.create_task(description)
|
|
self.assign_task(task_id, member)
|
|
task_ids.append(task_id)
|
|
return task_ids
|
|
|
|
def collect_results(self) -> dict[str, Any]:
|
|
"""收集所有任务结果
|
|
|
|
Returns:
|
|
任务 ID -> 结果的映射
|
|
"""
|
|
return {
|
|
task_id: task.result
|
|
for task_id, task in self._tasks.items()
|
|
if task.status == TaskStatus.COMPLETED
|
|
}
|
|
|
|
def get_team_status(self) -> dict[str, Any]:
|
|
"""获取团队状态
|
|
|
|
Returns:
|
|
团队状态摘要
|
|
"""
|
|
return {
|
|
"team_id": self.team_id,
|
|
"members": self.members,
|
|
"task_count": len(self._tasks),
|
|
"completed": sum(1 for t in self._tasks.values() if t.status == TaskStatus.COMPLETED),
|
|
"failed": sum(1 for t in self._tasks.values() if t.status == TaskStatus.FAILED),
|
|
}
|