pub fn is_virtual_delegation_tool(name: &str) -> bool {
matches!(
name.trim().to_ascii_lowercase().as_str(),
"orchestrate-subagents"
| "orchestrate_subagents"
| "assign-tasks"
| "assign_tasks"
| "delegate-subagent"
| "delegate_subagent"
| "select-subagent-model"
| "select_subagent_model"
)
}
pub fn is_delegation_output_tool(name: &str) -> bool {
matches!(
name.trim().to_ascii_lowercase().as_str(),
"orchestrate-subagents"
| "orchestrate_subagents"
| "assign-tasks"
| "assign_tasks"
| "delegate-subagent"
| "delegate_subagent"
)
}
pub fn delegation_output_tool_name_sql_in_predicate() -> &'static str {
"tool_name IN ('delegate-subagent','delegate_subagent','assign-tasks','assign_tasks','orchestrate-subagents','orchestrate_subagents')"
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn delegation_output_is_subset_of_virtual_delegation() {
for name in [
"delegate-subagent",
"delegate_subagent",
"assign-tasks",
"orchestrate_subagents",
] {
assert!(
is_virtual_delegation_tool(name),
"{name} should be a virtual delegation tool"
);
assert!(
is_delegation_output_tool(name),
"{name} should count as delegation output"
);
}
}
#[test]
fn select_subagent_model_is_virtual_but_not_delegation_output() {
assert!(is_virtual_delegation_tool("select-subagent-model"));
assert!(!is_delegation_output_tool("select-subagent-model"));
}
#[test]
fn sql_predicate_lists_only_delegation_output_tools() {
let pred = delegation_output_tool_name_sql_in_predicate();
assert!(pred.contains("delegate-subagent"));
assert!(pred.contains("orchestrate_subagents"));
assert!(!pred.contains("select-subagent"));
assert!(!pred.contains("select_subagent"));
}
}