Class: Rixie::CLI::Renderer

Inherits:
Object
  • Object
show all
Defined in:
lib/rixie/cli/renderer.rb

Instance Method Summary collapse

Constructor Details

#initialize(terminal: Terminal.new) ⇒ Renderer

Returns a new instance of Renderer.



10
11
12
13
# File 'lib/rixie/cli/renderer.rb', line 10

def initialize(terminal: Terminal.new)
  @terminal = terminal
  @spinner = Spinner.new(terminal: @terminal, prefix: agent_prefix)
end

Instance Method Details

#accent(text) ⇒ Object



85
# File 'lib/rixie/cli/renderer.rb', line 85

def accent(text) = @terminal.accent(text)

#agent_error(message) ⇒ Object



61
62
63
64
# File 'lib/rixie/cli/renderer.rb', line 61

def agent_error(message)
  newline
  puts "#{@terminal.error("Error:")} #{message}"
end

#agent_interruptedObject



66
67
68
69
# File 'lib/rixie/cli/renderer.rb', line 66

def agent_interrupted
  newline
  puts @terminal.warn("Interrupted.")
end

#agent_prefixObject

– Agent output –



108
109
110
# File 'lib/rixie/cli/renderer.rb', line 108

def agent_prefix
  "#{@terminal.bold("Agent:")} "
end

#bold(text) ⇒ Object



83
# File 'lib/rixie/cli/renderer.rb', line 83

def bold(text) = @terminal.bold(text)

#error(message) ⇒ Object



21
22
23
# File 'lib/rixie/cli/renderer.rb', line 21

def error(message)
  puts_indented(@terminal.error(message))
end

#goodbyeObject



52
53
54
55
# File 'lib/rixie/cli/renderer.rb', line 52

def goodbye
  newline
  puts @terminal.success("Goodbye!")
end

#heading(text) ⇒ Object



29
30
31
# File 'lib/rixie/cli/renderer.rb', line 29

def heading(text)
  puts_indented(@terminal.bold(text))
end

#info(label, value) ⇒ Object



25
26
27
# File 'lib/rixie/cli/renderer.rb', line 25

def info(label, value)
  puts_indented("#{@terminal.bold("#{label}:")} #{value}")
end

#input_prompt(label) ⇒ Object



87
88
89
# File 'lib/rixie/cli/renderer.rb', line 87

def input_prompt(label)
  "  #{@terminal.bold("#{label}:")} "
end

#list(items, selected: nil) ⇒ Object



33
34
35
36
37
38
# File 'lib/rixie/cli/renderer.rb', line 33

def list(items, selected: nil)
  items.each_with_index do |item, i|
    marker = (item == selected) ? " #{@terminal.success("")}" : ""
    puts_indented("#{@terminal.accent("#{i + 1}.")} #{item}#{marker}", level: 2)
  end
end

#newlineObject



71
72
73
# File 'lib/rixie/cli/renderer.rb', line 71

def newline
  puts "\n"
end


112
113
114
# File 'lib/rixie/cli/renderer.rb', line 112

def print_agent_prefix
  print agent_prefix
end

#prompt(strategy_name) ⇒ Object



75
76
77
78
79
80
81
# File 'lib/rixie/cli/renderer.rb', line 75

def prompt(strategy_name)
  if strategy_name == "simple"
    "#{@terminal.accent(">")} "
  else
    "#{@terminal.accent(">")} #{@terminal.secondary("(#{strategy_name})")} "
  end
end

#render_markdown(text) ⇒ Object



96
97
98
# File 'lib/rixie/cli/renderer.rb', line 96

def render_markdown(text)
  puts Markdown.render(text, terminal: @terminal)
end

#render_thought(text) ⇒ Object



100
101
102
103
104
# File 'lib/rixie/cli/renderer.rb', line 100

def render_thought(text)
  text.each_line do |line|
    puts_indented(@terminal.secondary(line.chomp))
  end
end

#render_tool_call(thought) ⇒ Object



116
117
118
119
120
121
122
123
124
# File 'lib/rixie/cli/renderer.rb', line 116

def render_tool_call(thought)
  thought.tool_calls.each_with_index do |tc, i|
    result = thought.tool_results[i]
    frame(fmt("{{*}} Tool: #{@terminal.bold(tc.name)}"), color: :cyan) do
      format_tool_args(tc.arguments).each { |line| puts line }
      puts_indented("#{@terminal.bold("Result:")} #{result.content.to_s.lines.first&.chomp}")
    end
  end
end

#render_tool_call_end(tool_call, result) ⇒ Object



130
131
132
133
134
135
# File 'lib/rixie/cli/renderer.rb', line 130

def render_tool_call_end(tool_call, result)
  frame(fmt("{{*}} Tool: #{@terminal.bold(tool_call.name)}"), color: :cyan) do
    format_tool_args(tool_call.arguments).each { |line| puts line }
    puts_indented("#{@terminal.bold("Result:")} #{result.content.to_s.lines.first&.chomp}")
  end
end

#render_tool_call_start(tool_call) ⇒ Object



126
127
128
# File 'lib/rixie/cli/renderer.rb', line 126

def render_tool_call_start(tool_call)
  puts_indented("#{@terminal.accent("")} Calling #{@terminal.bold(tool_call.name)}...")
end

#start_spinnerObject

– Spinner –



139
# File 'lib/rixie/cli/renderer.rb', line 139

def start_spinner = @spinner.start

#stop_spinnerObject



141
# File 'lib/rixie/cli/renderer.rb', line 141

def stop_spinner = @spinner.stop

#stream_token(delta) ⇒ Object



91
92
93
94
# File 'lib/rixie/cli/renderer.rb', line 91

def stream_token(delta)
  print delta
  $stdout.flush
end

#success(message) ⇒ Object

– General output –



17
18
19
# File 'lib/rixie/cli/renderer.rb', line 17

def success(message)
  puts_indented("#{@terminal.success("")} #{message}")
end

#text(message) ⇒ Object



40
41
42
# File 'lib/rixie/cli/renderer.rb', line 40

def text(message)
  puts_indented(message)
end

#unknown_command(name) ⇒ Object



57
58
59
# File 'lib/rixie/cli/renderer.rb', line 57

def unknown_command(name)
  puts "#{@terminal.error("Unknown command:")} /#{name}"
end

#welcome(version:, provider:, model:) ⇒ Object



44
45
46
47
48
49
50
# File 'lib/rixie/cli/renderer.rb', line 44

def welcome(version:, provider:, model:)
  frame("Rixie v#{version}", color: :red) do
    info("Provider", provider)
    info("Model", model)
    text("Type #{@terminal.warn("exit")} or press #{@terminal.warn("Ctrl+C")} to quit.")
  end
end