lex-microsoft_teams 0.6.32 → 0.6.34

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: 1bf9edc066d7d8d10aa994173883bb8e7fbb20847b2a1c1f3e2b296c918f4218
4
- data.tar.gz: '08ea90ea1dd80f70aba0ad19ae2e1fc11428c9efd5ef4dce67b7c614c85d9a39'
3
+ metadata.gz: a09012375cc07436aafb2c4267acd8ac9a7660d5a79055d2992ca85b079e616c
4
+ data.tar.gz: 25e1012b639bcf091422cf0b40e762245c07753e080e4fb190d75be7eeff2f71
5
5
  SHA512:
6
- metadata.gz: 300418d851a4781ff29a11186680839f974b4397eddc750036d25ae8863d69940947046cce9f27c128ec56de4b238a34a8948085917ecbd069959911f5cfd4c6
7
- data.tar.gz: a25c6c1ae3b1a9b9271012ef38bd955cf516bec679ba3f7608e13aa291e096b23b44ac78397f165267b09c6631d309be342ac8d34ef7b9656e6776b59cf24ec3
6
+ metadata.gz: f0cf0c2cc962656680b8200dfefd405b681bcd016820eb4114d4c4ef9d5e85845778418983639e5a7ce3d96e62a8b175c6f2a475c04f486378341698cb23936e
7
+ data.tar.gz: 10b2122a0681ab769270ddc19f67deb6e1701beef934e4e07af970d1675f11e7750ead02ca98111c42a08a6f0f2f472698cbb342d27526fad8852681b5958e15
data/CHANGELOG.md CHANGED
@@ -2,6 +2,21 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [0.6.34] - 2026-04-03
6
+
7
+ ### Fixed
8
+ - ApiIngest restores HWM from traces on startup to prevent re-fetching all messages on every restart
9
+ - ApiIngest now fetches 1:1, group, and meeting chats (not just oneOnOne)
10
+ - CacheSync disabled — local cache has no chat type metadata to filter channel messages
11
+ - ChannelPoller trace storage gated behind `channels.store_traces` setting (default: false)
12
+
13
+ ## [0.6.33] - 2026-04-03
14
+
15
+ ### Changed
16
+ - Set `remote_invocable? false` — eliminates 19 auto-generated AMQP subscription actors on boot
17
+ - Add initial delays to Every actors: DirectChatPoller (60s), ObservedChatPoller (180s), ChannelPoller (300s), IncrementalSync (60s), ApiIngest (max of auth_delay+5 or 30s)
18
+ - Disable CacheBulkIngest until run-once-ever logic is implemented
19
+
5
20
  ## [0.6.32] - 2026-03-31
6
21
 
7
22
  ### Fixed
@@ -21,9 +21,9 @@ module Legion
21
21
  if defined?(Legion::Extensions::MicrosoftTeams::Actor::AuthValidator)
22
22
  auth_validator = Legion::Extensions::MicrosoftTeams::Actor::AuthValidator.allocate
23
23
  base_delay = auth_validator.respond_to?(:delay) ? auth_validator.delay.to_f : 90.0
24
- base_delay + 5.0 # must fire shortly after AuthValidator completes delegated auth
24
+ [base_delay + 5.0, 30].max
25
25
  else
26
- 95.0 # conservative boot-ordering fallback if AuthValidator is unavailable
26
+ 30
27
27
  end
28
28
  end
29
29
 
@@ -16,9 +16,8 @@ module Legion
16
16
  end
17
17
 
18
18
  def enabled?
19
- defined?(Legion::Extensions::Agentic::Memory::Trace::Runners::Traces)
20
- rescue StandardError => e
21
- log.debug("CacheBulkIngest#enabled?: #{e.message}")
19
+ # TODO: implement run-once-ever via Data::Local flag so bulk ingest
20
+ # doesn't re-run on every restart
22
21
  false
23
22
  end
24
23
 
@@ -23,9 +23,8 @@ module Legion
23
23
  def generate_task? = false
24
24
 
25
25
  def enabled?
26
- defined?(Legion::Extensions::Agentic::Memory::Trace::Runners::Traces)
27
- rescue StandardError => e
28
- log.debug("CacheSync#enabled?: #{e.message}")
26
+ # TODO: local cache has no chat type metadata — cannot filter out channel
27
+ # messages. Disabled until cache records include chatType.
29
28
  false
30
29
  end
31
30
 
@@ -21,6 +21,7 @@ module Legion
21
21
  def runner_class = self.class
22
22
  def runner_function = 'manual'
