antigravity-sdk 0.1.9 → 0.3.0

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: 961fa879bafeafa5995f2b1c575aaed95d3cdac823cc0e3141584de6cf2071cb
4
- data.tar.gz: 92dc423201619f680ab97f9a0033fc8b1ebc0890e6ff51a6091da1036bfca9ca
3
+ metadata.gz: 665ab001fa484b0bc5ba97c2e7feb960712b0f8e5070ed521f0caf5ad0f16a58
4
+ data.tar.gz: 3f556321b1083daadea10792632ac216ba168abb26708fc5cc3a81824301d460
5
5
  SHA512:
6
- metadata.gz: 5039380738224e6ec92ee23f1e6034f1fa529f690c95e276b581f4764c56292bf33a00272cb73c9fda9797aae21edf4999c23ab75c0a69975032cf10223a1c4d
7
- data.tar.gz: b059c8e931c133e4decdaddfb9f197ee9627f53575927c962b659f4ed9aa71a9d26ba0fa58f0176cd98f1deb7195ed0d10dd1ffb324f17835e51e5b007aead6e
6
+ metadata.gz: d60ff58a66fec4ed17a85ad51015568e743363f313eb1a27b9e6512a767ae5a7abca062796ae0bc19edbe59545202828415b693f6551b77a22d8a1ff5cca99ea
7
+ data.tar.gz: 9e09ed8b23e59d29f644d10f421b73d70f357c7d9fd601ba67ba429df8c2814768d0264084e5e6439cd9161d2f8c13313f6890bcd11faf6f66f7e43e3ea2578f
@@ -1,18 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Antigravity
4
- class Agent
4
+ class Agent < Base
5
+
5
6
  attr_accessor :model, :system_instruction, :api_key
6
7
  attr_reader :tools, :skills, :hooks, :sidecars, :client, :logger_guard
7
8
 
8
- def self.emoji
9
- Antigravity.emoji(:gem)
10
- end
11
-
12
- def emoji
13
- self.class.emoji
14
- end
15
-
16
9
  def initialize(model: nil, auto_logger: true, &block)
17
10
  @model = model || Antigravity.config.default_model
18
11
  @api_key = Antigravity.config.api_key
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Antigravity
4
+ # Base class for all Antigravity domain objects.
5
+ # Subclasses automagically get .emoji / #emoji via Emojifiable.
6
+ #
7
+ # ⚠️ Keep this class SUPER thin!
8
+ # Every SDK class inherits from it, so any weight here
9
+ # is carried by Agent, Tool, Skill, Message, Sidecar::Runner, etc.
10
+ class Base
11
+ include Emojifiable
12
+
13
+ def self.inherited(subclass)
14
+ super
15
+ subclass.include(Emojifiable) unless subclass < Emojifiable
16
+ end
17
+ end
18
+ end
@@ -3,6 +3,7 @@
3
3
  module Antigravity
4
4
  EMOJIS = {
5
5
  gem: "💎",
6
+ agent: "🕵️‍♂️",
6
7
  prompt: "💬",
7
8
  response: "🤖",
8
9
  thinking: "🤔",
@@ -12,13 +13,73 @@ module Antigravity
12
13
  sidecar: "🚗",
13
14
  logger: "🪵",
14
15
  skill: "📁",
16
+ message: "💬",
17
+ guard: "🛡️",
15
18
  test: "🧪",
16
- success: "✅"
19
+ success: "✅",
20
+ unknown: "🤷"
21
+ }.freeze
22
+
23
+ # Name fragments we recognise in the class hierarchy
24
+ EMOJI_CLASS_MAP = {
25
+ "Agent" => :agent,
26
+ "Tool" => :tool,
27
+ "Sidecar" => :sidecar,
28
+ "Runner" => :sidecar,
29
+ "Skill" => :skill,
30
+ "Message" => :message,
31
+ "Chunk" => :message,
32
+ "Guard" => :guard,
33
+ "Logger" => :logger
17
34
  }.freeze
18
35
 
19
36
  class << self
20
37
  def emoji(key)
21
- EMOJIS[key.to_sym] || "💎"
38
+ EMOJIS[key.to_sym] || EMOJIS[:unknown]
39
+ end
40
+
41
+ def emoji_for(target)
42
+ key = resolve_emoji_key(target)
43
+ emoji(key)
44
+ end
45
+
46
+ private
47
+
48
+ def resolve_emoji_key(target)
49
+ # Message/Chunk: role-aware
50
+ if target.is_a?(Message) || (defined?(Chunk) && target.is_a?(Chunk))
51
+ return target.respond_to?(:role) && target.role == :user ? :prompt : :response
52
+ end
53
+
54
+ # Direct symbol/string lookup
55
+ return target if target.is_a?(Symbol) || target.is_a?(String)
56
+
57
+ # Class hierarchy reflection
58
+ klass = target.is_a?(Class) || target.is_a?(Module) ? target : target.class
59
+ parts = klass.name&.split("::") || []
60
+ parts.reverse_each do |part|
61
+ return EMOJI_CLASS_MAP[part] if EMOJI_CLASS_MAP.key?(part)
62
+ end
63
+
64
+ :unknown
65
+ end
66
+ end
67
+
68
+ # Mixin providing polymorphic .emoji class and #emoji instance methods.
69
+ # Auto-included by Antigravity::Base via inherited hook.
70
+ module Emojifiable
71
+ def emoji
72
+ Antigravity.emoji_for(self)
73
+ end
74
+
75
+ module ClassMethods
76
+ def emoji
77
+ Antigravity.emoji_for(self)
78
+ end
79
+ end
80
+
81
+ def self.included(base)
82
+ base.extend(ClassMethods)
22
83
  end
