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 +4 -4
- data/CHANGELOG.md +15 -0
- data/lib/legion/extensions/microsoft_teams/actors/api_ingest.rb +2 -2
- data/lib/legion/extensions/microsoft_teams/actors/cache_bulk_ingest.rb +2 -3
- data/lib/legion/extensions/microsoft_teams/actors/cache_sync.rb +2 -3
- data/lib/legion/extensions/microsoft_teams/actors/channel_poller.rb +6 -1
- data/lib/legion/extensions/microsoft_teams/actors/direct_chat_poller.rb +1 -0
- data/lib/legion/extensions/microsoft_teams/actors/incremental_sync.rb +1 -0
- data/lib/legion/extensions/microsoft_teams/actors/observed_chat_poller.rb +1 -0
- data/lib/legion/extensions/microsoft_teams/runners/api_ingest.rb +6 -3
- data/lib/legion/extensions/microsoft_teams/version.rb +1 -1
- data/lib/legion/extensions/microsoft_teams.rb +4 -0
- 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: a09012375cc07436aafb2c4267acd8ac9a7660d5a79055d2992ca85b079e616c
|
|
4
|
+
data.tar.gz: 25e1012b639bcf091422cf0b40e762245c07753e080e4fb190d75be7eeff2f71
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
|
|
24
|
+
[base_delay + 5.0, 30].max
|
|
25
25
|
else
|
|
26
|
-
|
|
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
|
-
|
|
20
|
-
|
|
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
|
-
|
|
27
|
-
|
|
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
|
|
@@ -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
|
-
|
|
153
|
-
|
|
154
|
-
|
|
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
|
[]
|