fix(agent): improve subagent management for spawn and spawn_status tools

This commit is contained in:
SHINE-six 2026-03-15 18:43:34 +08:00
parent 7614f03e5b
commit 521db349ff

View file

@ -222,23 +222,26 @@ func registerSharedTools(
} }
} }
// Spawn tool with allowlist checker // Spawn and spawn_status tools share a SubagentManager.
if cfg.Tools.IsToolEnabled("spawn") { // Construct it when either tool is enabled (both require subagent).
if cfg.Tools.IsToolEnabled("subagent") { spawnEnabled := cfg.Tools.IsToolEnabled("spawn")
subagentManager := tools.NewSubagentManager(provider, agent.Model, agent.Workspace) spawnStatusEnabled := cfg.Tools.IsToolEnabled("spawn_status")
subagentManager.SetLLMOptions(agent.MaxTokens, agent.Temperature) if (spawnEnabled || spawnStatusEnabled) && cfg.Tools.IsToolEnabled("subagent") {
subagentManager := tools.NewSubagentManager(provider, agent.Model, agent.Workspace)
subagentManager.SetLLMOptions(agent.MaxTokens, agent.Temperature)
if spawnEnabled {
spawnTool := tools.NewSpawnTool(subagentManager) spawnTool := tools.NewSpawnTool(subagentManager)
currentAgentID := agentID currentAgentID := agentID
spawnTool.SetAllowlistChecker(func(targetAgentID string) bool { spawnTool.SetAllowlistChecker(func(targetAgentID string) bool {
return registry.CanSpawnSubagent(currentAgentID, targetAgentID) return registry.CanSpawnSubagent(currentAgentID, targetAgentID)
}) })
agent.Tools.Register(spawnTool) agent.Tools.Register(spawnTool)
if cfg.Tools.IsToolEnabled("spawn_status") {
agent.Tools.Register(tools.NewSpawnStatusTool(subagentManager))
}
} else {
logger.WarnCF("agent", "spawn tool requires subagent to be enabled", nil)
} }
if spawnStatusEnabled {
agent.Tools.Register(tools.NewSpawnStatusTool(subagentManager))
}
} else if (spawnEnabled || spawnStatusEnabled) && !cfg.Tools.IsToolEnabled("subagent") {
logger.WarnCF("agent", "spawn/spawn_status tools require subagent to be enabled", nil)
} }
} }
} }