Split multi-agent handlers per tool (#14535)

Summary
- move the existing multi-agent handler logic into each tool-specific
handler and inline helper implementations
- remove the old central dispatcher now that each handler encapsulates
its own behavior
- adjust handler specs and tests to match the new structure without
macros

Testing
- Not run (not requested)
This commit is contained in:
pakrym-oai
2026-03-12 17:43:29 -07:00
committed by GitHub
parent 76d8d174b1
commit 793bf32585
4 changed files with 679 additions and 633 deletions

View File

@@ -2335,7 +2335,6 @@ pub(crate) fn build_specs_with_discoverable_tools(
use crate::tools::handlers::ListDirHandler;
use crate::tools::handlers::McpHandler;
use crate::tools::handlers::McpResourceHandler;
use crate::tools::handlers::MultiAgentHandler;
use crate::tools::handlers::PlanHandler;
use crate::tools::handlers::ReadFileHandler;
use crate::tools::handlers::RequestPermissionsHandler;
@@ -2347,6 +2346,11 @@ pub(crate) fn build_specs_with_discoverable_tools(
use crate::tools::handlers::ToolSuggestHandler;
use crate::tools::handlers::UnifiedExecHandler;
use crate::tools::handlers::ViewImageHandler;
use crate::tools::handlers::multi_agents::CloseAgentHandler;
use crate::tools::handlers::multi_agents::ResumeAgentHandler;
use crate::tools::handlers::multi_agents::SendInputHandler;
use crate::tools::handlers::multi_agents::SpawnAgentHandler;
use crate::tools::handlers::multi_agents::WaitHandler;
use std::sync::Arc;
let mut builder = ToolRegistryBuilder::new();
@@ -2715,7 +2719,6 @@ pub(crate) fn build_specs_with_discoverable_tools(
}
if config.collab_tools {
let multi_agent_handler = Arc::new(MultiAgentHandler);
push_tool_spec(
&mut builder,
create_spawn_agent_tool(config),
@@ -2746,11 +2749,11 @@ pub(crate) fn build_specs_with_discoverable_tools(
false,
config.code_mode_enabled,
);
builder.register_handler("spawn_agent", multi_agent_handler.clone());
builder.register_handler("send_input", multi_agent_handler.clone());
builder.register_handler("resume_agent", multi_agent_handler.clone());
builder.register_handler("wait", multi_agent_handler.clone());
builder.register_handler("close_agent", multi_agent_handler);
builder.register_handler("spawn_agent", Arc::new(SpawnAgentHandler));
builder.register_handler("send_input", Arc::new(SendInputHandler));
builder.register_handler("resume_agent", Arc::new(ResumeAgentHandler));
builder.register_handler("wait", Arc::new(WaitHandler));
builder.register_handler("close_agent", Arc::new(CloseAgentHandler));
}
if config.agent_jobs_tools {