Module: Legion::LLM::Skills::Registry

Extended by:
Legion::Logging::Helper
Defined in:
lib/legion/llm/skills/registry.rb

Constant Summary collapse

MUTEX =
Mutex.new

Class Method Summary collapse

Class Method Details

.allObject



32
33
34
# File 'lib/legion/llm/skills/registry.rb', line 32

def all
  MUTEX.synchronize { (@ordered || []).filter_map { |k| (@by_key || {})[k] } }
end

.by_trigger(type) ⇒ Object



40
41
42
# File 'lib/legion/llm/skills/registry.rb', line 40

def by_trigger(type)
  all.select { |c| c.trigger == type }
end

.chain_for(skill_key) ⇒ Object



44
45
46
# File 'lib/legion/llm/skills/registry.rb', line 44

def chain_for(skill_key)
  MUTEX.synchronize { (@chain_index || {})[skill_key] }
end

.file_trigger_skillsObject



56
57
58
# File 'lib/legion/llm/skills/registry.rb', line 56

def file_trigger_skills
  MUTEX.synchronize { (@file_trigger_skills || []).dup }
end

.find(key) ⇒ Object



36
37
38
# File 'lib/legion/llm/skills/registry.rb', line 36

def find(key)
  MUTEX.synchronize { (@by_key || {})[key] }
end

.register(skill_class) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/legion/llm/skills/registry.rb', line 14

def register(skill_class)
  MUTEX.synchronize do
    validate!(skill_class)
    key = registry_key(skill_class)
    if (@by_key ||= {}).key?(key)
      log.warn("[skills][registry] duplicate: #{key} replaced")
      remove_from_indexes(@by_key[key], key)
    end
    @ordered ||= []
    @ordered.reject! { |k| k == key }
    @by_key[key] = skill_class
    @ordered << key
    index_trigger_words(key, skill_class)
    index_file_triggers(skill_class)
    index_chain(skill_class)
  end
end

.reset!Object



60
61
62
63
64
65
66
67
68
# File 'lib/legion/llm/skills/registry.rb', line 60

def reset!
  MUTEX.synchronize do
    @by_key              = {}
    @ordered             = []
    @chain_index         = {}
    @trigger_word_index  = {}
    @file_trigger_skills = []
  end
end

.trigger_word_indexObject



48
49
50
51
52
53
54
# File 'lib/legion/llm/skills/registry.rb', line 48

def trigger_word_index
  MUTEX.synchronize do
    (@trigger_word_index || {}).each_with_object({}) do |(word, keys), copy|
      copy[word] = keys.dup
    end
  end
end