agent2agent 1.0.0 → 1.0.2

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: eb509121f12c9e488c018c415701b5bc0567d02280f8710d3460aaaa8e7b68e1
4
- data.tar.gz: a61a5c05dafa8bf23a0ba0e4eeeed846339913eb42d7f415ade819e462dd985b
3
+ metadata.gz: 10f9c58ba470a3e5ac7de54ac9bc91cadd66296211551f4908a11a265e37a930
4
+ data.tar.gz: c7ff60b70781b2762a73d4064784eb23edc6c74648f4c1f203c75e403c045bd3
5
5
  SHA512:
6
- metadata.gz: 35be1d410f3e5e8d3325089b06c38a7544210d521e5f05a0d432d3c495e6c21c7334bb39c073631d383e6743d4313977d8bab41048d3c3d7b3e81dd64e9df50e
7
- data.tar.gz: 6e489cd0ce12b08f5a9057972aa7d3ef2de9e3ee40dfc1eafb85b3663083b7805d78e013012beb54920dae34c08e921346e06d44c0443a2e1bda6fc806fd9d4b
6
+ metadata.gz: cc8bbdd254a51bc08591662f71b8653020bfcb9d520092879ad0f2a91c714f8af506e1ae2259e2e66d0aaafdaea8cafdb00386d2a9a55e73b2ec42ad64f23709
7
+ data.tar.gz: a88507ec55ea225f8493774747ce4a0e8e9ae9413b210deca40d06d61536b1b9455852d82bbfed14620fcbc58f3666c37aef618ce5002b661367d06c724dc891
data/config/traces.rb ADDED
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Auto-loaded by the traces gem when a backend is enabled.
4
+ # Requires all A2A trace providers so that key methods are
5
+ # instrumented transparently.
6
+
7
+ def prepare
8
+ require "traces/provider/a2a"
9
+ end
@@ -23,7 +23,7 @@ module A2A
23
23
  # Register a handler object.
24
24
  #
25
25
  # The handler must respond to:
26
- # #operations -> Array<String> (e.g. ["SendMessage", "GetTask"])
26
+ # #operations -> Array(String) (e.g. ["SendMessage", "GetTask"])
27
27
  # #call(env) -> void (sets env["a2a.result"])
28
28
  #
29
29
  def register(handler)
@@ -59,7 +59,7 @@ module A2A
59
59
  begin
60
60
  handler.call(env)
61
61
  rescue => e
62
- Console.error(self) { "Handler #{handler.class.name} raised #{e.class}: #{e.message}" }
62
+ Console.error(self, "Handler #{handler.class.name} raised #{e.class}", e)
63
63
  end
64
64
  end
65
65
  end
@@ -55,7 +55,7 @@ module A2A
55
55
  @complete_count += 1
56
56
  rescue => error
57
57
  @failed_count += 1
58
- Console.error(self) { "Background task failed: #{error.message}" }
58
+ Console.error(self, "Background task failed", error)
59
59
  ensure
60
60
  @call_count -= 1
61
61
  end
@@ -28,8 +28,8 @@ module A2A
28
28
 
29
29
  # Deliver a payload to all push notification configs for a task.
30
30
  #
31
- # @param configs [Array<Hash>] push notification configs
32
- # @param payload [Hash] the StreamResponse payload
31
+ # @parameter configs [Array(Hash)] push notification configs
32
+ # @parameter payload [Hash] the StreamResponse payload
33
33
  #
34
34
  def deliver(configs, payload)
35
35
  return if configs.nil? || configs.empty?
@@ -38,7 +38,7 @@ module A2A
38
38
  Async do
39
39
  deliver_single(config, payload)
40
40
  rescue => e
41
- Console.error(self) { "Webhook delivery failed for #{config["url"]}: #{e.message}" }
41
+ Console.error(self, "Webhook delivery failed for #{config["url"]}", e)
42
42
  end
43
43
  end
44
44
  end
data/lib/a2a/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module A2A
4
- VERSION = "1.0.0"
4
+ VERSION = "1.0.2"
5
5
  end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../../../../a2a/bindings/json_rpc"
