Class: Agentic::Extension::PluginManager
- Inherits:
-
Object
- Object
- Agentic::Extension::PluginManager
- Defined in:
- lib/agentic/extension/plugin_manager.rb
Overview
The PluginManager coordinates third-party extension loading, registration, and lifecycle management. It provides a central registry for all extensions and ensures they conform to the extension contracts.
Instance Method Summary collapse
-
#disable(name) ⇒ Boolean
Disable a registered plugin.
-
#discover_plugins ⇒ Integer
Discover plugins in configured paths.
-
#enable(name) ⇒ Boolean
Enable a registered plugin.
-
#get(name) ⇒ Object?
Get a registered plugin by name.
-
#initialize(options = {}) ⇒ PluginManager
constructor
Initialize a new PluginManager.
-
#list(only_enabled: false) ⇒ Hash
List all registered plugins.
-
#register(name, plugin, metadata = {}) ⇒ Boolean
Register a plugin with the manager.
-
#register!(name, plugin, metadata = {}) ⇒ Boolean
Register a plugin with the manager, overriding any existing plugin with the same name.
-
#register_hook(event) {|name, plugin| ... } ⇒ Boolean
Register a hook for plugin events.
Constructor Details
#initialize(options = {}) ⇒ PluginManager
Initialize a new PluginManager
15 16 17 18 19 20 21 22 23 24 |
# File 'lib/agentic/extension/plugin_manager.rb', line 15 def initialize( = {}) @logger = [:logger] || Agentic.logger @auto_discovery = .fetch(:auto_discovery, true) @plugin_paths = [:plugin_paths] || [] @plugin_paths << default_plugin_path @plugins = {} @hooks = Hash.new { |h, k| h[k] = [] } discover_plugins if @auto_discovery end |
Instance Method Details
#disable(name) ⇒ Boolean
Disable a registered plugin
80 81 82 83 84 85 86 |
# File 'lib/agentic/extension/plugin_manager.rb', line 80 def disable(name) return false unless @plugins.key?(name) @plugins[name][:enabled] = false @logger.info("Plugin '#{name}' disabled") true end |
#discover_plugins ⇒ Integer
Discover plugins in configured paths
127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
# File 'lib/agentic/extension/plugin_manager.rb', line 127 def discover_plugins return 0 unless @auto_discovery discovered = 0 @plugin_paths.each do |path| Dir.glob(File.join(path, "*.rb")).each do |file| require file discovered += 1 rescue => e @logger.error("Failed to load plugin from #{file}: #{e.}") end end @logger.info("Discovered #{discovered} plugins") discovered end |
#enable(name) ⇒ Boolean
Enable a registered plugin
68 69 70 71 72 73 74 |
# File 'lib/agentic/extension/plugin_manager.rb', line 68 def enable(name) return false unless @plugins.key?(name) @plugins[name][:enabled] = true @logger.info("Plugin '#{name}' enabled") true end |
#get(name) ⇒ Object?
Get a registered plugin by name
92 93 94 95 96 |
# File 'lib/agentic/extension/plugin_manager.rb', line 92 def get(name) return nil unless @plugins.key?(name) && @plugins[name][:enabled] @plugins[name][:instance] end |
#list(only_enabled: false) ⇒ Hash
List all registered plugins
102 103 104 105 106 107 108 |
# File 'lib/agentic/extension/plugin_manager.rb', line 102 def list(only_enabled: false) if only_enabled @plugins.select { |_, data| data[:enabled] } else @plugins end end |
#register(name, plugin, metadata = {}) ⇒ Boolean
Register a plugin with the manager
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/agentic/extension/plugin_manager.rb', line 32 def register(name, plugin, = {}) if @plugins.key?(name) @logger.warn("Plugin '#{name}' is already registered. Use force: true to override.") return false end unless valid_plugin?(plugin) @logger.error("Plugin '#{name}' does not conform to the plugin contract") return false end @plugins[name] = { instance: plugin, metadata: .merge(registered_at: Time.now), enabled: true } @logger.info("Plugin '#{name}' registered successfully") true end |
#register!(name, plugin, metadata = {}) ⇒ Boolean
Register a plugin with the manager, overriding any existing plugin with the same name
59 60 61 62 |
# File 'lib/agentic/extension/plugin_manager.rb', line 59 def register!(name, plugin, = {}) @plugins.delete(name) if @plugins.key?(name) register(name, plugin, ) end |
#register_hook(event) {|name, plugin| ... } ⇒ Boolean
Register a hook for plugin events
117 118 119 120 121 122 |
# File 'lib/agentic/extension/plugin_manager.rb', line 117 def register_hook(event, &callback) return false unless callback @hooks[event] << callback true end |