Class: Antigravity::Guards::AgentLogger

Inherits:
Object
  • Object
show all
Defined in:
lib/antigravity/guards.rb

Overview

Configurable opt-in logger guard supporting file loggers and Rails.logger

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(log_target = nil, level: Logger::INFO, silent_notice: false) ⇒ AgentLogger

Returns a new instance of AgentLogger.



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/antigravity/guards.rb', line 12

def initialize(log_target = nil, level: Logger::INFO, silent_notice: false)
  resolved_target = resolve_log_target(log_target)

  if resolved_target.is_a?(String)
    dir = File.dirname(resolved_target)
    FileUtils.mkdir_p(dir) unless Dir.exist?(dir)
    @logger = ::Logger.new(resolved_target)
    @target_description = resolved_target
  elsif resolved_target.respond_to?(:info)
    @logger = resolved_target
    @target_description = "Rails.logger"
  else
    @logger = ::Logger.new($stdout)
    @target_description = "$stdout"
  end

  @logger.level = level if @logger.respond_to?(:level=)

  unless silent_notice
    puts "#{Antigravity.emoji(:logger)} Logging to #{@target_description}"
  end
end

Instance Attribute Details

#loggerObject (readonly)

Returns the value of attribute logger.



10
11
12
# File 'lib/antigravity/guards.rb', line 10

def logger
  @logger
end

#target_descriptionObject (readonly)

Returns the value of attribute target_description.



10
11
12
# File 'lib/antigravity/guards.rb', line 10

def target_description
  @target_description
end

Instance Method Details

#after_response(response) ⇒ Object



39
40
41
# File 'lib/antigravity/guards.rb', line 39

def after_response(response)
  @logger.info("#{Antigravity.emoji(:response)} [Antigravity::Response] Assistant (#{response.model_id}): #{response.content.strip}")
end

#after_tool_call(tool_name, params, result) ⇒ Object



47
48
49
50
51
# File 'lib/antigravity/guards.rb', line 47

def after_tool_call(tool_name, params, result)
  prefix = result.to_s.include?("TOOL BLOCKED") ? Antigravity.emoji(:tool_blocked) : Antigravity.emoji(:tool_result)
  @logger.info("#{prefix} [Antigravity::Tool] Result for '#{tool_name}': #{result}")
  result
end

#attach_to(agent) ⇒ Object



57
58
59
60
61
62
63
# File 'lib/antigravity/guards.rb', line 57

def attach_to(agent)
  logger_guard = self
  agent.before_prompt { |p| logger_guard.before_prompt(p) }
  agent.after_response { |r| logger_guard.after_response(r) }
  agent.before_tool_call { |t, p| logger_guard.before_tool_call(t, p) }
  agent.after_tool_call { |t, p, r| logger_guard.after_tool_call(t, p, r) }
end

#before_prompt(prompt_text) ⇒ Object



35
36
37
# File 'lib/antigravity/guards.rb', line 35

def before_prompt(prompt_text)
  @logger.info("#{Antigravity.emoji(:prompt)} [Antigravity::Prompt] User: '#{prompt_text}'")
end

#before_tool_call(tool_name, params) ⇒ Object



43
44
45
# File 'lib/antigravity/guards.rb', line 43

def before_tool_call(tool_name, params)
  @logger.info("#{Antigravity.emoji(:tool)} [Antigravity::Tool] Executing '#{tool_name}' with params: #{params.inspect}")
end

#sidecar_event(event_type, payload) ⇒ Object



53
54
55
# File 'lib/antigravity/guards.rb', line 53

def sidecar_event(event_type, payload)
  @logger.info("#{Antigravity.emoji(:sidecar)} [Antigravity::Sidecar] Event :#{event_type} payload: #{payload.inspect}")
end