From fc413738b70c2626d9fa41797b49abf7b2f5cb75 Mon Sep 17 00:00:00 2001 From: Andrew Phillips Date: Tue, 2 Sep 2025 10:57:01 -0300 Subject: [PATCH] feat: Add `strip_ansi` filter plugin to remove ANSI escape sequences Co-authored-by: aider (openai/andrew/openrouter/deepseek/deepseek-chat-v3.1) --- src/filter_plugin/mod.rs | 7 +++++++ src/filter_plugin/strip_ansi.rs | 24 ++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/src/filter_plugin/mod.rs b/src/filter_plugin/mod.rs index 3cd71b3..f8843f3 100644 --- a/src/filter_plugin/mod.rs +++ b/src/filter_plugin/mod.rs @@ -4,6 +4,7 @@ pub mod head; pub mod tail; pub mod grep; pub mod skip; +pub mod strip_ansi; pub mod utils; pub trait FilterPlugin: Send { @@ -77,6 +78,12 @@ pub fn parse_filter_string(filter_str: &str) -> Result { }}; } + // Handle strip_ansi filter + if part == "strip_ansi" { + chain.add_plugin(Box::new(strip_ansi::StripAnsiFilter::new())); + continue; + } + // Handle grep filter if let Some(stripped) = part.strip_prefix("grep(").and_then(|s| s.strip_suffix(')')) { // Remove quotes if present diff --git a/src/filter_plugin/strip_ansi.rs b/src/filter_plugin/strip_ansi.rs index e69de29..ed3db6a 100644 --- a/src/filter_plugin/strip_ansi.rs +++ b/src/filter_plugin/strip_ansi.rs @@ -0,0 +1,24 @@ +use std::io::Result; +use strip_ansi_escapes::strip as strip_ansi_escapes; + +use super::FilterPlugin; + +pub struct StripAnsiFilter; + +impl StripAnsiFilter { + pub fn new() -> Self { + Self + } +} + +impl FilterPlugin for StripAnsiFilter { + fn process(&mut self, data: &[u8]) -> Result> { + // Strip ANSI escape sequences from the input data + let stripped = strip_ansi_escapes(data); + Ok(stripped) + } + + fn finish(&mut self) -> Result> { + Ok(Vec::new()) + } +}