Class: A2A::Protocol::CapabilityRegistry
- Inherits:
-
Object
- Object
- A2A::Protocol::CapabilityRegistry
- Defined in:
- lib/a2a/protocol/capability.rb
Overview
Manages a registry of capabilities
The capability registry allows for registration, discovery, and dynamic updates of agent capabilities.
Instance Method Summary collapse
-
#add_listener(&listener) ⇒ Object
Add a listener for capability changes.
-
#all ⇒ Array<Capability>
Get all registered capabilities.
-
#clear ⇒ Object
Clear all capabilities.
-
#count ⇒ Integer
Get the number of registered capabilities.
-
#find_by_method(pattern) ⇒ Array<Capability>
Find capabilities by method pattern.
-
#find_by_security(scheme) ⇒ Array<Capability>
Find capabilities requiring specific security.
-
#find_by_tag(tag) ⇒ Array<Capability>
Find capabilities by tag.
-
#get(name) ⇒ Capability?
Get a capability by name.
-
#initialize ⇒ CapabilityRegistry
constructor
A new instance of CapabilityRegistry.
-
#notify_listeners(event, capability) ⇒ Object
private
Notify all listeners of a capability event.
-
#register(capability) ⇒ Capability
Register a capability.
-
#registered?(name) ⇒ Boolean
Check if a capability is registered.
-
#remove_listener(listener) ⇒ Object
Remove a listener.
-
#to_h ⇒ Hash
Convert registry to hash representation.
-
#unregister(name) ⇒ Capability?
Unregister a capability.
Constructor Details
#initialize ⇒ CapabilityRegistry
Returns a new instance of CapabilityRegistry.
348 349 350 351 |
# File 'lib/a2a/protocol/capability.rb', line 348 def initialize @capabilities = {} @listeners = [] end |
Instance Method Details
#add_listener(&listener) ⇒ Object
Add a listener for capability changes
456 457 458 |
# File 'lib/a2a/protocol/capability.rb', line 456 def add_listener(&listener) @listeners << listener end |
#all ⇒ Array<Capability>
Get all registered capabilities
390 391 392 |
# File 'lib/a2a/protocol/capability.rb', line 390 def all @capabilities.values end |
#clear ⇒ Object
Clear all capabilities
446 447 448 449 450 |
# File 'lib/a2a/protocol/capability.rb', line 446 def clear old_capabilities = @capabilities.values @capabilities.clear old_capabilities.each { |cap| notify_listeners(:unregistered, cap) } end |
#count ⇒ Integer
Get the number of registered capabilities
440 441 442 |
# File 'lib/a2a/protocol/capability.rb', line 440 def count @capabilities.size end |
#find_by_method(pattern) ⇒ Array<Capability>
Find capabilities by method pattern
408 409 410 411 412 413 414 415 416 |
# File 'lib/a2a/protocol/capability.rb', line 408 def find_by_method(pattern) if pattern.is_a?(String) @capabilities.values.select { |cap| cap.method == pattern } elsif pattern.is_a?(Regexp) @capabilities.values.select { |cap| cap.method.match?(pattern) } else raise ArgumentError, "pattern must be a String or Regexp" end end |
#find_by_security(scheme) ⇒ Array<Capability>
Find capabilities requiring specific security
423 424 425 |
# File 'lib/a2a/protocol/capability.rb', line 423 def find_by_security(scheme) @capabilities.values.select { |cap| cap.requires_security?(scheme) } end |
#find_by_tag(tag) ⇒ Array<Capability>
Find capabilities by tag
399 400 401 |
# File 'lib/a2a/protocol/capability.rb', line 399 def find_by_tag(tag) @capabilities.values.select { |cap| cap.has_tag?(tag) } end |
#get(name) ⇒ Capability?
Get a capability by name
382 383 384 |
# File 'lib/a2a/protocol/capability.rb', line 382 def get(name) @capabilities[name] end |
#notify_listeners(event, capability) ⇒ Object (private)
Notify all listeners of a capability event
486 487 488 489 490 491 492 493 |
# File 'lib/a2a/protocol/capability.rb', line 486 def notify_listeners(event, capability) @listeners.each do |listener| listener.call(event, capability) rescue StandardError => e # Log error but don't let listener errors break the registry warn "Capability registry listener error: #{e.}" end end |
#register(capability) ⇒ Capability
Register a capability
358 359 360 361 362 363 364 |
# File 'lib/a2a/protocol/capability.rb', line 358 def register(capability) raise ArgumentError, "capability must be a Capability instance" unless capability.is_a?(Capability) @capabilities[capability.name] = capability notify_listeners(:registered, capability) capability end |
#registered?(name) ⇒ Boolean
Check if a capability is registered
432 433 434 |
# File 'lib/a2a/protocol/capability.rb', line 432 def registered?(name) @capabilities.key?(name) end |
#remove_listener(listener) ⇒ Object
Remove a listener
464 465 466 |
# File 'lib/a2a/protocol/capability.rb', line 464 def remove_listener(listener) @listeners.delete(listener) end |
#to_h ⇒ Hash
Convert registry to hash representation
472 473 474 475 476 477 |
# File 'lib/a2a/protocol/capability.rb', line 472 def to_h { capabilities: @capabilities.transform_values(&:to_h), count: count } end |
#unregister(name) ⇒ Capability?
Unregister a capability
371 372 373 374 375 |
# File 'lib/a2a/protocol/capability.rb', line 371 def unregister(name) capability = @capabilities.delete(name) notify_listeners(:unregistered, capability) if capability capability end |