lex-microsoft_teams 0.6.18 → 0.6.19

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.
Files changed (30) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +5 -0
  3. data/CLAUDE.md +7 -4
  4. data/README.md +2 -1
  5. data/lib/legion/extensions/microsoft_teams/cli/auth.rb +3 -3
  6. data/lib/legion/extensions/microsoft_teams/helpers/browser_auth.rb +2 -2
  7. data/lib/legion/extensions/microsoft_teams/helpers/permission_guard.rb +2 -2
  8. data/lib/legion/extensions/microsoft_teams/helpers/session_manager.rb +2 -2
  9. data/lib/legion/extensions/microsoft_teams/helpers/subscription_registry.rb +2 -2
  10. data/lib/legion/extensions/microsoft_teams/helpers/token_cache.rb +3 -3
  11. data/lib/legion/extensions/microsoft_teams/runners/adaptive_cards.rb +2 -2
  12. data/lib/legion/extensions/microsoft_teams/runners/ai_insights.rb +2 -2
  13. data/lib/legion/extensions/microsoft_teams/runners/api_ingest.rb +2 -2
  14. data/lib/legion/extensions/microsoft_teams/runners/auth.rb +2 -2
  15. data/lib/legion/extensions/microsoft_teams/runners/bot.rb +2 -2
  16. data/lib/legion/extensions/microsoft_teams/runners/cache_ingest.rb +2 -2
  17. data/lib/legion/extensions/microsoft_teams/runners/channel_messages.rb +2 -2
  18. data/lib/legion/extensions/microsoft_teams/runners/channels.rb +2 -2
  19. data/lib/legion/extensions/microsoft_teams/runners/chats.rb +2 -2
  20. data/lib/legion/extensions/microsoft_teams/runners/local_cache.rb +2 -2
  21. data/lib/legion/extensions/microsoft_teams/runners/meetings.rb +2 -2
  22. data/lib/legion/extensions/microsoft_teams/runners/messages.rb +2 -2
  23. data/lib/legion/extensions/microsoft_teams/runners/ownership.rb +2 -2
  24. data/lib/legion/extensions/microsoft_teams/runners/people.rb +2 -2
  25. data/lib/legion/extensions/microsoft_teams/runners/presence.rb +2 -2
  26. data/lib/legion/extensions/microsoft_teams/runners/subscriptions.rb +2 -2
  27. data/lib/legion/extensions/microsoft_teams/runners/teams.rb +2 -2
  28. data/lib/legion/extensions/microsoft_teams/runners/transcripts.rb +2 -2
  29. data/lib/legion/extensions/microsoft_teams/version.rb +1 -1
  30. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3194ba9caa2dc94e68a50f5d0d8dfc18d04c9cb062b982c2134c702e99f38c04
4
- data.tar.gz: 98a39387206662e79a5523227f7995df3c8d6dc342444f01530611cc60c05c3f
3
+ metadata.gz: 191314d46175bfd188ec33f1821071dd04522440eb54bb5450093904e27455fd
4
+ data.tar.gz: 461f5f6434c25a94c3715140827b22f6a23bce7705cb1128ddd756bbacb4dafd
5
5
  SHA512:
6
- metadata.gz: 32d7a9eb1834408e2e9101ef19f141ec189868a0ad630cbc03add34962351435e413911c2f3c8108d7d14f6274791f02b442903146dd79da605cdc72968edd76
7
- data.tar.gz: db5782a259711c24a6cfd3bdeff0d812a5bf70da1d7c8b9ab55d9c0a11781fbbb3ab494b9f58936bdba031a2283aff95012c3cb0d0dbbfa93fb62adb6de50521
6
+ metadata.gz: d0a5cdfb3d45c34f4165dc4af7e2f2195a8d10d6dfe022cfd9531825d1faa34e03e07b63dd4304cd0e43cb452e9478898ef47eaa0a81ad63effddf69d6a09ec2
7
+ data.tar.gz: cd317fd7a7c778065d905019c9648436285e2d00d04baff31cc1278d517412cc7ee2d893b7d4303bc8f00f0ea56a372ecdf32985ac5b2d7891cbc2b9b98eb4df
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.6.19] - 2026-03-26
4
+
5
+ ### Changed
6
+ - `TokenCache#vault_path` default now uses `users/` prefix: `users/{USER}/microsoft_teams/delegated_token` (where `{USER}` is `ENV.fetch('USER', 'default')`), aligning with Vault KV v2 policy structure that scopes secrets under per-user subpaths
7
+
3
8
  ## [0.6.18] - 2026-03-26
