Commit 4b1e942

mo khan <mo@mokhan.ca>
2026-01-28 15:22:21
refactor: use Open3 and improve ANSI stripping
1 parent 3255a32
Changed files (1)
lib
elelem
builtins
lib/elelem/builtins/builtins.rb
@@ -34,16 +34,22 @@ Elelem::Plugins.register(:builtins) do |agent|
     end
   end
 
+  strip_ansi = ->(text) do
+    text
+      .gsub(/^Script started.*?\n/, "")
+      .gsub(/\nScript done.*$/, "")
+      .gsub(/\e\].*?(?:\a|\e\\)/, "")
+      .gsub(/\e\[[0-9;?]*[A-Za-z]/, "")
+      .gsub(/\e[PX^_].*?\e\\/, "")
+      .gsub(/\e./, "")
+      .gsub(/[\b]/, "")
+      .gsub(/\r/, "")
+  end
+
   agent.commands.register("shell", description: "Start interactive shell") do
     transcript = Tempfile.create do |file|
       system("script", "-q", file.path, chdir: Dir.pwd)
-      File.read(file.path)
-        .gsub(/^Script started.*?\n/, "")
-        .gsub(/\nScript done.*$/, "")
-        .gsub(/\e\[[0-9;]*[a-zA-Z]/, "")
-        .gsub(/\e\[\?[0-9]+[hl]/, "")
-        .gsub(/[\b]/, "")
-        .gsub(/\r/, "")
+      strip_ansi.call(File.read(file.path))
     end
     agent.conversation.add(role: "user", content: transcript) unless transcript.strip.empty?
   end