Class: SwarmSDK::Hooks::Registry
- Inherits:
-
Object
- Object
- SwarmSDK::Hooks::Registry
- Defined in:
- lib/swarm_sdk/hooks/registry.rb
Overview
Central registry for managing named hooks and swarm-level defaults
The Registry stores:
- Named hooks that can be referenced by symbol in YAML or code
- Swarm-level default hooks that apply to all agents
Constant Summary collapse
- VALID_EVENTS =
Available hook event types
[ # Swarm lifecycle events :swarm_start, # When Swarm.execute is called (before first user message) :swarm_stop, # When Swarm.execute completes (after execution) :first_message, # When first user message is sent to swarm (Swarm.execute) # Agent/LLM events :user_prompt, # Before sending user message to LLM :agent_step, # After agent makes intermediate response with tool calls :agent_stop, # After agent completes with final response (no more tool calls) # Tool events :pre_tool_use, # Before tool execution (can block/modify) :post_tool_use, # After tool execution # Delegation events :pre_delegation, # Before delegating to another agent :post_delegation, # After delegation completes # Context events :context_warning, # When context usage crosses threshold # Debug events :breakpoint_enter, # When entering interactive debugging (binding.irb) :breakpoint_exit, # When exiting interactive debugging ].freeze
Instance Method Summary collapse
-
#add_default(event, matcher: nil, priority: 0, &block) ⇒ Object
Add a swarm-level default hook.
-
#get(name) ⇒ Proc?
Get a named hook by symbol.
-
#get_defaults(event) ⇒ Array<Definition>
Get all default hooks for an event type.
-
#initialize ⇒ Registry
constructor
A new instance of Registry.
-
#named_hooks ⇒ Array<Symbol>
Get all registered named hook names.
-
#register(name, &block) ⇒ Object
Register a named hook that can be referenced elsewhere.
-
#registered?(name) ⇒ Boolean
Check if a hook name is registered.
Constructor Details
#initialize ⇒ Registry
Returns a new instance of Registry.
50 51 52 53 |
# File 'lib/swarm_sdk/hooks/registry.rb', line 50 def initialize @named_hooks = {} # { hook_name: proc } @defaults = Hash.new { |h, k| h[k] = [] } # { event_type: [Definition, ...] } end |
Instance Method Details
#add_default(event, matcher: nil, priority: 0, &block) ⇒ Object
Add a swarm-level default hook
These hooks apply to all agents unless overridden at agent level.
96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/swarm_sdk/hooks/registry.rb', line 96 def add_default(event, matcher: nil, priority: 0, &block) validate_event!(event) raise ArgumentError, "Block required" unless block definition = Definition.new( event: event, matcher: matcher, priority: priority, proc: block, ) @defaults[event] << definition @defaults[event].sort_by! { |d| -d.priority } # Higher priority first end |
#get(name) ⇒ Proc?
Get a named hook by symbol
75 76 77 |
# File 'lib/swarm_sdk/hooks/registry.rb', line 75 def get(name) @named_hooks[name] end |
#get_defaults(event) ⇒ Array<Definition>
Get all default hooks for an event type
115 116 117 |
# File 'lib/swarm_sdk/hooks/registry.rb', line 115 def get_defaults(event) @defaults[event] end |
#named_hooks ⇒ Array<Symbol>
Get all registered named hook names
122 123 124 |
# File 'lib/swarm_sdk/hooks/registry.rb', line 122 def named_hooks @named_hooks.keys end |
#register(name, &block) ⇒ Object
Register a named hook that can be referenced elsewhere
63 64 65 66 67 68 69 |
# File 'lib/swarm_sdk/hooks/registry.rb', line 63 def register(name, &block) raise ArgumentError, "Hook name must be a symbol" unless name.is_a?(Symbol) raise ArgumentError, "Hook #{name} already registered" if @named_hooks.key?(name) raise ArgumentError, "Block required" unless block @named_hooks[name] = block end |
#registered?(name) ⇒ Boolean
Check if a hook name is registered
130 131 132 |
# File 'lib/swarm_sdk/hooks/registry.rb', line 130 def registered?(name) @named_hooks.key?(name) end |