4
9
 
5
10
  ### Changed
data/CLAUDE.md CHANGED
@@ -10,7 +10,7 @@ Legion Extension that connects LegionIO to Microsoft Teams via Graph API and Bot
10
10
 
11
11
  **GitHub**: https://github.com/LegionIO/lex-microsoft_teams
12
12
  **License**: MIT
13
- **Version**: 0.6.4
13
+ **Version**: 0.6.18
14
14
 
15
15
  ## Architecture
16
16
 
@@ -61,6 +61,7 @@ Legion::Extensions::MicrosoftTeams
61
61
  │ ├── BrowserAuth # Delegated OAuth orchestrator (PKCE, headless detection, browser launch, API hook detection)
62
62
  │ ├── CallbackServer # Ephemeral TCP server for OAuth redirect callback
63
63
  │ ├── PermissionGuard # Circuit breaker for 403 errors with exponential backoff
64
+ │ ├── TraceRetriever # Retrieves memory traces from the shared store for bot context (2000-token budget, strength-ranked dedup)
64
65
  │ └── TransformDefinitions # lex-transformer definitions for conversation extraction and person summary
65
66
  ├── Hooks/
66
67
  │ └── Auth # OAuth callback hook (mount '/callback') → /api/hooks/lex/microsoft_teams/auth/callback
@@ -76,7 +77,7 @@ Opt-in browser-based OAuth for delegated Microsoft Graph permissions. Two flows:
76
77
  - **Authorization Code + PKCE** (primary): Opens browser for Entra ID login. When the Legion API is running, uses the hook URL (`/api/hooks/lex/microsoft_teams/auth/callback`) with `Legion::Events` for callback notification; otherwise falls back to an ephemeral local port via `CallbackServer`
77
78
  - **Device Code** (fallback): Auto-selected in headless/SSH environments (no `DISPLAY`/`WAYLAND_DISPLAY`)
78
79
 
79
- Tokens stored in Vault (`legionio/microsoft_teams/delegated_token`) with configurable pre-expiry silent refresh. CLI command: `legion auth teams`. Hook route: `GET|POST /api/hooks/lex/microsoft_teams/auth/callback` for daemon re-auth (routed through Ingress for RBAC/audit).
80
+ Tokens stored in Vault at a per-user path (`{USER}/microsoft_teams/delegated_token`, where `{USER}` is the system username) with configurable pre-expiry silent refresh. CLI command: `legion auth teams`. Hook route: `GET|POST /api/hooks/lex/microsoft_teams/auth/callback` for daemon re-auth (routed through Ingress for RBAC/audit).
80
81
 
81
82
  Key files: `Helpers::BrowserAuth` (orchestrator), `Helpers::CallbackServer` (ephemeral TCP), `Runners::Auth` (authorize_url, exchange_code, refresh_delegated_token, auth_callback), `Helpers::TokenCache` (delegated slot), `Hooks::Auth` (hook class with mount path).
82
83
 
@@ -128,9 +129,11 @@ User DMs the bot 1:1. Bot responds via legion-llm with multi-turn session contex
128
129
 
129
130
  ```
130
131
  DirectChatPoller (5s) → AMQP exchange → MessageProcessor → Bot::handle_message
131
- → SessionManager.get_or_create → llm_session.ask(text) → Graph API reply
132
+ TraceRetriever.retrieve → SessionManager.get_or_create → llm_session.ask(text) → Graph API reply
132
133
  ```
133
134
 
135
+ `TraceRetriever` (v0.6.17) fetches memory traces from the shared store (sender, teams, chat-scoped domains) before each response. Up to a 2000-token budget; strength-ranked with deduplication. Appended to the resolved system prompt via `PromptResolver#resolve_prompt(trace_context:)`. Degrades gracefully when lex-memory is unavailable.
136
+
134
137
  ### Mode 2: Conversation Observer
