Module: Legion::Settings::AgentLoader
- Extended by:
- Logging::Helper
- Defined in:
- lib/legion/settings/agent_loader.rb
Constant Summary collapse
- EXTENSIONS =
%w[.yaml .yml .json].freeze
- GLOB =
'*.{yaml,yml,json}'
Class Method Summary collapse
Class Method Details
.load_agents(directory) ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/legion/settings/agent_loader.rb', line 16 def load_agents(directory) return [] unless directory && Dir.exist?(directory) Dir.glob(File.join(directory, GLOB)).filter_map do |path| definition = load_file(path) next unless definition && valid?(definition) log.debug("Agent loaded: #{definition[:name]} (#{path})") definition.merge(_source_path: path, _source_mtime: File.mtime(path)) end end |
.load_file(path) ⇒ Object
28 29 30 31 32 33 34 35 36 37 |
# File 'lib/legion/settings/agent_loader.rb', line 28 def load_file(path) content = File.read(path) case File.extname(path).downcase when '.yaml', '.yml' then YAML.safe_load(content, symbolize_names: true) when '.json' then ::JSON.parse(content, symbolize_names: true) end rescue StandardError => e log.warn("Failed to parse agent file #{path}: #{e.}") nil end |
.valid?(definition) ⇒ Boolean
39 40 41 42 43 44 45 46 |
# File 'lib/legion/settings/agent_loader.rb', line 39 def valid?(definition) return false unless definition.is_a?(Hash) return false unless definition[:name].is_a?(String) && !definition[:name].empty? return false unless definition.dig(:runner, :functions).is_a?(Array) return false if definition[:runner][:functions].empty? true end |