Commit 538836f

mo khan <mo@mokhan.ca>
2025-08-14 22:01:58
feat: add a frame around the tool call
1 parent 16699cc
exe/elelem
@@ -3,9 +3,6 @@
 
 require "elelem"
 
-Reline.input = $stdin
-Reline.output = $stdout
-
 Signal.trap("INT") do
   exit(1)
 end
lib/elelem/states/working/state.rb
@@ -13,6 +13,10 @@ module Elelem
           agent.tui.show_progress("#{display_name}...", icon, colour: colour)
         end
 
+        def run(message)
+          process(message)
+        end
+
         def display_name
           self.class.name.split("::").last
         end
lib/elelem/states/working.rb
@@ -5,8 +5,8 @@ module Elelem
     module Working
       class << self
         def run(agent)
-          state = Waiting.new(agent)
           done = false
+          state = Waiting.new(agent)
 
           loop do
             agent.api.chat(agent.conversation.history) do |chunk|
@@ -15,7 +15,7 @@ module Elelem
               done = response["done"]
 
               agent.logger.debug("#{state.display_name}: #{message}")
-              state = state.process(message)
+              state = state.run(message)
             end
 
             break if state.nil?
lib/elelem/tools.rb
@@ -19,7 +19,9 @@ module Elelem
       return "Invalid function name: #{name}" if tool.nil?
       return "Invalid function arguments: #{args}" unless tool.valid?(args)
 
-      tool.call(args)
+      CLI::UI::Frame.open(name) do
+        tool.call(args)
+      end
     end
 
     def to_h
lib/elelem.rb
@@ -1,5 +1,6 @@
 # frozen_string_literal: true
 
+require "cli/ui"
 require "erb"
 require "json"
 require "json-schema"
@@ -31,6 +32,10 @@ require_relative "elelem/tools"
 require_relative "elelem/tui"
 require_relative "elelem/version"
 
+CLI::UI::StdoutRouter.enable
+Reline.input = $stdin
+Reline.output = $stdout
+
 module Elelem
   class Error < StandardError; end
 end
elelem.gemspec
@@ -61,6 +61,7 @@ Gem::Specification.new do |spec|
   spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
   spec.require_paths = ["lib"]
 
+  spec.add_dependency "cli-ui"
   spec.add_dependency "erb"
   spec.add_dependency "json"
   spec.add_dependency "json-schema"
Gemfile.lock
@@ -2,6 +2,7 @@ PATH
   remote: .
   specs:
     elelem (0.1.2)
+      cli-ui
       erb
       json
       json-schema
@@ -19,6 +20,7 @@ GEM
       public_suffix (>= 2.0.2, < 7.0)
     ast (2.4.3)
     bigdecimal (3.2.2)
+    cli-ui (2.4.0)
     date (3.4.1)
     diff-lcs (1.6.2)
     erb (5.0.2)