lex-agentic-self 0.1.1 → 0.1.2
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 +7 -0
- data/lex-agentic-self.gemspec +8 -0
- data/lib/legion/extensions/agentic/self/agency/runners/agency.rb +7 -7
- data/lib/legion/extensions/agentic/self/anosognosia/runners/anosognosia.rb +6 -6
- data/lib/legion/extensions/agentic/self/default_mode_network/runners/default_mode_network.rb +17 -17
- data/lib/legion/extensions/agentic/self/fingerprint/runners/cognitive_fingerprint.rb +7 -7
- data/lib/legion/extensions/agentic/self/identity/runners/identity.rb +8 -8
- data/lib/legion/extensions/agentic/self/metacognition/runners/metacognition.rb +1 -1
- data/lib/legion/extensions/agentic/self/metacognitive_monitoring/runners/metacognitive_monitoring.rb +11 -11
- data/lib/legion/extensions/agentic/self/narrative_arc/runners/narrative.rb +9 -9
- data/lib/legion/extensions/agentic/self/narrative_identity/runners/narrative_identity.rb +15 -15
- data/lib/legion/extensions/agentic/self/narrative_self/runners/narrative_self.rb +4 -4
- data/lib/legion/extensions/agentic/self/reflection/runners/reflection.rb +4 -4
- data/lib/legion/extensions/agentic/self/self_talk/runners/self_talk.rb +11 -11
- data/lib/legion/extensions/agentic/self/version.rb +1 -1
- data/spec/spec_helper.rb +22 -17
- metadata +99 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d6f70c0d4f4103f54bad7fef2c99d4b69bdb52cf2289ae6c6a0fb950a4a92e94
|
|
4
|
+
data.tar.gz: 6994754e9d482e805d84a0e1a8aa9d6fbc8c19a17d895e726b9cb6b8d285898e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 57fffa818bf0c0c4f2c1bdebb7b1f11398b7f2add208524758cd636e81cb018c2c71dcf1a62ae052bfedac787825a394fa51a5313ed1781b88cbeb49441c8761
|
|
7
|
+
data.tar.gz: fa477164492c0681ef13f970f166085db17825cef78f3cc9a68be0c10f823a278035607c4696ebbad50ee3857fafbe120411e74b3decd52a9678395409ffe710
|
data/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [0.1.2] - 2026-03-22
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
- Add legion-cache, legion-crypt, legion-data, legion-json, legion-logging, legion-settings, legion-transport as runtime dependencies
|
|
9
|
+
- Replace direct Legion::Logging calls with injected log helper in all runners that include Helpers::Lex
|
|
10
|
+
- Update spec_helper with real sub-gem helper stubs replacing hand-rolled Legion::Logging and Helpers::Lex stubs
|
|
11
|
+
|
|
5
12
|
## [0.1.1] - 2026-03-18
|
|
6
13
|
|
|
7
14
|
### Changed
|
data/lex-agentic-self.gemspec
CHANGED
|
@@ -24,6 +24,14 @@ Gem::Specification.new do |spec|
|
|
|
24
24
|
end
|
|
25
25
|
spec.require_paths = ['lib']
|
|
26
26
|
|
|
27
|
+
spec.add_dependency 'legion-cache', '>= 1.3.11'
|
|
28
|
+
spec.add_dependency 'legion-crypt', '>= 1.4.9'
|
|
29
|
+
spec.add_dependency 'legion-data', '>= 1.4.17'
|
|
30
|
+
spec.add_dependency 'legion-json', '>= 1.2.1'
|
|
31
|
+
spec.add_dependency 'legion-logging', '>= 1.3.2'
|
|
32
|
+
spec.add_dependency 'legion-settings', '>= 1.3.14'
|
|
33
|
+
spec.add_dependency 'legion-transport', '>= 1.3.9'
|
|
34
|
+
|
|
27
35
|
spec.add_development_dependency 'faraday', '~> 2.0'
|
|
28
36
|
spec.add_development_dependency 'rspec', '~> 3.13'
|
|
29
37
|
spec.add_development_dependency 'rubocop', '~> 1.60'
|
|
@@ -19,8 +19,8 @@ module Legion
|
|
|
19
19
|
magnitude: magnitude, attribution: attribution
|
|
20
20
|
)
|
|
21
21
|
efficacy_model.record_outcome(event)
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
log.debug "[agency] mastery #{outcome_type} in #{domain} " \
|
|
23
|
+
"efficacy=#{efficacy_model.efficacy_for(domain).round(4)}"
|
|
24
24
|
{ success: true, event: event.to_h, efficacy: efficacy_model.efficacy_for(domain).round(4) }
|
|
25
25
|
end
|
|
26
26
|
|
|
@@ -30,7 +30,7 @@ module Legion
|
|
|
30
30
|
magnitude: magnitude, attribution: :partial_agency
|
|
31
31
|
)
|
|
32
32
|
efficacy_model.record_outcome(event)
|
|
33
|
-
|
|
33
|
+
log.debug "[agency] vicarious #{outcome_type} in #{domain}"
|
|
34
34
|
{ success: true, event: event.to_h, efficacy: efficacy_model.efficacy_for(domain).round(4) }
|
|
35
35
|
end
|
|
36
36
|
|
|
@@ -41,7 +41,7 @@ module Legion
|
|
|
41
41
|
magnitude: magnitude, attribution: :partial_agency
|
|
42
42
|
)
|
|
43
43
|
efficacy_model.record_outcome(event)
|
|
44
|
-
|
|
44
|
+
log.debug "[agency] persuasion #{positive ? 'positive' : 'negative'} in #{domain}"
|
|
45
45
|
{ success: true, event: event.to_h, efficacy: efficacy_model.efficacy_for(domain).round(4) }
|
|
46
46
|
end
|
|
47
47
|
|
|
@@ -53,14 +53,14 @@ module Legion
|
|
|
53
53
|
magnitude: magnitude, attribution: :low_agency
|
|
54
54
|
)
|
|
55
55
|
efficacy_model.record_outcome(event)
|
|
56
|
-
|
|
56
|
+
log.debug "[agency] physiological #{state} in #{domain}"
|
|
57
57
|
{ success: true, event: event.to_h, efficacy: efficacy_model.efficacy_for(domain).round(4) }
|
|
58
58
|
end
|
|
59
59
|
|
|
60
60
|
def update_agency(**)
|
|
61
61
|
efficacy_model.decay_all
|
|
62
|
-
|
|
63
|
-
|
|
62
|
+
log.debug "[agency] tick: domains=#{efficacy_model.domain_count} " \
|
|
63
|
+
"overall=#{efficacy_model.overall_efficacy.round(4)}"
|
|
64
64
|
{ success: true, stats: efficacy_model.to_h }
|
|
65
65
|
end
|
|
66
66
|
|
|
@@ -30,18 +30,18 @@ module Legion
|
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
def acknowledge_deficit(deficit_id:, **)
|
|
33
|
-
|
|
33
|
+
log.debug "[anosognosia] acknowledge_deficit: id=#{deficit_id}"
|
|
34
34
|
engine.acknowledge_deficit(deficit_id: deficit_id)
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
def reveal_blind_spot(deficit_id:, **)
|
|
38
|
-
|
|
38
|
+
log.info "[anosognosia] reveal_blind_spot: id=#{deficit_id}"
|
|
39
39
|
engine.reveal_blind_spot(deficit_id: deficit_id)
|
|
40
40
|
end
|
|
41
41
|
|
|
42
42
|
def awareness_score(**)
|
|
43
43
|
score = engine.awareness_score
|
|
44
|
-
|
|
44
|
+
log.debug "[anosognosia] awareness_score: score=#{score.round(2)}"
|
|
45
45
|
{
|
|
46
46
|
awareness_score: score.round(10),
|
|
47
47
|
awareness_gap: engine.awareness_gap,
|
|
@@ -51,18 +51,18 @@ module Legion
|
|
|
51
51
|
|
|
52
52
|
def awareness_gap(**)
|
|
53
53
|
gap = engine.awareness_gap
|
|
54
|
-
|
|
54
|
+
log.debug "[anosognosia] awareness_gap: gap=#{gap.round(2)}"
|
|
55
55
|
{ awareness_gap: gap, awareness_score: engine.awareness_score.round(10) }
|
|
56
56
|
end
|
|
57
57
|
|
|
58
58
|
def blind_spots(**)
|
|
59
59
|
spots = engine.blind_spots
|
|
60
|
-
|
|
60
|
+
log.debug "[anosognosia] blind_spots: count=#{spots.size}"
|
|
61
61
|
{ blind_spots: spots.map(&:to_h), count: spots.size }
|
|
62
62
|
end
|
|
63
63
|
|
|
64
64
|
def calibration_report(**)
|
|
65
|
-
|
|
65
|
+
log.info '[anosognosia] calibration_report requested'
|
|
66
66
|
engine.calibration_report
|
|
67
67
|
end
|
|
68
68
|
|
data/lib/legion/extensions/agentic/self/default_mode_network/runners/default_mode_network.rb
CHANGED
|
@@ -11,7 +11,7 @@ module Legion
|
|
|
11
11
|
Legion::Extensions::Helpers.const_defined?(:Lex)
|
|
12
12
|
|
|
13
13
|
def register_external_stimulus(source: nil, **)
|
|
14
|
-
|
|
14
|
+
log.debug "[dmn] register_stimulus: source=#{source}"
|
|
15
15
|
result = dmn_engine.register_stimulus(source: source)
|
|
16
16
|
{
|
|
17
17
|
success: true,
|
|
@@ -22,53 +22,53 @@ module Legion
|
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
def generate_idle_thought(**)
|
|
25
|
-
|
|
25
|
+
log.debug "[dmn] generate_idle_thought: mode=#{dmn_engine.mode}"
|
|
26
26
|
thought = dmn_engine.generate_thought
|
|
27
|
-
|
|
27
|
+
log.debug "[dmn] thought_generated: type=#{thought.thought_type} salience=#{thought.salience.round(2)} label=#{thought.label}"
|
|
28
28
|
{ success: true, thought: thought.to_h }
|
|
29
29
|
end
|
|
30
30
|
|
|
31
31
|
def trigger_self_reflection(**)
|
|
32
|
-
|
|
32
|
+
log.debug '[dmn] trigger_self_reflection'
|
|
33
33
|
thought = dmn_engine.self_reflect
|
|
34
34
|
dmn_engine.send(:store_thought, thought)
|
|
35
|
-
|
|
35
|
+
log.debug "[dmn] self_reflect: topic=#{thought.seed} salience=#{thought.salience.round(2)}"
|
|
36
36
|
{ success: true, thought: thought.to_h }
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
def trigger_social_replay(interaction: nil, **)
|
|
40
|
-
|
|
40
|
+
log.debug "[dmn] trigger_social_replay: interaction=#{interaction}"
|
|
41
41
|
thought = dmn_engine.social_replay(interaction: interaction)
|
|
42
42
|
dmn_engine.send(:store_thought, thought)
|
|
43
|
-
|
|
43
|
+
log.debug "[dmn] social_replay: seed=#{thought.seed} salience=#{thought.salience.round(2)}"
|
|
44
44
|
{ success: true, thought: thought.to_h }
|
|
45
45
|
end
|
|
46
46
|
|
|
47
47
|
def trigger_spontaneous_plan(goal: nil, **)
|
|
48
|
-
|
|
48
|
+
log.debug "[dmn] trigger_spontaneous_plan: goal=#{goal}"
|
|
49
49
|
thought = dmn_engine.plan_spontaneously(goal: goal)
|
|
50
50
|
dmn_engine.send(:store_thought, thought)
|
|
51
|
-
|
|
51
|
+
log.debug "[dmn] spontaneous_plan: goal=#{thought.seed} salience=#{thought.salience.round(2)}"
|
|
52
52
|
{ success: true, thought: thought.to_h }
|
|
53
53
|
end
|
|
54
54
|
|
|
55
55
|
def trigger_wandering(seed: nil, **)
|
|
56
|
-
|
|
56
|
+
log.debug "[dmn] trigger_wandering: seed=#{seed}"
|
|
57
57
|
thought = dmn_engine.wander(seed: seed)
|
|
58
58
|
dmn_engine.send(:store_thought, thought)
|
|
59
|
-
|
|
59
|
+
log.debug "[dmn] wandering: seed=#{thought.seed} chain_length=#{thought.association_chain.size}"
|
|
60
60
|
{ success: true, thought: thought.to_h }
|
|
61
61
|
end
|
|
62
62
|
|
|
63
63
|
def salient_thoughts(count: 5, **)
|
|
64
64
|
count = count.to_i
|
|
65
|
-
|
|
65
|
+
log.debug "[dmn] salient_thoughts: count=#{count}"
|
|
66
66
|
thoughts = dmn_engine.salient_thoughts(count: count)
|
|
67
67
|
{ success: true, thoughts: thoughts.map(&:to_h), count: thoughts.size }
|
|
68
68
|
end
|
|
69
69
|
|
|
70
70
|
def dmn_mode_status(**)
|
|
71
|
-
|
|
71
|
+
log.debug "[dmn] dmn_mode_status: mode=#{dmn_engine.mode}"
|
|
72
72
|
mode = dmn_engine.mode
|
|
73
73
|
mode_label = Helpers::Constants::ACTIVITY_LABELS[mode]
|
|
74
74
|
idle_secs = dmn_engine.idle_duration.round(2)
|
|
@@ -82,17 +82,17 @@ module Legion
|
|
|
82
82
|
end
|
|
83
83
|
|
|
84
84
|
def update_dmn(**)
|
|
85
|
-
|
|
85
|
+
log.debug '[dmn] update_dmn: tick'
|
|
86
86
|
tick_result = dmn_engine.tick_mode
|
|
87
87
|
faded_count = dmn_engine.decay_all
|
|
88
88
|
thought = nil
|
|
89
89
|
|
|
90
90
|
if %i[idle deep_idle].include?(dmn_engine.mode)
|
|
91
91
|
thought = dmn_engine.generate_thought
|
|
92
|
-
|
|
92
|
+
log.debug "[dmn] idle_thought: type=#{thought.thought_type} salience=#{thought.salience.round(2)}"
|
|
93
93
|
end
|
|
94
94
|
|
|
95
|
-
|
|
95
|
+
log.debug "[dmn] update_dmn: mode=#{tick_result[:current_mode]} faded=#{faded_count} thoughts=#{dmn_engine.thought_count}"
|
|
96
96
|
{
|
|
97
97
|
success: true,
|
|
98
98
|
mode: tick_result[:current_mode],
|
|
@@ -104,7 +104,7 @@ module Legion
|
|
|
104
104
|
end
|
|
105
105
|
|
|
106
106
|
def dmn_stats(**)
|
|
107
|
-
|
|
107
|
+
log.debug '[dmn] dmn_stats'
|
|
108
108
|
{ success: true, stats: dmn_engine.to_h }
|
|
109
109
|
end
|
|
110
110
|
|
|
@@ -13,8 +13,8 @@ module Legion
|
|
|
13
13
|
def record_observation(category:, value:, **)
|
|
14
14
|
category = category.to_sym
|
|
15
15
|
result = fingerprint_engine.record_observation(category: category, value: value.to_f)
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
log.debug "[cognitive_fingerprint] record category=#{category} " \
|
|
17
|
+
"baseline=#{result[:baseline]&.round(4)} samples=#{result[:samples]}"
|
|
18
18
|
result
|
|
19
19
|
end
|
|
20
20
|
|
|
@@ -23,16 +23,16 @@ module Legion
|
|
|
23
23
|
{ category: obs[:category].to_sym, value: obs[:value].to_f }
|
|
24
24
|
end
|
|
25
25
|
result = fingerprint_engine.verify_identity(observations: parsed)
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
log.info "[cognitive_fingerprint] verify score=#{result[:match_score]&.round(4)} " \
|
|
27
|
+
"verdict=#{result[:verdict]}"
|
|
28
28
|
result
|
|
29
29
|
end
|
|
30
30
|
|
|
31
31
|
def anomaly_check(category:, value:, **)
|
|
32
32
|
result = fingerprint_engine.anomaly_check(category: category.to_sym, value: value.to_f)
|
|
33
33
|
if result[:anomaly]
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
log.warn "[cognitive_fingerprint] anomaly category=#{category} " \
|
|
35
|
+
"deviation=#{result[:deviation]&.round(4)}"
|
|
36
36
|
end
|
|
37
37
|
result
|
|
38
38
|
end
|
|
@@ -52,7 +52,7 @@ module Legion
|
|
|
52
52
|
def identity_confidence(**)
|
|
53
53
|
confidence = fingerprint_engine.identity_confidence
|
|
54
54
|
label = fingerprint_engine.identity_label
|
|
55
|
-
|
|
55
|
+
log.debug "[cognitive_fingerprint] confidence=#{confidence.round(4)} label=#{label}"
|
|
56
56
|
{ confidence: confidence, label: label }
|
|
57
57
|
end
|
|
58
58
|
|
|
@@ -14,8 +14,8 @@ module Legion
|
|
|
14
14
|
fingerprint = identity_fingerprint
|
|
15
15
|
fingerprint.observe(dimension, value)
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
log.debug "[identity] observe: dim=#{dimension} val=#{value.round(2)} " \
|
|
18
|
+
"obs=#{fingerprint.observation_count} maturity=#{fingerprint.maturity}"
|
|
19
19
|
{
|
|
20
20
|
dimension: dimension,
|
|
21
21
|
recorded: true,
|
|
@@ -28,8 +28,8 @@ module Legion
|
|
|
28
28
|
fingerprint = identity_fingerprint
|
|
29
29
|
fingerprint.observe_all(observations)
|
|
30
30
|
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
log.debug "[identity] observe_all: dims=#{observations.keys.join(',')} " \
|
|
32
|
+
"obs=#{fingerprint.observation_count} maturity=#{fingerprint.maturity}"
|
|
33
33
|
{
|
|
34
34
|
dimensions_observed: observations.keys,
|
|
35
35
|
observation_count: fingerprint.observation_count,
|
|
@@ -54,13 +54,13 @@ module Legion
|
|
|
54
54
|
when :high_entropy
|
|
55
55
|
result[:warning] = :possible_impersonation_or_drift
|
|
56
56
|
result[:action] = :enter_caution_mode
|
|
57
|
-
|
|
57
|
+
log.warn "[identity] high entropy detected: #{entropy.round(3)} trend=#{trend} - possible impersonation"
|
|
58
58
|
when :low_entropy
|
|
59
59
|
result[:warning] = :possible_automation
|
|
60
60
|
result[:action] = :trigger_verification
|
|
61
|
-
|
|
61
|
+
log.warn "[identity] low entropy detected: #{entropy.round(3)} trend=#{trend} - possible automation"
|
|
62
62
|
else
|
|
63
|
-
|
|
63
|
+
log.debug "[identity] entropy check: #{entropy.round(3)} classification=#{classification} trend=#{trend}"
|
|
64
64
|
end
|
|
65
65
|
|
|
66
66
|
result
|
|
@@ -68,7 +68,7 @@ module Legion
|
|
|
68
68
|
|
|
69
69
|
def identity_status(**)
|
|
70
70
|
fingerprint = identity_fingerprint
|
|
71
|
-
|
|
71
|
+
log.debug "[identity] status: maturity=#{fingerprint.maturity} observations=#{fingerprint.observation_count}"
|
|
72
72
|
fingerprint.to_h
|
|
73
73
|
end
|
|
74
74
|
|
|
@@ -22,7 +22,7 @@ module Legion
|
|
|
22
22
|
snapshot_store.latest
|
|
23
23
|
end
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
log.debug "[metacognition] introspect: #{model.dig(:architecture, :loaded_count)} extensions loaded"
|
|
26
26
|
model
|
|
27
27
|
end
|
|
28
28
|
|
data/lib/legion/extensions/agentic/self/metacognitive_monitoring/runners/metacognitive_monitoring.rb
CHANGED
|
@@ -26,8 +26,8 @@ module Legion
|
|
|
26
26
|
effort: effort
|
|
27
27
|
)
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
log.debug "[metacognitive] record_judgment type=#{type_sym} domain=#{domain} " \
|
|
30
|
+
"confidence=#{judgment.predicted_confidence.round(2)} id=#{judgment.id[0..7]}"
|
|
31
31
|
|
|
32
32
|
{ success: true, judgment_id: judgment.id, judgment: judgment.to_h }
|
|
33
33
|
end
|
|
@@ -37,12 +37,12 @@ module Legion
|
|
|
37
37
|
judgment = eng.resolve_judgment(judgment_id: judgment_id, actual_outcome: actual_outcome)
|
|
38
38
|
|
|
39
39
|
unless judgment
|
|
40
|
-
|
|
40
|
+
log.debug "[metacognitive] resolve_judgment not_found id=#{judgment_id[0..7]}"
|
|
41
41
|
return { success: false, error: :not_found }
|
|
42
42
|
end
|
|
43
43
|
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
log.info "[metacognitive] resolved judgment=#{judgment_id[0..7]} " \
|
|
45
|
+
"error=#{judgment.calibration_error&.round(3)}"
|
|
46
46
|
|
|
47
47
|
{ success: true, judgment_id: judgment_id, judgment: judgment.to_h }
|
|
48
48
|
end
|
|
@@ -51,7 +51,7 @@ module Legion
|
|
|
51
51
|
eng = engine || monitoring_engine
|
|
52
52
|
judgment = eng.feeling_of_knowing(domain: domain, query: query)
|
|
53
53
|
|
|
54
|
-
|
|
54
|
+
log.debug "[metacognitive] fok domain=#{domain} confidence=#{judgment.predicted_confidence.round(2)}"
|
|
55
55
|
|
|
56
56
|
{
|
|
57
57
|
success: true,
|
|
@@ -66,7 +66,7 @@ module Legion
|
|
|
66
66
|
eng = engine || monitoring_engine
|
|
67
67
|
judgment = eng.judgment_of_learning(domain: domain, content: content)
|
|
68
68
|
|
|
69
|
-
|
|
69
|
+
log.debug "[metacognitive] jol domain=#{domain} confidence=#{judgment.predicted_confidence.round(2)}"
|
|
70
70
|
|
|
71
71
|
{
|
|
72
72
|
success: true,
|
|
@@ -81,7 +81,7 @@ module Legion
|
|
|
81
81
|
eng = engine || monitoring_engine
|
|
82
82
|
findings = eng.detect_overconfidence
|
|
83
83
|
|
|
84
|
-
|
|
84
|
+
log.debug "[metacognitive] overconfidence_scan count=#{findings.size}"
|
|
85
85
|
|
|
86
86
|
{
|
|
87
87
|
success: true,
|
|
@@ -94,7 +94,7 @@ module Legion
|
|
|
94
94
|
eng = engine || monitoring_engine
|
|
95
95
|
findings = eng.detect_underconfidence
|
|
96
96
|
|
|
97
|
-
|
|
97
|
+
log.debug "[metacognitive] underconfidence_scan count=#{findings.size}"
|
|
98
98
|
|
|
99
99
|
{
|
|
100
100
|
success: true,
|
|
@@ -107,7 +107,7 @@ module Legion
|
|
|
107
107
|
eng = engine || monitoring_engine
|
|
108
108
|
report = eng.calibration_report
|
|
109
109
|
|
|
110
|
-
|
|
110
|
+
log.debug "[metacognitive] calibration_report domains=#{report[:by_domain].size}"
|
|
111
111
|
|
|
112
112
|
{ success: true, report: report }
|
|
113
113
|
end
|
|
@@ -116,7 +116,7 @@ module Legion
|
|
|
116
116
|
eng = engine || monitoring_engine
|
|
117
117
|
report = eng.monitoring_report
|
|
118
118
|
|
|
119
|
-
|
|
119
|
+
log.debug "[metacognitive] monitoring_report total=#{report[:total_judgments]}"
|
|
120
120
|
|
|
121
121
|
{ success: true, report: report }
|
|
122
122
|
end
|
|
@@ -16,11 +16,11 @@ module Legion
|
|
|
16
16
|
arc = eng.create_arc(title: title, domain: domain, initial_tension: initial_tension)
|
|
17
17
|
|
|
18
18
|
unless arc
|
|
19
|
-
|
|
19
|
+
log.warn "[narrative_arc] create_arc failed: engine at capacity (#{Helpers::Constants::MAX_ARCS})"
|
|
20
20
|
return { success: false, reason: :engine_at_capacity }
|
|
21
21
|
end
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
log.debug "[narrative_arc] arc created: #{arc.arc_id[0..7]} title=#{title} domain=#{domain}"
|
|
24
24
|
{ success: true, arc_id: arc.arc_id, title: arc.title, arc_phase: arc.arc_phase,
|
|
25
25
|
tension_level: arc.tension_level }
|
|
26
26
|
end
|
|
@@ -39,11 +39,11 @@ module Legion
|
|
|
39
39
|
|
|
40
40
|
if result[:success]
|
|
41
41
|
arc = eng.get_arc(arc_id)
|
|
42
|
-
|
|
43
|
-
|
|
42
|
+
log.debug "[narrative_arc] beat added: arc=#{arc_id[0..7]} type=#{beat_type} " \
|
|
43
|
+
"phase=#{result[:arc_phase]} tension=#{result[:tension_level].round(2)}"
|
|
44
44
|
result[:dramatic_score] = arc.dramatic_score if arc
|
|
45
45
|
else
|
|
46
|
-
|
|
46
|
+
log.debug "[narrative_arc] add_beat failed: #{result[:reason]} arc=#{arc_id[0..7]}"
|
|
47
47
|
end
|
|
48
48
|
|
|
49
49
|
result
|
|
@@ -60,14 +60,14 @@ module Legion
|
|
|
60
60
|
def active_arcs(engine: nil, **)
|
|
61
61
|
eng = engine || arc_engine
|
|
62
62
|
arcs = eng.active_arcs
|
|
63
|
-
|
|
63
|
+
log.debug "[narrative_arc] active arcs count=#{arcs.size}"
|
|
64
64
|
{ arcs: arcs.map(&:to_h), count: arcs.size }
|
|
65
65
|
end
|
|
66
66
|
|
|
67
67
|
def completed_arcs(engine: nil, **)
|
|
68
68
|
eng = engine || arc_engine
|
|
69
69
|
arcs = eng.completed_arcs
|
|
70
|
-
|
|
70
|
+
log.debug "[narrative_arc] completed arcs count=#{arcs.size}"
|
|
71
71
|
{ arcs: arcs.map(&:to_h), count: arcs.size }
|
|
72
72
|
end
|
|
73
73
|
|
|
@@ -76,14 +76,14 @@ module Legion
|
|
|
76
76
|
arc = eng.most_dramatic_arc
|
|
77
77
|
return { found: false } unless arc
|
|
78
78
|
|
|
79
|
-
|
|
79
|
+
log.debug "[narrative_arc] most dramatic: #{arc.arc_id[0..7]} score=#{arc.dramatic_score.round(2)}"
|
|
80
80
|
{ found: true, arc: arc.to_h }
|
|
81
81
|
end
|
|
82
82
|
|
|
83
83
|
def arc_report(engine: nil, **)
|
|
84
84
|
eng = engine || arc_engine
|
|
85
85
|
report = eng.arc_report
|
|
86
|
-
|
|
86
|
+
log.debug "[narrative_arc] arc_report total=#{report[:total_arcs]} patterns=#{report[:patterns].inspect}"
|
|
87
87
|
{ success: true, report: report }
|
|
88
88
|
end
|
|
89
89
|
|
|
@@ -18,7 +18,7 @@ module Legion
|
|
|
18
18
|
content: content, episode_type: episode_type,
|
|
19
19
|
emotional_valence: emotional_valence, significance: significance, domain: domain
|
|
20
20
|
)
|
|
21
|
-
|
|
21
|
+
log.debug "[narrative_identity] recorded episode #{episode.id[0..7]} type=#{episode_type}"
|
|
22
22
|
{ success: true, episode: episode.to_h }
|
|
23
23
|
rescue StandardError => e
|
|
24
24
|
{ success: false, error: e.message }
|
|
@@ -26,7 +26,7 @@ module Legion
|
|
|
26
26
|
|
|
27
27
|
def assign_episode_to_chapter(episode_id:, chapter_id:, engine: nil, **)
|
|
28
28
|
result = resolve_engine(engine).assign_to_chapter(episode_id: episode_id, chapter_id: chapter_id)
|
|
29
|
-
|
|
29
|
+
log.debug "[narrative_identity] assign episode=#{episode_id[0..7]} ok=#{result}"
|
|
30
30
|
{ success: result, episode_id: episode_id, chapter_id: chapter_id }
|
|
31
31
|
rescue StandardError => e
|
|
32
32
|
{ success: false, error: e.message }
|
|
@@ -37,7 +37,7 @@ module Legion
|
|
|
37
37
|
Helpers::Constants::CHAPTER_LABELS.include?(label)
|
|
38
38
|
|
|
39
39
|
chapter = resolve_engine(engine).create_chapter(title: title, label: label)
|
|
40
|
-
|
|
40
|
+
log.debug "[narrative_identity] created chapter #{chapter.id[0..7]} label=#{label}"
|
|
41
41
|
{ success: true, chapter: chapter.to_h }
|
|
42
42
|
rescue StandardError => e
|
|
43
43
|
{ success: false, error: e.message }
|
|
@@ -45,7 +45,7 @@ module Legion
|
|
|
45
45
|
|
|
46
46
|
def close_chapter(chapter_id:, engine: nil, **)
|
|
47
47
|
result = resolve_engine(engine).close_chapter(chapter_id: chapter_id)
|
|
48
|
-
|
|
48
|
+
log.debug "[narrative_identity] close_chapter #{chapter_id[0..7]} ok=#{result}"
|
|
49
49
|
{ success: result, chapter_id: chapter_id }
|
|
50
50
|
rescue StandardError => e
|
|
51
51
|
{ success: false, error: e.message }
|
|
@@ -56,7 +56,7 @@ module Legion
|
|
|
56
56
|
Helpers::Constants::THEME_TYPES.include?(theme_type)
|
|
57
57
|
|
|
58
58
|
theme = resolve_engine(engine).add_theme(name: name, theme_type: theme_type)
|
|
59
|
-
|
|
59
|
+
log.debug "[narrative_identity] added theme #{theme.id[0..7]} type=#{theme_type}"
|
|
60
60
|
{ success: true, theme: theme.to_h }
|
|
61
61
|
rescue StandardError => e
|
|
62
62
|
{ success: false, error: e.message }
|
|
@@ -64,7 +64,7 @@ module Legion
|
|
|
64
64
|
|
|
65
65
|
def link_theme(episode_id:, theme_id:, engine: nil, **)
|
|
66
66
|
result = resolve_engine(engine).link_theme(episode_id: episode_id, theme_id: theme_id)
|
|
67
|
-
|
|
67
|
+
log.debug "[narrative_identity] link theme=#{theme_id[0..7]} episode=#{episode_id[0..7]} ok=#{result}"
|
|
68
68
|
{ success: result, episode_id: episode_id, theme_id: theme_id }
|
|
69
69
|
rescue StandardError => e
|
|
70
70
|
{ success: false, error: e.message }
|
|
@@ -72,7 +72,7 @@ module Legion
|
|
|
72
72
|
|
|
73
73
|
def reinforce_theme(theme_id:, amount:, engine: nil, **)
|
|
74
74
|
result = resolve_engine(engine).reinforce_theme(theme_id: theme_id, amount: amount)
|
|
75
|
-
|
|
75
|
+
log.debug "[narrative_identity] reinforce theme=#{theme_id[0..7]} amount=#{amount} ok=#{result}"
|
|
76
76
|
{ success: result, theme_id: theme_id, amount: amount }
|
|
77
77
|
rescue StandardError => e
|
|
78
78
|
{ success: false, error: e.message }
|
|
@@ -80,7 +80,7 @@ module Legion
|
|
|
80
80
|
|
|
81
81
|
def narrative_coherence(engine: nil, **)
|
|
82
82
|
score = resolve_engine(engine).narrative_coherence
|
|
83
|
-
|
|
83
|
+
log.debug "[narrative_identity] coherence=#{score}"
|
|
84
84
|
{ success: true, coherence: score }
|
|
85
85
|
rescue StandardError => e
|
|
86
86
|
{ success: false, error: e.message }
|
|
@@ -88,7 +88,7 @@ module Legion
|
|
|
88
88
|
|
|
89
89
|
def identity_summary(engine: nil, **)
|
|
90
90
|
summary = resolve_engine(engine).identity_summary
|
|
91
|
-
|
|
91
|
+
log.debug '[narrative_identity] identity_summary requested'
|
|
92
92
|
{ success: true, summary: summary }
|
|
93
93
|
rescue StandardError => e
|
|
94
94
|
{ success: false, error: e.message }
|
|
@@ -96,7 +96,7 @@ module Legion
|
|
|
96
96
|
|
|
97
97
|
def life_story(engine: nil, **)
|
|
98
98
|
story = resolve_engine(engine).life_story
|
|
99
|
-
|
|
99
|
+
log.debug "[narrative_identity] life_story chapters=#{story.size}"
|
|
100
100
|
{ success: true, life_story: story }
|
|
101
101
|
rescue StandardError => e
|
|
102
102
|
{ success: false, error: e.message }
|
|
@@ -104,7 +104,7 @@ module Legion
|
|
|
104
104
|
|
|
105
105
|
def most_defining_episodes(limit: 5, engine: nil, **)
|
|
106
106
|
episodes = resolve_engine(engine).most_defining_episodes(limit: limit)
|
|
107
|
-
|
|
107
|
+
log.debug "[narrative_identity] defining_episodes count=#{episodes.size}"
|
|
108
108
|
{ success: true, episodes: episodes.map(&:to_h) }
|
|
109
109
|
rescue StandardError => e
|
|
110
110
|
{ success: false, error: e.message }
|
|
@@ -112,7 +112,7 @@ module Legion
|
|
|
112
112
|
|
|
113
113
|
def prominent_themes(engine: nil, **)
|
|
114
114
|
themes = resolve_engine(engine).prominent_themes
|
|
115
|
-
|
|
115
|
+
log.debug "[narrative_identity] prominent_themes count=#{themes.size}"
|
|
116
116
|
{ success: true, themes: themes.map(&:to_h) }
|
|
117
117
|
rescue StandardError => e
|
|
118
118
|
{ success: false, error: e.message }
|
|
@@ -120,7 +120,7 @@ module Legion
|
|
|
120
120
|
|
|
121
121
|
def current_chapter(engine: nil, **)
|
|
122
122
|
chapter = resolve_engine(engine).current_chapter
|
|
123
|
-
|
|
123
|
+
log.debug "[narrative_identity] current_chapter=#{chapter&.id&.slice(0..7)}"
|
|
124
124
|
{ success: true, chapter: chapter&.to_h }
|
|
125
125
|
rescue StandardError => e
|
|
126
126
|
{ success: false, error: e.message }
|
|
@@ -128,7 +128,7 @@ module Legion
|
|
|
128
128
|
|
|
129
129
|
def decay_themes(engine: nil, **)
|
|
130
130
|
resolve_engine(engine).decay_all_themes!
|
|
131
|
-
|
|
131
|
+
log.debug '[narrative_identity] theme decay applied'
|
|
132
132
|
{ success: true }
|
|
133
133
|
rescue StandardError => e
|
|
134
134
|
{ success: false, error: e.message }
|
|
@@ -136,7 +136,7 @@ module Legion
|
|
|
136
136
|
|
|
137
137
|
def narrative_report(engine: nil, **)
|
|
138
138
|
report = resolve_engine(engine).narrative_report
|
|
139
|
-
|
|
139
|
+
log.debug '[narrative_identity] narrative_report generated'
|
|
140
140
|
{ success: true, report: report }
|
|
141
141
|
rescue StandardError => e
|
|
142
142
|
{ success: false, error: e.message }
|
|
@@ -20,7 +20,7 @@ module Legion
|
|
|
20
20
|
emotional_valence: emotional_valence,
|
|
21
21
|
tags: tags
|
|
22
22
|
)
|
|
23
|
-
|
|
23
|
+
log.debug "[narrative_self] recorded episode=#{episode_type} domain=#{domain} sig=#{episode.significance.round(3)}"
|
|
24
24
|
{ success: true, episode: episode.to_h }
|
|
25
25
|
end
|
|
26
26
|
|
|
@@ -41,7 +41,7 @@ module Legion
|
|
|
41
41
|
|
|
42
42
|
def create_thread(theme:, domain: :general, **)
|
|
43
43
|
thread = autobiography.create_thread(theme: theme, domain: domain)
|
|
44
|
-
|
|
44
|
+
log.debug "[narrative_self] created thread=#{theme} domain=#{domain}"
|
|
45
45
|
{ success: true, thread: thread.to_h }
|
|
46
46
|
end
|
|
47
47
|
|
|
@@ -58,13 +58,13 @@ module Legion
|
|
|
58
58
|
|
|
59
59
|
def self_summary(**)
|
|
60
60
|
summary = autobiography.self_summary
|
|
61
|
-
|
|
61
|
+
log.debug "[narrative_self] summary: episodes=#{summary[:total_episodes]} richness=#{summary[:narrative_richness].round(3)}"
|
|
62
62
|
{ success: true, summary: summary }
|
|
63
63
|
end
|
|
64
64
|
|
|
65
65
|
def update_narrative_self(**)
|
|
66
66
|
autobiography.decay_all
|
|
67
|
-
|
|
67
|
+
log.debug "[narrative_self] tick: episodes=#{autobiography.episodes.size} threads=#{autobiography.threads.size}"
|
|
68
68
|
{ success: true, episode_count: autobiography.episodes.size, thread_count: autobiography.threads.size }
|
|
69
69
|
end
|
|
70
70
|
|
|
@@ -37,7 +37,7 @@ module Legion
|
|
|
37
37
|
end
|
|
38
38
|
end
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
log.debug "[reflection] generated #{new_reflections.size} reflections, health=#{reflection_store.cognitive_health}"
|
|
41
41
|
|
|
42
42
|
{
|
|
43
43
|
reflections_generated: new_reflections.size,
|
|
@@ -61,13 +61,13 @@ module Legion
|
|
|
61
61
|
|
|
62
62
|
reflection ||= build_mechanical_dream_reflection(dream_results)
|
|
63
63
|
|
|
64
|
-
|
|
64
|
+
log.debug "[reflection] dream reflection generated source=#{source}"
|
|
65
65
|
{ reflection: reflection, source: source }
|
|
66
66
|
end
|
|
67
67
|
|
|
68
68
|
def cognitive_health(**)
|
|
69
69
|
health = reflection_store.cognitive_health
|
|
70
|
-
|
|
70
|
+
log.debug "[reflection] cognitive health: #{health}"
|
|
71
71
|
{
|
|
72
72
|
health: health,
|
|
73
73
|
category_scores: Helpers::Constants::CATEGORIES.to_h { |c| [c, reflection_store.category_score(c)] },
|
|
@@ -94,7 +94,7 @@ module Legion
|
|
|
94
94
|
return { error: :already_acted } if reflection[:acted_on]
|
|
95
95
|
|
|
96
96
|
reflection_store.mark_acted_on(reflection_id)
|
|
97
|
-
|
|
97
|
+
log.info "[reflection] adapted: #{reflection[:observation]}"
|
|
98
98
|
{ adapted: true, reflection_id: reflection_id, recommendation: reflection[:recommendation] }
|
|
99
99
|
end
|
|
100
100
|
|
|
@@ -18,13 +18,13 @@ module Legion
|
|
|
18
18
|
volume: volume,
|
|
19
19
|
bias_direction: bias_direction
|
|
20
20
|
)
|
|
21
|
-
|
|
21
|
+
log.info "[self_talk] register_voice: name=#{name} type=#{voice_type} registered=#{result[:registered]}"
|
|
22
22
|
result
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
def start_dialogue(topic:, **)
|
|
26
26
|
result = engine.start_dialogue(topic: topic)
|
|
27
|
-
|
|
27
|
+
log.debug "[self_talk] start_dialogue: topic=#{topic} id=#{result[:dialogue][:id]}"
|
|
28
28
|
result
|
|
29
29
|
end
|
|
30
30
|
|
|
@@ -36,14 +36,14 @@ module Legion
|
|
|
36
36
|
position: position,
|
|
37
37
|
strength: strength
|
|
38
38
|
)
|
|
39
|
-
|
|
39
|
+
log.debug "[self_talk] add_turn: dialogue=#{dialogue_id} voice=#{voice_id} added=#{result[:added]}"
|
|
40
40
|
result
|
|
41
41
|
end
|
|
42
42
|
|
|
43
43
|
def conclude_dialogue(dialogue_id:, summary: nil, **)
|
|
44
44
|
resolved_summary = summary || generate_summary_for_dialogue(dialogue_id)
|
|
45
45
|
result = engine.conclude_dialogue(dialogue_id: dialogue_id, summary: resolved_summary)
|
|
46
|
-
|
|
46
|
+
log.info "[self_talk] conclude_dialogue: id=#{dialogue_id} concluded=#{result[:concluded]}"
|
|
47
47
|
result
|
|
48
48
|
end
|
|
49
49
|
|
|
@@ -59,37 +59,37 @@ module Legion
|
|
|
59
59
|
content: content[:content],
|
|
60
60
|
position: content[:position]
|
|
61
61
|
)
|
|
62
|
-
|
|
62
|
+
log.debug "[self_talk] generate_voice_turn: dialogue=#{dialogue_id} voice=#{voice_id} source=#{source}"
|
|
63
63
|
{ generated: true, source: source, turn: turn_result[:turn] }
|
|
64
64
|
end
|
|
65
65
|
|
|
66
66
|
def deadlock_dialogue(dialogue_id:, **)
|
|
67
67
|
result = engine.deadlock_dialogue(dialogue_id: dialogue_id)
|
|
68
|
-
|
|
68
|
+
log.warn "[self_talk] deadlock_dialogue: id=#{dialogue_id} deadlocked=#{result[:deadlocked]}"
|
|
69
69
|
result
|
|
70
70
|
end
|
|
71
71
|
|
|
72
72
|
def amplify_voice(voice_id:, amount: Helpers::Constants::VOLUME_BOOST, **)
|
|
73
73
|
result = engine.amplify_voice(voice_id: voice_id, amount: amount)
|
|
74
|
-
|
|
74
|
+
log.debug "[self_talk] amplify_voice: id=#{voice_id} volume=#{result[:volume]}"
|
|
75
75
|
result
|
|
76
76
|
end
|
|
77
77
|
|
|
78
78
|
def dampen_voice(voice_id:, amount: Helpers::Constants::VOLUME_DECAY, **)
|
|
79
79
|
result = engine.dampen_voice(voice_id: voice_id, amount: amount)
|
|
80
|
-
|
|
80
|
+
log.debug "[self_talk] dampen_voice: id=#{voice_id} volume=#{result[:volume]}"
|
|
81
81
|
result
|
|
82
82
|
end
|
|
83
83
|
|
|
84
84
|
def dialogue_report(dialogue_id:, **)
|
|
85
85
|
result = engine.dialogue_report(dialogue_id: dialogue_id)
|
|
86
|
-
|
|
86
|
+
log.debug "[self_talk] dialogue_report: id=#{dialogue_id} found=#{result[:found]}"
|
|
87
87
|
result
|
|
88
88
|
end
|
|
89
89
|
|
|
90
90
|
def self_talk_status(**)
|
|
91
91
|
summary = engine.to_h
|
|
92
|
-
|
|
92
|
+
log.debug "[self_talk] status: voices=#{summary[:voice_count]} dialogues=#{summary[:dialogue_count]}"
|
|
93
93
|
summary
|
|
94
94
|
end
|
|
95
95
|
|
|
@@ -100,7 +100,7 @@ module Legion
|
|
|
100
100
|
decayed += 1
|
|
101
101
|
{ id: voice.id, name: voice.name, volume: voice.volume }
|
|
102
102
|
end
|
|
103
|
-
|
|
103
|
+
log.debug "[self-talk] voice decay: decayed=#{decayed} voices"
|
|
104
104
|
{ decayed: decayed, voices: voice_list }
|
|
105
105
|
end
|
|
106
106
|
|
data/spec/spec_helper.rb
CHANGED
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require 'bundler/setup'
|
|
4
|
+
require 'legion/logging'
|
|
5
|
+
require 'legion/settings'
|
|
6
|
+
require 'legion/cache/helper'
|
|
7
|
+
require 'legion/crypt/helper'
|
|
8
|
+
require 'legion/data/helper'
|
|
9
|
+
require 'legion/json/helper'
|
|
10
|
+
require 'legion/transport/helper'
|
|
4
11
|
|
|
5
12
|
module Legion
|
|
6
|
-
module Logging
|
|
7
|
-
def self.debug(_msg); end
|
|
8
|
-
def self.info(_msg); end
|
|
9
|
-
def self.warn(_msg); end
|
|
10
|
-
def self.error(_msg); end
|
|
11
|
-
def self.fatal(_msg); end
|
|
12
|
-
end
|
|
13
|
-
|
|
14
13
|
module Extensions
|
|
15
14
|
module Core
|
|
16
15
|
def self.extended(_base); end
|
|
@@ -18,24 +17,30 @@ module Legion
|
|
|
18
17
|
|
|
19
18
|
module Helpers
|
|
20
19
|
module Lex
|
|
21
|
-
|
|
20
|
+
include Legion::Logging::Helper
|
|
21
|
+
include Legion::Settings::Helper
|
|
22
|
+
include Legion::Cache::Helper
|
|
23
|
+
include Legion::Crypt::Helper
|
|
24
|
+
include Legion::Data::Helper
|
|
25
|
+
include Legion::JSON::Helper
|
|
26
|
+
include Legion::Transport::Helper
|
|
22
27
|
end
|
|
23
28
|
end
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
29
|
|
|
27
|
-
# rubocop:disable Lint/EmptyClass, Style/OneClassPerFile
|
|
28
|
-
module Legion
|
|
29
|
-
module Extensions
|
|
30
30
|
module Actors
|
|
31
|
-
class Every
|
|
32
|
-
|
|
31
|
+
class Every
|
|
32
|
+
include Helpers::Lex
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
class Once
|
|
36
|
+
include Helpers::Lex
|
|
37
|
+
end
|
|
33
38
|
end
|
|
34
39
|
end
|
|
35
40
|
end
|
|
41
|
+
|
|
36
42
|
$LOADED_FEATURES << 'legion/extensions/actors/every'
|
|
37
43
|
$LOADED_FEATURES << 'legion/extensions/actors/once'
|
|
38
|
-
# rubocop:enable Lint/EmptyClass, Style/OneClassPerFile
|
|
39
44
|
|
|
40
45
|
require 'legion/extensions/agentic/self'
|
|
41
46
|
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: lex-agentic-self
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Esity
|
|
@@ -9,6 +9,104 @@ bindir: bin
|
|
|
9
9
|
cert_chain: []
|
|
10
10
|
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
11
|
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: legion-cache
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - ">="
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: 1.3.11
|
|
19
|
+
type: :runtime
|
|
20
|
+
prerelease: false
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - ">="
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: 1.3.11
|
|
26
|
+
- !ruby/object:Gem::Dependency
|
|
27
|
+
name: legion-crypt
|
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
|
+
requirements:
|
|
30
|
+
- - ">="
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: 1.4.9
|
|
33
|
+
type: :runtime
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - ">="
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: 1.4.9
|
|
40
|
+
- !ruby/object:Gem::Dependency
|
|
41
|
+
name: legion-data
|
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
|
43
|
+
requirements:
|
|
44
|
+
- - ">="
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: 1.4.17
|
|
47
|
+
type: :runtime
|
|
48
|
+
prerelease: false
|
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - ">="
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: 1.4.17
|
|
54
|
+
- !ruby/object:Gem::Dependency
|
|
55
|
+
name: legion-json
|
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
|
57
|
+
requirements:
|
|
58
|
+
- - ">="
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: 1.2.1
|
|
61
|
+
type: :runtime
|
|
62
|
+
prerelease: false
|
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
64
|
+
requirements:
|
|
65
|
+
- - ">="
|
|
66
|
+
- !ruby/object:Gem::Version
|
|
67
|
+
version: 1.2.1
|
|
68
|
+
- !ruby/object:Gem::Dependency
|
|
69
|
+
name: legion-logging
|
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
|
71
|
+
requirements:
|
|
72
|
+
- - ">="
|
|
73
|
+
- !ruby/object:Gem::Version
|
|
74
|
+
version: 1.3.2
|
|
75
|
+
type: :runtime
|
|
76
|
+
prerelease: false
|
|
77
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
78
|
+
requirements:
|
|
79
|
+
- - ">="
|
|
80
|
+
- !ruby/object:Gem::Version
|
|
81
|
+
version: 1.3.2
|
|
82
|
+
- !ruby/object:Gem::Dependency
|
|
83
|
+
name: legion-settings
|
|
84
|
+
requirement: !ruby/object:Gem::Requirement
|
|
85
|
+
requirements:
|
|
86
|
+
- - ">="
|
|
87
|
+
- !ruby/object:Gem::Version
|
|
88
|
+
version: 1.3.14
|
|
89
|
+
type: :runtime
|
|
90
|
+
prerelease: false
|
|
91
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
92
|
+
requirements:
|
|
93
|
+
- - ">="
|
|
94
|
+
- !ruby/object:Gem::Version
|
|
95
|
+
version: 1.3.14
|
|
96
|
+
- !ruby/object:Gem::Dependency
|
|
97
|
+
name: legion-transport
|
|
98
|
+
requirement: !ruby/object:Gem::Requirement
|
|
99
|
+
requirements:
|
|
100
|
+
- - ">="
|
|
101
|
+
- !ruby/object:Gem::Version
|
|
102
|
+
version: 1.3.9
|
|
103
|
+
type: :runtime
|
|
104
|
+
prerelease: false
|
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
106
|
+
requirements:
|
|
107
|
+
- - ">="
|
|
108
|
+
- !ruby/object:Gem::Version
|
|
109
|
+
version: 1.3.9
|
|
12
110
|
- !ruby/object:Gem::Dependency
|
|
13
111
|
name: faraday
|
|
14
112
|
requirement: !ruby/object:Gem::Requirement
|