Skip to content

Commit ee3d6fe

Browse files
committed
fix dashboard
1 parent 00465ee commit ee3d6fe

3 files changed

Lines changed: 45 additions & 36 deletions

File tree

astrbot/dashboard/routes/subagent.py

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -63,20 +63,20 @@ async def get_config(self):
6363
# 获取 enhanced_subagent 配置
6464
enhanced_data = cfg.get("enhanced_subagent", {})
6565

66-
# 合并返回
67-
return jsonify(
68-
Response()
69-
.ok(
70-
data={
71-
"subagent_orchestrator": data,
72-
"enhanced_subagent": enhanced_data,
73-
}
74-
)
75-
.__dict__
76-
)
66+
# 兼容旧格式:直接返回 subagent_orchestrator 的字段,同时附加 enhanced_subagent
67+
response_data = {
68+
"main_enable": data.get("main_enable", False),
69+
"remove_main_duplicate_tools": data.get("remove_main_duplicate_tools", False),
70+
"agents": data.get("agents", []),
71+
"enhanced_subagent": enhanced_data,
72+
}
73+
74+
return jsonify(Response().ok(data=response_data).__dict__)
7775
except Exception as e:
7876
logger.error(traceback.format_exc())
79-
return jsonify(Response().error(f"获取 subagent 配置失败: {e!s}").__dict__)
77+
return jsonify(
78+
Response().error(f"获取 subagent 配置失败: {e!s}").__dict__
79+
)
8080

8181
async def update_config(self):
8282
try:
@@ -86,16 +86,28 @@ async def update_config(self):
8686

8787
cfg = self.core_lifecycle.astrbot_config
8888

89-
# 分别处理两个配置
89+
# 兼容旧格式和新格式:
90+
# 1. 新格式: {"subagent_orchestrator": {...}, "enhanced_subagent": {...}}
91+
# 2. 旧格式: {"main_enable": ..., "agents": [...], ...}
9092
if "subagent_orchestrator" in data:
93+
# 新格式
9194
orch_data = data["subagent_orchestrator"]
9295
cfg["subagent_orchestrator"] = orch_data
9396

9497
# Reload dynamic handoff tools if orchestrator exists
9598
orch = getattr(self.core_lifecycle, "subagent_orchestrator", None)
9699
if orch is not None:
97100
await orch.reload_from_config(orch_data)
101+
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)
98109

