antigravity-sdk 0.1.3 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 449edf2b1bf5f2aaa389a0e79b74c6ed93bc5b7623a957068b2bd704b292347b
4
- data.tar.gz: c876958eb74ccac96717634b5a0c1d7314e837f2a3695a557d1d19eee4b6d853
3
+ metadata.gz: 6e2f8d1b432e31aa733976b69c28c01db1c0a8f7d109eb920e489d22ee0fa001
4
+ data.tar.gz: c1dec66ab20e10063913499f9811a8baf1aaf63bf1113d8008b4410e4a68b92a
5
5
  SHA512:
6
- metadata.gz: 6ccc779048181412d94425b9a9c4901339acfb957e4646b047ce4fe1b96e4d2b4f4b6096c560178920f68b22733a6d424b3d010769e17b592f90bc77d2004220
7
- data.tar.gz: e170353f68f1fdbe47ab3c487136be397636a8855223204e72b4d216bd37c7d04592f935d22b207314d9ecd35c95b7ef3741397204005b89eaccdb7564578427
6
+ metadata.gz: 3601db0d85ee97d1607f61b08091560382bb6ff648042c1bf5340c72c58bd5a3ba026bb79d152281d7a80bd1103542f6de19f86fa4a6a20076884db2cf718374
7
+ data.tar.gz: 457ba9d83a710200dfefa3d07b14a83a2349efcd19f46c2033addf550070bdf927e37f21a93109d36eeeb6dc84e536b829397315683049f00ef52b67f638961d
@@ -3,9 +3,9 @@
3
3
  module Antigravity
4
4
  class Agent
5
5
  attr_accessor :model, :system_instruction, :api_key
6
- attr_reader :tools, :skills, :hooks, :sidecars, :client
6
+ attr_reader :tools, :skills, :hooks, :sidecars, :client, :logger_guard
7
7
 
8
- def initialize(model: nil, &block)
8
+ def initialize(model: nil, auto_logger: true, &block)
9
9
  @model = model || Antigravity.config.default_model
10
10
  @api_key = Antigravity.config.api_key
11
11
  @system_instruction = nil
@@ -14,6 +14,12 @@ module Antigravity
14
14
  @sidecars = []
15
15
  @hooks = Hooks.new
16
16
  @client = Client.new
17
+ @logger_guard = nil
18
+
19
+ # Automagic Logger attachment unless disabled via ENV["ANTIGRAVITY_LOGGER"]=false or auto_logger: false
20
+ if auto_logger && logger_enabled?
21
+ attach_logger
22
+ end
17
23
 
18
24
  yield(self) if block_given?
19
25
  end
@@ -35,6 +41,12 @@ module Antigravity
35
41
  sidecar
36
42
  end
37
43
 
44
+ def attach_logger(log_target = nil, level: ::Logger::INFO, silent_notice: false)
45
+ @logger_guard = Guards::AgentLogger.new(log_target, level: level, silent_notice: silent_notice)
46
+ @logger_guard.attach_to(self)
47
+ @logger_guard
48
+ end
49
+
38
50
  def load_skill(skill_path)
39
51
  skill = Skill.load(skill_path)
40
52
  @skills << skill
@@ -74,5 +86,14 @@ module Antigravity
74
86
  response
75
87
  end
76
88
  alias ask prompt
89
+
90
+ private
91
+
92
+ def logger_enabled?
93
+ env_val = ENV["ANTIGRAVITY_LOGGER"]&.downcase
94
+ return false if %w[false 0 none no].include?(env_val)
95
+
96
+ true
97
+ end
77
98
  end
78
99
  end
@@ -1,7 +1,79 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "logger"
4
+ require "fileutils"
5
+
3
6
  module Antigravity
4
7
  module Guards
8
+ # Configurable opt-in logger guard supporting file loggers and Rails.logger
9
+ class AgentLogger
10
+ attr_reader :logger, :target_description
11
+
12
+ def initialize(log_target = nil, level: Logger::INFO, silent_notice: false)
13
+ resolved_target = resolve_log_target(log_target)
14
+
15
+ if resolved_target.is_a?(String)
16
+ dir = File.dirname(resolved_target)
17
+ FileUtils.mkdir_p(dir) unless Dir.exist?(dir)
18
+ @logger = ::Logger.new(resolved_target)
19
+ @target_description = resolved_target
20
+ elsif resolved_target.respond_to?(:info)
21
+ @logger = resolved_target
22
+ @target_description = "Rails.logger"
23
+ else
24
+ @logger = ::Logger.new($stdout)
25
+ @target_description = "$stdout"
26
+ end
27
+
28
+ @logger.level = level if @logger.respond_to?(:level=)
29
+
30
+ unless silent_notice
31
+ puts "🪵 Logging to #{@target_description}"
32
+ end
33
+ end
34
+
35
+ def before_prompt(prompt_text)
36
+ @logger.info("[Antigravity::Prompt] User: '#{prompt_text}'")
37
+ end
38
+
39
+ def after_response(response)
40
+ @logger.info("[Antigravity::Response] Assistant (#{response.model_id}): #{response.content.strip}")
41
+ end
42
+
43
+ def before_tool_call(tool_name, params)
44
+ @logger.info("[Antigravity::Tool] Executing '#{tool_name}' with params: #{params.inspect}")
45
+ end
46
+
47
+ def after_tool_call(tool_name, params, result)
48
+ @logger.info("[Antigravity::Tool] Result for '#{tool_name}': #{result}")
49
+ result
50
+ end
51
+
52
+ def attach_to(agent)
53
+ logger_guard = self
54
+ agent.before_prompt { |p| logger_guard.before_prompt(p) }
55
+ agent.after_response { |r| logger_guard.after_response(r) }
56
+ agent.before_tool_call { |t, p| logger_guard.before_tool_call(t, p) }
57
+ agent.after_tool_call { |t, p, r| logger_guard.after_tool_call(t, p, r) }
58
+ end
59
+
60
+ private
61
+
62
+ def resolve_log_target(target)
63
+ return target if target
64
+
65
+ if defined?(Rails) && Rails.respond_to?(:logger) && Rails.logger
66
+ Rails.logger
67
+ elsif ENV["RAILS_ENV"] && !ENV["RAILS_ENV"].empty?
68
+ "log/#{ENV['RAILS_ENV']}.log"
69
+ elsif ENV["RACK_ENV"] && !ENV["RACK_ENV"].empty?
70
+ "log/#{ENV['RACK_ENV']}.log"
71
+ else
72
+ "log/antigravity.log"
73
+ end
74
+ end
75
+ end
76
+
5
77
  # Configurable opt-in file protection guard
6
78
  class FileProtection
7
79
  DEFAULT_FILES = [
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: antigravity-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Riccardo Carlesso
@@ -37,6 +37,20 @@ dependencies:
37
37
  - - ">="
38
38
  - !ruby/object:Gem::Version
39
39
  version: '2.6'
40
+ - !ruby/object:Gem::Dependency
41
+ name: logger
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '1.5'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '1.5'
40
54
  description: An elegant, Ruby-like SDK for building autonomous AI agents with Google
41
55
  Antigravity.
42
56
  email: