Class: AgUi::EventBridge

Inherits:
Object
  • Object
show all
Defined in:
lib/ag_ui/event_bridge.rb

Overview

The seam between brute's turn pipeline and the AG-UI SSE stream.

Brute middleware and terminal procs push {type:, data:} events into env; an EventBridge is that sink, translating each event into the matching typed SSE emitter as it arrives — the browser sees deltas mid-turn, not after.

pipeline.start(messages, events: AgUi::EventBridge.new(stream))

Unknown event types (brute's own :log, :tool_result telemetry, etc.) are ignored — only the AG-UI vocabulary reaches the wire.

Constant Summary collapse

TRANSLATIONS =
{
  text_message_start: :translate_text_start,
  text_message_content: :translate_text_content,
  text_message_end: :translate_text_end,
  tool_call_start: :translate_tool_call_start,
  tool_call_args: :translate_tool_call_args,
  tool_call_end: :translate_tool_call_end,
  tool_call_result: :translate_tool_call_result,
  activity_snapshot: :translate_activity_snapshot,
  reasoning_start: :translate_reasoning_start,
  reasoning_message_start: :translate_reasoning_message_start,
  reasoning_message_content: :translate_reasoning_message_content,
  reasoning_message_end: :translate_reasoning_message_end,
  reasoning_end: :translate_reasoning_end,
}.freeze

Instance Method Summary collapse

Constructor Details

#initialize(stream) ⇒ EventBridge

Returns a new instance of EventBridge.



35
36
37
# File 'lib/ag_ui/event_bridge.rb', line 35

def initialize(stream)
  @stream = stream
end

Instance Method Details

#<<(event) ⇒ Object



39
40
41
42
43
44
45
# File 'lib/ag_ui/event_bridge.rb', line 39

def <<(event)
  handler = TRANSLATIONS[event[:type]]
  if handler
    send(handler, event[:data] || {})
  end
  self
end