Module: Legion::Settings::Extensions
- Defined in:
- lib/legion/settings/extensions.rb,
lib/legion/settings/extensions/store.rb,
lib/legion/settings/extensions/filter.rb,
lib/legion/settings/extensions/normalizer.rb
Overview
Thread-safe runtime registry for extensions, runners, and tools.
Used by the LegionIO boot pipeline to register discovered extensions, their runner modules, and individual tools. Consumers (legion-mcp, legion-llm, legion-rbac, API) read from this registry at runtime.
Each store is a Concurrent::Map-backed Store instance. Read operations return frozen duplicates so callers cannot mutate registry internals.
Defined Under Namespace
Modules: Filter, Normalizer
Classes: Store
Class Method Summary
collapse
Class Method Details
.extension_count ⇒ Object
116
117
118
|
# File 'lib/legion/settings/extensions.rb', line 116
def extension_count
@extension_store.size
end
|
.extensions ⇒ Object
Query (called by legion-mcp, legion-llm, legion-rbac, API)
50
51
52
|
# File 'lib/legion/settings/extensions.rb', line 50
def extensions
@extension_store.all
end
|
.filter_extensions(**criteria) ⇒ Object
81
82
83
84
85
86
|
# File 'lib/legion/settings/extensions.rb', line 81
def filter_extensions(**criteria)
entries = @extension_store.all.map(&:dup)
result = Filter.apply_extension_filters(entries, criteria)
result.each(&:freeze)
result.freeze
end
|
74
75
76
77
78
79
|
# File 'lib/legion/settings/extensions.rb', line 74
def filter_tools(**criteria)
entries = @tool_store.all.map(&:dup)
result = Filter.apply_tool_filters(entries, criteria, extension_store: @extension_store)
result.each(&:freeze)
result.freeze
end
|
.find_extension(name) ⇒ Object
62
63
64
|
# File 'lib/legion/settings/extensions.rb', line 62
def find_extension(name)
@extension_store.find(name)
end
|
.find_runner(name) ⇒ Object
66
67
68
|
# File 'lib/legion/settings/extensions.rb', line 66
def find_runner(name)
@runner_store.find(name)
end
|
70
71
72
|
# File 'lib/legion/settings/extensions.rb', line 70
def find_tool(name)
@tool_store.find(name)
end
|
.register_extension(name, metadata = {}) ⇒ Object
Registration (called during LegionIO boot pipeline)
27
28
29
30
|
# File 'lib/legion/settings/extensions.rb', line 27
def register_extension(name, metadata = {})
normalized = Normalizer.normalize_extension(name, metadata)
@extension_store.register(name, normalized)
end
|
.register_runner(name, metadata = {}) ⇒ Object
32
33
34
35
|
# File 'lib/legion/settings/extensions.rb', line 32
def register_runner(name, metadata = {})
normalized = Normalizer.normalize_runner(name, metadata)
@runner_store.register(name, normalized)
end
|
37
38
39
40
|
# File 'lib/legion/settings/extensions.rb', line 37
def register_tool(name, metadata = {})
normalized = Normalizer.normalize_tool(name, metadata)
@tool_store.register(name, normalized)
end
|
.reset! ⇒ Object
106
107
108
109
110
|
# File 'lib/legion/settings/extensions.rb', line 106
def reset!
@extension_store.clear
@runner_store.clear
@tool_store.clear
end
|
.runner_count ⇒ Object
120
121
122
|
# File 'lib/legion/settings/extensions.rb', line 120
def runner_count
@runner_store.size
end
|
.runners ⇒ Object
54
55
56
|
# File 'lib/legion/settings/extensions.rb', line 54
def runners
@runner_store.all
end
|
124
125
126
|
# File 'lib/legion/settings/extensions.rb', line 124
def tool_count
@tool_store.size
end
|
58
59
60
|
# File 'lib/legion/settings/extensions.rb', line 58
def tools
@tool_store.all
end
|
.transition(name, state, **extra) ⇒ Object
42
43
44
|
# File 'lib/legion/settings/extensions.rb', line 42
def transition(name, state, **)
@extension_store.update(name, state: state, transitioned_at: Time.now, **)
end
|
.unregister_extension(name) ⇒ Object
92
93
94
95
96
97
98
99
100
|
# File 'lib/legion/settings/extensions.rb', line 92
def unregister_extension(name)
removed = @extension_store.delete(name)
return nil unless removed
key = name.to_s
@runner_store.delete_where { |v| v[:extension].to_s == key }
@tool_store.delete_where { |v| v[:extension].to_s == key }
removed
end
|
102
103
104
|
# File 'lib/legion/settings/extensions.rb', line 102
def unregister_tool(name)
@tool_store.delete(name)
end
|