antigravity-sdk 0.3.0 → 0.5.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.
@@ -7,6 +7,12 @@ module Antigravity
7
7
  super
8
8
  subclass.extend(ClassMethods)
9
9
  end
10
+
11
+ # Factory method: define a tool inline with a block.
12
+ # Tool.define(:name, desc: '...', params: { city: { type: :string } }) { |city:| ... }
13
+ def define(name, desc: '', params: {}, &block)
14
+ Dynamic.new(name, description: desc, params: params, &block)
15
+ end
10
16
  end
11
17
 
12
18
  module ClassMethods
@@ -72,12 +78,13 @@ module Antigravity
72
78
 
73
79
  # Factory for dynamic Proc-based tools
74
80
  class Dynamic < Tool
75
- attr_reader :block
81
+ attr_reader :block, :params
76
82
 
77
- def initialize(name, description: "", &block)
83
+ def initialize(name, description: '', params: {}, &block)
78
84
  super()
79
85
  @dynamic_name = name.to_s
80
86
  @dynamic_description = description
87
+ @params = params
81
88
  @block = block
82
89
  end
83
90
 
@@ -85,17 +92,37 @@ module Antigravity
85
92
  @dynamic_name
86
93
  end
87
94
 
88
- def call(params)
89
- @block.call(params)
95
+ def call(params = nil, **kwargs)
96
+ return nil unless @block
97
+
98
+ if params && kwargs.empty?
99
+ # Old-style: tool.call({key: value})
100
+ @block.call(params)
101
+ else
102
+ # New-style: tool.call(key: value)
103
+ @block.call(**kwargs)
104
+ end
90
105
  end
91
106
 
92
107
  def to_json_schema
108
+ properties = {}
109
+ required_params = []
110
+
111
+ @params.each do |param_name, spec|
112
+ properties[param_name] = {
113
+ type: (spec[:type] || :string).to_s,
114
+ description: spec[:description] || spec[:desc] || ''
115
+ }
116
+ required_params << param_name.to_s unless spec[:required] == false
117
+ end
118
+
93
119
  {
94
120
  name: @dynamic_name,
95
121
  description: @dynamic_description,
96
122
  parameters: {
97
- type: "object",
98
- properties: {}
123
+ type: 'object',
124
+ properties: properties,
125
+ required: required_params
99
126
  }
100
127
  }
101
128
  end
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'json'
4
+
5
+ module Antigravity
6
+ # Registers, resolves, and executes custom tools for agent callbacks.
7
+ # Tools are invoked by the harness when the model decides to call them.
8
+ class ToolRunner < Base
9
+ def initialize
10
+ @tools = {}
11
+ end
12
+
13
+ # Register a tool (Tool::Dynamic or any Tool subclass)
14
+ def register(tool)
15
+ name = tool.respond_to?(:tool_name) ? tool.tool_name : tool.to_s
16
+ raise ToolError, "Tool '#{name}' is already registered" if @tools.key?(name)
17
+
18
+ @tools[name] = tool
19
+ end
20
+
21
+ # Check if a tool is registered
22
+ def registered?(name)
23
+ @tools.key?(name.to_s)
24
+ end
25
+
26
+ # Execute a tool by name with keyword args.
27
+ # Returns the result or a { error: "..." } hash on failure.
28
+ def execute(name, **kwargs)
29
+ tool = @tools[name.to_s]
30
+ raise ToolNotFoundError, "Tool '#{name}' not found" unless tool
31
+
32
+ tool.call(**kwargs)
33
+ rescue ToolNotFoundError
34
+ raise
35
+ rescue => e
36
+ { error: e.message }
37
+ end
38
+
39
+ # Generate harness-compatible tool definitions for HarnessConfig
40
+ def to_harness_tools
41
+ @tools.values.map do |tool|
42
+ schema = tool.to_json_schema
43
+ {
44
+ name: schema[:name],
45
+ description: schema[:description],
46
+ parametersJsonSchema: JSON.generate(schema[:parameters])
47
+ }
48
+ end
49
+ end
50
+
51
+ def size
52
+ @tools.size
53
+ end
54
+
55
+ def empty?
56
+ @tools.empty?
57
+ end
58
+ end
59
+ end
data/lib/antigravity.rb CHANGED
@@ -9,15 +9,26 @@ end
9
9
  require_relative "antigravity/version"
10
10
  require_relative "antigravity/emojis"
11
11
  require_relative "antigravity/base"
12
+ require_relative "antigravity/errors"
12
13
  require_relative "antigravity/config"
13
14
  require_relative "antigravity/message"
15
+ require_relative "antigravity/protocol"
14
16
  require_relative "antigravity/harness"
17
+ require_relative "antigravity/policy"
15
18
  require_relative "antigravity/hooks"
16
19
  require_relative "antigravity/guards"
17
20
  require_relative "antigravity/sidecar"
18
21
  require_relative "antigravity/tool"
22
+ require_relative "antigravity/tool_runner"
23
+ require_relative "antigravity/skill_resolver"
19
24
  require_relative "antigravity/skill"
20
25
  require_relative "antigravity/client"
26
+ require_relative "antigravity/connection/binary_fetcher"
27
+ require_relative "antigravity/connection/websocket_client"
28
+ require_relative "antigravity/connection/local_connection"
29
+ require_relative "antigravity/conversation"
30
+ require_relative "antigravity/colors"
31
+ require_relative "antigravity/lifecycle_logger"
21
32
  require_relative "antigravity/agent"
22
33
 
23
34
  module Antigravity
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.3.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Riccardo Carlesso
@@ -10,19 +10,19 @@ cert_chain: []
10
10
  date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
- name: faye-websocket
13
+ name: websocket
14
14
  requirement: !ruby/object:Gem::Requirement
15
15
  requirements:
16
16
  - - "~>"
17
17
  - !ruby/object:Gem::Version
18
- version: '0.11'
18
+ version: '1.2'
19
19
  type: :runtime
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
23
  - - "~>"
24
24
  - !ruby/object:Gem::Version
25
- version: '0.11'
25
+ version: '1.2'
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: json
28
28
  requirement: !ruby/object:Gem::Requirement
@@ -63,15 +63,27 @@ files:
63
63
  - lib/antigravity/agent.rb
64
64
  - lib/antigravity/base.rb
65
65
  - lib/antigravity/client.rb
66
+ - lib/antigravity/colors.rb
66
67
  - lib/antigravity/config.rb
68
+ - lib/antigravity/connection/binary_fetcher.rb
69
+ - lib/antigravity/connection/local_connection.rb
70
+ - lib/antigravity/connection/websocket_client.rb
71
+ - lib/antigravity/conversation.rb
67
72
  - lib/antigravity/emojis.rb
73
+ - lib/antigravity/errors.rb
68
74
  - lib/antigravity/guards.rb
69
75
  - lib/antigravity/harness.rb
70
76
  - lib/antigravity/hooks.rb
77
+ - lib/antigravity/lifecycle_logger.rb
71
78
  - lib/antigravity/message.rb
79
+ - lib/antigravity/policy.rb
80
+ - lib/antigravity/policy/constants.rb
81
+ - lib/antigravity/protocol.rb
72
82
  - lib/antigravity/sidecar.rb
73
83
  - lib/antigravity/skill.rb
84
+ - lib/antigravity/skill_resolver.rb
74
85
  - lib/antigravity/tool.rb
86
+ - lib/antigravity/tool_runner.rb
75
87
  - lib/antigravity/version.rb
76
88
  homepage: https://github.com/palladius/antigravity-ruby-sdk
77
89
  licenses: