diff --git a/crates/pidgin-napi/schema/api.json b/crates/pidgin-napi/schema/api.json index 68483a03..7cb5ea2c 100644 --- a/crates/pidgin-napi/schema/api.json +++ b/crates/pidgin-napi/schema/api.json @@ -519,6 +519,25 @@ "name": "parseGitUrl" } } + }, + { + "name": "stripAnsi", + "doc": "`stripAnsi` (utils/ansi.ts): remove ANSI escape sequences (OSC + CSI). The\nshim keeps pi's non-string `TypeError` guard, so only strings reach here.", + "shape": "unary", + "infallible": true, + "readonly": true, + "params": [ + { + "name": "value", + "type": "string" + } + ], + "returns": "string", + "bindings": { + "node": { + "name": "stripAnsi" + } + } } ] }, diff --git a/crates/pidgin-napi/src/core_impl.rs b/crates/pidgin-napi/src/core_impl.rs index 0f5a0fa6..c9ab97ba 100644 --- a/crates/pidgin-napi/src/core_impl.rs +++ b/crates/pidgin-napi/src/core_impl.rs @@ -162,6 +162,10 @@ impl crate::generated::PidginCore for PidginImpl { obj.insert("pinned".to_string(), serde_json::json!(parsed.pinned)); Some(serde_json::Value::Object(obj).to_string()) } + + fn strip_ansi(value: String) -> String { + pidgin_coding::utils::ansi::strip_ansi(&value) + } } // --- tui keybindings layer (packages/tui/src/keybindings.ts) ---------------- diff --git a/crates/pidgin-napi/src/generated.rs b/crates/pidgin-napi/src/generated.rs index 184bc15d..124cbabc 100644 --- a/crates/pidgin-napi/src/generated.rs +++ b/crates/pidgin-napi/src/generated.rs @@ -70,6 +70,7 @@ pub trait PidginCore: Sized + Send + Sync + 'static { fn find_word_backward(text: String, cursor: i32) -> i32; fn find_word_forward(text: String, cursor: i32) -> i32; fn parse_git_url(source: String) -> Option; + fn strip_ansi(value: String) -> String; } /// The `KeybindingsManagerCore` contract — implement over the engine in `crate::core_impl`. @@ -264,6 +265,13 @@ pub fn parse_git_url(source: String) -> Option { ::parse_git_url(source) } +/// `stripAnsi` (utils/ansi.ts): remove ANSI escape sequences (OSC + CSI). The +/// shim keeps pi's non-string `TypeError` guard, so only strings reach here. +#[napi(js_name = "stripAnsi")] +pub fn strip_ansi(value: String) -> String { + ::strip_ansi(value) +} + /// The Rust-backed keybindings core, exposed to JavaScript as /// `KeybindingsManagerCore`. #[napi] diff --git a/crates/pidgin-napi/src/lib.rs b/crates/pidgin-napi/src/lib.rs index 8fdbf617..702fc6c8 100644 --- a/crates/pidgin-napi/src/lib.rs +++ b/crates/pidgin-napi/src/lib.rs @@ -193,13 +193,6 @@ pub fn anthropic_parse_sse_stream( // the pi export it replaces; the shims re-export the un-ported surface from the // preserved pi original and override only these symbols. -/// `stripAnsi` (utils/ansi.ts): remove ANSI escape sequences (OSC + CSI). The -/// shim keeps pi's non-string `TypeError` guard, so only strings reach here. -#[napi(js_name = "stripAnsi")] -pub fn strip_ansi(value: String) -> String { - pidgin_coding::utils::ansi::strip_ansi(&value) -} - /// `detectSupportedImageMimeType` (utils/mime.ts): sniff a supported image MIME /// type from magic bytes, or `null`. #[napi(js_name = "detectSupportedImageMimeType")]