135
138
  User subscribes the bot to watch a human 1:1 conversation. Bot passively extracts tasks, context, and relationship data.
136
139
 
@@ -252,7 +255,7 @@ Optional framework dependencies (guarded with `defined?`, not in gemspec):
252
255
 
253
256
  ```bash
254
257
  bundle install
255
- bundle exec rspec # 292 specs across 39 spec files (as of v0.6.0)
258
+ bundle exec rspec # ~305 specs across 40 spec files (as of v0.6.18)
256
259
  bundle exec rubocop # Clean
257
260
  ```
258
261
 
data/README.md CHANGED
@@ -115,12 +115,13 @@ gem install lex-microsoft_teams
115
115
 
116
116
  **Helpers:**
117
117
  - `SessionManager` — Multi-turn LLM session lifecycle with lex-memory persistence
118
- - `PromptResolver` — Layered system prompt resolution (settings default -> mode -> per-conversation)
118
+ - `PromptResolver` — Layered system prompt resolution (settings default -> mode -> per-conversation -> trace context)
119
119
  - `HighWaterMark` — Per-chat message deduplication via legion-cache
120
120
  - `TokenCache` — In-memory OAuth token cache with pre-expiry refresh (app + delegated slots)
121
121
  - `SubscriptionRegistry` — Conversation observation subscriptions (in-memory + lex-memory)
122
122
  - `BrowserAuth` — Delegated OAuth orchestrator (PKCE, headless detection, browser launch)
123
123
  - `CallbackServer` — Ephemeral TCP server for OAuth redirect callback
124
+ - `TraceRetriever` — Retrieves and formats memory traces as LLM context (2000-token budget, strength-ranked dedup)
124
125
 
125
126
  ### Delegated Authentication (v0.5.0)
126
127
 
@@ -8,8 +8,8 @@ module Legion
8
8
  module MicrosoftTeams
9
9
  module CLI
10
10
  class Auth
11
- include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) &&
12
- Legion::Extensions::Helpers.const_defined?(:Lex)
11
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
12
+ Legion::Extensions::Helpers.const_defined?(:Lex, false)
13
13
 
14
14
  def self.cli_alias
15
15
  'teams'
@@ -74,7 +74,7 @@ module Legion
74
74
  end
75
75
 
76
76
  def store_token(result)
77
- cache = Helpers::TokenCache.new
77
+ cache = Helpers::TokenCache.instance
78
78
  cache.store_delegated_token(result)
79
79
  cache.save_to_vault
80
80
  log.info('Token stored successfully')
@@ -13,8 +13,8 @@ module Legion
13
13
  module MicrosoftTeams
14
14
  module Helpers
15
15
  class BrowserAuth
16
- include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) &&
17
- Legion::Extensions::Helpers.const_defined?(:Lex)
16
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
17
+ Legion::Extensions::Helpers.const_defined?(:Lex, false)
18
18
 
19
19
  DEFAULT_SCOPES = [
20
20
  'offline_access', 'openid', 'profile', 'email',
@@ -5,8 +5,8 @@ module Legion
5
5
  module MicrosoftTeams
6
6
  module Helpers
7
7
  module PermissionGuard
8
- include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) &&
9
- Legion::Extensions::Helpers.const_defined?(:Lex)
8
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
9
+ Legion::Extensions::Helpers.const_defined?(:Lex, false)
10
10
 
11
11
  BACKOFF_SCHEDULE = [60, 300, 1800, 7200, 28_800].freeze
12
12
 
@@ -8,8 +8,8 @@ module Legion
8
8
  module Helpers
9
9
  class SessionManager
10
10
  include PromptResolver
11
- include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) &&
12
- Legion::Extensions::Helpers.const_defined?(:Lex)
11
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
12
+ Legion::Extensions::Helpers.const_defined?(:Lex, false)
13
13
 
14
14
  DEFAULT_FLUSH_THRESHOLD = 20
15
15
  DEFAULT_IDLE_TIMEOUT = 900
@@ -7,8 +7,8 @@ module Legion
7
7
  module MicrosoftTeams
8
8
  module Helpers
9
9
  class SubscriptionRegistry
