lex-agentic-imagination 0.1.0
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 +7 -0
- data/CHANGELOG.md +12 -0
- data/Gemfile +5 -0
- data/LICENSE +21 -0
- data/README.md +13 -0
- data/lex-agentic-imagination.gemspec +34 -0
- data/lib/legion/extensions/agentic/imagination/alchemy/client.rb +15 -0
- data/lib/legion/extensions/agentic/imagination/alchemy/helpers/alchemy_engine.rb +140 -0
- data/lib/legion/extensions/agentic/imagination/alchemy/helpers/constants.rb +76 -0
- data/lib/legion/extensions/agentic/imagination/alchemy/helpers/crucible.rb +80 -0
- data/lib/legion/extensions/agentic/imagination/alchemy/helpers/substance.rb +118 -0
- data/lib/legion/extensions/agentic/imagination/alchemy/runners/cognitive_alchemy.rb +88 -0
- data/lib/legion/extensions/agentic/imagination/alchemy/version.rb +13 -0
- data/lib/legion/extensions/agentic/imagination/alchemy.rb +22 -0
- data/lib/legion/extensions/agentic/imagination/aurora/client.rb +25 -0
- data/lib/legion/extensions/agentic/imagination/aurora/helpers/aurora_engine.rb +123 -0
- data/lib/legion/extensions/agentic/imagination/aurora/helpers/aurora_event.rb +85 -0
- data/lib/legion/extensions/agentic/imagination/aurora/helpers/constants.rb +91 -0
- data/lib/legion/extensions/agentic/imagination/aurora/helpers/spectral_band.rb +79 -0
- data/lib/legion/extensions/agentic/imagination/aurora/runners/cognitive_aurora.rb +84 -0
- data/lib/legion/extensions/agentic/imagination/aurora/version.rb +13 -0
- data/lib/legion/extensions/agentic/imagination/aurora.rb +22 -0
- data/lib/legion/extensions/agentic/imagination/constellation/client.rb +15 -0
- data/lib/legion/extensions/agentic/imagination/constellation/helpers/constants.rb +59 -0
- data/lib/legion/extensions/agentic/imagination/constellation/helpers/constellation.rb +90 -0
- data/lib/legion/extensions/agentic/imagination/constellation/helpers/sky_engine.rb +131 -0
- data/lib/legion/extensions/agentic/imagination/constellation/helpers/star.rb +92 -0
- data/lib/legion/extensions/agentic/imagination/constellation/runners/cognitive_constellation.rb +76 -0
- data/lib/legion/extensions/agentic/imagination/constellation/version.rb +13 -0
- data/lib/legion/extensions/agentic/imagination/constellation.rb +22 -0
- data/lib/legion/extensions/agentic/imagination/creativity/client.rb +27 -0
- data/lib/legion/extensions/agentic/imagination/creativity/helpers/constants.rb +50 -0
- data/lib/legion/extensions/agentic/imagination/creativity/helpers/creative_engine.rb +151 -0
- data/lib/legion/extensions/agentic/imagination/creativity/helpers/idea.rb +106 -0
- data/lib/legion/extensions/agentic/imagination/creativity/helpers/idea_store.rb +103 -0
- data/lib/legion/extensions/agentic/imagination/creativity/runners/creativity.rb +176 -0
- data/lib/legion/extensions/agentic/imagination/creativity/version.rb +13 -0
- data/lib/legion/extensions/agentic/imagination/creativity.rb +20 -0
- data/lib/legion/extensions/agentic/imagination/dream/actors/dream_cycle.rb +45 -0
- data/lib/legion/extensions/agentic/imagination/dream/client.rb +29 -0
- data/lib/legion/extensions/agentic/imagination/dream/helpers/agenda.rb +74 -0
- data/lib/legion/extensions/agentic/imagination/dream/helpers/association_walker.rb +59 -0
- data/lib/legion/extensions/agentic/imagination/dream/helpers/constants.rb +34 -0
- data/lib/legion/extensions/agentic/imagination/dream/helpers/contradiction_detector.rb +86 -0
- data/lib/legion/extensions/agentic/imagination/dream/helpers/dream_journal.rb +231 -0
- data/lib/legion/extensions/agentic/imagination/dream/helpers/dream_store.rb +91 -0
- data/lib/legion/extensions/agentic/imagination/dream/helpers/llm_enhancer.rb +273 -0
- data/lib/legion/extensions/agentic/imagination/dream/runners/dream_cycle.rb +328 -0
- data/lib/legion/extensions/agentic/imagination/dream/version.rb +13 -0
- data/lib/legion/extensions/agentic/imagination/dream.rb +23 -0
- data/lib/legion/extensions/agentic/imagination/embodied_simulation/client.rb +19 -0
- data/lib/legion/extensions/agentic/imagination/embodied_simulation/helpers/constants.rb +49 -0
- data/lib/legion/extensions/agentic/imagination/embodied_simulation/helpers/simulation.rb +136 -0
- data/lib/legion/extensions/agentic/imagination/embodied_simulation/helpers/simulation_engine.rb +180 -0
- data/lib/legion/extensions/agentic/imagination/embodied_simulation/helpers/simulation_step.rb +49 -0
- data/lib/legion/extensions/agentic/imagination/embodied_simulation/runners/embodied_simulation.rb +99 -0
- data/lib/legion/extensions/agentic/imagination/embodied_simulation/version.rb +13 -0
- data/lib/legion/extensions/agentic/imagination/embodied_simulation.rb +21 -0
- data/lib/legion/extensions/agentic/imagination/garden/client.rb +15 -0
- data/lib/legion/extensions/agentic/imagination/garden/helpers/constants.rb +49 -0
- data/lib/legion/extensions/agentic/imagination/garden/helpers/garden_engine.rb +138 -0
- data/lib/legion/extensions/agentic/imagination/garden/helpers/plant.rb +116 -0
- data/lib/legion/extensions/agentic/imagination/garden/helpers/plot.rb +95 -0
- data/lib/legion/extensions/agentic/imagination/garden/runners/cognitive_garden.rb +75 -0
- data/lib/legion/extensions/agentic/imagination/garden/version.rb +13 -0
- data/lib/legion/extensions/agentic/imagination/garden.rb +22 -0
- data/lib/legion/extensions/agentic/imagination/genesis/client.rb +27 -0
- data/lib/legion/extensions/agentic/imagination/genesis/helpers/concept.rb +86 -0
- data/lib/legion/extensions/agentic/imagination/genesis/helpers/constants.rb +132 -0
- data/lib/legion/extensions/agentic/imagination/genesis/helpers/genesis_engine.rb +251 -0
- data/lib/legion/extensions/agentic/imagination/genesis/helpers/seed.rb +70 -0
- data/lib/legion/extensions/agentic/imagination/genesis/runners/genesis.rb +105 -0
- data/lib/legion/extensions/agentic/imagination/genesis/version.rb +13 -0
- data/lib/legion/extensions/agentic/imagination/genesis.rb +20 -0
- data/lib/legion/extensions/agentic/imagination/greenhouse/client.rb +24 -0
- data/lib/legion/extensions/agentic/imagination/greenhouse/helpers/constants.rb +89 -0
- data/lib/legion/extensions/agentic/imagination/greenhouse/helpers/greenhouse.rb +116 -0
- data/lib/legion/extensions/agentic/imagination/greenhouse/helpers/greenhouse_engine.rb +121 -0
- data/lib/legion/extensions/agentic/imagination/greenhouse/helpers/seedling.rb +155 -0
- data/lib/legion/extensions/agentic/imagination/greenhouse/runners/cognitive_greenhouse.rb +87 -0
- data/lib/legion/extensions/agentic/imagination/greenhouse/version.rb +13 -0
- data/lib/legion/extensions/agentic/imagination/greenhouse.rb +21 -0
- data/lib/legion/extensions/agentic/imagination/imagery/client.rb +21 -0
- data/lib/legion/extensions/agentic/imagination/imagery/helpers/constants.rb +55 -0
- data/lib/legion/extensions/agentic/imagination/imagery/helpers/scenario.rb +123 -0
- data/lib/legion/extensions/agentic/imagination/imagery/helpers/simulation_store.rb +80 -0
- data/lib/legion/extensions/agentic/imagination/imagery/runners/imagination.rb +210 -0
- data/lib/legion/extensions/agentic/imagination/imagery/version.rb +13 -0
- data/lib/legion/extensions/agentic/imagination/imagery.rb +20 -0
- data/lib/legion/extensions/agentic/imagination/liminal/client.rb +19 -0
- data/lib/legion/extensions/agentic/imagination/liminal/helpers/constants.rb +79 -0
- data/lib/legion/extensions/agentic/imagination/liminal/helpers/liminal_engine.rb +115 -0
- data/lib/legion/extensions/agentic/imagination/liminal/helpers/threshold_crossing.rb +136 -0
- data/lib/legion/extensions/agentic/imagination/liminal/runners/cognitive_liminal.rb +72 -0
- data/lib/legion/extensions/agentic/imagination/liminal/version.rb +13 -0
- data/lib/legion/extensions/agentic/imagination/liminal.rb +19 -0
- data/lib/legion/extensions/agentic/imagination/lucidity/client.rb +25 -0
- data/lib/legion/extensions/agentic/imagination/lucidity/helpers/constants.rb +48 -0
- data/lib/legion/extensions/agentic/imagination/lucidity/helpers/dream_state.rb +135 -0
- data/lib/legion/extensions/agentic/imagination/lucidity/helpers/journal_entry.rb +68 -0
- data/lib/legion/extensions/agentic/imagination/lucidity/helpers/lucidity_engine.rb +181 -0
- data/lib/legion/extensions/agentic/imagination/lucidity/runners/cognitive_lucidity.rb +95 -0
- data/lib/legion/extensions/agentic/imagination/lucidity/version.rb +13 -0
- data/lib/legion/extensions/agentic/imagination/lucidity.rb +22 -0
- data/lib/legion/extensions/agentic/imagination/mental_simulation/helpers/client.rb +23 -0
- data/lib/legion/extensions/agentic/imagination/mental_simulation/helpers/constants.rb +43 -0
- data/lib/legion/extensions/agentic/imagination/mental_simulation/helpers/simulation.rb +116 -0
- data/lib/legion/extensions/agentic/imagination/mental_simulation/helpers/simulation_engine.rb +141 -0
- data/lib/legion/extensions/agentic/imagination/mental_simulation/helpers/simulation_step.rb +53 -0
- data/lib/legion/extensions/agentic/imagination/mental_simulation/runners/mental_simulation.rb +92 -0
- data/lib/legion/extensions/agentic/imagination/mental_simulation/version.rb +13 -0
- data/lib/legion/extensions/agentic/imagination/mental_simulation.rb +20 -0
- data/lib/legion/extensions/agentic/imagination/origami/client.rb +41 -0
- data/lib/legion/extensions/agentic/imagination/origami/helpers/constants.rb +29 -0
- data/lib/legion/extensions/agentic/imagination/origami/helpers/crease.rb +53 -0
- data/lib/legion/extensions/agentic/imagination/origami/helpers/figure.rb +106 -0
- data/lib/legion/extensions/agentic/imagination/origami/helpers/origami_engine.rb +116 -0
- data/lib/legion/extensions/agentic/imagination/origami/runners/cognitive_origami.rb +71 -0
- data/lib/legion/extensions/agentic/imagination/origami/version.rb +13 -0
- data/lib/legion/extensions/agentic/imagination/origami.rb +22 -0
- data/lib/legion/extensions/agentic/imagination/prospection/actors/decay.rb +45 -0
- data/lib/legion/extensions/agentic/imagination/prospection/client.rb +26 -0
- data/lib/legion/extensions/agentic/imagination/prospection/helpers/constants.rb +41 -0
- data/lib/legion/extensions/agentic/imagination/prospection/helpers/prospection_engine.rb +129 -0
- data/lib/legion/extensions/agentic/imagination/prospection/helpers/scenario.rb +120 -0
- data/lib/legion/extensions/agentic/imagination/prospection/runners/prospection.rb +127 -0
- data/lib/legion/extensions/agentic/imagination/prospection/version.rb +13 -0
- data/lib/legion/extensions/agentic/imagination/prospection.rb +20 -0
- data/lib/legion/extensions/agentic/imagination/time_travel/client.rb +27 -0
- data/lib/legion/extensions/agentic/imagination/time_travel/helpers/constants.rb +37 -0
- data/lib/legion/extensions/agentic/imagination/time_travel/helpers/mental_journey.rb +149 -0
- data/lib/legion/extensions/agentic/imagination/time_travel/helpers/temporal_waypoint.rb +68 -0
- data/lib/legion/extensions/agentic/imagination/time_travel/helpers/time_traveler.rb +205 -0
- data/lib/legion/extensions/agentic/imagination/time_travel/runners/mental_time_travel.rb +145 -0
- data/lib/legion/extensions/agentic/imagination/time_travel/version.rb +13 -0
- data/lib/legion/extensions/agentic/imagination/time_travel.rb +20 -0
- data/lib/legion/extensions/agentic/imagination/version.rb +11 -0
- data/lib/legion/extensions/agentic/imagination/volcano/client.rb +47 -0
- data/lib/legion/extensions/agentic/imagination/volcano/helpers/chamber.rb +123 -0
- data/lib/legion/extensions/agentic/imagination/volcano/helpers/constants.rb +45 -0
- data/lib/legion/extensions/agentic/imagination/volcano/helpers/magma.rb +72 -0
- data/lib/legion/extensions/agentic/imagination/volcano/helpers/volcano_engine.rb +120 -0
- data/lib/legion/extensions/agentic/imagination/volcano/runners/cognitive_volcano.rb +108 -0
- data/lib/legion/extensions/agentic/imagination/volcano/version.rb +13 -0
- data/lib/legion/extensions/agentic/imagination/volcano.rb +21 -0
- data/lib/legion/extensions/agentic/imagination.rb +34 -0
- data/spec/legion/extensions/agentic/imagination/alchemy/client_spec.rb +16 -0
- data/spec/legion/extensions/agentic/imagination/alchemy/helpers/alchemy_engine_spec.rb +145 -0
- data/spec/legion/extensions/agentic/imagination/alchemy/helpers/constants_spec.rb +45 -0
- data/spec/legion/extensions/agentic/imagination/alchemy/helpers/crucible_spec.rb +111 -0
- data/spec/legion/extensions/agentic/imagination/alchemy/helpers/substance_spec.rb +174 -0
- data/spec/legion/extensions/agentic/imagination/alchemy/runners/cognitive_alchemy_spec.rb +99 -0
- data/spec/legion/extensions/agentic/imagination/aurora/client_spec.rb +164 -0
- data/spec/legion/extensions/agentic/imagination/aurora/helpers/aurora_engine_spec.rb +291 -0
- data/spec/legion/extensions/agentic/imagination/aurora/helpers/aurora_event_spec.rb +217 -0
- data/spec/legion/extensions/agentic/imagination/aurora/helpers/spectral_band_spec.rb +186 -0
- data/spec/legion/extensions/agentic/imagination/constellation/client_spec.rb +16 -0
- data/spec/legion/extensions/agentic/imagination/constellation/helpers/constants_spec.rb +35 -0
- data/spec/legion/extensions/agentic/imagination/constellation/helpers/constellation_spec.rb +116 -0
- data/spec/legion/extensions/agentic/imagination/constellation/helpers/sky_engine_spec.rb +136 -0
- data/spec/legion/extensions/agentic/imagination/constellation/helpers/star_spec.rb +126 -0
- data/spec/legion/extensions/agentic/imagination/constellation/runners/cognitive_constellation_spec.rb +86 -0
- data/spec/legion/extensions/agentic/imagination/creativity/client_spec.rb +68 -0
- data/spec/legion/extensions/agentic/imagination/creativity/helpers/constants_spec.rb +129 -0
- data/spec/legion/extensions/agentic/imagination/creativity/helpers/creative_engine_spec.rb +220 -0
- data/spec/legion/extensions/agentic/imagination/creativity/helpers/idea_store_spec.rb +232 -0
- data/spec/legion/extensions/agentic/imagination/creativity/runners/creativity_spec.rb +237 -0
- data/spec/legion/extensions/agentic/imagination/dream/actors/dream_cycle_spec.rb +51 -0
- data/spec/legion/extensions/agentic/imagination/dream/client_spec.rb +27 -0
- data/spec/legion/extensions/agentic/imagination/dream/helpers/agenda_spec.rb +148 -0
- data/spec/legion/extensions/agentic/imagination/dream/helpers/association_walker_spec.rb +123 -0
- data/spec/legion/extensions/agentic/imagination/dream/helpers/contradiction_detector_spec.rb +183 -0
- data/spec/legion/extensions/agentic/imagination/dream/helpers/dream_store_spec.rb +141 -0
- data/spec/legion/extensions/agentic/imagination/dream/integration_spec.rb +98 -0
- data/spec/legion/extensions/agentic/imagination/dream/runners/dream_cycle_spec.rb +116 -0
- data/spec/legion/extensions/agentic/imagination/embodied_simulation/client_spec.rb +44 -0
- data/spec/legion/extensions/agentic/imagination/embodied_simulation/helpers/simulation_engine_spec.rb +201 -0
- data/spec/legion/extensions/agentic/imagination/embodied_simulation/helpers/simulation_spec.rb +178 -0
- data/spec/legion/extensions/agentic/imagination/embodied_simulation/helpers/simulation_step_spec.rb +83 -0
- data/spec/legion/extensions/agentic/imagination/embodied_simulation/runners/embodied_simulation_spec.rb +124 -0
- data/spec/legion/extensions/agentic/imagination/garden/client_spec.rb +34 -0
- data/spec/legion/extensions/agentic/imagination/garden/helpers/constants_spec.rb +41 -0
- data/spec/legion/extensions/agentic/imagination/garden/helpers/garden_engine_spec.rb +119 -0
- data/spec/legion/extensions/agentic/imagination/garden/helpers/plant_spec.rb +147 -0
- data/spec/legion/extensions/agentic/imagination/garden/helpers/plot_spec.rb +92 -0
- data/spec/legion/extensions/agentic/imagination/garden/runners/cognitive_garden_spec.rb +75 -0
- data/spec/legion/extensions/agentic/imagination/genesis/client_spec.rb +110 -0
- data/spec/legion/extensions/agentic/imagination/genesis/cognitive_genesis_spec.rb +31 -0
- data/spec/legion/extensions/agentic/imagination/genesis/helpers/concept_spec.rb +221 -0
- data/spec/legion/extensions/agentic/imagination/genesis/helpers/constants_spec.rb +145 -0
- data/spec/legion/extensions/agentic/imagination/genesis/helpers/genesis_engine_spec.rb +339 -0
- data/spec/legion/extensions/agentic/imagination/genesis/helpers/seed_spec.rb +197 -0
- data/spec/legion/extensions/agentic/imagination/genesis/runners/genesis_spec.rb +177 -0
- data/spec/legion/extensions/agentic/imagination/greenhouse/client_spec.rb +89 -0
- data/spec/legion/extensions/agentic/imagination/greenhouse/helpers/constants_spec.rb +74 -0
- data/spec/legion/extensions/agentic/imagination/greenhouse/helpers/greenhouse_engine_spec.rb +163 -0
- data/spec/legion/extensions/agentic/imagination/greenhouse/helpers/greenhouse_spec.rb +193 -0
- data/spec/legion/extensions/agentic/imagination/greenhouse/helpers/seedling_spec.rb +224 -0
- data/spec/legion/extensions/agentic/imagination/greenhouse/runners/cognitive_greenhouse_spec.rb +139 -0
- data/spec/legion/extensions/agentic/imagination/imagery/client_spec.rb +20 -0
- data/spec/legion/extensions/agentic/imagination/imagery/helpers/constants_spec.rb +25 -0
- data/spec/legion/extensions/agentic/imagination/imagery/helpers/scenario_spec.rb +111 -0
- data/spec/legion/extensions/agentic/imagination/imagery/helpers/simulation_store_spec.rb +89 -0
- data/spec/legion/extensions/agentic/imagination/imagery/runners/imagination_spec.rb +99 -0
- data/spec/legion/extensions/agentic/imagination/liminal/client_spec.rb +21 -0
- data/spec/legion/extensions/agentic/imagination/liminal/cognitive_liminal_spec.rb +7 -0
- data/spec/legion/extensions/agentic/imagination/liminal/helpers/liminal_engine_spec.rb +130 -0
- data/spec/legion/extensions/agentic/imagination/liminal/helpers/threshold_crossing_spec.rb +155 -0
- data/spec/legion/extensions/agentic/imagination/liminal/runners_spec.rb +81 -0
- data/spec/legion/extensions/agentic/imagination/lucidity/client_spec.rb +76 -0
- data/spec/legion/extensions/agentic/imagination/lucidity/cognitive_lucidity_spec.rb +19 -0
- data/spec/legion/extensions/agentic/imagination/lucidity/helpers/constants_spec.rb +89 -0
- data/spec/legion/extensions/agentic/imagination/lucidity/helpers/dream_state_spec.rb +210 -0
- data/spec/legion/extensions/agentic/imagination/lucidity/helpers/journal_entry_spec.rb +103 -0
- data/spec/legion/extensions/agentic/imagination/lucidity/helpers/lucidity_engine_spec.rb +259 -0
- data/spec/legion/extensions/agentic/imagination/lucidity/runners/cognitive_lucidity_spec.rb +156 -0
- data/spec/legion/extensions/agentic/imagination/mental_simulation/helpers/constants_spec.rb +107 -0
- data/spec/legion/extensions/agentic/imagination/mental_simulation/helpers/simulation_engine_spec.rb +217 -0
- data/spec/legion/extensions/agentic/imagination/mental_simulation/helpers/simulation_spec.rb +223 -0
- data/spec/legion/extensions/agentic/imagination/mental_simulation/helpers/simulation_step_spec.rb +111 -0
- data/spec/legion/extensions/agentic/imagination/mental_simulation/runners/mental_simulation_spec.rb +184 -0
- data/spec/legion/extensions/agentic/imagination/origami/client_spec.rb +98 -0
- data/spec/legion/extensions/agentic/imagination/origami/helpers/constants_spec.rb +70 -0
- data/spec/legion/extensions/agentic/imagination/origami/helpers/crease_spec.rb +121 -0
- data/spec/legion/extensions/agentic/imagination/origami/helpers/figure_spec.rb +212 -0
- data/spec/legion/extensions/agentic/imagination/origami/helpers/origami_engine_spec.rb +239 -0
- data/spec/legion/extensions/agentic/imagination/origami/runners/cognitive_origami_spec.rb +112 -0
- data/spec/legion/extensions/agentic/imagination/prospection/client_spec.rb +107 -0
- data/spec/legion/extensions/agentic/imagination/prospection/helpers/prospection_engine_spec.rb +197 -0
- data/spec/legion/extensions/agentic/imagination/prospection/helpers/scenario_spec.rb +260 -0
- data/spec/legion/extensions/agentic/imagination/prospection/runners/prospection_spec.rb +156 -0
- data/spec/legion/extensions/agentic/imagination/time_travel/client_spec.rb +34 -0
- data/spec/legion/extensions/agentic/imagination/time_travel/helpers/constants_spec.rb +83 -0
- data/spec/legion/extensions/agentic/imagination/time_travel/helpers/mental_journey_spec.rb +274 -0
- data/spec/legion/extensions/agentic/imagination/time_travel/helpers/temporal_waypoint_spec.rb +177 -0
- data/spec/legion/extensions/agentic/imagination/time_travel/helpers/time_traveler_spec.rb +334 -0
- data/spec/legion/extensions/agentic/imagination/time_travel/runners/mental_time_travel_spec.rb +323 -0
- data/spec/legion/extensions/agentic/imagination/volcano/client_spec.rb +89 -0
- data/spec/legion/extensions/agentic/imagination/volcano/helpers/chamber_spec.rb +266 -0
- data/spec/legion/extensions/agentic/imagination/volcano/helpers/constants_spec.rb +83 -0
- data/spec/legion/extensions/agentic/imagination/volcano/helpers/magma_spec.rb +157 -0
- data/spec/legion/extensions/agentic/imagination/volcano/helpers/volcano_engine_spec.rb +191 -0
- data/spec/legion/extensions/agentic/imagination/volcano/integration_spec.rb +148 -0
- data/spec/legion/extensions/agentic/imagination/volcano/runners/cognitive_volcano_spec.rb +167 -0
- data/spec/spec_helper.rb +54 -0
- metadata +386 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
RSpec.describe Legion::Extensions::Agentic::Imagination::Imagery::Runners::Imagination do
|
|
4
|
+
let(:client) { Legion::Extensions::Agentic::Imagination::Imagery::Client.new }
|
|
5
|
+
|
|
6
|
+
describe '#simulate' do
|
|
7
|
+
it 'simulates multiple actions' do
|
|
8
|
+
result = client.simulate(actions: %w[deploy rollback wait])
|
|
9
|
+
expect(result[:scenarios].size).to eq(3)
|
|
10
|
+
expect(result).to have_key(:recommendation)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it 'limits to MAX_SCENARIOS' do
|
|
14
|
+
actions = (1..10).map { |i| "action_#{i}" }
|
|
15
|
+
result = client.simulate(actions: actions)
|
|
16
|
+
expect(result[:scenarios].size).to be <= Legion::Extensions::Agentic::Imagination::Imagery::Helpers::Constants::MAX_SCENARIOS
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it 'stores simulation in history' do
|
|
20
|
+
client.simulate(actions: %w[deploy])
|
|
21
|
+
expect(client.simulation_store.size).to eq(1)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it 'recommends the best action' do
|
|
25
|
+
result = client.simulate(
|
|
26
|
+
actions: %w[safe_action risky_action],
|
|
27
|
+
context: { familiar: true, alignment: 0.8 },
|
|
28
|
+
risk_tolerance: :conservative
|
|
29
|
+
)
|
|
30
|
+
expect(result[:recommendation]).to have_key(:action)
|
|
31
|
+
expect(result[:recommendation]).to have_key(:composite)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it 'respects risk tolerance' do
|
|
35
|
+
conservative = client.simulate(actions: %w[deploy], risk_tolerance: :conservative)
|
|
36
|
+
aggressive = client.simulate(actions: %w[deploy], risk_tolerance: :aggressive)
|
|
37
|
+
expect(conservative[:recommendation]).not_to be_nil
|
|
38
|
+
expect(aggressive[:recommendation]).not_to be_nil
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
describe '#what_if' do
|
|
43
|
+
it 'returns scenario with consequence chain' do
|
|
44
|
+
result = client.what_if(action: 'merge_without_tests', depth: 2)
|
|
45
|
+
expect(result[:consequence_chain].size).to eq(3)
|
|
46
|
+
expect(result[:depth]).to eq(2)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it 'limits depth to MAX_DEPTH' do
|
|
50
|
+
result = client.what_if(action: 'test', depth: 100)
|
|
51
|
+
expect(result[:depth]).to eq(Legion::Extensions::Agentic::Imagination::Imagery::Helpers::Constants::MAX_DEPTH)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it 'returns overall valence' do
|
|
55
|
+
result = client.what_if(action: 'safe_deploy', context: { familiar: true })
|
|
56
|
+
expect(result[:overall_valence]).to be_a(Symbol)
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
describe '#compare' do
|
|
61
|
+
it 'compares two actions' do
|
|
62
|
+
result = client.compare(action_a: 'refactor', action_b: 'ship_now')
|
|
63
|
+
expect(%i[a b]).to include(result[:winner])
|
|
64
|
+
expect(result).to have_key(:margin)
|
|
65
|
+
expect(result).to have_key(:decisive)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it 'returns scenario details for both' do
|
|
69
|
+
result = client.compare(action_a: 'a', action_b: 'b')
|
|
70
|
+
expect(result[:scenario_a]).to have_key(:expected_value)
|
|
71
|
+
expect(result[:scenario_b]).to have_key(:expected_value)
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
describe '#record_actual_outcome' do
|
|
76
|
+
it 'records outcome for existing simulation' do
|
|
77
|
+
sim = client.simulate(actions: %w[deploy])
|
|
78
|
+
result = client.record_actual_outcome(
|
|
79
|
+
simulation_id: sim[:simulation_id],
|
|
80
|
+
actual_outcome: { valence: :positive }
|
|
81
|
+
)
|
|
82
|
+
expect(result[:accurate]).not_to be_nil
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
it 'returns error for missing simulation' do
|
|
86
|
+
result = client.record_actual_outcome(simulation_id: 'nonexistent', actual_outcome: {})
|
|
87
|
+
expect(result[:error]).to eq(:not_found)
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
describe '#imagination_stats' do
|
|
92
|
+
it 'returns stats summary' do
|
|
93
|
+
client.simulate(actions: %w[deploy])
|
|
94
|
+
result = client.imagination_stats
|
|
95
|
+
expect(result[:total_simulations]).to eq(1)
|
|
96
|
+
expect(result).to have_key(:by_mode)
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
RSpec.describe Legion::Extensions::Agentic::Imagination::Liminal::Client do
|
|
4
|
+
subject(:client) { described_class.new }
|
|
5
|
+
|
|
6
|
+
it 'responds to runner methods' do
|
|
7
|
+
expect(client).to respond_to(:begin_crossing, :advance_crossing, :liminal_status)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it 'runs a full liminal lifecycle' do
|
|
11
|
+
result = client.begin_crossing(origin: :analytical, destination: :creative, domain: :cognitive)
|
|
12
|
+
crossing_id = result[:crossing][:id]
|
|
13
|
+
|
|
14
|
+
5.times { client.advance_crossing(crossing_id: crossing_id) }
|
|
15
|
+
client.dissolve_crossing(crossing_id: crossing_id)
|
|
16
|
+
10.times { client.crystallize_crossing(crossing_id: crossing_id) }
|
|
17
|
+
|
|
18
|
+
status = client.liminal_status
|
|
19
|
+
expect(status[:total_crossings]).to eq(1)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
RSpec.describe Legion::Extensions::Agentic::Imagination::Liminal::Helpers::LiminalEngine do
|
|
4
|
+
subject(:engine) { described_class.new }
|
|
5
|
+
|
|
6
|
+
describe '#begin_crossing' do
|
|
7
|
+
it 'creates a threshold crossing' do
|
|
8
|
+
crossing = engine.begin_crossing(origin: :analytical, destination: :creative)
|
|
9
|
+
expect(crossing.origin).to eq(:analytical)
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
describe '#advance_crossing' do
|
|
14
|
+
it 'advances known crossing' do
|
|
15
|
+
crossing = engine.begin_crossing(origin: :analytical, destination: :creative)
|
|
16
|
+
engine.advance_crossing(crossing_id: crossing.id)
|
|
17
|
+
expect(crossing.ticks_in_liminal).to eq(1)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it 'returns nil for unknown crossing' do
|
|
21
|
+
expect(engine.advance_crossing(crossing_id: 'bad')).to be_nil
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
describe '#dissolve_crossing' do
|
|
26
|
+
it 'dissolves known crossing' do
|
|
27
|
+
crossing = engine.begin_crossing(origin: :focused, destination: :diffuse)
|
|
28
|
+
original = crossing.ambiguity
|
|
29
|
+
engine.dissolve_crossing(crossing_id: crossing.id)
|
|
30
|
+
expect(crossing.ambiguity).to be > original
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
describe '#crystallize_crossing' do
|
|
35
|
+
it 'crystallizes known crossing' do
|
|
36
|
+
crossing = engine.begin_crossing(origin: :intuitive, destination: :deliberate)
|
|
37
|
+
original = crossing.ambiguity
|
|
38
|
+
engine.crystallize_crossing(crossing_id: crossing.id)
|
|
39
|
+
expect(crossing.ambiguity).to be < original
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
describe '#active_crossings' do
|
|
44
|
+
it 'returns active crossings' do
|
|
45
|
+
engine.begin_crossing(origin: :analytical, destination: :creative)
|
|
46
|
+
expect(engine.active_crossings.size).to eq(1)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
describe '#completed_crossings' do
|
|
51
|
+
it 'returns completed crossings' do
|
|
52
|
+
crossing = engine.begin_crossing(origin: :analytical, destination: :creative)
|
|
53
|
+
20.times { crossing.advance! }
|
|
54
|
+
expect(engine.completed_crossings.size).to eq(1)
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
describe '#liminal_crossings' do
|
|
59
|
+
it 'returns crossings in margin phase' do
|
|
60
|
+
crossing = engine.begin_crossing(origin: :analytical, destination: :creative)
|
|
61
|
+
5.times { crossing.advance! }
|
|
62
|
+
expect(engine.liminal_crossings.size).to eq(1)
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
describe '#fertile_crossings' do
|
|
67
|
+
it 'returns fertile crossings' do
|
|
68
|
+
engine.begin_crossing(origin: :analytical, destination: :creative)
|
|
69
|
+
expect(engine.fertile_crossings.size).to eq(1)
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
describe '#crossings_by_domain' do
|
|
74
|
+
it 'filters by domain' do
|
|
75
|
+
engine.begin_crossing(origin: :analytical, destination: :creative, domain: :cognitive)
|
|
76
|
+
engine.begin_crossing(origin: :focused, destination: :diffuse, domain: :emotional)
|
|
77
|
+
expect(engine.crossings_by_domain(domain: :cognitive).size).to eq(1)
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
describe '#average_ambiguity' do
|
|
82
|
+
it 'returns 0.0 with no active crossings' do
|
|
83
|
+
expect(engine.average_ambiguity).to eq(0.0)
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
it 'returns average for active crossings' do
|
|
87
|
+
engine.begin_crossing(origin: :analytical, destination: :creative, ambiguity: 0.4)
|
|
88
|
+
engine.begin_crossing(origin: :focused, destination: :diffuse, ambiguity: 0.6)
|
|
89
|
+
expect(engine.average_ambiguity).to eq(0.5)
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
describe '#average_creative_potential' do
|
|
94
|
+
it 'returns 0.0 with no active crossings' do
|
|
95
|
+
expect(engine.average_creative_potential).to eq(0.0)
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
describe '#liminal_density' do
|
|
100
|
+
it 'returns 0.0 with no crossings' do
|
|
101
|
+
expect(engine.liminal_density).to eq(0.0)
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
describe '#most_liminal' do
|
|
106
|
+
it 'returns sorted by ambiguity descending' do
|
|
107
|
+
engine.begin_crossing(origin: :analytical, destination: :creative, ambiguity: 0.3)
|
|
108
|
+
high = engine.begin_crossing(origin: :focused, destination: :diffuse, ambiguity: 0.8)
|
|
109
|
+
expect(engine.most_liminal(limit: 1).first.id).to eq(high.id)
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
describe '#liminal_report' do
|
|
114
|
+
it 'includes all report fields' do
|
|
115
|
+
report = engine.liminal_report
|
|
116
|
+
expect(report).to include(
|
|
117
|
+
:total_crossings, :active_count, :liminal_count, :completed_count,
|
|
118
|
+
:fertile_count, :peak_count, :average_ambiguity, :average_potential,
|
|
119
|
+
:liminal_density, :most_liminal
|
|
120
|
+
)
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
describe '#to_h' do
|
|
125
|
+
it 'includes summary fields' do
|
|
126
|
+
hash = engine.to_h
|
|
127
|
+
expect(hash).to include(:total_crossings, :active, :liminal, :avg_ambiguity, :avg_potential)
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
end
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
RSpec.describe Legion::Extensions::Agentic::Imagination::Liminal::Helpers::ThresholdCrossing do
|
|
4
|
+
subject(:crossing) { described_class.new(origin: :analytical, destination: :creative) }
|
|
5
|
+
|
|
6
|
+
describe '#initialize' do
|
|
7
|
+
it 'assigns a UUID id' do
|
|
8
|
+
expect(crossing.id).to match(/\A[0-9a-f-]{36}\z/)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it 'stores origin' do
|
|
12
|
+
expect(crossing.origin).to eq(:analytical)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it 'stores destination' do
|
|
16
|
+
expect(crossing.destination).to eq(:creative)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it 'defaults to separation phase' do
|
|
20
|
+
expect(crossing.phase).to eq(:separation)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it 'defaults ambiguity' do
|
|
24
|
+
expect(crossing.ambiguity).to eq(0.5)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it 'starts with active status' do
|
|
28
|
+
expect(crossing.status).to eq(:active)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it 'starts with 0 ticks' do
|
|
32
|
+
expect(crossing.ticks_in_liminal).to eq(0)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it 'validates origin state' do
|
|
36
|
+
bad = described_class.new(origin: :nonexistent, destination: :creative)
|
|
37
|
+
expect(bad.origin).to eq(:analytical)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
describe '#advance!' do
|
|
42
|
+
it 'increments ticks' do
|
|
43
|
+
crossing.advance!
|
|
44
|
+
expect(crossing.ticks_in_liminal).to eq(1)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it 'increases progress' do
|
|
48
|
+
original = crossing.progress
|
|
49
|
+
crossing.advance!
|
|
50
|
+
expect(crossing.progress).to be > original
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it 'transitions to margin phase' do
|
|
54
|
+
5.times { crossing.advance! }
|
|
55
|
+
expect(crossing.phase).to eq(:margin)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it 'eventually completes' do
|
|
59
|
+
20.times { crossing.advance! }
|
|
60
|
+
expect(crossing.incorporated?).to be true
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it 'does not advance completed crossings' do
|
|
64
|
+
20.times { crossing.advance! }
|
|
65
|
+
ticks = crossing.ticks_in_liminal
|
|
66
|
+
crossing.advance!
|
|
67
|
+
expect(crossing.ticks_in_liminal).to eq(ticks)
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
describe '#dissolve!' do
|
|
72
|
+
it 'increases ambiguity' do
|
|
73
|
+
original = crossing.ambiguity
|
|
74
|
+
crossing.dissolve!
|
|
75
|
+
expect(crossing.ambiguity).to be > original
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
it 'sets quality to dissolving' do
|
|
79
|
+
crossing.dissolve!
|
|
80
|
+
expect(crossing.quality).to eq(:dissolving)
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
describe '#crystallize!' do
|
|
85
|
+
it 'decreases ambiguity' do
|
|
86
|
+
original = crossing.ambiguity
|
|
87
|
+
crossing.crystallize!
|
|
88
|
+
expect(crossing.ambiguity).to be < original
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
it 'increases progress' do
|
|
92
|
+
original = crossing.progress
|
|
93
|
+
crossing.crystallize!
|
|
94
|
+
expect(crossing.progress).to be > original
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
it 'sets quality to crystallizing' do
|
|
98
|
+
crossing.crystallize!
|
|
99
|
+
expect(crossing.quality).to eq(:crystallizing)
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
describe '#complete!' do
|
|
104
|
+
it 'sets status to completed' do
|
|
105
|
+
crossing.complete!
|
|
106
|
+
expect(crossing.status).to eq(:completed)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
it 'sets progress to 1.0' do
|
|
110
|
+
crossing.complete!
|
|
111
|
+
expect(crossing.progress).to eq(1.0)
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
it 'clears ambiguity' do
|
|
115
|
+
crossing.complete!
|
|
116
|
+
expect(crossing.ambiguity).to eq(0.0)
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
describe '#liminal?' do
|
|
121
|
+
it 'is false in separation' do
|
|
122
|
+
expect(crossing.liminal?).to be false
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
it 'is true in margin phase' do
|
|
126
|
+
5.times { crossing.advance! }
|
|
127
|
+
expect(crossing.liminal?).to be true
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
describe '#peak_liminality?' do
|
|
132
|
+
it 'is true when ambiguity is high' do
|
|
133
|
+
5.times { crossing.dissolve! }
|
|
134
|
+
expect(crossing.peak_liminality?).to be true
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
describe '#fertile?' do
|
|
139
|
+
it 'detects creative potential peak' do
|
|
140
|
+
expect(crossing.fertile?).to be true
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
describe '#to_h' do
|
|
145
|
+
it 'includes all fields' do
|
|
146
|
+
hash = crossing.to_h
|
|
147
|
+
expect(hash).to include(
|
|
148
|
+
:id, :origin, :destination, :domain, :phase, :ambiguity,
|
|
149
|
+
:creative_potential, :progress, :quality, :status,
|
|
150
|
+
:ticks_in_liminal, :liminal, :peak_liminality, :fertile,
|
|
151
|
+
:ambiguity_label, :potential_label, :progress_label, :created_at
|
|
152
|
+
)
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
end
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
RSpec.describe Legion::Extensions::Agentic::Imagination::Liminal::Runners::CognitiveLiminal do
|
|
4
|
+
let(:engine) { Legion::Extensions::Agentic::Imagination::Liminal::Helpers::LiminalEngine.new }
|
|
5
|
+
let(:runner) do
|
|
6
|
+
obj = Object.new
|
|
7
|
+
obj.extend(described_class)
|
|
8
|
+
obj.instance_variable_set(:@default_engine, engine)
|
|
9
|
+
obj
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
describe '#begin_crossing' do
|
|
13
|
+
it 'returns success with crossing hash' do
|
|
14
|
+
result = runner.begin_crossing(origin: :analytical, destination: :creative, engine: engine)
|
|
15
|
+
expect(result[:success]).to be true
|
|
16
|
+
expect(result[:crossing][:origin]).to eq(:analytical)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
describe '#advance_crossing' do
|
|
21
|
+
it 'returns success for known crossing' do
|
|
22
|
+
crossing = engine.begin_crossing(origin: :analytical, destination: :creative)
|
|
23
|
+
result = runner.advance_crossing(crossing_id: crossing.id, engine: engine)
|
|
24
|
+
expect(result[:success]).to be true
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it 'returns failure for unknown crossing' do
|
|
28
|
+
result = runner.advance_crossing(crossing_id: 'bad', engine: engine)
|
|
29
|
+
expect(result[:success]).to be false
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
describe '#dissolve_crossing' do
|
|
34
|
+
it 'returns success for known crossing' do
|
|
35
|
+
crossing = engine.begin_crossing(origin: :analytical, destination: :creative)
|
|
36
|
+
result = runner.dissolve_crossing(crossing_id: crossing.id, engine: engine)
|
|
37
|
+
expect(result[:success]).to be true
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
describe '#crystallize_crossing' do
|
|
42
|
+
it 'returns success for known crossing' do
|
|
43
|
+
crossing = engine.begin_crossing(origin: :analytical, destination: :creative)
|
|
44
|
+
result = runner.crystallize_crossing(crossing_id: crossing.id, engine: engine)
|
|
45
|
+
expect(result[:success]).to be true
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
describe '#active_crossings' do
|
|
50
|
+
it 'returns active list' do
|
|
51
|
+
engine.begin_crossing(origin: :analytical, destination: :creative)
|
|
52
|
+
result = runner.active_crossings(engine: engine)
|
|
53
|
+
expect(result[:count]).to eq(1)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
describe '#liminal_crossings' do
|
|
58
|
+
it 'returns liminal list' do
|
|
59
|
+
crossing = engine.begin_crossing(origin: :analytical, destination: :creative)
|
|
60
|
+
5.times { crossing.advance! }
|
|
61
|
+
result = runner.liminal_crossings(engine: engine)
|
|
62
|
+
expect(result[:count]).to eq(1)
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
describe '#fertile_crossings' do
|
|
67
|
+
it 'returns fertile list' do
|
|
68
|
+
engine.begin_crossing(origin: :analytical, destination: :creative)
|
|
69
|
+
result = runner.fertile_crossings(engine: engine)
|
|
70
|
+
expect(result[:count]).to eq(1)
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
describe '#liminal_status' do
|
|
75
|
+
it 'returns comprehensive status' do
|
|
76
|
+
result = runner.liminal_status(engine: engine)
|
|
77
|
+
expect(result[:success]).to be true
|
|
78
|
+
expect(result).to include(:total_crossings, :liminal_density)
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
RSpec.describe Legion::Extensions::Agentic::Imagination::Lucidity::Client do
|
|
4
|
+
subject(:client) { described_class.new }
|
|
5
|
+
|
|
6
|
+
describe '#initialize' do
|
|
7
|
+
it 'creates a LucidityEngine by default' do
|
|
8
|
+
expect(client.send(:default_engine)).to be_a(
|
|
9
|
+
Legion::Extensions::Agentic::Imagination::Lucidity::Helpers::LucidityEngine
|
|
10
|
+
)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it 'accepts an injected engine' do
|
|
14
|
+
custom = Legion::Extensions::Agentic::Imagination::Lucidity::Helpers::LucidityEngine.new
|
|
15
|
+
c = described_class.new(engine: custom)
|
|
16
|
+
expect(c.send(:default_engine)).to be(custom)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
describe 'runner inclusion' do
|
|
21
|
+
it 'responds to begin_dream' do
|
|
22
|
+
expect(client).to respond_to(:begin_dream)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it 'responds to reality_test' do
|
|
26
|
+
expect(client).to respond_to(:reality_test)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it 'responds to steer_dream' do
|
|
30
|
+
expect(client).to respond_to(:steer_dream)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it 'responds to end_dream' do
|
|
34
|
+
expect(client).to respond_to(:end_dream)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it 'responds to lucidity_status' do
|
|
38
|
+
expect(client).to respond_to(:lucidity_status)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it 'responds to journal_entries' do
|
|
42
|
+
expect(client).to respond_to(:journal_entries)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
describe 'full workflow' do
|
|
47
|
+
it 'begins a dream, runs a reality test, steers it, and ends it' do
|
|
48
|
+
begin_result = client.begin_dream(theme: :underwater, content: 'coral reef')
|
|
49
|
+
dream_id = begin_result[:dream_id]
|
|
50
|
+
|
|
51
|
+
expect(begin_result[:success]).to be true
|
|
52
|
+
|
|
53
|
+
status = client.lucidity_status
|
|
54
|
+
expect(status[:active_dream]).not_to be_nil
|
|
55
|
+
|
|
56
|
+
engine = client.send(:default_engine)
|
|
57
|
+
state = engine.all_dreams.find { |d| d.id == dream_id }
|
|
58
|
+
|
|
59
|
+
# Force enough lucidity to steer
|
|
60
|
+
10.times do
|
|
61
|
+
allow(state).to receive(:rand).and_return(0.5)
|
|
62
|
+
state.reality_test!(:hand_check)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
steer_result = client.steer_dream(dream_id: dream_id, direction: :transform_into_forest)
|
|
66
|
+
expect(steer_result[:success]).to be true
|
|
67
|
+
|
|
68
|
+
end_result = client.end_dream(dream_id: dream_id, insights: ['became aware in dream'])
|
|
69
|
+
expect(end_result[:success]).to be true
|
|
70
|
+
|
|
71
|
+
journal = client.journal_entries
|
|
72
|
+
expect(journal[:count]).to eq(1)
|
|
73
|
+
expect(journal[:entries].first[:insights]).to include('became aware in dream')
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
RSpec.describe Legion::Extensions::Agentic::Imagination::Lucidity do
|
|
4
|
+
it 'has a VERSION constant' do
|
|
5
|
+
expect(described_class::VERSION).to match(/\d+\.\d+\.\d+/)
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
it 'loads the helpers namespace' do
|
|
9
|
+
expect(defined?(Legion::Extensions::Agentic::Imagination::Lucidity::Helpers)).to be_truthy
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it 'loads the runners namespace' do
|
|
13
|
+
expect(defined?(Legion::Extensions::Agentic::Imagination::Lucidity::Runners)).to be_truthy
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it 'loads the Client class' do
|
|
17
|
+
expect(defined?(Legion::Extensions::Agentic::Imagination::Lucidity::Client)).to be_truthy
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
RSpec.describe Legion::Extensions::Agentic::Imagination::Lucidity::Helpers::Constants do
|
|
4
|
+
describe 'MAX_JOURNAL_ENTRIES' do
|
|
5
|
+
it 'is 500' do
|
|
6
|
+
expect(described_class::MAX_JOURNAL_ENTRIES).to eq(500)
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
describe 'MAX_DREAMS' do
|
|
11
|
+
it 'is 100' do
|
|
12
|
+
expect(described_class::MAX_DREAMS).to eq(100)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
describe 'LUCIDITY_LEVELS' do
|
|
17
|
+
it 'contains five levels in order' do
|
|
18
|
+
expect(described_class::LUCIDITY_LEVELS).to eq(%i[non_lucid pre_lucid semi_lucid lucid fully_lucid])
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it 'is frozen' do
|
|
22
|
+
expect(described_class::LUCIDITY_LEVELS).to be_frozen
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
describe 'REALITY_TEST_TYPES' do
|
|
27
|
+
it 'contains the expected test types' do
|
|
28
|
+
expect(described_class::REALITY_TEST_TYPES).to include(
|
|
29
|
+
:text_stability, :hand_check, :time_check, :memory_check, :logic_check
|
|
30
|
+
)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it 'is frozen' do
|
|
34
|
+
expect(described_class::REALITY_TEST_TYPES).to be_frozen
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
describe 'LUCIDITY_DECAY' do
|
|
39
|
+
it 'is 0.05' do
|
|
40
|
+
expect(described_class::LUCIDITY_DECAY).to eq(0.05)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
describe 'FALSE_AWAKENING_CHANCE' do
|
|
45
|
+
it 'is 0.1' do
|
|
46
|
+
expect(described_class::FALSE_AWAKENING_CHANCE).to eq(0.1)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
describe 'DREAM_QUALITY_LABELS' do
|
|
51
|
+
it 'maps ranges to quality labels' do
|
|
52
|
+
expect(described_class::DREAM_QUALITY_LABELS.values).to include(:poor, :ordinary, :vivid, :hyper_vivid)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
it 'is frozen' do
|
|
56
|
+
expect(described_class::DREAM_QUALITY_LABELS).to be_frozen
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
describe '.label_for' do
|
|
61
|
+
it 'returns :poor for value 0.1' do
|
|
62
|
+
expect(described_class.label_for(0.1)).to eq(:poor)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it 'returns :fragmented for value 0.3' do
|
|
66
|
+
expect(described_class.label_for(0.3)).to eq(:fragmented)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it 'returns :ordinary for value 0.5' do
|
|
70
|
+
expect(described_class.label_for(0.5)).to eq(:ordinary)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it 'returns :vivid for value 0.7' do
|
|
74
|
+
expect(described_class.label_for(0.7)).to eq(:vivid)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
it 'returns :hyper_vivid for value 0.9' do
|
|
78
|
+
expect(described_class.label_for(0.9)).to eq(:hyper_vivid)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
it 'clamps values above 1.0' do
|
|
82
|
+
expect(described_class.label_for(1.5)).to eq(:hyper_vivid)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
it 'clamps values below 0.0' do
|
|
86
|
+
expect(described_class.label_for(-0.5)).to eq(:poor)
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|