Module: DebugMcp::EventFormatter

Defined in:
lib/debug_mcp/event_formatter.rb

Constant Summary collapse

DEFAULT_LIMITS =
{
  sql: 30,
  render: 20,
  cache: 20,
  job: nil,           # nil = no limit
  logger: 50,
}.freeze
MAX_SQL_CHARS =
500
SQL_HEAD =
300
SQL_TAIL =
100
MAX_CACHE_KEY_CHARS =
200
MAX_JOB_ARG_CHARS =
300

Class Method Summary collapse

Class Method Details

.format(events, limits: DEFAULT_LIMITS, include_debug_eval: false) ⇒ Object

Format an array of event hashes (as returned by NotificationsSubscriber.fetch_*) into a Markdown-flavored structured text block. Returns nil if events is empty (after filtering).

By default, events with source: :debug_eval are excluded — these are AR queries / renders / etc. fired by debug-mcp’s own evaluate_code calls during breakpoint inspection (ADR-0003). Pass include_debug_eval: true to keep them.



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/debug_mcp/event_formatter.rb', line 28

def format(events, limits: DEFAULT_LIMITS, include_debug_eval: false)
  return nil if events.nil? || events.empty?

  filtered = include_debug_eval ? events : events.reject { |e| e[:source].to_s == "debug_eval" }
  return nil if filtered.empty?

  grouped = group_events(filtered)
  sections = []

  sections << format_controller(grouped[:controller])
  sections << format_sql(grouped[:sql], limit: limits[:sql])
  sections << format_renders(grouped[:render], limit: limits[:render])
  sections << format_cache(grouped[:cache], limit: limits[:cache])
  sections << format_jobs(grouped[:job], limit: limits[:job])

  sections.compact.join("\n\n")
end