Module: SwarmSDK::PluginRegistry

Defined in:
lib/swarm_sdk/plugin_registry.rb

Overview

Plugin registry for managing SwarmSDK extensions

Plugins register themselves when loaded, providing tools, storage, and lifecycle hooks without SwarmSDK needing to know about them.

Class Method Summary collapse

Class Method Details

.allArray<Plugin>

Get all registered plugins



47
48
49
# File 'lib/swarm_sdk/plugin_registry.rb', line 47

def all
  @plugins.values
end

.clearvoid

This method returns an undefined value.

Clear all plugins (for testing)



85
86
87
88
# File 'lib/swarm_sdk/plugin_registry.rb', line 85

def clear
  @plugins.clear
  @tool_map.clear
end

.emit_event(event, **args) ⇒ Object

Emit lifecycle event to all plugins



94
95
96
97
98
# File 'lib/swarm_sdk/plugin_registry.rb', line 94

def emit_event(event, **args)
  @plugins.each_value do |plugin|
    plugin.public_send(event, **args) if plugin.respond_to?(event)
  end
end

.get(name) ⇒ Plugin?

Get plugin by name



40
41
42
# File 'lib/swarm_sdk/plugin_registry.rb', line 40

def get(name)
  @plugins[name]
end

.plugin_for_tool(tool_name) ⇒ Plugin?

Get plugin that provides a tool



63
64
65
# File 'lib/swarm_sdk/plugin_registry.rb', line 63

def plugin_for_tool(tool_name)
  @tool_map[tool_name]
end

.plugin_tool?(tool_name) ⇒ Boolean

Check if tool is provided by a plugin



71
72
73
# File 'lib/swarm_sdk/plugin_registry.rb', line 71

def plugin_tool?(tool_name)
  @tool_map.key?(tool_name)
end

.register(plugin) ⇒ Object

Register a plugin

Raises:

  • (ArgumentError)

    If plugin with same name already registered



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/swarm_sdk/plugin_registry.rb', line 17

def register(plugin)
  raise ArgumentError, "Plugin must inherit from SwarmSDK::Plugin" unless plugin.is_a?(Plugin)

  name = plugin.name
  raise ArgumentError, "Plugin name required" unless name
  raise ArgumentError, "Plugin #{name} already registered" if @plugins.key?(name)

  @plugins[name] = plugin

  # Build tool → plugin mapping
  plugin.tools.each do |tool_name|
    if @tool_map.key?(tool_name)
      raise ArgumentError, "Tool #{tool_name} already registered by #{@tool_map[tool_name].name}"
    end

    @tool_map[tool_name] = plugin
  end
end

.registered?(name) ⇒ Boolean

Check if plugin is registered



55
56
57
# File 'lib/swarm_sdk/plugin_registry.rb', line 55

def registered?(name)
  @plugins.key?(name)
end

.toolsHash<Symbol, Plugin>

Get all tools provided by plugins



78
79
80
# File 'lib/swarm_sdk/plugin_registry.rb', line 78

def tools
  @tool_map.dup
end