Skip to content

Commit 1cd37f1

Browse files
committed
优化dashboard
1 parent 820a9dd commit 1cd37f1

6 files changed

Lines changed: 213 additions & 190 deletions

File tree

astrbot/core/subagent_manager.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,7 @@ def update_subagent_history(
310310

311311
session = cls.get_session(session_id)
312312

313-
if not session or agent_name not in session.protected_agents:
313+
if not session:
314314
return
315315

316316
if agent_name not in session.subagent_histories:
@@ -337,7 +337,7 @@ def update_subagent_history(
337337
filtered_messages.append(msg)
338338

339339
session.subagent_histories[agent_name].extend(filtered_messages)
340-
if cls._subagent_history_maxlen < len(session.subagent_histories[agent_name]):
340+
if cls._subagent_history_maxlen > len(session.subagent_histories[agent_name]):
341341
session.subagent_histories[agent_name] = session.subagent_histories[
342342
agent_name
343343
][-cls._subagent_history_maxlen :]

astrbot/dashboard/routes/subagent.py

Lines changed: 36 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -36,44 +36,52 @@ async def get_config(self):
3636
data = {
3737
"main_enable": False,
3838
"remove_main_duplicate_tools": False,
39+
"router_system_prompt": "",
3940
"agents": [],
41+
"dynamic_agents": {
42+
"enabled": False,
43+
"max_dynamic_subagent_count": 3,
44+
"auto_cleanup_per_turn": True,
45+
"tools_blacklist": [],
46+
"tools_inherent": [],
47+
},
48+
"history_enabled": True,
49+
"shared_context_enabled": False,
50+
"shared_context_maxlen": 200,
51+
"subagent_history_maxlen": 500,
52+
"execution_timeout": 600,
4053
}
4154

42-
# Backward compatibility: older config used `enable`.
43-
if (
44-
isinstance(data, dict)
45-
and "main_enable" not in data
46-
and "enable" in data
47-
):
48-
data["main_enable"] = bool(data.get("enable", False))
49-
5055
# Ensure required keys exist.
5156
data.setdefault("main_enable", False)
5257
data.setdefault("remove_main_duplicate_tools", False)
58+
data.setdefault("router_system_prompt", "")
5359
data.setdefault("agents", [])
54-
55-
# Backward/forward compatibility: ensure each agent contains provider_id.
60+
data.setdefault("dynamic_agents", {})
61+
data.setdefault("history_enabled", True)
62+
data.setdefault("shared_context_enabled", False)
63+
data.setdefault("shared_context_maxlen", 200)
64+
data.setdefault("subagent_history_maxlen", 500)
65+
data.setdefault("execution_timeout", 600)
66+
67+
# Ensure dynamic_agents sub-keys exist.
68+
dyn = data["dynamic_agents"]
69+
if isinstance(dyn, dict):
70+
dyn.setdefault("enabled", False)
71+
dyn.setdefault("max_dynamic_subagent_count", 3)
72+
dyn.setdefault("auto_cleanup_per_turn", True)
73+
dyn.setdefault("tools_blacklist", [])
74+
dyn.setdefault("tools_inherent", [])
75+
76+
# Ensure each agent contains provider_id and persona_id.
5677
# None means follow global/default provider settings.
5778
if isinstance(data.get("agents"), list):
5879
for a in data["agents"]:
5980
if isinstance(a, dict):
6081
a.setdefault("provider_id", None)
6182
a.setdefault("persona_id", None)
6283

63-
# 获取 enhanced_subagent 配置
64-
enhanced_data = cfg.get("enhanced_subagent", {})
65-
66-
# 兼容旧格式:直接返回 subagent_orchestrator 的字段,同时附加 enhanced_subagent
67-
response_data = {
68-
"main_enable": data.get("main_enable", False),
69-
"remove_main_duplicate_tools": data.get(
70-
"remove_main_duplicate_tools", False
71-
),
72-
"agents": data.get("agents", []),
73-
"enhanced_subagent": enhanced_data,
74-
}
75-
76-
return jsonify(Response().ok(data=response_data).__dict__)
84+
return jsonify(Response().ok(data=data).__dict__)
7785
except Exception as e:
7886
logger.error(traceback.format_exc())
7987
return jsonify(Response().error(f"获取 subagent 配置失败: {e!s}").__dict__)
@@ -86,11 +94,8 @@ async def update_config(self):
8694

8795
cfg = self.core_lifecycle.astrbot_config
8896

89-
# 兼容旧格式和新格式:
90-
# 1. 新格式: {"subagent_orchestrator": {...}, "enhanced_subagent": {...}}
91-
# 2. 旧格式: {"main_enable": ..., "agents": [...], ...}
97+
# 统一格式:前端发送 {"subagent_orchestrator": {...}}
9298
if "subagent_orchestrator" in data:
93-
# 新格式
9499
orch_data = data["subagent_orchestrator"]
95100
cfg["subagent_orchestrator"] = orch_data
96101

@@ -99,17 +104,9 @@ async def update_config(self):
99104
if orch is not None:
100105
await orch.reload_from_config(orch_data)
101106
else:
102-
# 旧格式:直接使用整个 data 作为 subagent_orchestrator
103-
cfg["subagent_orchestrator"] = data
104-
105-
# Reload dynamic handoff tools if orchestrator exists
106-
orch = getattr(self.core_lifecycle, "subagent_orchestrator", None)
107-
if orch is not None:
108-
await orch.reload_from_config(data)
109-
110-
# 处理 enhanced_subagent(新格式专用)
111-
if "enhanced_subagent" in data:
112-
cfg["enhanced_subagent"] = data["enhanced_subagent"]
107+
return jsonify(
108+
Response().error("缺少 subagent_orchestrator 字段").__dict__
109+
)
113110

114111
# Persist to cmd_config.json
115112
cfg.save_config()

dashboard/src/i18n/locales/en-US/features/subagent.json

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,11 @@
3636
"enabled": "Subagents will be placed in the main agent's tool set as tools, and the main agent will call subagents at appropriate times to complete tasks."
3737
},
3838
"section": {
39-
"title": "Subagent Configuration",
40-
"subtitle": "Configure delegatable subagents, personas, and descriptions for the main agent",
39+
"title": "Static Subagent Configuration",
40+
"subtitle": "Configure delegatable static subagents, personas, and descriptions for the main agent",
4141
"globalSettings": "Global Settings",
4242
"agentSetup": "Agent Setup",
43-
"orchestratorTitle": "Subagent Orchestration",
44-
"orchestratorSubtitle": "Configure basic orchestration features including subagent list and router system prompt",
45-
"enhancedSettings": "Enhanced Subagent Settings",
43+
"enhancedSettings": "Dynamic Subagent Settings",
4644
"enhancedSettingsHint": "Configure runtime parameters, resource limits, and tool strategies for dynamic subagents"
4745
},
4846
"cards": {
@@ -85,7 +83,7 @@
8583
},
8684
"routerSystemPrompt": {
8785
"label": "Router System Prompt",
88-
"hint": "The main agent's routing prompt, used to guide the main agent in recognizing user intent and delegating tasks to subagents. Only effective when static subagents are enabled."
86+
"hint": "The main agent's routing prompt, used to guide the main agent in recognizing user intent and delegating tasks to subagents. Only effective when dynamic subagents are not enabled."
8987
},
9088
"historyEnabled": {
9189
"label": "Enable History Memory",
@@ -129,10 +127,11 @@
129127
"inherentHint": "Tools inherent to subagents. Tools in this list are guaranteed to be assigned to subagents.",
130128
"selectTool": "Select Tool",
131129
"addTool": "Add Tool",
130+
"resetDefault": "Reset to Default",
132131
"selectBlacklistTool": "Add Tool to Blacklist",
133132
"selectInherentTool": "Add Tool to Inherent List",
134-
"emptyBlacklist": "No blacklisted tools",
135-
"emptyInherent": "No inherent tools",
133+
"emptyBlacklist": "No blacklisted tools (defaults restored)",
134+
"emptyInherent": "No inherent tools (defaults restored)",
136135
"selectOrInputTool": "Select or type a tool name",
137136
"availableTools": "Available Tools"
138137
}

dashboard/src/i18n/locales/ru-RU/features/subagent.json

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,10 @@
3636
"enabled": "Включено: основной LLM сохраняет свои инструменты и подключает инструменты делегирования transfer_to_*. При дедупликации инструменты, пересекающиеся с SubAgent, удаляются из основного набора."
3737
},
3838
"section": {
39-
"title": "Субагенты",
40-
"subtitle": "Настройте делегируемых агентов, персонажей и описания для основного LLM",
41-
"globalSettings": "Глобальные настройки",
39+
"title": "Статические субагенты",
40+
"subtitle": "Настройте делегируемых статических агентов, персонажей и описания для основного LLM",
41+
"globalSettings": "Общие настройки",
4242
"agentSetup": "Настройка агента",
43-
"orchestratorTitle": "Оркестрация субагентов",
44-
"orchestratorSubtitle": "Настройка списка субагентов и системного промпта роутера",
4543
"enhancedSettings": "Настройки динамических субагентов",
4644
"enhancedSettingsHint": "Настройка параметров выполнения, ограничений ресурсов и стратегии инструментов"
4745
},
@@ -84,7 +82,7 @@
8482
},
8583
"routerSystemPrompt": {
8684
"label": "Системный промпт роутера",
87-
"hint": "Промпт основного агента для маршрутизации, используется для распознавания намерений пользователя и делегирования задач субагентам. Активен только при включённых статических субагентах."
85+
"hint": "Промпт основного агента для маршрутизации, используется для распознавания намерений пользователя и делегирования задач субагентам. Активен только при отключённых динамических субагентах."
8886
},
8987
"historyEnabled": {
9088
"label": "Включить историю",
@@ -128,10 +126,11 @@
128126
"inherentHint": "Встроенные инструменты субагентов. Инструменты из этого списка гарантированно назначаются субагентам.",
129127
"selectTool": "Выбрать инструмент",
130128
"addTool": "Добавить инструмент",
129+
"resetDefault": "Сбросить по умолчанию",
131130
"selectBlacklistTool": "Добавить в чёрный список",
132131
"selectInherentTool": "Добавить во встроенные",
133-
"emptyBlacklist": "Чёрный список пуст",
134-
"emptyInherent": "Встроенные инструменты отсутствуют",
132+
"emptyBlacklist": "Чёрный список пуст (значения по умолчанию восстановлены)",
133+
"emptyInherent": "Встроенные инструменты отсутствуют (значения по умолчанию восстановлены)",
135134
"selectOrInputTool": "Выберите или введите имя инструмента",
136135
"availableTools": "Доступные инструменты"
137136
}

