--- name: strip_ansi kind: function lang: go domain: core version: "1.0.0" purity: pure signature: "func StripANSI(s string) string" description: "Elimina secuencias de escape ANSI/VT100 de un string y filtra caracteres de control no imprimibles, preservando \\n, \\t y \\r." tags: ["terminal", "ansi", "string", "sanitize", "terminal-capture"] uses_functions: [] uses_types: [] returns: [] returns_optional: false error_type: "" imports: ["regexp", "strings"] params: - name: s desc: "String que puede contener secuencias de escape de terminal (CSI, OSC, escapes simples) y/o caracteres de control." output: "String limpio: sin secuencias ANSI ni caracteres de control, preservando saltos de línea (\\n), tabulaciones (\\t) y retornos de carro (\\r)." tested: true tests: - "golden: color SGR codes" - "edge OSC titulo de ventana" - "edge movimientos de cursor" - "edge string sin escapes preserva saltos de linea" - "edge string vacio" - "edge preserva tabs" test_file_path: "functions/core/strip_ansi_test.go" file_path: "functions/core/strip_ansi.go" --- ## Ejemplo ```go // Limpiar output de terminal con color rojo raw := "\x1b[31mError:\x1b[0m archivo no encontrado" clean := core.StripANSI(raw) // clean == "Error: archivo no encontrado" // Limpiar título de ventana OSC raw2 := "\x1b]0;mi titulo\x07contenido real" clean2 := core.StripANSI(raw2) // clean2 == "contenido real" ``` ## Cuando usarla Cuando captures output de un PTY/TUI/subprocess y necesites texto plano: antes de indexar logs con ANSI en un buscador, antes de difar output de terminal, o cuando muestres salida de comando en un contexto sin soporte de escape (UI web, archivo, base de datos). ## Gotchas - Preserva `\n`, `\t` y `\r` a propósito: el output de terminales suele tener CRLF y tabulaciones con semántica propia. - Cubre CSI, OSC y escapes simples de dos caracteres. Secuencias DCS o PM (rarísimas) no se eliminan; si las necesitas, añade una regex adicional antes de llamar a esta función. - Las regexes están precompiladas a nivel de paquete: no hay coste de compilación por llamada.