legion-gaia 0.9.8 → 0.9.9
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 +14 -0
- data/CLAUDE.md +1 -1
- data/CODEOWNERS +39 -0
- data/README.md +1 -1
- data/lib/legion/gaia/channels/slack_adapter.rb +1 -0
- data/lib/legion/gaia/channels/teams/bot_framework_auth.rb +4 -1
- data/lib/legion/gaia/channels/teams/webhook_handler.rb +2 -1
- data/lib/legion/gaia/channels/teams_adapter.rb +3 -0
- data/lib/legion/gaia/offline_handler.rb +6 -2
- data/lib/legion/gaia/proactive.rb +10 -0
- data/lib/legion/gaia/router/agent_bridge.rb +4 -2
- data/lib/legion/gaia/router/router_bridge.rb +4 -1
- data/lib/legion/gaia/teams_auth.rb +4 -2
- data/lib/legion/gaia/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 902acd94f954e110a3d849d1f8f468c9c1ba1103296f2642bbb9d7153a705017
|
|
4
|
+
data.tar.gz: b0b6be88e1607903a819f1aaacb6b569a634186ae0f7b92f740e51c7cddc3d7a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a907f2b49285aeda659940feaa7bbfa350402873962116144462ed4363944b6cb0bb741f96f9d65c08bd157a0871ad7da0fe10b561c1eb32b22c2c7fd4bb7119
|
|
7
|
+
data.tar.gz: 0e4d3df947071ef1c37bbe5cd5c56c1365990ac5b87f0edac81c20b45898a749419186318ee356122bd0ef7f3a25e198594a47f9ff90e8732f082e1e7d66483d
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.9.9] - 2026-03-22
|
|
4
|
+
|
|
5
|
+
### Changed
|
|
6
|
+
- Added `Legion::Logging` calls to all silent rescue blocks (16 total) so no exception is swallowed without a trace
|
|
7
|
+
- `channels/slack_adapter.rb`: `.warn` on open_dm failure
|
|
8
|
+
- `channels/teams/bot_framework_auth.rb`: `.debug` on JWT segment decode failure (expected for malformed tokens)
|
|
9
|
+
- `channels/teams/webhook_handler.rb`: `.debug` on activity parse failure
|
|
10
|
+
- `channels/teams_adapter.rb`: `.warn` on create_proactive_conversation failure
|
|
11
|
+
- `offline_handler.rb`: `.warn` on notify_sender failure, `.debug` on offline_threshold settings failure
|
|
12
|
+
- `proactive.rb`: `.warn` on send_message, send_to_user, send_notification, and start_conversation failures
|
|
13
|
+
- `router/agent_bridge.rb`: `.warn` on reconstruct_input_frame and decode_payload failures
|
|
14
|
+
- `router/router_bridge.rb`: `.warn` on reconstruct_output_frame failure
|
|
15
|
+
- `teams_auth.rb`: `.warn` on check_teams_auth and teams_authenticated? failures
|
|
16
|
+
|
|
3
17
|
## [0.9.8] - 2026-03-21
|
|
4
18
|
|
|
5
19
|
### Fixed
|
data/CLAUDE.md
CHANGED
data/CODEOWNERS
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Default owner — all files
|
|
2
|
+
* @Esity
|
|
3
|
+
|
|
4
|
+
# Core library code
|
|
5
|
+
# lib/ @Esity @future-ai-team
|
|
6
|
+
|
|
7
|
+
# Tick cycle phases
|
|
8
|
+
# lib/legion/gaia/phases/ @Esity
|
|
9
|
+
|
|
10
|
+
# Channel abstraction
|
|
11
|
+
# lib/legion/gaia/channels/ @Esity
|
|
12
|
+
|
|
13
|
+
# Actors (heartbeat tick driver)
|
|
14
|
+
# lib/legion/gaia/actors/ @Esity @future-ai-team
|
|
15
|
+
|
|
16
|
+
# Router (hub-and-spoke, transport)
|
|
17
|
+
# lib/legion/gaia/router/ @Esity @future-infra-team
|
|
18
|
+
|
|
19
|
+
# Notification gate (schedule, presence, behavioral evaluators)
|
|
20
|
+
# lib/legion/gaia/notification_gate/ @Esity @future-ai-team
|
|
21
|
+
# lib/legion/gaia/notification_gate.rb @Esity @future-ai-team
|
|
22
|
+
|
|
23
|
+
# Session and registry
|
|
24
|
+
# lib/legion/gaia/registry.rb @Esity @future-ai-team
|
|
25
|
+
# lib/legion/gaia/session_store.rb @Esity @future-ai-team
|
|
26
|
+
|
|
27
|
+
# Sensory buffer and frame types
|
|
28
|
+
# lib/legion/gaia/sensory_buffer.rb @Esity @future-ai-team
|
|
29
|
+
# lib/legion/gaia/input_frame.rb @Esity @future-ai-team
|
|
30
|
+
# lib/legion/gaia/output_frame.rb @Esity @future-ai-team
|
|
31
|
+
|
|
32
|
+
# Specs
|
|
33
|
+
# spec/ @Esity @future-contributors
|
|
34
|
+
|
|
35
|
+
# Documentation
|
|
36
|
+
# *.md @Esity @future-docs-team
|
|
37
|
+
|
|
38
|
+
# CI/CD
|
|
39
|
+
# .github/ @Esity
|
data/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Cognitive coordination layer for the LegionIO framework. GAIA is the mind that inhabits the Legion body.
|
|
4
4
|
|
|
5
|
-
**Version**: 0.9.
|
|
5
|
+
**Version**: 0.9.8
|
|
6
6
|
|
|
7
7
|
GAIA sits on top of LegionIO's infrastructure and coordinates all agentic subordinate functions. It drives the tick cycle, manages extension discovery and wiring, and provides the channel abstraction for multi-interface communication.
|
|
8
8
|
|
|
@@ -74,6 +74,7 @@ module Legion
|
|
|
74
74
|
|
|
75
75
|
{ channel_id: result[:channel_id] || result['channel']&.dig('id') || result['channel'] }
|
|
76
76
|
rescue StandardError => e
|
|
77
|
+
Legion::Logging.warn("SlackAdapter open_dm failed: #{e.message}") if defined?(Legion::Logging)
|
|
77
78
|
{ error: :open_dm_failed, message: e.message }
|
|
78
79
|
end
|
|
79
80
|
|
|
@@ -65,7 +65,10 @@ module Legion
|
|
|
65
65
|
padded = remainder.zero? ? segment : segment + ('=' * (4 - remainder))
|
|
66
66
|
decoded = Base64.urlsafe_decode64(padded)
|
|
67
67
|
::JSON.parse(decoded)
|
|
68
|
-
rescue StandardError
|
|
68
|
+
rescue StandardError => e
|
|
69
|
+
if defined?(Legion::Logging)
|
|
70
|
+
Legion::Logging.debug("BotFrameworkAuth JWT segment decode failed: #{e.message}")
|
|
71
|
+
end
|
|
69
72
|
nil
|
|
70
73
|
end
|
|
71
74
|
|
|
@@ -98,6 +98,9 @@ module Legion
|
|
|
98
98
|
)
|
|
99
99
|
conversation_id
|
|
100
100
|
rescue StandardError => e
|
|
101
|
+
if defined?(Legion::Logging)
|
|
102
|
+
Legion::Logging.warn("TeamsAdapter create_proactive_conversation failed: #{e.message}")
|
|
103
|
+
end
|
|
101
104
|
{ error: :create_conversation_failed, message: e.message }
|
|
102
105
|
end
|
|
103
106
|
|
|
@@ -56,7 +56,8 @@ module Legion
|
|
|
56
56
|
session_continuity_id: frame.respond_to?(:session_continuity_id) ? frame.session_continuity_id : nil
|
|
57
57
|
)
|
|
58
58
|
registry.deliver(output)
|
|
59
|
-
rescue StandardError
|
|
59
|
+
rescue StandardError => e
|
|
60
|
+
Legion::Logging.warn("OfflineHandler notify_sender failed: #{e.message}") if defined?(Legion::Logging)
|
|
60
61
|
nil
|
|
61
62
|
end
|
|
62
63
|
|
|
@@ -66,7 +67,10 @@ module Legion
|
|
|
66
67
|
else
|
|
67
68
|
60
|
|
68
69
|
end
|
|
69
|
-
rescue StandardError
|
|
70
|
+
rescue StandardError => e
|
|
71
|
+
if defined?(Legion::Logging)
|
|
72
|
+
Legion::Logging.debug("OfflineHandler offline_threshold settings unavailable, using default: #{e.message}")
|
|
73
|
+
end
|
|
70
74
|
60
|
|
71
75
|
end
|
|
72
76
|
|
|
@@ -21,6 +21,9 @@ module Legion
|
|
|
21
21
|
registry.deliver(output)
|
|
22
22
|
{ sent: true, frame_id: output.id, channel: channel_id }
|
|
23
23
|
rescue StandardError => e
|
|
24
|
+
if defined?(Legion::Logging)
|
|
25
|
+
Legion::Logging.warn("Proactive.send_message failed channel=#{channel_id}: #{e.message}")
|
|
26
|
+
end
|
|
24
27
|
{ error: e.message }
|
|
25
28
|
end
|
|
26
29
|
|
|
@@ -45,6 +48,9 @@ module Legion
|
|
|
45
48
|
)
|
|
46
49
|
end
|
|
47
50
|
rescue StandardError => e
|
|
51
|
+
if defined?(Legion::Logging)
|
|
52
|
+
Legion::Logging.warn("Proactive.send_to_user failed user=#{user_id}: #{e.message}")
|
|
53
|
+
end
|
|
48
54
|
{ error: e.message }
|
|
49
55
|
end
|
|
50
56
|
|
|
@@ -72,6 +78,7 @@ module Legion
|
|
|
72
78
|
|
|
73
79
|
results
|
|
74
80
|
rescue StandardError => e
|
|
81
|
+
Legion::Logging.warn("Proactive.send_notification failed: #{e.message}") if defined?(Legion::Logging)
|
|
75
82
|
{ error: e.message }
|
|
76
83
|
end
|
|
77
84
|
|
|
@@ -97,6 +104,9 @@ module Legion
|
|
|
97
104
|
end
|
|
98
105
|
{ started: true, channel: channel_id, user_id: user_id }
|
|
99
106
|
rescue StandardError => e
|
|
107
|
+
if defined?(Legion::Logging)
|
|
108
|
+
Legion::Logging.warn("Proactive.start_conversation failed ch=#{channel_id} user=#{user_id}: #{e.message}")
|
|
109
|
+
end
|
|
100
110
|
{ error: e.message }
|
|
101
111
|
end
|
|
102
112
|
|
|
@@ -73,14 +73,16 @@ module Legion
|
|
|
73
73
|
auth_context: payload[:auth_context] || {},
|
|
74
74
|
metadata: payload[:metadata] || {}
|
|
75
75
|
)
|
|
76
|
-
rescue StandardError
|
|
76
|
+
rescue StandardError => e
|
|
77
|
+
Legion::Logging.warn("AgentBridge reconstruct_input_frame failed: #{e.message}") if defined?(Legion::Logging)
|
|
77
78
|
nil
|
|
78
79
|
end
|
|
79
80
|
|
|
80
81
|
def decode_payload(raw)
|
|
81
82
|
parsed = Legion::JSON.load(raw)
|
|
82
83
|
parsed.is_a?(Hash) ? parsed : nil
|
|
83
|
-
rescue StandardError
|
|
84
|
+
rescue StandardError => e
|
|
85
|
+
Legion::Logging.warn("AgentBridge decode_payload failed: #{e.message}") if defined?(Legion::Logging)
|
|
84
86
|
nil
|
|
85
87
|
end
|
|
86
88
|
|
|
@@ -93,7 +93,10 @@ module Legion
|
|
|
93
93
|
channel_hints: payload[:channel_hints] || {},
|
|
94
94
|
metadata: payload[:metadata] || {}
|
|
95
95
|
)
|
|
96
|
-
rescue StandardError
|
|
96
|
+
rescue StandardError => e
|
|
97
|
+
if defined?(Legion::Logging)
|
|
98
|
+
Legion::Logging.warn("RouterBridge reconstruct_output_frame failed: #{e.message}")
|
|
99
|
+
end
|
|
97
100
|
nil
|
|
98
101
|
end
|
|
99
102
|
|
|
@@ -16,7 +16,8 @@ module Legion
|
|
|
16
16
|
content_type: :text
|
|
17
17
|
)
|
|
18
18
|
@teams_nudge_sent = true
|
|
19
|
-
rescue StandardError
|
|
19
|
+
rescue StandardError => e
|
|
20
|
+
Legion::Logging.warn("TeamsAuth check_teams_auth failed: #{e.message}") if defined?(Legion::Logging)
|
|
20
21
|
nil
|
|
21
22
|
end
|
|
22
23
|
|
|
@@ -35,7 +36,8 @@ module Legion
|
|
|
35
36
|
return false unless defined?(Legion::Extensions::MicrosoftTeams::Helpers::TokenCache)
|
|
36
37
|
|
|
37
38
|
Legion::Extensions::MicrosoftTeams::Helpers::TokenCache.new.authenticated?
|
|
38
|
-
rescue StandardError
|
|
39
|
+
rescue StandardError => e
|
|
40
|
+
Legion::Logging.warn("TeamsAuth teams_authenticated? failed: #{e.message}") if defined?(Legion::Logging)
|
|
39
41
|
false
|
|
40
42
|
end
|
|
41
43
|
end
|
data/lib/legion/gaia/version.rb
CHANGED
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.
|
|
4
|
+
version: 0.9.9
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Esity
|
|
@@ -279,6 +279,7 @@ files:
|
|
|
279
279
|
- ".rubocop.yml"
|
|
280
280
|
- CHANGELOG.md
|
|
281
281
|
- CLAUDE.md
|
|
282
|
+
- CODEOWNERS
|
|
282
283
|
- Gemfile
|
|
283
284
|
- LICENSE
|
|
284
285
|
- README.md
|