Module: Legion::Extensions::Agentic::Self::Metacognition::Runners::Registry

Extended by:
Registry
Included in:
Registry
Defined in:
lib/legion/extensions/agentic/self/metacognition/runners/registry.rb

Instance Method Summary collapse

Instance Method Details

#category_distributionObject



69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/legion/extensions/agentic/self/metacognition/runners/registry.rb', line 69

def category_distribution(**)
  dist = if db_available?
           db_category_distribution
         else
           store.category_distribution
         end

  total = dist.values.sum
  percentages = dist.transform_values { |v| total.positive? ? (v.to_f / total * 100).round(1) : 0.0 }

  { success: true, distribution: dist, percentages: percentages, total: total }
end

#degraded_extensions(threshold: 0.4) ⇒ Object



82
83
84
85
86
87
88
89
# File 'lib/legion/extensions/agentic/self/metacognition/runners/registry.rb', line 82

def degraded_extensions(threshold: 0.4, **)
  extensions = if db_available?
                 db_by_health(threshold)
               else
                 store.by_health(threshold: threshold)
               end
  { success: true, extensions: extensions, count: extensions.size }
end

#deregister_extension(name:) ⇒ Object



27
28
29
30
31
32
33
34
35
36
# File 'lib/legion/extensions/agentic/self/metacognition/runners/registry.rb', line 27

def deregister_extension(name:, **)
  if db_available?
    db_deregister(name)
  else
    store.deregister(name)
  end
  { success: true, name: name }
rescue ArgumentError => e
  { success: false, error: e.message }
end

#extension_status(name:) ⇒ Object



47
48
49
50
51
52
53
54
55
56
# File 'lib/legion/extensions/agentic/self/metacognition/runners/registry.rb', line 47

def extension_status(name:, **)
  ext = if db_available?
          db_get(name)
        else
          store.get(name)
        end
  return { success: false, error: :not_found } unless ext

  { success: true, extension: ext }
end

#list_extensions(status: nil, category: nil) ⇒ Object



38
39
40
41
42
43
44
45
# File 'lib/legion/extensions/agentic/self/metacognition/runners/registry.rb', line 38

def list_extensions(status: nil, category: nil, **)
  extensions = if db_available?
                 db_list(status: status, category: category)
               else
                 store.list(status: status, category: category)
               end
  { success: true, extensions: extensions, count: extensions.size }
end

#register_extension(name:, module_name:, category: 'cognition') ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/legion/extensions/agentic/self/metacognition/runners/registry.rb', line 12

def register_extension(name:, module_name:, category: 'cognition', **)
  entry = build_entry(name: name, module_name: module_name, category: category, **)

  if db_available?
    db_register(entry)
  else
    store.register(entry)
  end

  Legion::Logging.info "[metacognition:registry] registered #{name} (#{category})"
  { success: true, name: name, category: category }
rescue ArgumentError => e
  { success: false, error: e.message }
end

#seed_from_constantsObject



91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/legion/extensions/agentic/self/metacognition/runners/registry.rb', line 91

def seed_from_constants(**)
  capabilities = Helpers::Constants::EXTENSION_CAPABILITIES
  seeded = 0

  capabilities.each do |mod_name, category|
    snake = mod_name.to_s.gsub(/([A-Z])/, '_\1').sub(/^_/, '').downcase
    lex_name = "lex-#{snake.tr('_', '-')}"
    next if extension_status(name: lex_name)[:success]

    register_extension(
      name:        lex_name,
      module_name: mod_name.to_s,
      category:    category.to_s
    )
    seeded += 1
  end

  { success: true, seeded: seeded, total: capabilities.size }
end

#update_extension(name:, attrs: {}) ⇒ Object



58
59
60
61
62
63
64
65
66
67
# File 'lib/legion/extensions/agentic/self/metacognition/runners/registry.rb', line 58

def update_extension(name:, attrs: {}, **)
  result = if db_available?
             db_update(name, attrs)
           else
             store.update(name, attrs)
           end
  return { success: false, error: :not_found } unless result

  { success: true, extension: result }
end