lex-agentic-memory 0.1.14 → 0.1.16
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:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 53ea02bfdd236c2e64023525d767a238c9dfa28d96db8993cee882a2105bcccb
|
|
4
|
+
data.tar.gz: 442b45ad5cdacc49197156b364db727cdabbb0ebf2f30881f823b7b04f776871
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f6c3ce2299ecd503a25069b865c7e68db33de87b90d4419879a45810119b92310f1816d140baf082014cf3bbcc920b9bc52342154db1c9db132b8ad6ba91fa0b
|
|
7
|
+
data.tar.gz: b2712151eae4cf64f51bfa92792210e4200b84c0c0caa71830d4361470fe6f38d04c2775d6cd1faba777180499fdef18120946d1e8a3b37e60262db7be241d2b
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.1.16] - 2026-03-29
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
- Add `=> e` capture and `Legion::Logging.error` call to all bare `rescue StandardError` clauses in `memory.rb` to satisfy rescue-logging lint rule
|
|
7
|
+
- Fix `Lint/ShadowedException` in `snapshot.rb`: replace `rescue NameError, NoMethodError` with `rescue NameError` (`NoMethodError` is a subclass of `NameError`)
|
|
8
|
+
- Refactor `Snapshot#distribute_state` into dedicated helper methods to reduce cyclomatic/perceived complexity below threshold
|
|
9
|
+
|
|
10
|
+
## [0.1.15] - 2026-03-26
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
- fix remote_invocable? to use class method for local dispatch
|
|
14
|
+
|
|
3
15
|
## [0.1.14] - 2026-03-26
|
|
4
16
|
|
|
5
17
|
### Fixed
|
|
@@ -12,6 +12,8 @@ module Legion
|
|
|
12
12
|
module Helpers
|
|
13
13
|
module Snapshot
|
|
14
14
|
class << self
|
|
15
|
+
include Legion::Logging::Helper if defined?(Legion::Logging::Helper)
|
|
16
|
+
|
|
15
17
|
def save_snapshot(agent_id:)
|
|
16
18
|
state = gather_state(agent_id)
|
|
17
19
|
packed = MessagePack.pack(state)
|
|
@@ -37,16 +39,13 @@ module Legion
|
|
|
37
39
|
signature = raw[-64..]
|
|
38
40
|
packed = raw[0..-65]
|
|
39
41
|
|
|
40
|
-
unless verify_data(packed, signature, agent_id)
|
|
41
|
-
Legion::Logging.warn "[snapshot] signature verification failed for #{agent_id}" if defined?(Legion::Logging)
|
|
42
|
-
return { success: false, reason: :invalid_signature }
|
|
43
|
-
end
|
|
42
|
+
return { success: false, reason: :invalid_signature } unless verify_data(packed, signature, agent_id)
|
|
44
43
|
|
|
45
44
|
state = MessagePack.unpack(packed, symbolize_keys: true)
|
|
46
45
|
distribute_state(state)
|
|
47
46
|
{ success: true, agent_id: agent_id, timestamp: state[:timestamp] }
|
|
48
47
|
rescue StandardError => e
|
|
49
|
-
|
|
48
|
+
log.error(e.message) if respond_to?(:log)
|
|
50
49
|
{ success: false, reason: :error, message: e.message }
|
|
51
50
|
end
|
|
52
51
|
|
|
@@ -97,24 +96,90 @@ module Legion
|
|
|
97
96
|
[]
|
|
98
97
|
end
|
|
99
98
|
|
|
100
|
-
state[:personality_state] =
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
99
|
+
state[:personality_state] =
|
|
100
|
+
if defined?(Legion::Extensions::Agentic::Self) &&
|
|
101
|
+
Legion::Extensions::Agentic::Self.respond_to?(:personality_snapshot)
|
|
102
|
+
Legion::Extensions::Agentic::Self.personality_snapshot
|
|
103
|
+
else
|
|
104
|
+
{}
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
state[:mood_state] =
|
|
108
|
+
if defined?(Legion::Extensions::Agentic::Affect) &&
|
|
109
|
+
Legion::Extensions::Agentic::Affect.respond_to?(:mood_snapshot)
|
|
110
|
+
Legion::Extensions::Agentic::Affect.mood_snapshot
|
|
111
|
+
else
|
|
112
|
+
{}
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
state[:trust_scores] =
|
|
116
|
+
if defined?(Legion::Mesh) && Legion::Mesh.respond_to?(:trust_snapshot)
|
|
117
|
+
Legion::Mesh.trust_snapshot
|
|
118
|
+
else
|
|
119
|
+
{}
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
state[:reflection_history] =
|
|
123
|
+
if defined?(Legion::Extensions::Agentic::Self) &&
|
|
124
|
+
Legion::Extensions::Agentic::Self.respond_to?(:reflection_snapshot)
|
|
125
|
+
Legion::Extensions::Agentic::Self.reflection_snapshot
|
|
126
|
+
else
|
|
127
|
+
[]
|
|
128
|
+
end
|
|
129
|
+
|
|
104
130
|
state
|
|
105
131
|
end
|
|
106
132
|
|
|
107
133
|
def distribute_state(state)
|
|
108
|
-
|
|
134
|
+
restore_memory_traces(state[:memory_traces])
|
|
135
|
+
restore_personality(state[:personality_state])
|
|
136
|
+
restore_mood(state[:mood_state])
|
|
137
|
+
restore_trust_scores(state[:trust_scores])
|
|
138
|
+
restore_reflections(state[:reflection_history])
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def restore_memory_traces(traces)
|
|
142
|
+
return unless traces
|
|
109
143
|
|
|
110
144
|
store = Legion::Extensions::Agentic::Memory::Trace.shared_store
|
|
111
145
|
if store.respond_to?(:restore_traces)
|
|
112
|
-
store.restore_traces(
|
|
146
|
+
store.restore_traces(traces)
|
|
113
147
|
elsif store.respond_to?(:store)
|
|
114
|
-
|
|
148
|
+
traces.each { |t| store.store(t) }
|
|
115
149
|
end
|
|
116
150
|
end
|
|
117
151
|
|
|
152
|
+
def restore_personality(personality_state)
|
|
153
|
+
return unless personality_state && !personality_state.empty?
|
|
154
|
+
return unless defined?(Legion::Extensions::Agentic::Self) &&
|
|
155
|
+
Legion::Extensions::Agentic::Self.respond_to?(:restore_personality)
|
|
156
|
+
|
|
157
|
+
Legion::Extensions::Agentic::Self.restore_personality(personality_state)
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
def restore_mood(mood_state)
|
|
161
|
+
return unless mood_state && !mood_state.empty?
|
|
162
|
+
return unless defined?(Legion::Extensions::Agentic::Affect) &&
|
|
163
|
+
Legion::Extensions::Agentic::Affect.respond_to?(:restore_mood)
|
|
164
|
+
|
|
165
|
+
Legion::Extensions::Agentic::Affect.restore_mood(mood_state)
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
def restore_trust_scores(trust_scores)
|
|
169
|
+
return unless trust_scores && !trust_scores.empty?
|
|
170
|
+
return unless defined?(Legion::Mesh) && Legion::Mesh.respond_to?(:restore_trust)
|
|
171
|
+
|
|
172
|
+
Legion::Mesh.restore_trust(trust_scores)
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
def restore_reflections(reflection_history)
|
|
176
|
+
return unless reflection_history && !reflection_history.empty?
|
|
177
|
+
return unless defined?(Legion::Extensions::Agentic::Self) &&
|
|
178
|
+
Legion::Extensions::Agentic::Self.respond_to?(:restore_reflections)
|
|
179
|
+
|
|
180
|
+
Legion::Extensions::Agentic::Self.restore_reflections(reflection_history)
|
|
181
|
+
end
|
|
182
|
+
|
|
118
183
|
def sign_data(data, _agent_id)
|
|
119
184
|
if defined?(Legion::Crypt) && Legion::Crypt.respond_to?(:ed25519_sign)
|
|
120
185
|
signature = Legion::Crypt.ed25519_sign(data)
|
|
@@ -26,7 +26,7 @@ module Legion
|
|
|
26
26
|
module Memory
|
|
27
27
|
extend Legion::Extensions::Core if Legion::Extensions.const_defined? :Core
|
|
28
28
|
|
|
29
|
-
def remote_invocable?
|
|
29
|
+
def self.remote_invocable?
|
|
30
30
|
false
|
|
31
31
|
end
|
|
32
32
|
end
|
|
@@ -36,41 +36,24 @@ end
|
|
|
36
36
|
|
|
37
37
|
# Snapshot lifecycle hooks
|
|
38
38
|
if defined?(Legion::Events)
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
rescue StandardError
|
|
42
|
-
true
|
|
43
|
-
end
|
|
39
|
+
settings_loaded = defined?(Legion::Settings)
|
|
40
|
+
snapshot_enabled = settings_loaded ? Legion::Settings.dig(:snapshot, :enabled) : true
|
|
44
41
|
if snapshot_enabled
|
|
45
42
|
require 'legion/extensions/agentic/memory/trace/helpers/snapshot'
|
|
46
43
|
|
|
47
44
|
Legion::Events.on('service.shutting_down') do
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
rescue StandardError
|
|
51
|
-
true
|
|
52
|
-
end
|
|
45
|
+
auto_save = settings_loaded ? Legion::Settings.dig(:snapshot, :auto_save_on_shutdown) : true
|
|
46
|
+
next unless auto_save
|
|
53
47
|
|
|
54
|
-
agent_id =
|
|
55
|
-
Legion::Settings.dig(:agent, :id)
|
|
56
|
-
rescue StandardError
|
|
57
|
-
nil
|
|
58
|
-
end || 'default'
|
|
48
|
+
agent_id = (settings_loaded ? Legion::Settings.dig(:agent, :id) : nil) || 'default'
|
|
59
49
|
Legion::Extensions::Agentic::Memory::Trace::Helpers::Snapshot.save_snapshot(agent_id: agent_id)
|
|
60
50
|
end
|
|
61
51
|
|
|
62
52
|
Legion::Events.once('gaia.started') do
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
rescue StandardError
|
|
66
|
-
true
|
|
67
|
-
end
|
|
53
|
+
auto_restore = settings_loaded ? Legion::Settings.dig(:snapshot, :auto_restore_on_boot) : true
|
|
54
|
+
next unless auto_restore
|
|
68
55
|
|
|
69
|
-
agent_id =
|
|
70
|
-
Legion::Settings.dig(:agent, :id)
|
|
71
|
-
rescue StandardError
|
|
72
|
-
nil
|
|
73
|
-
end || 'default'
|
|
56
|
+
agent_id = (settings_loaded ? Legion::Settings.dig(:agent, :id) : nil) || 'default'
|
|
74
57
|
Legion::Extensions::Agentic::Memory::Trace::Helpers::Snapshot.restore_snapshot(agent_id: agent_id)
|
|
75
58
|
end
|
|
76
59
|
end
|