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
-
.all ⇒ Array<Plugin>
Get all registered plugins.
-
.clear ⇒ void
Clear all plugins (for testing).
-
.emit_event(event, **args) ⇒ Object
Emit lifecycle event to all plugins.
-
.get(name) ⇒ Plugin?
Get plugin by name.
-
.plugin_for_tool(tool_name) ⇒ Plugin?
Get plugin that provides a tool.
-
.plugin_tool?(tool_name) ⇒ Boolean
Check if tool is provided by a plugin.
-
.register(plugin) ⇒ Object
Register a plugin.
-
.registered?(name) ⇒ Boolean
Check if plugin is registered.
-
.tools ⇒ Hash<Symbol, Plugin>
Get all tools provided by plugins.
Class Method Details
.all ⇒ Array<Plugin>
Get all registered plugins
47 48 49 |
# File 'lib/swarm_sdk/plugin_registry.rb', line 47 def all @plugins.values end |
.clear ⇒ void
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
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 |
.tools ⇒ Hash<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 |