10
- include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) &&
11
- Legion::Extensions::Helpers.const_defined?(:Lex)
10
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
11
+ Legion::Extensions::Helpers.const_defined?(:Lex, false)
12
12
 
13
13
  MEMORY_KEY = 'teams_bot_subscriptions'
14
14
 
@@ -10,8 +10,8 @@ module Legion
10
10
  module MicrosoftTeams
11
11
  module Helpers
12
12
  class TokenCache
13
- include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) &&
14
- Legion::Extensions::Helpers.const_defined?(:Lex)
13
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
14
+ Legion::Extensions::Helpers.const_defined?(:Lex, false)
15
15
 
16
16
  REFRESH_BUFFER = 60
17
17
  DEFAULT_LOCAL_DIR = File.join(Dir.home, '.legionio', 'tokens')
@@ -274,7 +274,7 @@ module Legion
274
274
  settings = teams_auth_settings
275
275
  delegated = settings[:delegated]
276
276
  custom = delegated[:vault_path] if delegated.is_a?(Hash)
277
- custom || "#{ENV.fetch('USER', 'default')}/microsoft_teams/delegated_token"
277
+ custom || "users/#{ENV.fetch('USER', 'default')}/microsoft_teams/delegated_token"
278
278
  end
279
279
 
280
280
  def local_token_path
@@ -50,8 +50,8 @@ module Legion
50
50
  }
51
51
  end
52
52
 
53
- include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) &&
54
- Legion::Extensions::Helpers.const_defined?(:Lex)
53
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
54
+ Legion::Extensions::Helpers.const_defined?(:Lex, false)
55
55
  end
56
56
  end
57
57
  end
@@ -39,8 +39,8 @@ module Legion
39
39
  { result: response.body }
40
40
  end
41
41
 
42
- include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) &&
43
- Legion::Extensions::Helpers.const_defined?(:Lex)
42
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
43
+ Legion::Extensions::Helpers.const_defined?(:Lex, false)
44
44
  end
45
45
  end
46
46
  end
@@ -101,8 +101,8 @@ module Legion
101
101
  { result: { stored: stored || 0, skipped: skipped || 0, error: e.message } }
102
102
  end
103
103
 
104
- include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) &&
105
- Legion::Extensions::Helpers.const_defined?(:Lex)
104
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
105
+ Legion::Extensions::Helpers.const_defined?(:Lex, false)
106
106
 
107
107
  MAX_CHAT_PAGES = 10
108
108
 
@@ -136,8 +136,8 @@ module Legion
136
136
  HTML
137
137
  end
138
138
 
139
- include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) &&
140
- Legion::Extensions::Helpers.const_defined?(:Lex)
139
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
140
+ Legion::Extensions::Helpers.const_defined?(:Lex, false)
141
141
  end
142
142
  end
143
143
  end
@@ -417,8 +417,8 @@ module Legion
417
417
  nil
418
418
  end
419
419
 
420
- include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) &&
421
- Legion::Extensions::Helpers.const_defined?(:Lex)
420
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
421
+ Legion::Extensions::Helpers.const_defined?(:Lex, false)
422
422
  end
423
423
  end
424
424
  end
@@ -47,8 +47,8 @@ module Legion
47
47
  { result: { stored: stored, skipped: skipped, latest_time: latest_time } }
48
48
  end
49
49
 
50
- include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) &&
51
- Legion::Extensions::Helpers.const_defined?(:Lex)
50
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
51
+ Legion::Extensions::Helpers.const_defined?(:Lex, false)
52
52
 
53
53
  private
54
54
 
@@ -43,8 +43,8 @@ module Legion
43
43
  { result: response.body }
44
44
  end
45
45
 
46
- include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) &&
47
- Legion::Extensions::Helpers.const_defined?(:Lex)
46
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
47
+ Legion::Extensions::Helpers.const_defined?(:Lex, false)
48
48
  end
49
49
  end
50
50
  end
@@ -44,8 +44,8 @@ module Legion
44
44
  { result: response.body }
45
45
  end
46
46
 
47
- include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) &&
48
- Legion::Extensions::Helpers.const_defined?(:Lex)
47
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
48
+ Legion::Extensions::Helpers.const_defined?(:Lex, false)
49
49
  end
