Phase 6.1: ToolRegistry infrastructure - Add ToolManifest with ToolCategory, PermissionClass, SideEffectScope - Add ToolRegistry singleton with register/get/unregister/list/search - Add BaseTool abstract class with ReadTool/WriteTool/DBWriteTool/ExternalTool/NetworkTool subclasses - Add migration layer for backward compatibility Phase 6.2: Hook interception system - Add HookType (PRE_TOOL_USE, POST_TOOL_USE, TOOL_ERROR, TOOL_SKIP) - Add HookManager with singleton for hook registration - Add HookExecutor for pre/post/error hook execution Phase 6.3: Streaming execution - Add StreamingToolExecutor with batch execution support Phase 6.4: New builtin tools - Add file_tools: GlobTool, GrepTool, ReadFileTool, WriteFileTool - Add system_tools: BashTool, PowerShellTool - Add dev_tools: LSPTools, GitTool - Add collaboration_tools: TeamAgentTool, TaskBroadcastTool Tests: 29 passed
130 lines
3.9 KiB
Python
130 lines
3.9 KiB
Python
"""协作工具 - Phase 6.4"""
|
|
|
|
from typing import Any
|
|
|
|
from app.agents.tools.base import WriteTool
|
|
from app.agents.tools.manifest import (
|
|
PermissionClass,
|
|
SideEffectScope,
|
|
)
|
|
|
|
|
|
class TeamAgentTool(WriteTool):
|
|
"""团队 Agent 通信工具
|
|
|
|
用于与其他 Agent 进行消息传递和协作。
|
|
"""
|
|
|
|
def __init__(self):
|
|
super().__init__(
|
|
name="team_agent",
|
|
description="向团队 Agent 发送消息或请求协作",
|
|
permission_class=PermissionClass.WRITE,
|
|
side_effect_scope=SideEffectScope.LOCAL_STATE,
|
|
tags=["collaboration", "team", "agent"],
|
|
)
|
|
|
|
def get_parameters(self) -> dict[str, Any]:
|
|
return {
|
|
"type": "object",
|
|
"properties": {
|
|
"agent_name": {
|
|
"type": "string",
|
|
"description": "目标 Agent 名称",
|
|
},
|
|
"message": {
|
|
"type": "string",
|
|
"description": "要发送的消息",
|
|
},
|
|
"action": {
|
|
"type": "string",
|
|
"enum": ["send", "request", "delegate"],
|
|
"description": "操作类型",
|
|
},
|
|
},
|
|
"required": ["agent_name", "message"],
|
|
}
|
|
|
|
def get_return_schema(self) -> dict[str, Any]:
|
|
return {
|
|
"type": "object",
|
|
"properties": {
|
|
"success": {"type": "boolean"},
|
|
"response": {"type": "string"},
|
|
},
|
|
}
|
|
|
|
async def execute(self, agent_name: str, message: str, action: str = "send") -> dict[str, Any]:
|
|
# 注意:实际实现需要通过 Agent 通信协议
|
|
# 这里只是一个框架实现
|
|
return {
|
|
"success": True,
|
|
"response": f"Message '{action}' to agent '{agent_name}': {message}",
|
|
"agent_name": agent_name,
|
|
"action": action,
|
|
}
|
|
|
|
|
|
class TaskBroadcastTool(WriteTool):
|
|
"""任务广播工具
|
|
|
|
向多个 Agent 广播任务。
|
|
"""
|
|
|
|
def __init__(self):
|
|
super().__init__(
|
|
name="task_broadcast",
|
|
description="向多个 Agent 广播任务",
|
|
permission_class=PermissionClass.WRITE,
|
|
side_effect_scope=SideEffectScope.LOCAL_STATE,
|
|
tags=["collaboration", "broadcast", "task"],
|
|
)
|
|
|
|
def get_parameters(self) -> dict[str, Any]:
|
|
return {
|
|
"type": "object",
|
|
"properties": {
|
|
"agent_names": {
|
|
"type": "array",
|
|
"items": {"type": "string"},
|
|
"description": "目标 Agent 列表",
|
|
},
|
|
"task": {
|
|
"type": "string",
|
|
"description": "要广播的任务描述",
|
|
},
|
|
"priority": {
|
|
"type": "string",
|
|
"enum": ["low", "normal", "high", "urgent"],
|
|
"description": "任务优先级",
|
|
},
|
|
},
|
|
"required": ["agent_names", "task"],
|
|
}
|
|
|
|
def get_return_schema(self) -> dict[str, Any]:
|
|
return {
|
|
"type": "object",
|
|
"properties": {
|
|
"success": {"type": "boolean"},
|
|
"broadcast_to": {"type": "array", "items": {"type": "string"}},
|
|
"responses": {"type": "array"},
|
|
},
|
|
}
|
|
|
|
async def execute(
|
|
self,
|
|
agent_names: list[str],
|
|
task: str,
|
|
priority: str = "normal",
|
|
) -> dict[str, Any]:
|
|
# 注意:实际实现需要通过 Agent 通信协议
|
|
# 这里只是一个框架实现
|
|
return {
|
|
"success": True,
|
|
"broadcast_to": agent_names,
|
|
"task": task,
|
|
"priority": priority,
|
|
"responses": [f"Acknowledged by {agent}" for agent in agent_names],
|
|
}
|