110+
# 处理 enhanced_subagent(新格式专用)
99111
if "enhanced_subagent" in data:
100112
cfg["enhanced_subagent"] = data["enhanced_subagent"]
101113

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

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
"agentSetup": "Agent 设置",
4343
"orchestratorTitle": "子代理编排",
4444
"orchestratorSubtitle": "配置子代理列表、主代理路由提示词等基础编排功能",
45-
"enhancedSettings": "增强子代理设置",
45+
"enhancedSettings": "动态子代理设置",
4646
"enhancedSettingsHint": "配置动态子代理的运行参数、资源限制和工具策略"
4747
},
4848
"cards": {
@@ -89,36 +89,36 @@
8989
"action": "创建第一个 Agent"
9090
},
9191
"enhancedSwitches": {
92-
"enable": "启用增强子代理",
93-
"enableHint": "启用动态子代理创建和管理能力。开启后可使用 create_dynamic_subagent 等工具。",
92+
"enable": "启用动态子代理",
93+
"enableHint": "启用动态子代理创建和管理能力。开启后由主LLM自主决定使用create_dynamic_subagent等工具动态创建。与普通子代理编排相互独立,可同时存在",
9494
"autoCleanup": "每轮自动清理",
95-
"autoCleanupHint": "每轮对话结束后自动清理不活跃的子代理",
95+
"autoCleanupHint": "每轮对话结束后自动清理未受保护的子代理",
9696
"sharedContext": "共享上下文",
97-
"sharedContextHint": "子代理之间共享部分上下文信息"
97+
"sharedContextHint": "动态子代理之间共享部分上下文信息"
9898
},
9999
"enhancedFields": {
100-
"maxSubagentCount": "最大子代理数量",
101-
"maxSubagentCountHint": "同时存在的最大子代理数量",
100+
"maxSubagentCount": "最大动态子代理数量",
101+
"maxSubagentCountHint": "同时存在的最大动态子代理数量",
102102
"sharedContextMaxlen": "共享上下文最大长度",
103-
"sharedContextMaxlenHint": "共享上下文的最大 token 数量",
103+
"sharedContextMaxlenHint": "共享上下文的最大长度(信息条数)",
104104
"maxSubagentHistory": "最大历史消息数",
105-
"maxSubagentHistoryHint": "每个子代理保留的最大历史消息数量",
105+
"maxSubagentHistoryHint": "每个子代理保留的最大历史消息条数",
106106
"executionTimeout": "执行超时时间(秒)",
107107
"executionTimeoutHint": "子代理执行任务的最大超时时间"
108108
},
109109
"enhancedSection": {
110110
"runtimeParams": "运行参数",
111-
"runtimeParamsHint": "控制子代理的数量、历史和执行超时",
111+
"runtimeParamsHint": "控制动态子代理的数量、历史和执行超时",
112112
"sharedContext": "共享上下文",
113-
"sharedContextHint": "子代理之间的上下文共享策略",
113+
"sharedContextHint": "动态子代理之间的上下文共享策略",
114114
"toolStrategy": "工具策略",
115-
"toolStrategyHint": "控制子代理可使用哪些工具"
115+
"toolStrategyHint": "控制动态子代理可使用哪些工具"
116116
},
117117
"enhancedTools": {
118118
"blacklist": "工具黑名单",
119-
"blacklistHint": "子代理不可使用的工具列表。被加入黑名单的工具将不会分配给子代理",
119+
"blacklistHint": "动态子代理不可使用的工具列表。被加入黑名单的工具将不会分配给动态子代理",
120120
"inherent": "固有工具名单",
121-
"inherentHint": "子代理固有的工具名单,在该名单内的工具会确保分配给子代理",
121+
"inherentHint": "动态子代理固有的工具名单,在该名单内的工具会确保分配给动态子代理",
122122
"selectTool": "选择工具",
123123
"addTool": "添加工具",
124124
"selectBlacklistTool": "添加工具到黑名单",

dashboard/src/views/SubAgentPage.vue

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -533,7 +533,6 @@ type EnhancedSubagentConfig = {
533533
max_subagent_history: number
534534
execution_timeout: number
535535
tools_blacklist: string[]
536-
tools_whitelist: string[]
537536
tools_inherent: string[]
538537
}
539538
@@ -587,7 +586,6 @@ const enhancedCfg = ref<EnhancedSubagentConfig>({
587586
max_subagent_history: 500,
588587
execution_timeout: 600,
589588
tools_blacklist: [],
590-
tools_whitelist: [],
591589
tools_inherent: []
592590
})
593591
@@ -603,6 +601,9 @@ const hasUnsavedChanges = computed(() => {
603601
})
604602
605603
function normalizeConfig(raw: any): SubAgentConfig {
604+
// 兼容新旧格式:
605+
// 新格式: raw 直接包含 main_enable, agents 等字段
606+
// 旧格式: raw.subagent_orchestrator 包含这些字段
606607
const orchData = raw?.subagent_orchestrator || raw || {}
607608
const main_enable = !!orchData?.main_enable
608609
const remove_main_duplicate_tools = !!orchData?.remove_main_duplicate_tools
@@ -630,7 +631,6 @@ function normalizeEnhancedConfig(raw: any): EnhancedSubagentConfig {
630631
max_subagent_history: Number(raw?.max_subagent_history) || 500,
631632
execution_timeout: Number(raw?.execution_timeout) || 600,
632633
tools_blacklist: Array.isArray(raw?.tools_blacklist) ? raw.tools_blacklist : [],
633-
tools_whitelist: Array.isArray(raw?.tools_whitelist) ? raw.tools_whitelist : [],
634634
tools_inherent: Array.isArray(raw?.tools_inherent) ? raw.tools_inherent : []
635635
}
636636
}
@@ -670,8 +670,9 @@ async function loadConfig() {
670670
const res = await axios.get('/api/subagent/config')
671671
if (res.data.status === 'ok') {
672672
const data = res.data.data
673-
cfg.value = normalizeConfig(data.subagent_orchestrator)
674-
enhancedCfg.value = normalizeEnhancedConfig(data.enhanced_subagent)
673+
// 兼容新旧格式:data 可能直接包含字段,或通过 subagent_orchestrator 嵌套
674+
cfg.value = normalizeConfig(data.subagent_orchestrator || data)
675+
enhancedCfg.value = normalizeEnhancedConfig(data.enhanced_subagent || {})
675676
expandedAgents.value = Object.fromEntries(cfg.value.agents.map((agent) => [agent.__key, false]))
676677
initialSnapshot.value = serializeConfig(cfg.value)
677678
enhancedInitialSnapshot.value = serializeEnhancedConfig(enhancedCfg.value)
@@ -828,10 +829,6 @@ function removeToolFromBlacklist(idx: number) {
828829
enhancedCfg.value.tools_blacklist.splice(idx, 1)
829830
}
830831
831-
function removeToolFromWhitelist(idx: number) {
832-
enhancedCfg.value.tools_whitelist.splice(idx, 1)
833-
}
834-
835832
function removeToolFromInherent(idx: number) {
836833
enhancedCfg.value.tools_inherent.splice(idx, 1)
837834
}

0 commit comments

Comments
 (0)