4
+ require "traces/provider"
5
+
6
+ Traces::Provider(A2A::Bindings::JsonRpc) do
7
+ def call(env)
8
+ Traces.trace("a2a.bindings.json_rpc.call") do |span|
9
+ super.tap do |status, headers, body|
10
+ span["http.status_code"] = status
11
+
12
+ if method = env["a2a.json_rpc_method"]
13
+ span["rpc.method"] = method
14
+ end
15
+
16
+ if id = env["a2a.json_rpc_id"]
17
+ span["rpc.jsonrpc.request_id"] = id.to_s
18
+ end
19
+
20
+ if env["a2a.stream"]
21
+ span["a2a.response_type"] = "stream"
22
+ elsif env["a2a.error"]
23
+ span["a2a.response_type"] = "error"
24
+ else
25
+ span["a2a.response_type"] = "result"
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../../../../a2a/bindings/rest"
4
+ require "traces/provider"
5
+
6
+ Traces::Provider(A2A::Bindings::Rest) do
7
+ def call(env)
8
+ Traces.trace("a2a.bindings.rest.call") do |span|
9
+ super.tap do |status, headers, body|
10
+ span["http.status_code"] = status
11
+
12
+ if verb = env["a2a.verb"]
13
+ span["a2a.verb"] = verb
14
+ end
15
+
16
+ if path = env["a2a.path"]
17
+ span["a2a.path"] = path
18
+ end
19
+
20
+ if env["a2a.stream"]
21
+ span["a2a.response_type"] = "stream"
22
+ elsif env["a2a.error"]
23
+ span["a2a.response_type"] = "error"
24
+ else
25
+ span["a2a.response_type"] = "result"
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../../../../a2a/server/dispatcher"
4
+ require "traces/provider"
5
+
6
+ Traces::Provider(A2A::Server::Dispatcher) do
7
+ def call(env)
8
+ attributes = {
9
+ "a2a.operation" => env["a2a.operation"],
10
+ }
11
+
12
+ Traces.trace("a2a.server.dispatcher.call", attributes: attributes) do |span|
13
+ super.tap do |status, headers, body|
14
+ span["http.status_code"] = status
15
+
16
+ if env["a2a.stream"]
17
+ span["a2a.response_type"] = "stream"
18
+ elsif env["a2a.error"]
19
+ span["a2a.response_type"] = "error"
20
+ elsif env["a2a.result"]
21
+ span["a2a.response_type"] = "result"
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../../../../a2a/server/triage"
4
+ require "traces/provider"
5
+
6
+ Traces::Provider(A2A::Server::Triage) do
7
+ def call(env)
8
+ Traces.trace("a2a.server.triage.call") do |span|
9
+ super.tap do
10
+ if op = env["a2a.operation"]
11
+ span["a2a.operation"] = op
12
+ end
13
+
14
+ if proto_op = env["a2a.proto_operation"]
15
+ span["a2a.proto_operation"] = proto_op.name
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../../../a2a/server"
4
+ require "traces/provider"
5
+
6
+ Traces::Provider(A2A::Server) do
7
+ def call(env)
8
+ attributes = {
9
+ "http.method" => env["REQUEST_METHOD"],
10
+ "http.path" => env["PATH_INFO"],
11
+ }
12
+
13
+ Traces.trace("a2a.server.call", attributes: attributes) do |span|
14
+ super.tap do |status, headers, body|
15
+ span["http.status_code"] = status
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "a2a/server"
4
+ require_relative "a2a/server/dispatcher"
5
+ require_relative "a2a/server/triage"
6
+ require_relative "a2a/bindings/json_rpc"
7
+ require_relative "a2a/bindings/rest"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: agent2agent
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - A2A Contributors
@@ -154,6 +154,7 @@ executables: []
154
154
  extensions: []
155
155
  extra_rdoc_files: []
156
156
  files:
157
+ - config/traces.rb
157
158
  - data/a2a.json
158
159
  - data/a2a.proto
159
160
  - data/download-a2a-resources
@@ -193,9 +194,16 @@ files:
193
194
  - lib/a2a/store/webhooks.rb
194
195
  - lib/a2a/task_store.rb
195
196
  - lib/a2a/version.rb
197
+ - lib/traces/provider/a2a.rb
198
+ - lib/traces/provider/a2a/bindings/json_rpc.rb
199
+ - lib/traces/provider/a2a/bindings/rest.rb
200
+ - lib/traces/provider/a2a/server.rb
201
+ - lib/traces/provider/a2a/server/dispatcher.rb
202
+ - lib/traces/provider/a2a/server/triage.rb
196
203
  licenses:
197
204
  - MIT
198
- metadata: {}
205
+ metadata:
206
+ documentation_uri: https://general-intelligence-systems.github.io/agent2agent/
199
207
  rdoc_options: []
200
208
  require_paths:
201
209
  - lib