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.
- checksums.yaml +4 -4
- data/lib/antigravity/agent.rb +290 -22
- data/lib/antigravity/colors.rb +43 -0
- data/lib/antigravity/config.rb +12 -1
- data/lib/antigravity/connection/binary_fetcher.rb +163 -0
- data/lib/antigravity/connection/local_connection.rb +184 -0
- data/lib/antigravity/connection/websocket_client.rb +159 -0
- data/lib/antigravity/conversation.rb +335 -0
- data/lib/antigravity/emojis.rb +4 -0
- data/lib/antigravity/errors.rb +27 -0
- data/lib/antigravity/guards.rb +82 -22
- data/lib/antigravity/hooks.rb +12 -0
- data/lib/antigravity/lifecycle_logger.rb +145 -0
- data/lib/antigravity/message.rb +19 -5
- data/lib/antigravity/policy/constants.rb +154 -0
- data/lib/antigravity/policy.rb +272 -0
- data/lib/antigravity/protocol.rb +193 -0
- data/lib/antigravity/skill.rb +53 -5
- data/lib/antigravity/skill_resolver.rb +140 -0
- data/lib/antigravity/tool.rb +33 -6
- data/lib/antigravity/tool_runner.rb +59 -0
- data/lib/antigravity.rb +11 -0
- metadata +16 -4
data/lib/antigravity/tool.rb
CHANGED
|
@@ -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:
|
|
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
|
|
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:
|
|
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.
|
|
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:
|
|
13
|
+
name: websocket
|
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
|
15
15
|
requirements:
|
|
16
16
|
- - "~>"
|
|
17
17
|
- !ruby/object:Gem::Version
|
|
18
|
-
version: '
|
|
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: '
|
|
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:
|