feat(toolset): 工具系统重构为 toolset 统一管理,新增系统预置工具集

将工具管理从"agent 挂单个 tool"改为"agent 挂 toolset"模式:
- 三个系统预置工具集(system_basic/system_chat/system_workflow)入 DB
- 新增 send_file 工具(系统对话工具集)、修复 approval actor 调用 bug
- 后端 agent 加载全部走 toolset 链路,移除 load_tools_from_list
- 前端工具集中心卡片展示 + agent 配置改为 toolset 多选
- resource API 增加 category 过滤与系统 toolset 保护

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-06-05 18:03:49 +00:00
parent d39c80743d
commit 0e57c5cf16
23 changed files with 584 additions and 169 deletions
+8 -8
View File
@@ -35,7 +35,7 @@ class AgentRegister(BaseModel):
provider_title: str
model_id: str
individual_name: str
tools: Optional[List[str]] = None
toolsets: Optional[List[str]] = None
persona_id: Optional[str] = None
display_name: Optional[str] = None
@@ -45,7 +45,7 @@ class AgentLocalRegister(BaseModel):
path: str
individual_name: str
tools: Optional[List[str]] = None
toolsets: Optional[List[str]] = None
@agent_router.get("")
@@ -78,13 +78,15 @@ async def load_agent(
agent_register.individual_name,
agent_register.provider_title,
agent_register.model_id,
agent_register.tools,
agent_register.toolsets,
agent_register.persona_id,
agent_register.display_name,
)
scope = agent_register.individual_name
toolsets = await get_all_toolsets_for_scope(scope)
toolsets = await get_all_toolsets_for_scope(
scope, toolset_ids=agent_register.toolsets
)
# Resolve persona system_prompt from DB
persona_prompt = None
@@ -100,7 +102,6 @@ async def load_agent(
global_state_machine,
agent_register.provider_title,
agent_register.model_id,
agent_register.tools,
toolsets,
accept_lang,
persona_prompt,
@@ -111,7 +112,6 @@ async def load_agent(
global_state_machine,
agent_register.provider_title,
agent_register.model_id,
agent_register.tools,
toolsets,
accept_lang,
persona_prompt,
@@ -140,7 +140,7 @@ class WorkerIndividualCreate(BaseModel):
output_template: dict
bound_skill: Dict[str, List[str]]
workspace: List[str]
tools: Optional[List[str]] = None
toolsets: Optional[List[str]] = None
node_affinity: str = "cpu"
@field_validator("node_affinity")
@@ -163,7 +163,7 @@ class WorkerIndividualUpdate(BaseModel):
output_template: Optional[dict] = None
bound_skill: Optional[Dict[str, List[str]]] = None
workspace: Optional[List[str]] = None
tools: Optional[List[str]] = None
toolsets: Optional[List[str]] = None
node_affinity: Optional[str] = None
@field_validator("node_affinity")