fix: add AgentMessage dispatch entry, allowed_tools, and debug logging

- Add missing AgentMessage dispatch entry in execute_tool_with_enforcer
  (tool spec existed but couldn't actually be called)
- Add AgentMessage to Explore/Plan/Verification/general-purpose
  allowed_tools lists so sub-agents can communicate
- Add debug logging to resolve_agent_model and load_subagent_model_from_config
  to diagnose subagentModel config chain

Co-authored-by: GLM 5.1 FP8 via Crush <crush@charm.land>
This commit is contained in:
TheArchitectit 2026-04-28 14:38:25 -05:00
parent 5b707a2fd6
commit 0d833fe4f2
1 changed files with 26 additions and 6 deletions

View File

@ -1525,6 +1525,7 @@ fn execute_tool_with_enforcer(
.and_then(run_worker_observe_completion), .and_then(run_worker_observe_completion),
"TeamCreate" => from_value::<TeamCreateInput>(input).and_then(run_team_create), "TeamCreate" => from_value::<TeamCreateInput>(input).and_then(run_team_create),
"TeamDelete" => from_value::<TeamDeleteInput>(input).and_then(run_team_delete), "TeamDelete" => from_value::<TeamDeleteInput>(input).and_then(run_team_delete),
"AgentMessage" => from_value::<AgentMessageInput>(input).and_then(run_agent_message),
"CronCreate" => from_value::<CronCreateInput>(input).and_then(run_cron_create), "CronCreate" => from_value::<CronCreateInput>(input).and_then(run_cron_create),
"CronDelete" => from_value::<CronDeleteInput>(input).and_then(run_cron_delete), "CronDelete" => from_value::<CronDeleteInput>(input).and_then(run_cron_delete),
"CronList" => run_cron_list(input.clone()), "CronList" => run_cron_list(input.clone()),
@ -4728,21 +4729,36 @@ fn build_agent_system_prompt(subagent_type: &str, model: &str) -> Result<Vec<Str
fn resolve_agent_model(model: Option<&str>) -> String { fn resolve_agent_model(model: Option<&str>) -> String {
if let Some(m) = model.map(str::trim).filter(|m| !m.is_empty()) { if let Some(m) = model.map(str::trim).filter(|m| !m.is_empty()) {
eprintln!("[agent] resolve_agent_model: using explicit model={m}");
return m.to_string(); return m.to_string();
} }
if let Some(fast) = load_subagent_model_from_config() { if let Some(fast) = load_subagent_model_from_config() {
eprintln!("[agent] resolve_agent_model: using subagentModel from config={fast}");
return fast; return fast;
} }
eprintln!("[agent] resolve_agent_model: falling back to DEFAULT_AGENT_MODEL={DEFAULT_AGENT_MODEL}");
DEFAULT_AGENT_MODEL.to_string() DEFAULT_AGENT_MODEL.to_string()
} }
fn load_subagent_model_from_config() -> Option<String> { fn load_subagent_model_from_config() -> Option<String> {
std::env::current_dir().ok().and_then(|cwd| { let cwd = match std::env::current_dir() {
ConfigLoader::default_for(&cwd) Ok(p) => p,
.load() Err(e) => {
.ok() eprintln!("[agent] load_subagent_model_from_config: current_dir() failed: {e}");
.and_then(|config| config.subagent_model().map(|m| m.to_string())) return None;
}) }
};
match ConfigLoader::default_for(&cwd).load() {
Ok(config) => {
let result = config.subagent_model().map(|m| m.to_string());
eprintln!("[agent] load_subagent_model_from_config: cwd={} subagent_model={result:?}", cwd.display());
result
}
Err(e) => {
eprintln!("[agent] load_subagent_model_from_config: ConfigLoader::load() failed: {e}");
None
}
}
} }
fn allowed_tools_for_subagent(subagent_type: &str) -> BTreeSet<String> { fn allowed_tools_for_subagent(subagent_type: &str) -> BTreeSet<String> {
@ -4755,6 +4771,7 @@ fn allowed_tools_for_subagent(subagent_type: &str) -> BTreeSet<String> {
"WebSearch", "WebSearch",
"ToolSearch", "ToolSearch",
"Skill", "Skill",
"AgentMessage",
"StructuredOutput", "StructuredOutput",
], ],
"Plan" => vec![ "Plan" => vec![
@ -4766,6 +4783,7 @@ fn allowed_tools_for_subagent(subagent_type: &str) -> BTreeSet<String> {
"ToolSearch", "ToolSearch",
"Skill", "Skill",
"TodoWrite", "TodoWrite",
"AgentMessage",
"StructuredOutput", "StructuredOutput",
"SendUserMessage", "SendUserMessage",
], ],
@ -4778,6 +4796,7 @@ fn allowed_tools_for_subagent(subagent_type: &str) -> BTreeSet<String> {
"WebSearch", "WebSearch",
"ToolSearch", "ToolSearch",
"TodoWrite", "TodoWrite",
"AgentMessage",
"StructuredOutput", "StructuredOutput",
"SendUserMessage", "SendUserMessage",
"PowerShell", "PowerShell",
@ -4816,6 +4835,7 @@ fn allowed_tools_for_subagent(subagent_type: &str) -> BTreeSet<String> {
"ToolSearch", "ToolSearch",
"NotebookEdit", "NotebookEdit",
"Sleep", "Sleep",
"AgentMessage",
"SendUserMessage", "SendUserMessage",
"Config", "Config",
"StructuredOutput", "StructuredOutput",