50
50
  end
51
51
  end
@@ -42,8 +42,8 @@ module Legion
42
42
  { result: response.body }
43
43
  end
44
44
 
45
- include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) &&
46
- Legion::Extensions::Helpers.const_defined?(:Lex)
45
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
46
+ Legion::Extensions::Helpers.const_defined?(:Lex, false)
47
47
  end
48
48
  end
49
49
  end
@@ -34,8 +34,8 @@ module Legion
34
34
  { result: extractor.stats }
35
35
  end
36
36
 
37
- include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) &&
38
- Legion::Extensions::Helpers.const_defined?(:Lex)
37
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
38
+ Legion::Extensions::Helpers.const_defined?(:Lex, false)
39
39
 
40
40
  private
41
41
 
@@ -59,8 +59,8 @@ module Legion
59
59
  { result: response.body }
60
60
  end
61
61
 
62
- include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) &&
63
- Legion::Extensions::Helpers.const_defined?(:Lex)
62
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
63
+ Legion::Extensions::Helpers.const_defined?(:Lex, false)
64
64
  end
65
65
  end
66
66
  end
@@ -39,8 +39,8 @@ module Legion
39
39
  { result: response.body }
40
40
  end
41
41
 
42
- include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) &&
43
- Legion::Extensions::Helpers.const_defined?(:Lex)
42
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
43
+ Legion::Extensions::Helpers.const_defined?(:Lex, false)
44
44
  end
45
45
  end
46
46
  end
@@ -66,8 +66,8 @@ module Legion
66
66
  (resp.body || {}).fetch('value', [])
67
67
  end
68
68
 
69
- include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) &&
70
- Legion::Extensions::Helpers.const_defined?(:Lex)
69
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
70
+ Legion::Extensions::Helpers.const_defined?(:Lex, false)
71
71
  end
72
72
  end
73
73
  end
@@ -24,8 +24,8 @@ module Legion
24
24
  { error: e.message }
25
25
  end
26
26
 
27
- include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) &&
28
- Legion::Extensions::Helpers.const_defined?(:Lex)
27
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
28
+ Legion::Extensions::Helpers.const_defined?(:Lex, false)
29
29
  end
30
30
  end
31
31
  end
@@ -22,8 +22,8 @@ module Legion
22
22
  { availability: 'Offline', activity: 'OffWork', error: e.message, fetched_at: Time.now.utc }
23
23
  end
24
24
 
25
- include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) &&
26
- Legion::Extensions::Helpers.const_defined?(:Lex)
25
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
26
+ Legion::Extensions::Helpers.const_defined?(:Lex, false)
27
27
  end
28
28
  end
29
29
  end
@@ -67,8 +67,8 @@ module Legion
67
67
  )
68
68
  end
69
69
 
70
- include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) &&
71
- Legion::Extensions::Helpers.const_defined?(:Lex)
70
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
71
+ Legion::Extensions::Helpers.const_defined?(:Lex, false)
72
72
  end
73
73
  end
74
74
  end
@@ -24,8 +24,8 @@ module Legion
24
24
  { result: response.body }
25
25
  end
26
26
 
27
- include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) &&
28
- Legion::Extensions::Helpers.const_defined?(:Lex)
27
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
28
+ Legion::Extensions::Helpers.const_defined?(:Lex, false)
29
29
  end
30
30
  end
31
31
  end
@@ -36,8 +36,8 @@ module Legion
36
36
  { result: response.body }
37
37
  end
38
38
 
39
- include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) &&
40
- Legion::Extensions::Helpers.const_defined?(:Lex)
39
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
40
+ Legion::Extensions::Helpers.const_defined?(:Lex, false)
41
41
  end
42
42
  end
43
43
  end
@@ -3,7 +3,7 @@
3
3
  module Legion
4
4
  module Extensions
5
5
  module MicrosoftTeams
6
- VERSION = '0.6.18'
6
+ VERSION = '0.6.19'
7
7
  end
8
8
  end
9
9
  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.18
4
+ version: 0.6.19
5
5
  platform: ruby
6
6
  authors:
7
7
  - Esity