Module: Legion::Tools::Discovery

Defined in:
lib/legion/tools/discovery.rb

Constant Summary collapse

ALWAYS_LOADED =

Extension/runner pairs that should always be loaded (not deferred) nil means all runners for that extension; array means specific runners only

{
  'apollo' => ['knowledge'],
  'eval'   => ['evaluation']
}.freeze

Class Method Summary collapse

Class Method Details

.discover_and_registerObject



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/legion/tools/discovery.rb', line 22

def discover_and_register
  return unless defined?(Legion::Extensions)

  exts = loaded_extensions
  log&.info("[Tools::Discovery] scanning #{exts.size} extensions")

  exts.each do |ext|
    discover_runners(ext)
  rescue StandardError => e
    handle_exception(e, level: :warn, handled: true, operation: :discovery_process_extension)
  end

  log&.info(
    "[Tools::Discovery] done: always=#{Registry.tools.size} " \
    "deferred=#{Registry.deferred_tools.size}"
  )
end

.handle_exception(err, **opts) ⇒ Object



18
19
20
# File 'lib/legion/tools/discovery.rb', line 18

def handle_exception(err, **opts)
  log&.warn("[Tools::Discovery] #{opts[:operation]}: #{err.message}")
end

.logObject



14
15
16
# File 'lib/legion/tools/discovery.rb', line 14

def log
  Legion::Logging.respond_to?(:logger) ? Legion::Logging.logger : nil
end