dashboard/src/i18n/locales/zh-CN/features/subagent.json

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,10 @@
3636
"enabled": "子代理将作为工具放在主代理的工具集中,主代理会在适当的时机调用子代理完成任务。"
3737
},
3838
"section": {
39-
"title": "子代理配置",
40-
"subtitle": "为主代理配置可委派的子代理、人格与描述信息",
41-
"globalSettings": "全局设置",
39+
"title": "静态子代理配置",
40+
"subtitle": "为主代理配置可委派的静态子代理、人格与描述信息",
41+
"globalSettings": "全局配置",
4242
"agentSetup": "Agent 设置",
43-
"orchestratorTitle": "子代理编排",
44-
"orchestratorSubtitle": "配置子代理列表、主代理路由提示词等基础编排功能",
4543
"enhancedSettings": "动态子代理设置",
4644
"enhancedSettingsHint": "配置动态子代理的运行参数、资源限制和工具策略"
4745
},
@@ -85,7 +83,7 @@
8583
},
8684
"routerSystemPrompt": {
8785
"label": "路由提示词",
88-
"hint": "主Agent的路由提示词,用于指导主Agent如何识别用户意图并委派任务给子代理。仅在启用静态子代理时有效"
86+
"hint": "主Agent的路由提示词,用于指导主Agent如何识别用户意图并委派任务给子代理。仅在未启用动态子代理时有效"
8987
},
9088
"historyEnabled": {
9189
"label": "启用历史记忆",
@@ -129,10 +127,11 @@
129127
"inherentHint": "动态子代理固有的工具名单,在该名单内的工具会确保分配给动态子代理。",
130128
"selectTool": "选择工具",
131129
"addTool": "添加工具",
130+
"resetDefault": "恢复默认",
132131
"selectBlacklistTool": "添加工具到黑名单",
133132
"selectInherentTool": "添加工具到固有名单",
134-
"emptyBlacklist": "暂无黑名单工具",
135-
"emptyInherent": "暂无固有工具",
133+
"emptyBlacklist": "暂无黑名单工具(已恢复默认值)",
134+
"emptyInherent": "暂无固有工具(已恢复默认值)",
136135
"selectOrInputTool": "选择或输入工具名称",
137136
"availableTools": "可用工具列表"
138137
}

0 commit comments

Comments
 (0)