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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2d8b77eb5ec95e5f1ca51b1e58e7aa86999de7bda365e0771180dfdd06ff0d53
4
- data.tar.gz: 7b0951301d43d15e5e7e198a7ab74a6a026afd0dc9c9b859d2b7a7c16efe4c1e
3
+ metadata.gz: d6f70c0d4f4103f54bad7fef2c99d4b69bdb52cf2289ae6c6a0fb950a4a92e94
4
+ data.tar.gz: 6994754e9d482e805d84a0e1a8aa9d6fbc8c19a17d895e726b9cb6b8d285898e
5
5
  SHA512:
6
- metadata.gz: 331f1b725ee8c2b93b654032318a0e3ab3bd371491d444d72914f81c0449df2d3ea4300b628c2d097af0275d7659d8138d44dddcece8901daf15ca34ad0f1bb5
7
- data.tar.gz: c9687bd1e633d47a9abf4b4e6d3362950682047b5212c4ff32817264e3a45094673a48a33c702543409fa74ec6cf2a48e9203e23674ab34bad34b2a9083b9dcd
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
@@ -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
- Legion::Logging.debug "[agency] mastery #{outcome_type} in #{domain} " \
23
- "efficacy=#{efficacy_model.efficacy_for(domain).round(4)}"
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
- Legion::Logging.debug "[agency] vicarious #{outcome_type} in #{domain}"
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
- Legion::Logging.debug "[agency] persuasion #{positive ? 'positive' : 'negative'} in #{domain}"
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
- Legion::Logging.debug "[agency] physiological #{state} in #{domain}"
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
- Legion::Logging.debug "[agency] tick: domains=#{efficacy_model.domain_count} " \
63
- "overall=#{efficacy_model.overall_efficacy.round(4)}"
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
- Legion::Logging.debug "[anosognosia] acknowledge_deficit: id=#{deficit_id}"
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
- Legion::Logging.info "[anosognosia] reveal_blind_spot: id=#{deficit_id}"
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
- Legion::Logging.debug "[anosognosia] awareness_score: score=#{score.round(2)}"
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
- Legion::Logging.debug "[anosognosia] awareness_gap: gap=#{gap.round(2)}"
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
- Legion::Logging.debug "[anosognosia] blind_spots: count=#{spots.size}"
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
- Legion::Logging.info '[anosognosia] calibration_report requested'
65
+ log.info '[anosognosia] calibration_report requested'
66
66
  engine.calibration_report
67
67
  end
68
68
 
@@ -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
- Legion::Logging.debug "[dmn] register_stimulus: source=#{source}"
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
- Legion::Logging.debug "[dmn] generate_idle_thought: mode=#{dmn_engine.mode}"
25
+ log.debug "[dmn] generate_idle_thought: mode=#{dmn_engine.mode}"
26
26
  thought = dmn_engine.generate_thought
27
- Legion::Logging.debug "[dmn] thought_generated: type=#{thought.thought_type} salience=#{thought.salience.round(2)} label=#{thought.label}"
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
- Legion::Logging.debug '[dmn] trigger_self_reflection'
32
+ log.debug '[dmn] trigger_self_reflection'
33
33
  thought = dmn_engine.self_reflect
34
34
  dmn_engine.send(:store_thought, thought)
35
- Legion::Logging.debug "[dmn] self_reflect: topic=#{thought.seed} salience=#{thought.salience.round(2)}"
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
- Legion::Logging.debug "[dmn] trigger_social_replay: interaction=#{interaction}"
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
- Legion::Logging.debug "[dmn] social_replay: seed=#{thought.seed} salience=#{thought.salience.round(2)}"
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
- Legion::Logging.debug "[dmn] trigger_spontaneous_plan: goal=#{goal}"
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
- Legion::Logging.debug "[dmn] spontaneous_plan: goal=#{thought.seed} salience=#{thought.salience.round(2)}"
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
- Legion::Logging.debug "[dmn] trigger_wandering: seed=#{seed}"
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
- Legion::Logging.debug "[dmn] wandering: seed=#{thought.seed} chain_length=#{thought.association_chain.size}"
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
- Legion::Logging.debug "[dmn] salient_thoughts: count=#{count}"
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
- Legion::Logging.debug "[dmn] dmn_mode_status: mode=#{dmn_engine.mode}"
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
- Legion::Logging.debug '[dmn] update_dmn: tick'
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
- Legion::Logging.debug "[dmn] idle_thought: type=#{thought.thought_type} salience=#{thought.salience.round(2)}"
92
+ log.debug "[dmn] idle_thought: type=#{thought.thought_type} salience=#{thought.salience.round(2)}"
93
93
  end
94
94
 
