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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 74ccf51d788c018264b976da19b093972e4b98aa61b8897af58ae617252cefc8
4
- data.tar.gz: ec0d7bc3f01d4d15d53a774ebebf5bd018cd6d4299c00247dfa7e5f26c70de7c
3
+ metadata.gz: 9e4469dc8b99e566155c5512965d2d4d503b50ffa3090fb482f2d351edc79f36
4
+ data.tar.gz: 4ca0afd1c82d2cf5002d00d86deed145081d8f4b0815acceada22e1004548bcd
5
5
  SHA512:
6
- metadata.gz: f3c2fc57193a47b081f66838280a8aa75703002de31ba5e14ed54e644490e95fc8041d3353ffcabefcc47d28dd3b3c24dcc8da3a68d2f9e600df6ac0c91b3d4e
7
- data.tar.gz: 7f9eb0118b364a20d7cf5cdafc260d08a4cd33aae6b203ab9280e113bba1dc7ed5ff66a71837272179aad479639d500e3501ed1d3749def82d7eb0aa198759e8
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
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Legion
4
4
  module Gaia
5
- VERSION = '0.9.21'
5
+ VERSION = '0.9.22'
6
6
  end
7
7
  end
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
- # Register CLI adapter by default
210
- unless settings&.dig(:channels, :cli, :enabled) == false
211
- cli = Channels::CliAdapter.new
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
- slack = Channels::SlackAdapter.new(
230
- signing_secret: settings&.dig(:channels, :slack, :signing_secret),
231
- bot_token: settings&.dig(:channels, :slack, :bot_token),
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
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: legion-gaia
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.21
4
+ version: 0.9.22
5
5
  platform: ruby
6
6
  authors:
7
7
  - Esity