From b0f09a8f43e3236cc8a951c9f3de3fca71e285fe Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Sat, 4 Apr 2026 23:24:31 -0400 Subject: [PATCH] agent: validate tool call arguments before dispatch Reject tool calls with malformed JSON arguments early, returning a clear error to the model instead of silently defaulting to null and dispatching anyway. Prevents cascading failures when the model generates truncated tool call arguments. Co-Authored-By: Kent Overstreet --- src/agent/mod.rs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/agent/mod.rs b/src/agent/mod.rs index 554af06..f2f8376 100644 --- a/src/agent/mod.rs +++ b/src/agent/mod.rs @@ -485,8 +485,16 @@ impl Agent { ui_tx: &UiSender, ds: &mut DispatchState, ) { - let args: serde_json::Value = - serde_json::from_str(&call.function.arguments).unwrap_or_default(); + let args: serde_json::Value = match serde_json::from_str(&call.function.arguments) { + Ok(v) => v, + Err(e) => { + let err = format!("Error: malformed tool call arguments: {e}"); + let _ = ui_tx.send(UiMessage::Activity(format!("rejected: {} (bad args)", call.function.name))); + let mut me = agent.lock().await; + me.apply_tool_result(call, err, ui_tx, ds); + return; + } + }; let args_summary = summarize_args(&call.function.name, &args); let _ = ui_tx.send(UiMessage::Activity(format!("calling: {}", call.function.name)));