Class: Legion::TTY::Components::MessageStream

Inherits:
Object
  • Object
show all
Defined in:
lib/legion/tty/components/message_stream.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeMessageStream

Returns a new instance of MessageStream.



11
12
13
14
# File 'lib/legion/tty/components/message_stream.rb', line 11

def initialize
  @messages = []
  @scroll_offset = 0
end

Instance Attribute Details

#messagesObject (readonly)

Returns the value of attribute messages.



9
10
11
# File 'lib/legion/tty/components/message_stream.rb', line 9

def messages
  @messages
end

#scroll_offsetObject (readonly)

Returns the value of attribute scroll_offset.



9
10
11
# File 'lib/legion/tty/components/message_stream.rb', line 9

def scroll_offset
  @scroll_offset
end

Instance Method Details

#add_message(role:, content:) ⇒ Object



16
17
18
# File 'lib/legion/tty/components/message_stream.rb', line 16

def add_message(role:, content:)
  @messages << { role: role, content: content, tool_panels: [] }
end

#add_tool_panel(panel) ⇒ Object



26
27
28
29
30
# File 'lib/legion/tty/components/message_stream.rb', line 26

def add_tool_panel(panel)
  return if @messages.empty?

  @messages.last[:tool_panels] << panel
end

#append_streaming(text) ⇒ Object



20
21
22
23
24
# File 'lib/legion/tty/components/message_stream.rb', line 20

def append_streaming(text)
  return if @messages.empty?

  @messages.last[:content] = @messages.last[:content] + text
end

#render(width:, height:) ⇒ Object



40
41
42
43
44
45
46
# File 'lib/legion/tty/components/message_stream.rb', line 40

def render(width:, height:)
  all_lines = build_all_lines(width)
  total = all_lines.size
  start_idx = [total - height - @scroll_offset, 0].max
  start_idx = [start_idx, total].min
  all_lines[start_idx, height] || []
end

#scroll_down(lines = 1) ⇒ Object



36
37
38
# File 'lib/legion/tty/components/message_stream.rb', line 36

def scroll_down(lines = 1)
  @scroll_offset = [@scroll_offset - lines, 0].max
end

#scroll_up(lines = 1) ⇒ Object



32
33
34
# File 'lib/legion/tty/components/message_stream.rb', line 32

def scroll_up(lines = 1)
  @scroll_offset += lines
end