95
- Legion::Logging.debug "[dmn] update_dmn: mode=#{tick_result[:current_mode]} faded=#{faded_count} thoughts=#{dmn_engine.thought_count}"
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
- Legion::Logging.debug '[dmn] dmn_stats'
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
- Legion::Logging.debug "[cognitive_fingerprint] record category=#{category} " \
17
- "baseline=#{result[:baseline]&.round(4)} samples=#{result[:samples]}"
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
- Legion::Logging.info "[cognitive_fingerprint] verify score=#{result[:match_score]&.round(4)} " \
27
- "verdict=#{result[:verdict]}"
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
- Legion::Logging.warn "[cognitive_fingerprint] anomaly category=#{category} " \
35
- "deviation=#{result[:deviation]&.round(4)}"
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
- Legion::Logging.debug "[cognitive_fingerprint] confidence=#{confidence.round(4)} label=#{label}"
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
- Legion::Logging.debug "[identity] observe: dim=#{dimension} val=#{value.round(2)} " \
18
- "obs=#{fingerprint.observation_count} maturity=#{fingerprint.maturity}"
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
- Legion::Logging.debug "[identity] observe_all: dims=#{observations.keys.join(',')} " \
32
- "obs=#{fingerprint.observation_count} maturity=#{fingerprint.maturity}"
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
- Legion::Logging.warn "[identity] high entropy detected: #{entropy.round(3)} trend=#{trend} - possible impersonation"
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
- Legion::Logging.warn "[identity] low entropy detected: #{entropy.round(3)} trend=#{trend} - possible automation"
61
+ log.warn "[identity] low entropy detected: #{entropy.round(3)} trend=#{trend} - possible automation"
62
62
  else
63
- Legion::Logging.debug "[identity] entropy check: #{entropy.round(3)} classification=#{classification} trend=#{trend}"
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
- Legion::Logging.debug "[identity] status: maturity=#{fingerprint.maturity} observations=#{fingerprint.observation_count}"
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
- Legion::Logging.debug "[metacognition] introspect: #{model.dig(:architecture, :loaded_count)} extensions loaded"
25
+ log.debug "[metacognition] introspect: #{model.dig(:architecture, :loaded_count)} extensions loaded"
26
26
  model
27
27
  end
28
28
 
@@ -26,8 +26,8 @@ module Legion
26
26
  effort: effort
27
27
  )
28
28
 