23
84
  end
24
85
  end
@@ -1,16 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Antigravity
4
- class Message
5
- attr_accessor :role, :content, :thinking, :tool_calls, :model_id, :tokens
6
-
7
- def self.emoji
8
- Antigravity.emoji(:response)
9
- end
4
+ class Message < Base
10
5
 
11
- def emoji
12
- role == :user ? Antigravity.emoji(:prompt) : Antigravity.emoji(:response)
13
- end
6
+ attr_accessor :role, :content, :thinking, :tool_calls, :model_id, :tokens
14
7
 
15
8
  def initialize(role: :assistant, content: "", thinking: "", tool_calls: [], model_id: nil)
16
9
  @role = role
@@ -6,17 +6,11 @@ require "fileutils"
6
6
 
7
7
  module Antigravity
8
8
  module Sidecar
9
- # Base class for non-blocking agent sidecars
10
- class Base
11
- attr_reader :name, :queue, :worker_thread
12
-
13
- def self.emoji
14
- Antigravity.emoji(:sidecar)
15
- end
9
+ # Abstract runner for non-blocking agent sidecars.
10
+ # Subclass and implement #process_event.
11
+ class Runner < Antigravity::Base
16
12
 
17
- def emoji
18
- self.class.emoji
19
- end
13
+ attr_reader :name, :queue, :worker_thread
20
14
 
21
15
  def initialize(name = "SidecarWorker")
22
16
  @name = name
@@ -58,7 +52,7 @@ module Antigravity
58
52
  end
59
53
 
60
54
  # Async Audit Logger Sidecar
61
- class AuditLogger < Base
55
+ class AuditLogger < Runner
62
56
  attr_reader :log_file
63
57
 
64
58
  def initialize(log_file = "log/agent_audit.jsonl")
@@ -78,7 +72,7 @@ module Antigravity
78
72
  end
79
73
 
80
74
  # Async Vulnerability & Code Quality Scanner Sidecar
81
- class VulnerabilityScanner < Base
75
+ class VulnerabilityScanner < Runner
82
76
  attr_reader :scanned_events
83
77
 
84
78
  def initialize
@@ -96,5 +90,7 @@ module Antigravity
96
90
  @scanned_events << { tool: tool_name, params: params, verified: true }
97
91
  end
98
92
  end
93
+ # Backward-compatible alias
94
+ Base = Runner
99
95
  end
100
96
  end
@@ -3,16 +3,9 @@
3
3
  require "yaml"
4
4
 
5
5
  module Antigravity
6
- class Skill
7
- attr_reader :name, :description, :instructions, :path
8
-
9
- def self.emoji
10
- Antigravity.emoji(:skill)
11
- end
6
+ class Skill < Base
12
7
 
13
- def emoji
14
- self.class.emoji
15
- end
8
+ attr_reader :name, :description, :instructions, :path
16
9
 
17
10
  def initialize(path)
18
11
  @path = File.expand_path(path)
@@ -1,22 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Antigravity
4
- class Tool
4
+ class Tool < Base
5
5
  class << self
6
6
  def inherited(subclass)
7
+ super
7
8
  subclass.extend(ClassMethods)
8
9
  end
9
-
10
- def emoji
11
- Antigravity.emoji(:tool)
12
- end
13
10
  end
14
11
 
15
12
  module ClassMethods
16
- def emoji
17
- Antigravity.emoji(:tool)
18
- end
19
-
20
13
  def name(val = nil, desc: nil)
21
14
  if val
22
15
  @tool_name = val.to_s
@@ -69,10 +62,6 @@ module Antigravity
69
62
  end
70
63
  end
71
64
 
72
- def emoji
73
- self.class.emoji
74
- end
75
-
76
65
  def tool_name
77
66
  self.class.name
78
67
  end
data/lib/antigravity.rb CHANGED
@@ -8,6 +8,7 @@ end
8
8
 
9
9
  require_relative "antigravity/version"
10
10
  require_relative "antigravity/emojis"
11
+ require_relative "antigravity/base"
11
12
  require_relative "antigravity/config"
12
13
  require_relative "antigravity/message"
13
14
  require_relative "antigravity/harness"
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.9
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Riccardo Carlesso
@@ -61,6 +61,7 @@ extra_rdoc_files: []
61
61
  files:
62
62
  - lib/antigravity.rb
63
63
  - lib/antigravity/agent.rb
64
+ - lib/antigravity/base.rb
64
65
  - lib/antigravity/client.rb
65
66
  - lib/antigravity/config.rb
66
67
  - lib/antigravity/emojis.rb