legion-gaia 0.9.21 → 0.9.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/lib/legion/gaia/channel_adapter.rb +19 -0
- data/lib/legion/gaia/channels/cli_adapter.rb +6 -0
- data/lib/legion/gaia/channels/slack_adapter.rb +10 -0
- data/lib/legion/gaia/channels/teams_adapter.rb +6 -0
- data/lib/legion/gaia/version.rb +1 -1
- data/lib/legion/gaia.rb +6 -26
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9e4469dc8b99e566155c5512965d2d4d503b50ffa3090fb482f2d351edc79f36
|
|
4
|
+
data.tar.gz: 4ca0afd1c82d2cf5002d00d86deed145081d8f4b0815acceada22e1004548bcd
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 526f724c6af5514afafee5756009d18d1980aabee828066b4f52ef1dfb2144405bc2da25c6baf6652414bb6c7dffccae2a3b3c5ba47ae0a1e72f269fde230299
|
|
7
|
+
data.tar.gz: 1a7bc07f727b79f06fd8d237065fb2daff2b22078f36b799bca3302e514d157cc27173515463ed53d94e861185cd0de860dd68b90550b3250bf576d387fce52f
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.9.22] - 2026-03-24
|
|
4
|
+
|
|
5
|
+
### Changed
|
|
6
|
+
- Channel adapter auto-discovery: `boot_channels` now iterates `ChannelAdapter.adapter_classes` instead of hard-coding Teams/Slack/CLI
|
|
7
|
+
- Each adapter implements `self.from_settings(settings)` factory method for self-registration
|
|
8
|
+
- `ChannelAdapter.inherited` hook auto-registers subclasses — new adapters need zero changes to `gaia.rb`
|
|
9
|
+
- Removed `register_slack_adapter` private method (absorbed into auto-discovery loop)
|
|
10
|
+
|
|
3
11
|
## [0.9.21] - 2026-03-24
|
|
4
12
|
|
|
5
13
|
### Added
|
|
@@ -5,12 +5,31 @@ module Legion
|
|
|
5
5
|
class ChannelAdapter
|
|
6
6
|
attr_reader :channel_id, :capabilities
|
|
7
7
|
|
|
8
|
+
@adapter_classes = []
|
|
9
|
+
|
|
10
|
+
class << self
|
|
11
|
+
attr_reader :adapter_classes
|
|
12
|
+
|
|
13
|
+
def register_adapter(klass)
|
|
14
|
+
@adapter_classes << klass unless @adapter_classes.include?(klass)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def inherited(subclass)
|
|
18
|
+
super
|
|
19
|
+
register_adapter(subclass)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
8
23
|
def initialize(channel_id:, capabilities: [])
|
|
9
24
|
@channel_id = channel_id
|
|
10
25
|
@capabilities = capabilities
|
|
11
26
|
@started = false
|
|
12
27
|
end
|
|
13
28
|
|
|
29
|
+
def self.from_settings(_settings)
|
|
30
|
+
nil
|
|
31
|
+
end
|
|
32
|
+
|
|
14
33
|
def start
|
|
15
34
|
@started = true
|
|
16
35
|
end
|
|
@@ -6,6 +6,12 @@ module Legion
|
|
|
6
6
|
class CliAdapter < ChannelAdapter
|
|
7
7
|
CAPABILITIES = %i[rich_text inline_code file_attachment syntax_highlighting].freeze
|
|
8
8
|
|
|
9
|
+
def self.from_settings(settings)
|
|
10
|
+
return nil if settings&.dig(:channels, :cli, :enabled) == false
|
|
11
|
+
|
|
12
|
+
new
|
|
13
|
+
end
|
|
14
|
+
|
|
9
15
|
def initialize
|
|
10
16
|
super(channel_id: :cli, capabilities: CAPABILITIES)
|
|
11
17
|
@output_buffer = []
|
|
@@ -10,6 +10,16 @@ module Legion
|
|
|
10
10
|
|
|
11
11
|
attr_reader :signing_secret, :bot_token
|
|
12
12
|
|
|
13
|
+
def self.from_settings(settings)
|
|
14
|
+
return nil unless settings&.dig(:channels, :slack, :enabled)
|
|
15
|
+
|
|
16
|
+
new(
|
|
17
|
+
signing_secret: settings.dig(:channels, :slack, :signing_secret),
|
|
18
|
+
bot_token: settings.dig(:channels, :slack, :bot_token),
|
|
19
|
+
default_webhook: settings.dig(:channels, :slack, :default_webhook)
|
|
20
|
+
)
|
|
21
|
+
end
|
|
22
|
+
|
|
13
23
|
def initialize(signing_secret: nil, bot_token: nil, default_webhook: nil)
|
|
14
24
|
super(channel_id: :slack, capabilities: CAPABILITIES)
|
|
15
25
|
@signing_secret = signing_secret
|
|
@@ -14,6 +14,12 @@ module Legion
|
|
|
14
14
|
|
|
15
15
|
attr_reader :conversation_store, :app_id
|
|
16
16
|
|
|
17
|
+
def self.from_settings(settings)
|
|
18
|
+
return nil unless settings&.dig(:channels, :teams, :enabled)
|
|
19
|
+
|
|
20
|
+
new(app_id: settings.dig(:channels, :teams, :app_id))
|
|
21
|
+
end
|
|
22
|
+
|
|
17
23
|
def initialize(app_id: nil)
|
|
18
24
|
super(channel_id: :teams, capabilities: CAPABILITIES)
|
|
19
25
|
@app_id = app_id
|
data/lib/legion/gaia/version.rb
CHANGED
data/lib/legion/gaia.rb
CHANGED
|
@@ -206,33 +206,13 @@ module Legion
|
|
|
206
206
|
@output_router = OutputRouter.new(channel_registry: @channel_registry, renderer: renderer,
|
|
207
207
|
notification_gate: notification_gate)
|
|
208
208
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
cli.start
|
|
213
|
-
@channel_registry.register(cli)
|
|
214
|
-
end
|
|
215
|
-
|
|
216
|
-
# Register Teams adapter if enabled
|
|
217
|
-
return unless settings&.dig(:channels, :teams, :enabled)
|
|
218
|
-
|
|
219
|
-
teams = Channels::TeamsAdapter.new(app_id: settings&.dig(:channels, :teams, :app_id))
|
|
220
|
-
teams.start
|
|
221
|
-
@channel_registry.register(teams)
|
|
222
|
-
|
|
223
|
-
register_slack_adapter
|
|
224
|
-
end
|
|
225
|
-
|
|
226
|
-
def register_slack_adapter
|
|
227
|
-
return unless settings&.dig(:channels, :slack, :enabled)
|
|
209
|
+
ChannelAdapter.adapter_classes.each do |klass|
|
|
210
|
+
adapter = klass.from_settings(settings)
|
|
211
|
+
next unless adapter
|
|
228
212
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
default_webhook: settings&.dig(:channels, :slack, :default_webhook)
|
|
233
|
-
)
|
|
234
|
-
slack.start
|
|
235
|
-
@channel_registry.register(slack)
|
|
213
|
+
adapter.start
|
|
214
|
+
@channel_registry.register(adapter)
|
|
215
|
+
end
|
|
236
216
|
end
|
|
237
217
|
|
|
238
218
|
def base_status
|