29
- Legion::Logging.debug "[metacognitive] record_judgment type=#{type_sym} domain=#{domain} " \
30
- "confidence=#{judgment.predicted_confidence.round(2)} id=#{judgment.id[0..7]}"
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
- Legion::Logging.debug "[metacognitive] resolve_judgment not_found id=#{judgment_id[0..7]}"
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
- Legion::Logging.info "[metacognitive] resolved judgment=#{judgment_id[0..7]} " \
45
- "error=#{judgment.calibration_error&.round(3)}"
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
- Legion::Logging.debug "[metacognitive] fok domain=#{domain} confidence=#{judgment.predicted_confidence.round(2)}"
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
- Legion::Logging.debug "[metacognitive] jol domain=#{domain} confidence=#{judgment.predicted_confidence.round(2)}"
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
- Legion::Logging.debug "[metacognitive] overconfidence_scan count=#{findings.size}"
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
- Legion::Logging.debug "[metacognitive] underconfidence_scan count=#{findings.size}"
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
- Legion::Logging.debug "[metacognitive] calibration_report domains=#{report[:by_domain].size}"
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
- Legion::Logging.debug "[metacognitive] monitoring_report total=#{report[:total_judgments]}"
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
- Legion::Logging.warn "[narrative_arc] create_arc failed: engine at capacity (#{Helpers::Constants::MAX_ARCS})"
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
- Legion::Logging.debug "[narrative_arc] arc created: #{arc.arc_id[0..7]} title=#{title} domain=#{domain}"
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
- Legion::Logging.debug "[narrative_arc] beat added: arc=#{arc_id[0..7]} type=#{beat_type} " \
43
- "phase=#{result[:arc_phase]} tension=#{result[:tension_level].round(2)}"
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
- Legion::Logging.debug "[narrative_arc] add_beat failed: #{result[:reason]} arc=#{arc_id[0..7]}"
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
- Legion::Logging.debug "[narrative_arc] active arcs count=#{arcs.size}"
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
- Legion::Logging.debug "[narrative_arc] completed arcs count=#{arcs.size}"
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
- Legion::Logging.debug "[narrative_arc] most dramatic: #{arc.arc_id[0..7]} score=#{arc.dramatic_score.round(2)}"
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
- Legion::Logging.debug "[narrative_arc] arc_report total=#{report[:total_arcs]} patterns=#{report[:patterns].inspect}"
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
- Legion::Logging.debug "[narrative_identity] recorded episode #{episode.id[0..7]} type=#{episode_type}"
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
- Legion::Logging.debug "[narrative_identity] assign episode=#{episode_id[0..7]} ok=#{result}"
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
- Legion::Logging.debug "[narrative_identity] created chapter #{chapter.id[0..7]} label=#{label}"
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
- Legion::Logging.debug "[narrative_identity] close_chapter #{chapter_id[0..7]} ok=#{result}"
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
- Legion::Logging.debug "[narrative_identity] added theme #{theme.id[0..7]} type=#{theme_type}"
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
- Legion::Logging.debug "[narrative_identity] link theme=#{theme_id[0..7]} episode=#{episode_id[0..7]} ok=#{result}"
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
- Legion::Logging.debug "[narrative_identity] reinforce theme=#{theme_id[0..7]} amount=#{amount} ok=#{result}"
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
- Legion::Logging.debug "[narrative_identity] coherence=#{score}"
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
- Legion::Logging.debug '[narrative_identity] identity_summary requested'
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
- Legion::Logging.debug "[narrative_identity] life_story chapters=#{story.size}"
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
- Legion::Logging.debug "[narrative_identity] defining_episodes count=#{episodes.size}"
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
- Legion::Logging.debug "[narrative_identity] prominent_themes count=#{themes.size}"
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
- Legion::Logging.debug "[narrative_identity] current_chapter=#{chapter&.id&.slice(0..7)}"
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
- Legion::Logging.debug '[narrative_identity] theme decay applied'
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
- Legion::Logging.debug '[narrative_identity] narrative_report generated'
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
- Legion::Logging.debug "[narrative_self] recorded episode=#{episode_type} domain=#{domain} sig=#{episode.significance.round(3)}"
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
- Legion::Logging.debug "[narrative_self] created thread=#{theme} domain=#{domain}"
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
- Legion::Logging.debug "[narrative_self] summary: episodes=#{summary[:total_episodes]} richness=#{summary[:narrative_richness].round(3)}"
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
- Legion::Logging.debug "[narrative_self] tick: episodes=#{autobiography.episodes.size} threads=#{autobiography.threads.size}"
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
- Legion::Logging.debug "[reflection] generated #{new_reflections.size} reflections, health=#{reflection_store.cognitive_health}"
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
- Legion::Logging.debug "[reflection] dream reflection generated source=#{source}"
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
- Legion::Logging.debug "[reflection] cognitive health: #{health}"
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
- Legion::Logging.info "[reflection] adapted: #{reflection[:observation]}"
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
- Legion::Logging.info "[self_talk] register_voice: name=#{name} type=#{voice_type} registered=#{result[:registered]}"
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
- Legion::Logging.debug "[self_talk] start_dialogue: topic=#{topic} id=#{result[:dialogue][:id]}"
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
- Legion::Logging.debug "[self_talk] add_turn: dialogue=#{dialogue_id} voice=#{voice_id} added=#{result[:added]}"
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
- Legion::Logging.info "[self_talk] conclude_dialogue: id=#{dialogue_id} concluded=#{result[:concluded]}"
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
- Legion::Logging.debug "[self_talk] generate_voice_turn: dialogue=#{dialogue_id} voice=#{voice_id} source=#{source}"
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
- Legion::Logging.warn "[self_talk] deadlock_dialogue: id=#{dialogue_id} deadlocked=#{result[:deadlocked]}"
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
- Legion::Logging.debug "[self_talk] amplify_voice: id=#{voice_id} volume=#{result[:volume]}"
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
- Legion::Logging.debug "[self_talk] dampen_voice: id=#{voice_id} volume=#{result[:volume]}"
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
- Legion::Logging.debug "[self_talk] dialogue_report: id=#{dialogue_id} found=#{result[:found]}"
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
- Legion::Logging.debug "[self_talk] status: voices=#{summary[:voice_count]} dialogues=#{summary[:dialogue_count]}"
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
- Legion::Logging.debug "[self-talk] voice decay: decayed=#{decayed} voices"
103
+ log.debug "[self-talk] voice decay: decayed=#{decayed} voices"
104
104
  { decayed: decayed, voices: voice_list }
105
105
  end
106
106
 
@@ -4,7 +4,7 @@ module Legion
4
4
  module Extensions
5
5
  module Agentic
6
6
  module Self
7
- VERSION = '0.1.1'
7
+ VERSION = '0.1.2'
8
8
  end
9
9
  end
10
10
  end
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
- def self.included(_base); end
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; end
32
- class Once; end
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.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