Class: RosettAi::Plugins::Registry
- Inherits:
-
Object
- Object
- RosettAi::Plugins::Registry
- Defined in:
- lib/rosett_ai/plugins/registry.rb
Overview
Dynamic, multi-type plugin registry.
Plugins self-register via RosettAi::Plugins::Registry.register(:engine, 'claude', MyModule).
External plugin gems are discovered via Gem.find_files — install a gem,
and it becomes available automatically.
Replaces the hardcoded ENGINES and BACKENDS maps from RosettAi::Engines::Registry and RosettAi::Compiler::Backend.
Defined Under Namespace
Classes: PluginNotFoundError
Constant Summary collapse
- PLUGIN_TYPES =
[:engine, :gui, :mcp].freeze
Class Method Summary collapse
-
.available(type) ⇒ Array<String>
Sorted list of registered plugin names.
-
.discover! ⇒ Object
Discover and load all installed plugin gems.
-
.engines ⇒ Object
Convenience accessors for each plugin type.
- .guis ⇒ Object
- .mcps ⇒ Object
-
.plugin_module(type, name) ⇒ Module
The registered plugin module.
-
.register(type, name, plugin_module) ⇒ Object
Register a plugin module under a type and name.
- .registered?(type, name) ⇒ Boolean
-
.reset! ⇒ Object
Reset the registry.
Class Method Details
.available(type) ⇒ Array<String>
Returns sorted list of registered plugin names.
37 38 39 40 |
# File 'lib/rosett_ai/plugins/registry.rb', line 37 def available(type) validate_type!(type) @plugins[type].keys.sort end |
.discover! ⇒ Object
Discover and load all installed plugin gems.
Scans for rosett_ai_engine/*/register.rb, rosett_ai_gui/*/register.rb,
and rosett_ai_mcp/*/register.rb across all gem load paths.
Each register.rb is expected to call Registry.register.
72 73 74 75 76 77 78 79 |
# File 'lib/rosett_ai/plugins/registry.rb', line 72 def discover! return if @discovered discover_type('rosett_ai_engine') discover_type('rosett_ai_gui') discover_type('rosett_ai_mcp') @discovered = true end |
.engines ⇒ Object
Convenience accessors for each plugin type.
63 |
# File 'lib/rosett_ai/plugins/registry.rb', line 63 def engines = @plugins[:engine] |
.guis ⇒ Object
64 |
# File 'lib/rosett_ai/plugins/registry.rb', line 64 def guis = @plugins[:gui] |
.mcps ⇒ Object
65 |
# File 'lib/rosett_ai/plugins/registry.rb', line 65 def mcps = @plugins[:mcp] |
.plugin_module(type, name) ⇒ Module
Returns the registered plugin module.
46 47 48 49 50 51 52 |
# File 'lib/rosett_ai/plugins/registry.rb', line 46 def plugin_module(type, name) validate_type!(type) @plugins[type].fetch(name.to_s) do raise PluginNotFoundError, "Unknown #{type} plugin: #{name}. Available: #{available(type).join(', ')}" end end |
.register(type, name, plugin_module) ⇒ Object
Register a plugin module under a type and name.
30 31 32 33 |
# File 'lib/rosett_ai/plugins/registry.rb', line 30 def register(type, name, plugin_module) validate_type!(type) @plugins[type][name.to_s] = plugin_module end |
.registered?(type, name) ⇒ Boolean
57 58 59 60 |
# File 'lib/rosett_ai/plugins/registry.rb', line 57 def registered?(type, name) validate_type!(type) @plugins[type].key?(name.to_s) end |
.reset! ⇒ Object
Reset the registry. Intended for testing only.
82 83 84 85 |
# File 'lib/rosett_ai/plugins/registry.rb', line 82 def reset! @plugins = Hash.new { |h, k| h[k] = {} } @discovered = false end |