23
23
  def time = channel_setting(:poll_interval, DEFAULT_INTERVAL)
24
+ def delay = 300
24
25
  def run_now? = false
25
26
  def use_runner? = false
26
27
  def check_subtask? = false
@@ -125,7 +126,7 @@ module Legion
125
126
  log.info("#{team_name} / #{channel_name}: #{new_msgs.length} new message(s)")
126
127
  new_msgs.each do |msg|
127
128
  log_message(team_name: team_name, channel_name: channel_name, msg: msg)
128
- store_channel_message_trace(team_name: team_name, channel_name: channel_name, msg: msg) if memory_available?
129
+ store_channel_message_trace(team_name: team_name, channel_name: channel_name, msg: msg) if memory_available? && channel_traces_enabled?
129
130
  end
130
131
 
131
132
  latest = new_msgs.filter_map { |m| m['createdDateTime'] }.max
@@ -163,6 +164,10 @@ module Legion
163
164
  default
164
165
  end
165
166
 
167
+ def channel_traces_enabled?
168
+ channel_setting(:store_traces, false) == true
169
+ end
170
+
166
171
  def store_channel_message_trace(team_name:, channel_name:, msg:)
167
172
  sender = msg.dig('from', 'user', 'displayName') || 'Unknown'
168
173
  content = (msg.dig('body', 'content') || '').gsub(/<[^>]+>/, '').strip
@@ -20,6 +20,7 @@ module Legion
20
20
  def runner_class = Legion::Extensions::MicrosoftTeams::Runners::Bot
21
21
  def runner_function = 'handle_message'
22
22
  def time = settings_interval(:direct_poll_interval, POLL_INTERVAL)
23
+ def delay = 60
23
24
  def run_now? = false
24
25
  def use_runner? = false
25
26
  def check_subtask? = false
@@ -11,6 +11,7 @@ module Legion
11
11
  def check_subtask? = false
12
12
  def generate_task? = false
13
13
  def run_now? = false
14
+ def delay = 60
14
15
 
15
16
  def time
16
17
  settings = begin
@@ -19,6 +19,7 @@ module Legion
19
19
  def runner_class = Legion::Extensions::MicrosoftTeams::Runners::Bot
20
20
  def runner_function = 'observe_message'
21
21
  def time = settings_interval(:observe_poll_interval, POLL_INTERVAL)
22
+ def delay = 180
22
23
  def run_now? = false
23
24
  def use_runner? = false
24
25
  def check_subtask? = false
@@ -25,6 +25,8 @@ module Legion
25
25
  return error_result('lex-memory not loaded') unless memory_available?
26
26
  return error_result('no token provided') unless token && !token.empty?
27
27
 
28
+ restore_hwm_from_traces
29
+
28
30
  people = fetch_top_people(token: token, top: top_people)
29
31
  log.debug("ApiIngest: fetched #{people.size} top people")
30
32
  return error_result('people endpoint denied or empty') if people.empty?
@@ -149,9 +151,10 @@ module Legion
149
151
  params = {}
150
152
  end
151
153
 
152
- one_on_one = all_chats.select { |c| c['chatType'] == 'oneOnOne' }
153
- log.info("ApiIngest: fetched #{all_chats.size} chats (#{pages} pages), #{one_on_one.size} oneOnOne")
154
- one_on_one
154
+ allowed_types = %w[oneOnOne group meeting]
155
+ filtered = all_chats.select { |c| allowed_types.include?(c['chatType']) }
156
+ log.info("ApiIngest: fetched #{all_chats.size} chats (#{pages} pages), #{filtered.size} eligible (1:1/group/meeting)")
157
+ filtered
155
158
  rescue StandardError => e
156
159
  log.warn("ApiIngest: fetch_chats failed: #{e.message}")
157
160
  []
@@ -3,7 +3,7 @@
3
3
  module Legion
4
4
  module Extensions
5
5
  module MicrosoftTeams
6
- VERSION = '0.6.32'
6
+ VERSION = '0.6.34'
7
7
  end
8
8
  end
9
9
  end
@@ -54,6 +54,10 @@ module Legion
54
54
  module Extensions
55
55
  module MicrosoftTeams
56
56
  extend Legion::Extensions::Core if Legion::Extensions.const_defined? :Core, false
57
+
58
+ def self.remote_invocable?
59
+ false
60
+ end
57
61
  end
58
62
  end
59
63
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lex-microsoft_teams
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.32
4
+ version: 0.6.34
5
5
  platform: ruby
6
6
  authors:
7
7
  - Esity