lex-dream 0.1.1

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.
@@ -0,0 +1,324 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Dream
6
+ module Runners
7
+ module DreamCycle
8
+ extend self
9
+
10
+ CONSOLIDATION_CANDIDATE_THRESHOLD = 5
11
+
12
+ EMERGENT_UNRESOLVED = lambda { |trace|
13
+ return true if trace[:unresolved] == true
14
+
15
+ # Episodic traces with high emotional intensity that haven't been reinforced
16
+ return true if trace[:trace_type] == :episodic &&
17
+ trace[:reinforcement_count].zero? &&
18
+ trace[:emotional_intensity] >= 0.5
19
+
20
+ # Any trace with low confidence that hasn't been reinforced
21
+ return true if trace[:confidence].is_a?(Numeric) &&
22
+ trace[:confidence] < 0.4 &&
23
+ trace[:reinforcement_count].zero?
24
+
25
+ # Semantic/procedural traces with negative valence (potential concerns worth examining)
26
+ return true if %i[semantic procedural].include?(trace[:trace_type]) &&
27
+ trace[:emotional_valence].is_a?(Numeric) &&
28
+ trace[:emotional_valence] < -0.3 &&
29
+ trace[:reinforcement_count] <= 1
30
+
31
+ # Unreinforced traces with moderate-high intensity (emotionally salient but unprocessed)
32
+ return true if trace[:reinforcement_count].zero? &&
33
+ trace[:emotional_intensity].is_a?(Numeric) &&
34
+ trace[:emotional_intensity] >= 0.6
35
+
36
+ false
37
+ }
38
+
39
+ def execute_dream_cycle(**)
40
+ @phase_data = {}
41
+ results = {}
42
+
43
+ unless memory
44
+ Legion::Logging.warn '[dream] skipping cycle: lex-memory not available'
45
+ return { status: :skipped, reason: :memory_not_available }
46
+ end
47
+
48
+ # Reload from cache to pick up traces written by other runners (e.g. coldstart)
49
+ store = memory.send(:default_store)
50
+ store.reload if store.respond_to?(:reload)
51
+
52
+ Legion::Logging.info '[dream] cycle starting'
53
+ Helpers::Constants::DREAM_CYCLE_PHASES.each do |phase|
54
+ Legion::Logging.debug "[dream] starting phase: #{phase}"
55
+ results[phase] = send(:"phase_#{phase}")
56
+ rescue StandardError => e
57
+ Legion::Logging.error "[dream] phase #{phase} failed: #{e.message}"
58
+ Legion::Logging.error "[dream] #{e.backtrace&.first(3)&.join("\n")}"
59
+ results[phase] = { error: e.message }
60
+ end
61
+ # Flush cache-backed store after all phases
62
+ store = memory.send(:default_store)
63
+ store.flush if store.respond_to?(:flush)
64
+
65
+ # Write human-readable dream journal before clearing state
66
+ Helpers::DreamJournal.write_entry(results: results, phase_data: @phase_data, dream_store: dream_store)
67
+
68
+ Legion::Logging.info "[dream] cycle complete: #{results.keys.join(', ')}"
69
+ { status: :completed, phases: results }
70
+ end
71
+
72
+ def phase_memory_audit(**)
73
+ store = memory.send(:default_store)
74
+ decay_result = memory.decay_cycle(store: store)
75
+ migrate_result = memory.migrate_tier(store: store)
76
+
77
+ candidates = store.all_traces.select do |t|
78
+ t[:trace_type] == :episodic &&
79
+ t[:reinforcement_count] >= CONSOLIDATION_CANDIDATE_THRESHOLD &&
80
+ t[:strength] < Legion::Extensions::Memory::Helpers::Trace::STARTING_STRENGTHS[:episodic]
81
+ end
82
+ candidates.each do |t|
83
+ t[:consolidation_candidate] = true
84
+ store.store(t)
85
+ end
86
+
87
+ unresolved = store.all_traces.select(&EMERGENT_UNRESOLVED)
88
+ @phase_data[:unresolved_traces] = unresolved
89
+
90
+ Legion::Logging.debug "[dream] memory_audit: decayed=#{decay_result[:decayed]} pruned=#{decay_result[:pruned]} " \
91
+ "migrated=#{migrate_result[:migrated]} candidates=#{candidates.size} unresolved=#{unresolved.size}"
92
+ {
93
+ decayed: decay_result[:decayed],
94
+ pruned: decay_result[:pruned],
95
+ migrated: migrate_result[:migrated],
96
+ consolidation_candidates: candidates.size,
97
+ unresolved_count: unresolved.size
98
+ }
99
+ end
100
+
101
+ def phase_association_walk(**)
102
+ store = memory.send(:default_store)
103
+ start_trace = Helpers::AssociationWalker.select_start_trace(store: store)
104
+
105
+ unless start_trace
106
+ @phase_data[:walk_results] = []
107
+ return { walk_results: [], start_trace: nil }
108
+ end
109
+
110
+ known = Set.new(dream_store.walk_results.map { |w| w[:path].join('->') })
111
+ results = Helpers::AssociationWalker.walk(
112
+ store: store, start_id: start_trace[:trace_id], known_paths: known
113
+ )
114
+
115
+ results.each do |wr|
116
+ dream_store.record_walk_result(
117
+ source_id: start_trace[:trace_id], path: wr[:path], novelty_score: wr[:novelty_score]
118
+ )
119
+ wr[:path].each_cons(2) do |a_id, b_id|
120
+ memory.hebbian_link(trace_id_a: a_id, trace_id_b: b_id, store: store)
121
+ end
122
+ end
123
+
124
+ @phase_data[:walk_results] = results
125
+ Legion::Logging.debug "[dream] association_walk: start=#{start_trace[:trace_id][0..7]} results=#{results.size}"
126
+ { walk_results: results, start_trace: start_trace[:trace_id] }
127
+ end
128
+
129
+ def phase_contradiction_resolution(**)
130
+ store = memory.send(:default_store)
131
+ detected = Helpers::ContradictionDetector.detect(store: store)
132
+ use_llm = Helpers::LlmEnhancer.available?
133
+
134
+ resolutions = detected.map do |contradiction|
135
+ trace_a = store.get(contradiction[:trace_ids][0])
136
+ trace_b = store.get(contradiction[:trace_ids][1])
137
+
138
+ result = resolve_single_contradiction(
139
+ trace_a, trace_b, contradiction, store, use_llm
140
+ )
141
+
142
+ dream_store.record_contradiction(
143
+ trace_ids: contradiction[:trace_ids],
144
+ domain: contradiction[:domain],
145
+ resolution: result[:resolution]
146
+ )
147
+ result.merge(
148
+ domain: contradiction[:domain],
149
+ valence_a: contradiction[:valence_a],
150
+ valence_b: contradiction[:valence_b]
151
+ )
152
+ end
153
+
154
+ @phase_data[:contradictions] = resolutions
155
+ resolved_count = resolutions.count { |r| r[:resolution] == :resolved }
156
+ Legion::Logging.debug "[dream] contradiction_resolution: detected=#{detected.size} " \
157
+ "resolved=#{resolved_count} llm=#{use_llm}"
158
+ { detected: detected.size, resolutions: resolutions }
159
+ end
160
+
161
+ def resolve_single_contradiction(trace_a, trace_b, contradiction, store, use_llm)
162
+ # Try LLM-enhanced resolution first
163
+ if use_llm && trace_a && trace_b
164
+ llm_result = Helpers::LlmEnhancer.resolve_contradiction(
165
+ trace_a, trace_b,
166
+ strategy: Helpers::Constants::CONTRADICTION_RESOLUTION_STRATEGY
167
+ )
168
+ if llm_result
169
+ apply_contradiction_result(llm_result, store)
170
+ return llm_result
171
+ end
172
+ end
173
+
174
+ # Mechanical fallback — ContradictionDetector.resolve mutates traces in-place
175
+ Helpers::ContradictionDetector.resolve(
176
+ trace_ids: contradiction[:trace_ids],
177
+ store: store,
178
+ strategy: Helpers::Constants::CONTRADICTION_RESOLUTION_STRATEGY
179
+ )
180
+ end
181
+
182
+ def apply_contradiction_result(result, store)
183
+ return unless result[:resolution] == :resolved
184
+
185
+ winner = store.get(result[:winner_id])
186
+ loser = store.get(result[:loser_id])
187
+ return unless winner && loser
188
+
189
+ now = Time.now.utc
190
+ winner[:strength] = [winner[:strength] + 0.1, 1.0].min
191
+ winner[:peak_strength] = [winner[:peak_strength], winner[:strength]].max
192
+ winner[:last_reinforced] = now
193
+ store.store(winner)
194
+
195
+ loser[:strength] = [loser[:strength] - 0.1, 0.0].max
196
+ store.store(loser)
197
+ end
198
+
199
+ def phase_identity_entropy_check(**)
200
+ unless identity
201
+ Legion::Logging.warn '[dream] skipping identity_entropy_check: lex-identity not available'
202
+ return { status: :skipped, reason: :identity_not_available }
203
+ end
204
+
205
+ result = identity.check_entropy(observations: {})
206
+ dream_store.record_entropy(
207
+ entropy: result[:entropy],
208
+ classification: result[:classification],
209
+ trend: result[:trend]
210
+ )
211
+ @phase_data[:entropy] = result
212
+ Legion::Logging.debug "[dream] identity_entropy: #{result[:classification]} trend=#{result[:trend]}"
213
+ result
214
+ end
215
+
216
+ def phase_agenda_formation(**)
217
+ unresolved = @phase_data[:unresolved_traces] || []
218
+ contradictions = @phase_data[:contradictions] || []
219
+ walk_results = @phase_data[:walk_results] || []
220
+ entropy = @phase_data[:entropy] || {}
221
+
222
+ # Try LLM-synthesized agenda first
223
+ items = if Helpers::LlmEnhancer.available?
224
+ Helpers::LlmEnhancer.synthesize_agenda(
225
+ unresolved_traces: unresolved,
226
+ contradictions: contradictions,
227
+ walk_results: walk_results,
228
+ entropy: entropy
229
+ )
230
+ end
231
+
232
+ # Mechanical fallback
233
+ items ||= Helpers::Agenda.build_from_phases(
234
+ unresolved_traces: unresolved,
235
+ contradictions: contradictions,
236
+ walk_results: walk_results,
237
+ entropy: entropy
238
+ )
239
+
240
+ items.each do |item|
241
+ dream_store.add_agenda_item(type: item[:type], content: item[:content], weight: item[:weight])
242
+ end
243
+ Legion::Logging.debug "[dream] agenda_formation: #{items.size} items (llm=#{Helpers::LlmEnhancer.available?})"
244
+ { agenda_items: items.size }
245
+ end
246
+
247
+ def phase_consolidation_commit(**)
248
+ # Snapshot agenda before clearing — used by dream journal
249
+ @phase_data[:agenda_snapshot] = dream_store.agenda.dup
250
+ store = memory.send(:default_store)
251
+ traces = Helpers::Agenda.to_semantic_traces(dream_store.agenda)
252
+ traces.each { |t| store.store(t) }
253
+
254
+ Array(@phase_data[:unresolved_traces]).each do |t|
255
+ trace = store.get(t[:trace_id])
256
+ next unless trace
257
+
258
+ trace[:unresolved] = false
259
+ store.store(trace)
260
+ end
261
+
262
+ dream_store.expire_stale!
263
+ dream_store.clear
264
+ Legion::Logging.info "[dream] consolidation_commit: #{traces.size} traces written to memory"
265
+ { traces_written: traces.size, dream_store_cleared: true }
266
+ end
267
+
268
+ def phase_dream_reflection(**)
269
+ return { status: :skipped, reason: :extension_not_loaded } unless reflection_available?
270
+
271
+ reflection_runner = Object.new.extend(Legion::Extensions::Reflection::Runners::Reflection)
272
+ result = reflection_runner.reflect(tick_results: @phase_data)
273
+
274
+ @phase_data[:dream_health] = result[:cognitive_health]
275
+ Legion::Logging.debug "[dream] dream_reflection: health=#{result[:cognitive_health]} reflections=#{result[:reflections_generated]}"
276
+ result
277
+ end
278
+
279
+ def phase_dream_narration(**)
280
+ return { status: :skipped, reason: :extension_not_loaded } unless narrator_available?
281
+
282
+ narrator_runner = Object.new.extend(Legion::Extensions::Narrator::Runners::Narrator)
283
+ result = narrator_runner.narrate(tick_results: @phase_data, cognitive_state: { source: :dream })
284
+
285
+ Legion::Logging.debug "[dream] dream_narration: mood=#{result[:mood]}"
286
+ result
287
+ end
288
+
289
+ include Legion::Extensions::Helpers::Lex if defined?(Legion::Extensions::Helpers::Lex)
290
+
291
+ private
292
+
293
+ def memory
294
+ @memory ||= Legion::Extensions::Memory::Client.new if defined?(Legion::Extensions::Memory::Client)
295
+ end
296
+
297
+ def identity
298
+ @identity ||= Object.new.extend(Legion::Extensions::Identity::Runners::Identity) if defined?(Legion::Extensions::Identity::Runners::Identity)
299
+ end
300
+
301
+ def reflection_available?
302
+ Legion::Extensions.const_defined?(:Reflection) &&
303
+ Legion::Extensions::Reflection.const_defined?(:Runners) &&
304
+ Legion::Extensions::Reflection::Runners.const_defined?(:Reflection)
305
+ rescue StandardError
306
+ false
307
+ end
308
+
309
+ def narrator_available?
310
+ Legion::Extensions.const_defined?(:Narrator) &&
311
+ Legion::Extensions::Narrator.const_defined?(:Runners) &&
312
+ Legion::Extensions::Narrator::Runners.const_defined?(:Narrator)
313
+ rescue StandardError
314
+ false
315
+ end
316
+
317
+ def dream_store
318
+ @dream_store ||= Helpers::DreamStore.new
319
+ end
320
+ end
321
+ end
322
+ end
323
+ end
324
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Dream
6
+ VERSION = '0.1.1'
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'legion/extensions/dream/version'
4
+ require 'legion/extensions/dream/helpers/constants'
5
+ require 'legion/extensions/dream/helpers/dream_store'
6
+ require 'legion/extensions/dream/helpers/association_walker'
7
+ require 'legion/extensions/dream/helpers/contradiction_detector'
8
+ require 'legion/extensions/dream/helpers/agenda'
9
+ require 'legion/extensions/dream/helpers/dream_journal'
10
+ require 'legion/extensions/dream/helpers/llm_enhancer'
11
+ require 'legion/extensions/dream/runners/dream_cycle'
12
+ require 'legion/extensions/dream/client'
13
+
14
+ module Legion
15
+ module Extensions
16
+ module Dream
17
+ extend Legion::Extensions::Core if Legion::Extensions.const_defined? :Core
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,49 @@
1
+ # Dream Cycle — 2026-03-14 06:45:20 UTC
2
+
3
+ ## Phase 1: Memory Audit
4
+
5
+ - Traces decayed: 0
6
+ - Traces pruned: 0
7
+ - Tier migrations: 0
8
+ - Consolidation candidates: 0
9
+ - Unresolved traces found: 0
10
+
11
+ ## Phase 2: Association Walk
12
+
13
+ - Start trace: none
14
+ - Paths found: 0
15
+
16
+ ## Phase 3: Contradiction Resolution
17
+
18
+ - Contradictions detected: 0
19
+ - Resolved: 0
20
+ - Unresolvable: 0
21
+
22
+ ## Phase 4: Identity Entropy
23
+
24
+ - Classification: normal
25
+ - Trend: stable
26
+ - Entropy value: 0.5
27
+
28
+ ## Phase 5: Agenda Formation
29
+
30
+ - Total agenda items: 0
31
+
32
+ ## Phase 6: Consolidation Commit
33
+
34
+ - Traces written to memory: 0
35
+ - Dream store cleared: true
36
+
37
+ ---
38
+
39
+ ## Summary
40
+
41
+ | Metric | Value |
42
+ |--------|-------|
43
+ | Traces decayed | 0 |
44
+ | Unresolved found | 0 |
45
+ | Associations walked | 0 |
46
+ | Contradictions detected | 0 |
47
+ | Contradictions resolved | 0 |
48
+ | Agenda items formed | 0 |
49
+ | Traces consolidated | 0 |
@@ -0,0 +1,49 @@
1
+ # Dream Cycle — 2026-03-14 06:45:46 UTC
2
+
3
+ ## Phase 1: Memory Audit
4
+
5
+ - Traces decayed: 0
6
+ - Traces pruned: 0
7
+ - Tier migrations: 0
8
+ - Consolidation candidates: 0
9
+ - Unresolved traces found: 0
10
+
11
+ ## Phase 2: Association Walk
12
+
13
+ - Start trace: none
14
+ - Paths found: 0
15
+
16
+ ## Phase 3: Contradiction Resolution
17
+
18
+ - Contradictions detected: 0
19
+ - Resolved: 0
20
+ - Unresolvable: 0
21
+
22
+ ## Phase 4: Identity Entropy
23
+
24
+ - Classification: normal
25
+ - Trend: stable
26
+ - Entropy value: 0.5
27
+
28
+ ## Phase 5: Agenda Formation
29
+
30
+ - Total agenda items: 0
31
+
32
+ ## Phase 6: Consolidation Commit
33
+
34
+ - Traces written to memory: 0
35
+ - Dream store cleared: true
36
+
37
+ ---
38
+
39
+ ## Summary
40
+
41
+ | Metric | Value |
42
+ |--------|-------|
43
+ | Traces decayed | 0 |
44
+ | Unresolved found | 0 |
45
+ | Associations walked | 0 |
46
+ | Contradictions detected | 0 |
47
+ | Contradictions resolved | 0 |
48
+ | Agenda items formed | 0 |
49
+ | Traces consolidated | 0 |
@@ -0,0 +1,49 @@
1
+ # Dream Cycle — 2026-03-14 06:52:44 UTC
2
+
3
+ ## Phase 1: Memory Audit
4
+
5
+ - Traces decayed: 0
6
+ - Traces pruned: 0
7
+ - Tier migrations: 0
8
+ - Consolidation candidates: 0
9
+ - Unresolved traces found: 0
10
+
11
+ ## Phase 2: Association Walk
12
+
13
+ - Start trace: none
14
+ - Paths found: 0
15
+
16
+ ## Phase 3: Contradiction Resolution
17
+
18
+ - Contradictions detected: 0
19
+ - Resolved: 0
20
+ - Unresolvable: 0
21
+
22
+ ## Phase 4: Identity Entropy
23
+
24
+ - Classification: normal
25
+ - Trend: stable
26
+ - Entropy value: 0.5
27
+
28
+ ## Phase 5: Agenda Formation
29
+
30
+ - Total agenda items: 0
31
+
32
+ ## Phase 6: Consolidation Commit
33
+
34
+ - Traces written to memory: 0
35
+ - Dream store cleared: true
36
+
37
+ ---
38
+
39
+ ## Summary
40
+
41
+ | Metric | Value |
42
+ |--------|-------|
43
+ | Traces decayed | 0 |
44
+ | Unresolved found | 0 |
45
+ | Associations walked | 0 |
46
+ | Contradictions detected | 0 |
47
+ | Contradictions resolved | 0 |
48
+ | Agenda items formed | 0 |
49
+ | Traces consolidated | 0 |
@@ -0,0 +1,49 @@
1
+ # Dream Cycle — 2026-03-14 06:53:58 UTC
2
+
3
+ ## Phase 1: Memory Audit
4
+
5
+ - Traces decayed: 0
6
+ - Traces pruned: 0
7
+ - Tier migrations: 0
8
+ - Consolidation candidates: 0
9
+ - Unresolved traces found: 0
10
+
11
+ ## Phase 2: Association Walk
12
+
13
+ - Start trace: none
14
+ - Paths found: 0
15
+
16
+ ## Phase 3: Contradiction Resolution
17
+
18
+ - Contradictions detected: 0
19
+ - Resolved: 0
20
+ - Unresolvable: 0
21
+
22
+ ## Phase 4: Identity Entropy
23
+
24
+ - Classification: normal
25
+ - Trend: stable
26
+ - Entropy value: 0.5
27
+
28
+ ## Phase 5: Agenda Formation
29
+
30
+ - Total agenda items: 0
31
+
32
+ ## Phase 6: Consolidation Commit
33
+
34
+ - Traces written to memory: 0
35
+ - Dream store cleared: true
36
+
37
+ ---
38
+
39
+ ## Summary
40
+
41
+ | Metric | Value |
42
+ |--------|-------|
43
+ | Traces decayed | 0 |
44
+ | Unresolved found | 0 |
45
+ | Associations walked | 0 |
46
+ | Contradictions detected | 0 |
47
+ | Contradictions resolved | 0 |
48
+ | Agenda items formed | 0 |
49
+ | Traces consolidated | 0 |
@@ -0,0 +1,49 @@
1
+ # Dream Cycle — 2026-03-14 06:54:35 UTC
2
+
3
+ ## Phase 1: Memory Audit
4
+
5
+ - Traces decayed: 0
6
+ - Traces pruned: 0
7
+ - Tier migrations: 0
8
+ - Consolidation candidates: 0
9
+ - Unresolved traces found: 0
10
+
11
+ ## Phase 2: Association Walk
12
+
13
+ - Start trace: none
14
+ - Paths found: 0
15
+
16
+ ## Phase 3: Contradiction Resolution
17
+
18
+ - Contradictions detected: 0
19
+ - Resolved: 0
20
+ - Unresolvable: 0
21
+
22
+ ## Phase 4: Identity Entropy
23
+
24
+ - Classification: normal
25
+ - Trend: stable
26
+ - Entropy value: 0.5
27
+
28
+ ## Phase 5: Agenda Formation
29
+
30
+ - Total agenda items: 0
31
+
32
+ ## Phase 6: Consolidation Commit
33
+
34
+ - Traces written to memory: 0
35
+ - Dream store cleared: true
36
+
37
+ ---
38
+
39
+ ## Summary
40
+
41
+ | Metric | Value |
42
+ |--------|-------|
43
+ | Traces decayed | 0 |
44
+ | Unresolved found | 0 |
45
+ | Associations walked | 0 |
46
+ | Contradictions detected | 0 |
47
+ | Contradictions resolved | 0 |
48
+ | Agenda items formed | 0 |
49
+ | Traces consolidated | 0 |
metadata ADDED
@@ -0,0 +1,87 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: lex-dream
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Esity
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: legion-gaia
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '0'
19
+ type: :development
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '0'
26
+ description: Autonomous dream cycle for brain-modeled agentic AI — memory consolidation,
27
+ association walking, contradiction resolution, and agenda formation
28
+ email:
29
+ - matthewdiverson@gmail.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - ".github/workflows/ci.yml"
35
+ - ".gitignore"
36
+ - ".rspec"
37
+ - ".rubocop.yml"
38
+ - CHANGELOG.md
39
+ - CLAUDE.md
40
+ - Gemfile
41
+ - README.md
42
+ - lex-dream.gemspec
43
+ - lib/legion/extensions/dream.rb
44
+ - lib/legion/extensions/dream/actors/dream_cycle.rb
45
+ - lib/legion/extensions/dream/client.rb
46
+ - lib/legion/extensions/dream/helpers/agenda.rb
47
+ - lib/legion/extensions/dream/helpers/association_walker.rb
48
+ - lib/legion/extensions/dream/helpers/constants.rb
49
+ - lib/legion/extensions/dream/helpers/contradiction_detector.rb
50
+ - lib/legion/extensions/dream/helpers/dream_journal.rb
51
+ - lib/legion/extensions/dream/helpers/dream_store.rb
52
+ - lib/legion/extensions/dream/helpers/llm_enhancer.rb
53
+ - lib/legion/extensions/dream/runners/dream_cycle.rb
54
+ - lib/legion/extensions/dream/version.rb
55
+ - logs/dreams/dream-2026-03-14_064520.md
56
+ - logs/dreams/dream-2026-03-14_064546.md
57
+ - logs/dreams/dream-2026-03-14_065244.md
58
+ - logs/dreams/dream-2026-03-14_065358.md
59
+ - logs/dreams/dream-2026-03-14_065435.md
60
+ homepage: https://github.com/LegionIO/lex-dream
61
+ licenses:
62
+ - MIT
63
+ metadata:
64
+ homepage_uri: https://github.com/LegionIO/lex-dream
65
+ source_code_uri: https://github.com/LegionIO/lex-dream
66
+ documentation_uri: https://github.com/LegionIO/lex-dream
67
+ changelog_uri: https://github.com/LegionIO/lex-dream
68
+ bug_tracker_uri: https://github.com/LegionIO/lex-dream/issues
69
+ rubygems_mfa_required: 'true'
70
+ rdoc_options: []
71
+ require_paths:
72
+ - lib
73
+ required_ruby_version: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ version: '3.4'
78
+ required_rubygems_version: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ requirements: []
84
+ rubygems_version: 3.6.9
85
+ specification_version: 4
86
+ summary: LEX Dream
87
+ test_files: []