Commit fb36cd1
Changed files (2)
lib
elelem
lib/elelem/agent.rb
@@ -39,9 +39,9 @@ module Elelem
def default_terminal
Terminal.new(
commands: COMMANDS,
- env_vars: ENV_VARS
+ env_vars: ENV_VARS,
modes: MODES,
- providers: PROVIDERS,
+ providers: PROVIDERS
)
end
@@ -238,7 +238,7 @@ module Elelem
content = ""
tool_calls = []
- terminal.write "Thinking... "
+ terminal.waiting
begin
client.fetch(messages + turn_context, tools) do |chunk|
case chunk[:type]
lib/elelem/terminal.rb
@@ -7,6 +7,7 @@ module Elelem
@modes = modes
@providers = providers
@env_vars = env_vars
+ @spinner_thread = nil
setup_completion
end
@@ -15,13 +16,28 @@ module Elelem
end
def say(message)
+ stop_spinner
$stdout.puts message
end
def write(message)
+ stop_spinner
$stdout.print message
end
+ def waiting
+ @spinner_thread = Thread.new do
+ frames = %w[| / - \\]
+ i = 0
+ loop do
+ $stdout.print "\r#{frames[i % frames.length]} "
+ $stdout.flush
+ i += 1
+ sleep 0.1
+ end
+ end
+ end
+
def select(question, options, &block)
CLI::UI::Prompt.ask(question) do |handler|
options.each do |option|
@@ -32,6 +48,14 @@ module Elelem
private
+ def stop_spinner
+ return unless @spinner_thread
+
+ @spinner_thread.kill
+ @spinner_thread = nil
+ $stdout.print "\r \r"
+ end
+
def setup_completion
Reline.autocompletion = true
Reline.completion_proc = ->(target, preposing) { complete(target, preposing) }