Class: Legion::TTY::Components::MessageStream
- Inherits:
-
Object
- Object
- Legion::TTY::Components::MessageStream
- Defined in:
- lib/legion/tty/components/message_stream.rb
Instance Attribute Summary collapse
-
#messages ⇒ Object
readonly
Returns the value of attribute messages.
-
#scroll_offset ⇒ Object
readonly
Returns the value of attribute scroll_offset.
Instance Method Summary collapse
- #add_message(role:, content:) ⇒ Object
- #add_tool_panel(panel) ⇒ Object
- #append_streaming(text) ⇒ Object
-
#initialize ⇒ MessageStream
constructor
A new instance of MessageStream.
- #render(width:, height:) ⇒ Object
- #scroll_down(lines = 1) ⇒ Object
- #scroll_up(lines = 1) ⇒ Object
Constructor Details
#initialize ⇒ MessageStream
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
#messages ⇒ Object (readonly)
Returns the value of attribute messages.
9 10 11 |
# File 'lib/legion/tty/components/message_stream.rb', line 9 def @messages end |
#scroll_offset ⇒ Object (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 (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 |