Class: Antigravity::Guards::AgentLogger
- Inherits:
-
Object
- Object
- Antigravity::Guards::AgentLogger
- Defined in:
- lib/antigravity/guards.rb
Overview
Configurable opt-in logger guard supporting file loggers and Rails.logger
Instance Attribute Summary collapse
-
#logger ⇒ Object
readonly
Returns the value of attribute logger.
-
#target_description ⇒ Object
readonly
Returns the value of attribute target_description.
Instance Method Summary collapse
- #after_response(response) ⇒ Object
- #after_tool_call(tool_name, params, result) ⇒ Object
- #attach_to(agent) ⇒ Object
- #before_prompt(prompt_text) ⇒ Object
- #before_tool_call(tool_name, params) ⇒ Object
-
#initialize(log_target = nil, level: Logger::INFO, silent_notice: false) ⇒ AgentLogger
constructor
A new instance of AgentLogger.
- #sidecar_event(event_type, payload) ⇒ Object
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
#logger ⇒ Object (readonly)
Returns the value of attribute logger.
10 11 12 |
# File 'lib/antigravity/guards.rb', line 10 def logger @logger end |
#target_description ⇒ Object (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 |