Class: A2A::Types::AgentCard
- Defined in:
- lib/a2a/types/agent_card.rb
Overview
Represents an agent card in the A2A protocol
Agent cards describe an agent's capabilities, interfaces, and metadata. They are used for agent discovery and capability negotiation.
Instance Attribute Summary collapse
-
#additional_interfaces ⇒ Object
readonly
Returns the value of attribute additional_interfaces.
-
#capabilities ⇒ Object
readonly
Returns the value of attribute capabilities.
-
#default_input_modes ⇒ Object
readonly
Returns the value of attribute default_input_modes.
-
#default_output_modes ⇒ Object
readonly
Returns the value of attribute default_output_modes.
-
#description ⇒ Object
readonly
Returns the value of attribute description.
-
#documentation_url ⇒ Object
readonly
Returns the value of attribute documentation_url.
-
#icon_url ⇒ Object
readonly
Returns the value of attribute icon_url.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#preferred_transport ⇒ Object
readonly
Returns the value of attribute preferred_transport.
-
#protocol_version ⇒ Object
readonly
Returns the value of attribute protocol_version.
-
#provider ⇒ Object
readonly
Returns the value of attribute provider.
-
#security ⇒ Object
readonly
Returns the value of attribute security.
-
#security_schemes ⇒ Object
readonly
Returns the value of attribute security_schemes.
-
#signatures ⇒ Object
readonly
Returns the value of attribute signatures.
-
#skills ⇒ Object
readonly
Returns the value of attribute skills.
-
#supports_authenticated_extended_card ⇒ Object
readonly
Returns the value of attribute supports_authenticated_extended_card.
-
#url ⇒ Object
readonly
Returns the value of attribute url.
-
#version ⇒ Object
readonly
Returns the value of attribute version.
Instance Method Summary collapse
-
#all_interfaces ⇒ Array<AgentInterface>
Get all available interfaces (primary + additional).
-
#initialize(name:, description:, version:, url:, preferred_transport:, skills:, capabilities:, default_input_modes:, default_output_modes:, additional_interfaces: nil, security: nil, security_schemes: nil, provider: nil, protocol_version: nil, supports_authenticated_extended_card: nil, signatures: nil, documentation_url: nil, icon_url: nil) ⇒ AgentCard
constructor
Initialize a new agent card.
-
#process_security_schemes(schemes) ⇒ Hash<String, SecurityScheme>?
private
Process security schemes hash into SecurityScheme objects.
-
#supports_transport?(transport) ⇒ Boolean
Check if the agent supports a specific transport.
-
#url_for_transport(transport) ⇒ String?
Get the URL for a specific transport.
- #validate! ⇒ Object private
-
#validate_security_schemes ⇒ Object
private
Validate security schemes.
-
#validate_url_format(field) ⇒ Object
private
Validate URL format.
Methods inherited from BaseModel
#==, #camelize, from_h, from_json, #hash, #to_h, #to_json, underscore, #valid?, #validate_array_type, #validate_inclusion, #validate_required, #validate_type
Constructor Details
#initialize(name:, description:, version:, url:, preferred_transport:, skills:, capabilities:, default_input_modes:, default_output_modes:, additional_interfaces: nil, security: nil, security_schemes: nil, provider: nil, protocol_version: nil, supports_authenticated_extended_card: nil, signatures: nil, documentation_url: nil, icon_url: nil) ⇒ AgentCard
Initialize a new agent card
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/a2a/types/agent_card.rb', line 54 def initialize(name:, description:, version:, url:, preferred_transport:, skills:, capabilities:, default_input_modes:, default_output_modes:, additional_interfaces: nil, security: nil, security_schemes: nil, provider: nil, protocol_version: nil, supports_authenticated_extended_card: nil, signatures: nil, documentation_url: nil, icon_url: nil) @name = name @description = description @version = version @url = url @preferred_transport = preferred_transport @skills = skills.map { |s| s.is_a?(AgentSkill) ? s : AgentSkill.from_h(s) } @capabilities = capabilities.is_a?(AgentCapabilities) ? capabilities : AgentCapabilities.from_h(capabilities) @default_input_modes = default_input_modes @default_output_modes = default_output_modes @additional_interfaces = additional_interfaces&.map do |i| i.is_a?(AgentInterface) ? i : AgentInterface.from_h(i) end @security = security @security_schemes = process_security_schemes(security_schemes) @provider = provider @protocol_version = protocol_version || "1.0" @supports_authenticated_extended_card = supports_authenticated_extended_card @signatures = signatures&.map { |s| s.is_a?(AgentCardSignature) ? s : AgentCardSignature.from_h(s) } @documentation_url = documentation_url @icon_url = icon_url validate! end |
Instance Attribute Details
#additional_interfaces ⇒ Object (readonly)
Returns the value of attribute additional_interfaces.
27 28 29 |
# File 'lib/a2a/types/agent_card.rb', line 27 def additional_interfaces @additional_interfaces end |
#capabilities ⇒ Object (readonly)
Returns the value of attribute capabilities.
27 28 29 |
# File 'lib/a2a/types/agent_card.rb', line 27 def capabilities @capabilities end |
#default_input_modes ⇒ Object (readonly)
Returns the value of attribute default_input_modes.
27 28 29 |
# File 'lib/a2a/types/agent_card.rb', line 27 def default_input_modes @default_input_modes end |
#default_output_modes ⇒ Object (readonly)
Returns the value of attribute default_output_modes.
27 28 29 |
# File 'lib/a2a/types/agent_card.rb', line 27 def default_output_modes @default_output_modes end |
#description ⇒ Object (readonly)
Returns the value of attribute description.
27 28 29 |
# File 'lib/a2a/types/agent_card.rb', line 27 def description @description end |
#documentation_url ⇒ Object (readonly)
Returns the value of attribute documentation_url.
27 28 29 |
# File 'lib/a2a/types/agent_card.rb', line 27 def documentation_url @documentation_url end |
#icon_url ⇒ Object (readonly)
Returns the value of attribute icon_url.
27 28 29 |
# File 'lib/a2a/types/agent_card.rb', line 27 def icon_url @icon_url end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
27 28 29 |
# File 'lib/a2a/types/agent_card.rb', line 27 def name @name end |
#preferred_transport ⇒ Object (readonly)
Returns the value of attribute preferred_transport.
27 28 29 |
# File 'lib/a2a/types/agent_card.rb', line 27 def preferred_transport @preferred_transport end |
#protocol_version ⇒ Object (readonly)
Returns the value of attribute protocol_version.
27 28 29 |
# File 'lib/a2a/types/agent_card.rb', line 27 def protocol_version @protocol_version end |
#provider ⇒ Object (readonly)
Returns the value of attribute provider.
27 28 29 |
# File 'lib/a2a/types/agent_card.rb', line 27 def provider @provider end |
#security ⇒ Object (readonly)
Returns the value of attribute security.
27 28 29 |
# File 'lib/a2a/types/agent_card.rb', line 27 def security @security end |
#security_schemes ⇒ Object (readonly)
Returns the value of attribute security_schemes.
27 28 29 |
# File 'lib/a2a/types/agent_card.rb', line 27 def security_schemes @security_schemes end |
#signatures ⇒ Object (readonly)
Returns the value of attribute signatures.
27 28 29 |
# File 'lib/a2a/types/agent_card.rb', line 27 def signatures @signatures end |
#skills ⇒ Object (readonly)
Returns the value of attribute skills.
27 28 29 |
# File 'lib/a2a/types/agent_card.rb', line 27 def skills @skills end |
#supports_authenticated_extended_card ⇒ Object (readonly)
Returns the value of attribute supports_authenticated_extended_card.
27 28 29 |
# File 'lib/a2a/types/agent_card.rb', line 27 def supports_authenticated_extended_card @supports_authenticated_extended_card end |
#url ⇒ Object (readonly)
Returns the value of attribute url.
27 28 29 |
# File 'lib/a2a/types/agent_card.rb', line 27 def url @url end |
#version ⇒ Object (readonly)
Returns the value of attribute version.
27 28 29 |
# File 'lib/a2a/types/agent_card.rb', line 27 def version @version end |
Instance Method Details
#all_interfaces ⇒ Array<AgentInterface>
Get all available interfaces (primary + additional)
87 88 89 90 91 |
# File 'lib/a2a/types/agent_card.rb', line 87 def all_interfaces interfaces = [AgentInterface.new(transport: @preferred_transport, url: @url)] interfaces.concat(@additional_interfaces) if @additional_interfaces interfaces end |
#process_security_schemes(schemes) ⇒ Hash<String, SecurityScheme>? (private)
Process security schemes hash into SecurityScheme objects
119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
# File 'lib/a2a/types/agent_card.rb', line 119 def process_security_schemes(schemes) return nil if schemes.nil? return schemes if schemes.is_a?(Hash) && schemes.values.all?(SecurityScheme) processed = {} schemes.each do |name, scheme_data| processed[name.to_s] = if scheme_data.is_a?(SecurityScheme) scheme_data else SecurityScheme.from_h(scheme_data) end end processed end |
#supports_transport?(transport) ⇒ Boolean
Check if the agent supports a specific transport
98 99 100 |
# File 'lib/a2a/types/agent_card.rb', line 98 def supports_transport?(transport) all_interfaces.any? { |i| i.transport == transport } end |
#url_for_transport(transport) ⇒ String?
Get the URL for a specific transport
107 108 109 110 |
# File 'lib/a2a/types/agent_card.rb', line 107 def url_for_transport(transport) interface = all_interfaces.find { |i| i.transport == transport } interface&.url end |
#validate! ⇒ Object (private)
134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 |
# File 'lib/a2a/types/agent_card.rb', line 134 def validate! validate_required(:name, :description, :version, :url, :preferred_transport, :skills, :capabilities, :default_input_modes, :default_output_modes) validate_inclusion(:preferred_transport, VALID_TRANSPORTS) validate_array_type(:skills, AgentSkill) validate_type(:capabilities, AgentCapabilities) validate_array_type(:additional_interfaces, AgentInterface) if @additional_interfaces validate_array_type(:signatures, AgentCardSignature) if @signatures validate_array_type(:default_input_modes, String) validate_array_type(:default_output_modes, String) validate_array_type(:security, String) if @security validate_security_schemes if @security_schemes if @supports_authenticated_extended_card validate_type(:supports_authenticated_extended_card, [TrueClass, FalseClass]) end validate_url_format(:url) validate_url_format(:documentation_url) if @documentation_url validate_url_format(:icon_url) if @icon_url end |
#validate_security_schemes ⇒ Object (private)
Validate security schemes
157 158 159 160 161 162 |
# File 'lib/a2a/types/agent_card.rb', line 157 def validate_security_schemes validate_type(:security_schemes, Hash) @security_schemes.each do |name, scheme| raise ArgumentError, "security_schemes[#{name}] must be a SecurityScheme" unless scheme.is_a?(SecurityScheme) end end |
#validate_url_format(field) ⇒ Object (private)
Validate URL format
168 169 170 171 172 173 174 175 176 177 178 179 180 |
# File 'lib/a2a/types/agent_card.rb', line 168 def validate_url_format(field) value = instance_variable_get("@#{field}") return if value.nil? validate_type(field, String) begin uri = URI.parse(value) raise ArgumentError, "#{field} must be a valid HTTP or HTTPS URL" unless uri.is_a?(URI::HTTP) || uri.is_a?(URI::HTTPS) rescue URI::InvalidURIError raise ArgumentError, "#{field} must be a valid URL" end end |