diff --git a/run_agent.py b/run_agent.py index d6af4a1b579e..306503bbb49c 100644 --- a/run_agent.py +++ b/run_agent.py @@ -11908,8 +11908,18 @@ def _stop_spinner(): self._vprint(f"{self.log_prefix}⚠️ Injecting recovery tool results for invalid JSON...") self._invalid_json_retries = 0 # Reset for next attempt - # Append the assistant message with its (broken) tool_calls + # Append the assistant message, repairing broken tool_call + # arguments at write time so corrupted JSON never enters + # the persistent message history. recovery_assistant = self._build_assistant_message(assistant_message, finish_reason) + for tc_dict in recovery_assistant.get("tool_calls") or []: + raw = tc_dict.get("function", {}).get("arguments", "") + try: + json.loads(raw) + except (json.JSONDecodeError, TypeError): + tc_dict["function"]["arguments"] = _repair_tool_call_arguments( + raw, tc_dict.get("function", {}).get("name", "?"), + ) messages.append(recovery_assistant) # Respond with tool error results for each tool call