Module: ActionAgent::SessionRecordable

Extended by:
ActiveSupport::Concern
Defined in:
app/models/concerns/action_agent/session_recordable.rb

Overview

Concern for adding session recording to models that track browser interactions

Include this in models like AgentRun or SandboxSession to enable automatic session recording for playback and handoff.

Usage:

class AgentRun < ApplicationRecord
include SessionRecordable
end

# Start recording
run.start_session_recording!

# Record an action
run.record_browser_action!(type: :click, selector: "#submit", screenshot: png_data)

# Complete recording
run.complete_session_recording!

Instance Method Summary collapse

Instance Method Details

#complete_session_recording!Object

Complete the recording



56
57
58
# File 'app/models/concerns/action_agent/session_recordable.rb', line 56

def complete_session_recording!
  session_recording&.complete!
end

#fail_session_recording!(error_message = nil) ⇒ Object

Fail the recording



61
62
63
# File 'app/models/concerns/action_agent/session_recordable.rb', line 61

def fail_session_recording!(error_message = nil)
  session_recording&.fail!(error_message)
end

#record_browser_action!(type:, selector: nil, value: nil, screenshot: nil, dom_snapshot: nil, metadata: {}) ⇒ Object

Record a browser action



42
43
44
45
46
47
48
49
50
51
52
53
# File 'app/models/concerns/action_agent/session_recordable.rb', line 42

def record_browser_action!(type:, selector: nil, value: nil, screenshot: nil, dom_snapshot: nil, metadata: {})
  return unless session_recording&.recording?

  session_recording.record_action!(
    action_type: type.to_s,
    selector: selector,
    value: value,
    screenshot: screenshot,
    dom_snapshot: dom_snapshot,
    metadata: 
  )
end

#recording_active?Boolean

Check if recording is active

Returns:

  • (Boolean)


66
67
68
# File 'app/models/concerns/action_agent/session_recordable.rb', line 66

def recording_active?
  session_recording&.recording?
end

#recording_serviceObject

Get the session recording service



71
72
73
74
75
# File 'app/models/concerns/action_agent/session_recordable.rb', line 71

def recording_service
  return nil unless session_recording

  SessionRecordingService.new(session_recording)
end

#start_session_recording!(name: nil) ⇒ Object

Start a new session recording



31
32
33
34
35
36
37
38
39
# File 'app/models/concerns/action_agent/session_recordable.rb', line 31

def start_session_recording!(name: nil)
  return session_recording if session_recording&.recording?

  create_session_recording!(
    name: name || default_recording_name,
    status: :recording,
    metadata: { started_at: Time.current.iso8601 }
  )
end