ToolCallLimitMiddleware emits duplicate ToolMessage for already answered tool calls
ToolCallLimitMiddleware unconditionally emits ToolMessages for blocked or stopped tool calls, even when those tool_call_ids already have a ToolMessage in the message history, producing duplicate ToolMessages that violate the one-result-per-tool_call_id invariant and cause provider API failures or persistent broken threads.
