Module: Legion::MCP::DeferredRegistry
- Defined in:
- lib/legion/mcp/deferred_registry.rb
Constant Summary collapse
- ALWAYS_LOADED =
Tools that are ALWAYS fully loaded (never deferred). These are high-frequency entry points or meta-tools.
%w[ legion.do legion.tools legion.run_task legion.list_tasks legion.get_task legion.get_status legion.describe_runner legion.plan_action legion.query_knowledge legion.knowledge_context legion.knowledge_health legion.absorb legion.get_task_logs ].freeze
Class Method Summary collapse
- .always_loaded_tools ⇒ Object
- .build_tools_list(tool_classes) ⇒ Object
- .deferred?(tool_class) ⇒ Boolean
- .deferred_entry(tool_class) ⇒ Object
- .enabled? ⇒ Boolean
- .full_entry(tool_class) ⇒ Object
- .reset_cache! ⇒ Object
- .resolve_schemas(tool_names, tool_classes) ⇒ Object
Class Method Details
.always_loaded_tools ⇒ Object
35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/legion/mcp/deferred_registry.rb', line 35 def always_loaded_tools return @always_loaded_cache if @always_loaded_cache base = ALWAYS_LOADED.dup if defined?(Legion::Tools::Registry) && Legion::Tools::Registry.respond_to?(:tools) registry_always = Legion::Tools::Registry.tools(:always) base |= registry_always.map(&:tool_name) if registry_always.is_a?(Array) end custom = Legion::Settings.dig(:mcp, :deferred_loading, :always_loaded) @always_loaded_cache = custom.is_a?(Array) ? (base | custom) : base end |
.build_tools_list(tool_classes) ⇒ Object
62 63 64 65 66 67 68 69 70 |
# File 'lib/legion/mcp/deferred_registry.rb', line 62 def build_tools_list(tool_classes) tool_classes.map do |tc| if deferred?(tc) deferred_entry(tc) else full_entry(tc) end end end |
.deferred?(tool_class) ⇒ Boolean
47 48 49 50 51 52 |
# File 'lib/legion/mcp/deferred_registry.rb', line 47 def deferred?(tool_class) return false unless enabled? name = tool_class.respond_to?(:tool_name) ? tool_class.tool_name : tool_class.name !always_loaded_tools.include?(name) end |
.deferred_entry(tool_class) ⇒ Object
54 55 56 |
# File 'lib/legion/mcp/deferred_registry.rb', line 54 def deferred_entry(tool_class) { name: tool_class.tool_name, description: tool_class.description } end |
.enabled? ⇒ Boolean
30 31 32 33 |
# File 'lib/legion/mcp/deferred_registry.rb', line 30 def enabled? setting = Legion::Settings.dig(:mcp, :deferred_loading, :enabled) setting.nil? || setting end |
.full_entry(tool_class) ⇒ Object
58 59 60 |
# File 'lib/legion/mcp/deferred_registry.rb', line 58 def full_entry(tool_class) tool_class.to_h end |
.reset_cache! ⇒ Object
26 27 28 |
# File 'lib/legion/mcp/deferred_registry.rb', line 26 def reset_cache! @always_loaded_cache = nil end |
.resolve_schemas(tool_names, tool_classes) ⇒ Object
72 73 74 75 76 77 78 79 |
# File 'lib/legion/mcp/deferred_registry.rb', line 72 def resolve_schemas(tool_names, tool_classes) tool_names.filter_map do |name| tc = tool_classes.find { |klass| klass.tool_name == name } next unless tc tc.to_h end end |