2fbdac7aa9
The JSON tool call filter was outputting newlines immediately as they were encountered. When the LLM output contained multiple newlines before a tool call, each newline was output before the tool call JSON was detected and suppressed, leaving orphaned blank lines in the output. Changes: - Add pending_newlines field to FilterState to buffer newlines at line start - First newline after content is output immediately, subsequent ones buffered - When tool call confirmed, pending_newlines cleared (suppressing extra blanks) - When not a tool call, pending_newlines output with the buffer - Add flush_json_tool_filter() to flush pending content at end of streaming - Update tests to reflect new behavior - Add tests for newline suppression behavior