Class: A2A::Server

Inherits:
Object
  • Object
show all
Defined in:
lib/a2a/server.rb,
lib/a2a/server/env.rb,
lib/a2a/server/triage.rb,
lib/a2a/server/dispatcher.rb,
lib/a2a/server/bindings/rest.rb,
lib/a2a/server/bindings/json_rpc.rb

Overview

Rack application that exposes an A2A-compliant agent server.

Composes two separate middleware stacks, one for each protocol binding:

/.well-known/agent-card.json
  → Env → serve agent card

/a2a  (JSON-RPC 2.0)
  → Env → Bindings::JsonRpc → Triage → Dispatcher

/     (HTTP+JSON/REST)
  → Env → Bindings::Rest → Triage → Dispatcher

Usage:

agent = A2A::Agent.new do
  on "SendMessage" do
    respond_with -> (env) {
      A2A::Schema["Send Message Response"].new({})
    }
  end
end

app = A2A::Server.new(agent_card: { "name" => "My Agent", ... })
app.register(agent)

run app

Defined Under Namespace

Modules: Bindings Classes: Dispatcher, Env, Triage

Instance Method Summary collapse

Constructor Details

#initialize(agent_card: {}) ⇒ Server

Returns a new instance of Server.



40
41
42
43
44
# File 'lib/a2a/server.rb', line 40

def initialize(agent_card: {})
  @agent_card = agent_card
  @dispatcher = Dispatcher.new
  @app        = build_app
end

Instance Method Details

#call(env) ⇒ Object



60
61
62
# File 'lib/a2a/server.rb', line 60

def call(env)
  @app.call(env)
end

#register(handler) ⇒ Object

Register an Agent or a plain handler on the internal dispatcher.

Accepts either:

- An Agent (responds to #handlers) — registers all its handlers
- A plain handler (responds to #operations and #call)


52
53
54
55
56
57
58
# File 'lib/a2a/server.rb', line 52

def register(handler)
  if handler.respond_to?(:handlers)
    handler.handlers.each { |h| @dispatcher.register(h) }
  else
    @dispatcher.register(handler)
  end
end