lex-agentic-integration 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.
Files changed (236) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +12 -0
  3. data/Gemfile +5 -0
  4. data/LICENSE +21 -0
  5. data/README.md +13 -0
  6. data/lex-agentic-integration.gemspec +30 -0
  7. data/lib/legion/extensions/agentic/integration/boundary/client.rb +15 -0
  8. data/lib/legion/extensions/agentic/integration/boundary/helpers/boundary.rb +90 -0
  9. data/lib/legion/extensions/agentic/integration/boundary/helpers/boundary_engine.rb +123 -0
  10. data/lib/legion/extensions/agentic/integration/boundary/helpers/constants.rb +44 -0
  11. data/lib/legion/extensions/agentic/integration/boundary/runners/cognitive_boundary.rb +100 -0
  12. data/lib/legion/extensions/agentic/integration/boundary/version.rb +13 -0
  13. data/lib/legion/extensions/agentic/integration/boundary.rb +19 -0
  14. data/lib/legion/extensions/agentic/integration/context/client.rb +26 -0
  15. data/lib/legion/extensions/agentic/integration/context/helpers/constants.rb +34 -0
  16. data/lib/legion/extensions/agentic/integration/context/helpers/context_manager.rb +150 -0
  17. data/lib/legion/extensions/agentic/integration/context/helpers/frame.rb +99 -0
  18. data/lib/legion/extensions/agentic/integration/context/runners/context.rb +94 -0
  19. data/lib/legion/extensions/agentic/integration/context/version.rb +13 -0
  20. data/lib/legion/extensions/agentic/integration/context.rb +19 -0
  21. data/lib/legion/extensions/agentic/integration/distributed_cognition/client.rb +19 -0
  22. data/lib/legion/extensions/agentic/integration/distributed_cognition/helpers/constants.rb +51 -0
  23. data/lib/legion/extensions/agentic/integration/distributed_cognition/helpers/distribution_engine.rb +159 -0
  24. data/lib/legion/extensions/agentic/integration/distributed_cognition/helpers/participant.rb +100 -0
  25. data/lib/legion/extensions/agentic/integration/distributed_cognition/runners/distributed_cognition.rb +107 -0
  26. data/lib/legion/extensions/agentic/integration/distributed_cognition/version.rb +13 -0
  27. data/lib/legion/extensions/agentic/integration/distributed_cognition.rb +19 -0
  28. data/lib/legion/extensions/agentic/integration/gestalt/client.rb +21 -0
  29. data/lib/legion/extensions/agentic/integration/gestalt/helpers/constants.rb +51 -0
  30. data/lib/legion/extensions/agentic/integration/gestalt/helpers/pattern.rb +90 -0
  31. data/lib/legion/extensions/agentic/integration/gestalt/helpers/pattern_store.rb +123 -0
  32. data/lib/legion/extensions/agentic/integration/gestalt/runners/gestalt.rb +82 -0
  33. data/lib/legion/extensions/agentic/integration/gestalt/version.rb +13 -0
  34. data/lib/legion/extensions/agentic/integration/gestalt.rb +19 -0
  35. data/lib/legion/extensions/agentic/integration/global_workspace/actors/competition.rb +45 -0
  36. data/lib/legion/extensions/agentic/integration/global_workspace/client.rb +29 -0
  37. data/lib/legion/extensions/agentic/integration/global_workspace/helpers/broadcast.rb +62 -0
  38. data/lib/legion/extensions/agentic/integration/global_workspace/helpers/competitor.rb +59 -0
  39. data/lib/legion/extensions/agentic/integration/global_workspace/helpers/constants.rb +65 -0
  40. data/lib/legion/extensions/agentic/integration/global_workspace/helpers/workspace.rb +188 -0
  41. data/lib/legion/extensions/agentic/integration/global_workspace/runners/global_workspace.rb +104 -0
  42. data/lib/legion/extensions/agentic/integration/global_workspace/version.rb +13 -0
  43. data/lib/legion/extensions/agentic/integration/global_workspace.rb +20 -0
  44. data/lib/legion/extensions/agentic/integration/integration/client.rb +19 -0
  45. data/lib/legion/extensions/agentic/integration/integration/helpers/constants.rb +62 -0
  46. data/lib/legion/extensions/agentic/integration/integration/helpers/integrated_representation.rb +106 -0
  47. data/lib/legion/extensions/agentic/integration/integration/helpers/integration_engine.rb +163 -0
  48. data/lib/legion/extensions/agentic/integration/integration/helpers/modal_signal.rb +62 -0
  49. data/lib/legion/extensions/agentic/integration/integration/runners/cognitive_integration.rb +105 -0
  50. data/lib/legion/extensions/agentic/integration/integration/version.rb +13 -0
  51. data/lib/legion/extensions/agentic/integration/integration.rb +20 -0
  52. data/lib/legion/extensions/agentic/integration/labyrinth/actors/thread_walker.rb +45 -0
  53. data/lib/legion/extensions/agentic/integration/labyrinth/client.rb +23 -0
  54. data/lib/legion/extensions/agentic/integration/labyrinth/helpers/constants.rb +39 -0
  55. data/lib/legion/extensions/agentic/integration/labyrinth/helpers/labyrinth.rb +138 -0
  56. data/lib/legion/extensions/agentic/integration/labyrinth/helpers/labyrinth_engine.rb +177 -0
  57. data/lib/legion/extensions/agentic/integration/labyrinth/helpers/node.rb +64 -0
  58. data/lib/legion/extensions/agentic/integration/labyrinth/runners/cognitive_labyrinth.rb +128 -0
  59. data/lib/legion/extensions/agentic/integration/labyrinth/version.rb +13 -0
  60. data/lib/legion/extensions/agentic/integration/labyrinth.rb +22 -0
  61. data/lib/legion/extensions/agentic/integration/map/actors/decay.rb +45 -0
  62. data/lib/legion/extensions/agentic/integration/map/client.rb +29 -0
  63. data/lib/legion/extensions/agentic/integration/map/helpers/cognitive_map_store.rb +179 -0
  64. data/lib/legion/extensions/agentic/integration/map/helpers/constants.rb +71 -0
  65. data/lib/legion/extensions/agentic/integration/map/helpers/graph_traversal.rb +124 -0
  66. data/lib/legion/extensions/agentic/integration/map/helpers/location.rb +71 -0
  67. data/lib/legion/extensions/agentic/integration/map/runners/cognitive_map.rb +95 -0
  68. data/lib/legion/extensions/agentic/integration/map/version.rb +13 -0
  69. data/lib/legion/extensions/agentic/integration/map.rb +20 -0
  70. data/lib/legion/extensions/agentic/integration/mosaic/client.rb +15 -0
  71. data/lib/legion/extensions/agentic/integration/mosaic/helpers/constants.rb +55 -0
  72. data/lib/legion/extensions/agentic/integration/mosaic/helpers/mosaic.rb +111 -0
  73. data/lib/legion/extensions/agentic/integration/mosaic/helpers/mosaic_engine.rb +124 -0
  74. data/lib/legion/extensions/agentic/integration/mosaic/helpers/tessera.rb +86 -0
  75. data/lib/legion/extensions/agentic/integration/mosaic/runners/cognitive_mosaic.rb +76 -0
  76. data/lib/legion/extensions/agentic/integration/mosaic/version.rb +13 -0
  77. data/lib/legion/extensions/agentic/integration/mosaic.rb +22 -0
  78. data/lib/legion/extensions/agentic/integration/mycelium/client.rb +19 -0
  79. data/lib/legion/extensions/agentic/integration/mycelium/helpers/constants.rb +52 -0
  80. data/lib/legion/extensions/agentic/integration/mycelium/helpers/fruiting_body.rb +50 -0
  81. data/lib/legion/extensions/agentic/integration/mycelium/helpers/hypha.rb +76 -0
  82. data/lib/legion/extensions/agentic/integration/mycelium/helpers/mycelial_node.rb +72 -0
  83. data/lib/legion/extensions/agentic/integration/mycelium/helpers/mycelium_engine.rb +151 -0
  84. data/lib/legion/extensions/agentic/integration/mycelium/runners/cognitive_mycelium.rb +73 -0
  85. data/lib/legion/extensions/agentic/integration/mycelium/version.rb +13 -0
  86. data/lib/legion/extensions/agentic/integration/mycelium.rb +23 -0
  87. data/lib/legion/extensions/agentic/integration/phenomenal_binding/client.rb +25 -0
  88. data/lib/legion/extensions/agentic/integration/phenomenal_binding/helpers/binding_engine.rb +156 -0
  89. data/lib/legion/extensions/agentic/integration/phenomenal_binding/helpers/binding_unit.rb +72 -0
  90. data/lib/legion/extensions/agentic/integration/phenomenal_binding/helpers/constants.rb +35 -0
  91. data/lib/legion/extensions/agentic/integration/phenomenal_binding/helpers/stream.rb +51 -0
  92. data/lib/legion/extensions/agentic/integration/phenomenal_binding/runners/phenomenal_binding.rb +110 -0
  93. data/lib/legion/extensions/agentic/integration/phenomenal_binding/version.rb +13 -0
  94. data/lib/legion/extensions/agentic/integration/phenomenal_binding.rb +20 -0
  95. data/lib/legion/extensions/agentic/integration/qualia/client.rb +19 -0
  96. data/lib/legion/extensions/agentic/integration/qualia/helpers/constants.rb +74 -0
  97. data/lib/legion/extensions/agentic/integration/qualia/helpers/quale.rb +103 -0
  98. data/lib/legion/extensions/agentic/integration/qualia/helpers/qualia_engine.rb +142 -0
  99. data/lib/legion/extensions/agentic/integration/qualia/runners/qualia.rb +67 -0
  100. data/lib/legion/extensions/agentic/integration/qualia/version.rb +13 -0
  101. data/lib/legion/extensions/agentic/integration/qualia.rb +19 -0
  102. data/lib/legion/extensions/agentic/integration/situation_model/client.rb +28 -0
  103. data/lib/legion/extensions/agentic/integration/situation_model/helpers/client.rb +23 -0
  104. data/lib/legion/extensions/agentic/integration/situation_model/helpers/constants.rb +40 -0
  105. data/lib/legion/extensions/agentic/integration/situation_model/helpers/situation_engine.rb +73 -0
  106. data/lib/legion/extensions/agentic/integration/situation_model/helpers/situation_event.rb +56 -0
  107. data/lib/legion/extensions/agentic/integration/situation_model/helpers/situation_model.rb +90 -0
  108. data/lib/legion/extensions/agentic/integration/situation_model/runners/situation_model.rb +99 -0
  109. data/lib/legion/extensions/agentic/integration/situation_model/version.rb +13 -0
  110. data/lib/legion/extensions/agentic/integration/situation_model.rb +21 -0
  111. data/lib/legion/extensions/agentic/integration/synthesis/client.rb +29 -0
  112. data/lib/legion/extensions/agentic/integration/synthesis/helpers/constants.rb +41 -0
  113. data/lib/legion/extensions/agentic/integration/synthesis/helpers/synthesis.rb +63 -0
  114. data/lib/legion/extensions/agentic/integration/synthesis/helpers/synthesis_engine.rb +213 -0
  115. data/lib/legion/extensions/agentic/integration/synthesis/helpers/synthesis_stream.rb +67 -0
  116. data/lib/legion/extensions/agentic/integration/synthesis/runners/cognitive_synthesis.rb +82 -0
  117. data/lib/legion/extensions/agentic/integration/synthesis/version.rb +13 -0
  118. data/lib/legion/extensions/agentic/integration/synthesis.rb +20 -0
  119. data/lib/legion/extensions/agentic/integration/tapestry/client.rb +15 -0
  120. data/lib/legion/extensions/agentic/integration/tapestry/helpers/constants.rb +46 -0
  121. data/lib/legion/extensions/agentic/integration/tapestry/helpers/loom_engine.rb +125 -0
  122. data/lib/legion/extensions/agentic/integration/tapestry/helpers/tapestry.rb +144 -0
  123. data/lib/legion/extensions/agentic/integration/tapestry/helpers/thread.rb +112 -0
  124. data/lib/legion/extensions/agentic/integration/tapestry/runners/cognitive_tapestry.rb +81 -0
  125. data/lib/legion/extensions/agentic/integration/tapestry/version.rb +13 -0
  126. data/lib/legion/extensions/agentic/integration/tapestry.rb +22 -0
  127. data/lib/legion/extensions/agentic/integration/tessellation/client.rb +19 -0
  128. data/lib/legion/extensions/agentic/integration/tessellation/helpers/constants.rb +72 -0
  129. data/lib/legion/extensions/agentic/integration/tessellation/helpers/mosaic.rb +99 -0
  130. data/lib/legion/extensions/agentic/integration/tessellation/helpers/tessellation_engine.rb +141 -0
  131. data/lib/legion/extensions/agentic/integration/tessellation/helpers/tile.rb +76 -0
  132. data/lib/legion/extensions/agentic/integration/tessellation/runners/cognitive_tessellation.rb +58 -0
  133. data/lib/legion/extensions/agentic/integration/tessellation/version.rb +13 -0
  134. data/lib/legion/extensions/agentic/integration/tessellation.rb +22 -0
  135. data/lib/legion/extensions/agentic/integration/version.rb +11 -0
  136. data/lib/legion/extensions/agentic/integration/zeitgeist/helpers/client.rb +17 -0
  137. data/lib/legion/extensions/agentic/integration/zeitgeist/helpers/cognitive_signal.rb +38 -0
  138. data/lib/legion/extensions/agentic/integration/zeitgeist/helpers/constants.rb +64 -0
  139. data/lib/legion/extensions/agentic/integration/zeitgeist/helpers/trend_window.rb +80 -0
  140. data/lib/legion/extensions/agentic/integration/zeitgeist/helpers/zeitgeist_engine.rb +157 -0
  141. data/lib/legion/extensions/agentic/integration/zeitgeist/runners/cognitive_zeitgeist.rb +99 -0
  142. data/lib/legion/extensions/agentic/integration/zeitgeist/version.rb +13 -0
  143. data/lib/legion/extensions/agentic/integration/zeitgeist.rb +22 -0
  144. data/lib/legion/extensions/agentic/integration.rb +34 -0
  145. data/spec/legion/extensions/agentic/integration/boundary/helpers/boundary_engine_spec.rb +165 -0
  146. data/spec/legion/extensions/agentic/integration/boundary/helpers/boundary_spec.rb +168 -0
  147. data/spec/legion/extensions/agentic/integration/boundary/helpers/constants_spec.rb +65 -0
  148. data/spec/legion/extensions/agentic/integration/boundary/runners/cognitive_boundary_spec.rb +111 -0
  149. data/spec/legion/extensions/agentic/integration/context/client_spec.rb +58 -0
  150. data/spec/legion/extensions/agentic/integration/context/helpers/constants_spec.rb +32 -0
  151. data/spec/legion/extensions/agentic/integration/context/helpers/context_manager_spec.rb +190 -0
  152. data/spec/legion/extensions/agentic/integration/context/helpers/frame_spec.rb +164 -0
  153. data/spec/legion/extensions/agentic/integration/context/runners/context_spec.rb +142 -0
  154. data/spec/legion/extensions/agentic/integration/distributed_cognition/client_spec.rb +21 -0
  155. data/spec/legion/extensions/agentic/integration/distributed_cognition/helpers/distribution_engine_spec.rb +149 -0
  156. data/spec/legion/extensions/agentic/integration/distributed_cognition/helpers/participant_spec.rb +116 -0
  157. data/spec/legion/extensions/agentic/integration/distributed_cognition/runners/distributed_cognition_spec.rb +102 -0
  158. data/spec/legion/extensions/agentic/integration/gestalt/client_spec.rb +53 -0
  159. data/spec/legion/extensions/agentic/integration/gestalt/helpers/constants_spec.rb +27 -0
  160. data/spec/legion/extensions/agentic/integration/gestalt/helpers/pattern_spec.rb +128 -0
  161. data/spec/legion/extensions/agentic/integration/gestalt/helpers/pattern_store_spec.rb +155 -0
  162. data/spec/legion/extensions/agentic/integration/gestalt/runners/gestalt_spec.rb +114 -0
  163. data/spec/legion/extensions/agentic/integration/global_workspace/client_spec.rb +49 -0
  164. data/spec/legion/extensions/agentic/integration/global_workspace/helpers/broadcast_spec.rb +83 -0
  165. data/spec/legion/extensions/agentic/integration/global_workspace/helpers/competitor_spec.rb +84 -0
  166. data/spec/legion/extensions/agentic/integration/global_workspace/helpers/workspace_spec.rb +174 -0
  167. data/spec/legion/extensions/agentic/integration/global_workspace/runners/global_workspace_spec.rb +118 -0
  168. data/spec/legion/extensions/agentic/integration/integration/cognitive_integration_spec.rb +7 -0
  169. data/spec/legion/extensions/agentic/integration/integration/helpers/integrated_representation_spec.rb +149 -0
  170. data/spec/legion/extensions/agentic/integration/integration/helpers/integration_engine_spec.rb +191 -0
  171. data/spec/legion/extensions/agentic/integration/integration/helpers/modal_signal_spec.rb +81 -0
  172. data/spec/legion/extensions/agentic/integration/labyrinth/client_spec.rb +122 -0
  173. data/spec/legion/extensions/agentic/integration/labyrinth/cognitive_labyrinth_spec.rb +19 -0
  174. data/spec/legion/extensions/agentic/integration/labyrinth/helpers/constants_spec.rb +72 -0
  175. data/spec/legion/extensions/agentic/integration/labyrinth/helpers/labyrinth_engine_spec.rb +222 -0
  176. data/spec/legion/extensions/agentic/integration/labyrinth/helpers/labyrinth_spec.rb +235 -0
  177. data/spec/legion/extensions/agentic/integration/labyrinth/helpers/node_spec.rb +157 -0
  178. data/spec/legion/extensions/agentic/integration/labyrinth/runners/cognitive_labyrinth_spec.rb +209 -0
  179. data/spec/legion/extensions/agentic/integration/map/client_spec.rb +89 -0
  180. data/spec/legion/extensions/agentic/integration/map/helpers/cognitive_map_store_spec.rb +321 -0
  181. data/spec/legion/extensions/agentic/integration/map/helpers/location_spec.rb +165 -0
  182. data/spec/legion/extensions/agentic/integration/map/runners/cognitive_map_spec.rb +190 -0
  183. data/spec/legion/extensions/agentic/integration/mosaic/client_spec.rb +16 -0
  184. data/spec/legion/extensions/agentic/integration/mosaic/helpers/constants_spec.rb +37 -0
  185. data/spec/legion/extensions/agentic/integration/mosaic/helpers/mosaic_engine_spec.rb +108 -0
  186. data/spec/legion/extensions/agentic/integration/mosaic/helpers/mosaic_spec.rb +120 -0
  187. data/spec/legion/extensions/agentic/integration/mosaic/helpers/tessera_spec.rb +92 -0
  188. data/spec/legion/extensions/agentic/integration/mosaic/runners/cognitive_mosaic_spec.rb +88 -0
  189. data/spec/legion/extensions/agentic/integration/mycelium/client_spec.rb +25 -0
  190. data/spec/legion/extensions/agentic/integration/mycelium/cognitive_mycelium_spec.rb +7 -0
  191. data/spec/legion/extensions/agentic/integration/mycelium/helpers/constants_spec.rb +28 -0
  192. data/spec/legion/extensions/agentic/integration/mycelium/helpers/fruiting_body_spec.rb +33 -0
  193. data/spec/legion/extensions/agentic/integration/mycelium/helpers/hypha_spec.rb +69 -0
  194. data/spec/legion/extensions/agentic/integration/mycelium/helpers/mycelial_node_spec.rb +79 -0
  195. data/spec/legion/extensions/agentic/integration/mycelium/helpers/mycelium_engine_spec.rb +136 -0
  196. data/spec/legion/extensions/agentic/integration/mycelium/runners/cognitive_mycelium_spec.rb +61 -0
  197. data/spec/legion/extensions/agentic/integration/phenomenal_binding/client_spec.rb +52 -0
  198. data/spec/legion/extensions/agentic/integration/phenomenal_binding/helpers/binding_engine_spec.rb +290 -0
  199. data/spec/legion/extensions/agentic/integration/phenomenal_binding/helpers/binding_unit_spec.rb +195 -0
  200. data/spec/legion/extensions/agentic/integration/phenomenal_binding/helpers/constants_spec.rb +92 -0
  201. data/spec/legion/extensions/agentic/integration/phenomenal_binding/helpers/stream_spec.rb +128 -0
  202. data/spec/legion/extensions/agentic/integration/phenomenal_binding/runners/phenomenal_binding_spec.rb +174 -0
  203. data/spec/legion/extensions/agentic/integration/qualia/client_spec.rb +21 -0
  204. data/spec/legion/extensions/agentic/integration/qualia/helpers/quale_spec.rb +168 -0
  205. data/spec/legion/extensions/agentic/integration/qualia/helpers/qualia_engine_spec.rb +174 -0
  206. data/spec/legion/extensions/agentic/integration/qualia/qualia_spec.rb +7 -0
  207. data/spec/legion/extensions/agentic/integration/qualia/runners_spec.rb +70 -0
  208. data/spec/legion/extensions/agentic/integration/situation_model/client_spec.rb +51 -0
  209. data/spec/legion/extensions/agentic/integration/situation_model/helpers/constants_spec.rb +56 -0
  210. data/spec/legion/extensions/agentic/integration/situation_model/helpers/situation_engine_spec.rb +203 -0
  211. data/spec/legion/extensions/agentic/integration/situation_model/helpers/situation_event_spec.rb +94 -0
  212. data/spec/legion/extensions/agentic/integration/situation_model/helpers/situation_model_spec.rb +235 -0
  213. data/spec/legion/extensions/agentic/integration/situation_model/runners/situation_model_spec.rb +204 -0
  214. data/spec/legion/extensions/agentic/integration/synthesis/client_spec.rb +26 -0
  215. data/spec/legion/extensions/agentic/integration/synthesis/helpers/constants_spec.rb +87 -0
  216. data/spec/legion/extensions/agentic/integration/synthesis/helpers/synthesis_engine_spec.rb +233 -0
  217. data/spec/legion/extensions/agentic/integration/synthesis/helpers/synthesis_spec.rb +101 -0
  218. data/spec/legion/extensions/agentic/integration/synthesis/helpers/synthesis_stream_spec.rb +116 -0
  219. data/spec/legion/extensions/agentic/integration/synthesis/runners/cognitive_synthesis_spec.rb +181 -0
  220. data/spec/legion/extensions/agentic/integration/tapestry/client_spec.rb +55 -0
  221. data/spec/legion/extensions/agentic/integration/tapestry/helpers/constants_spec.rb +88 -0
  222. data/spec/legion/extensions/agentic/integration/tapestry/helpers/loom_engine_spec.rb +225 -0
  223. data/spec/legion/extensions/agentic/integration/tapestry/helpers/tapestry_spec.rb +229 -0
  224. data/spec/legion/extensions/agentic/integration/tapestry/helpers/thread_spec.rb +211 -0
  225. data/spec/legion/extensions/agentic/integration/tapestry/runners/cognitive_tapestry_spec.rb +171 -0
  226. data/spec/legion/extensions/agentic/integration/tessellation/client_spec.rb +40 -0
  227. data/spec/legion/extensions/agentic/integration/tessellation/helpers/mosaic_spec.rb +99 -0
  228. data/spec/legion/extensions/agentic/integration/tessellation/helpers/tessellation_engine_spec.rb +145 -0
  229. data/spec/legion/extensions/agentic/integration/tessellation/helpers/tile_spec.rb +138 -0
  230. data/spec/legion/extensions/agentic/integration/zeitgeist/helpers/cognitive_signal_spec.rb +62 -0
  231. data/spec/legion/extensions/agentic/integration/zeitgeist/helpers/constants_spec.rb +73 -0
  232. data/spec/legion/extensions/agentic/integration/zeitgeist/helpers/trend_window_spec.rb +100 -0
  233. data/spec/legion/extensions/agentic/integration/zeitgeist/helpers/zeitgeist_engine_spec.rb +163 -0
  234. data/spec/legion/extensions/agentic/integration/zeitgeist/runners/cognitive_zeitgeist_spec.rb +165 -0
  235. data/spec/spec_helper.rb +46 -0
  236. metadata +320 -0
@@ -0,0 +1,149 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Legion::Extensions::Agentic::Integration::DistributedCognition::Helpers::DistributionEngine do
4
+ subject(:engine) { described_class.new }
5
+
6
+ let(:agent) do
7
+ engine.register_participant(
8
+ name: 'worker-alpha', participant_type: :agent,
9
+ domain: :reasoning, capabilities: %i[computation retrieval]
10
+ )
11
+ end
12
+
13
+ describe '#register_participant' do
14
+ it 'creates and stores a participant' do
15
+ result = agent
16
+ expect(result).to be_a(Legion::Extensions::Agentic::Integration::DistributedCognition::Helpers::Participant)
17
+ end
18
+
19
+ it 'rejects invalid participant types' do
20
+ result = engine.register_participant(
21
+ name: 'test', participant_type: :invalid, domain: :test
22
+ )
23
+ expect(result[:success]).to be false
24
+ end
25
+
26
+ it 'records history' do
27
+ agent
28
+ expect(engine.history.size).to eq(1)
29
+ end
30
+ end
31
+
32
+ describe '#record_contribution' do
33
+ it 'records a successful contribution' do
34
+ result = engine.record_contribution(
35
+ participant_id: agent.id, contribution_type: :computation, success: true
36
+ )
37
+ expect(result[:success]).to be true
38
+ expect(result[:reliability]).to be > 0.5
39
+ end
40
+
41
+ it 'returns error for unknown participant' do
42
+ result = engine.record_contribution(
43
+ participant_id: 'bad', contribution_type: :computation, success: true
44
+ )
45
+ expect(result[:success]).to be false
46
+ end
47
+
48
+ it 'rejects invalid contribution types' do
49
+ result = engine.record_contribution(
50
+ participant_id: agent.id, contribution_type: :invalid, success: true
51
+ )
52
+ expect(result[:success]).to be false
53
+ end
54
+ end
55
+
56
+ describe '#find_capable' do
57
+ it 'finds participants with capability' do
58
+ agent
59
+ results = engine.find_capable(capability: :computation)
60
+ expect(results.size).to eq(1)
61
+ end
62
+
63
+ it 'returns empty for unknown capability' do
64
+ agent
65
+ results = engine.find_capable(capability: :transformation)
66
+ expect(results).to be_empty
67
+ end
68
+ end
69
+
70
+ describe '#by_type' do
71
+ it 'filters by participant type' do
72
+ agent
73
+ engine.register_participant(
74
+ name: 'db', participant_type: :artifact, domain: :storage
75
+ )
76
+ agents = engine.by_type(participant_type: :agent)
77
+ expect(agents.size).to eq(1)
78
+ end
79
+ end
80
+
81
+ describe '#by_domain' do
82
+ it 'filters by domain' do
83
+ agent
84
+ results = engine.by_domain(domain: :reasoning)
85
+ expect(results.size).to eq(1)
86
+ end
87
+ end
88
+
89
+ describe '#most_reliable' do
90
+ it 'returns sorted by reliability' do
91
+ agent
92
+ other = engine.register_participant(
93
+ name: 'worker-beta', participant_type: :agent, domain: :reasoning
94
+ )
95
+ 3.times { engine.record_contribution(participant_id: other.id, contribution_type: :computation, success: true) }
96
+ results = engine.most_reliable(limit: 2)
97
+ expect(results.first.reliability).to be >= results.last.reliability
98
+ end
99
+ end
100
+
101
+ describe '#distribution_score' do
102
+ it 'returns 0.0 with no contributions' do
103
+ expect(engine.distribution_score).to eq(0.0)
104
+ end
105
+
106
+ it 'returns higher score for even distribution' do
107
+ other = engine.register_participant(
108
+ name: 'worker-beta', participant_type: :agent, domain: :reasoning
109
+ )
110
+ 3.times do
111
+ engine.record_contribution(participant_id: agent.id, contribution_type: :computation, success: true)
112
+ engine.record_contribution(participant_id: other.id, contribution_type: :computation, success: true)
113
+ end
114
+ expect(engine.distribution_score).to be > 0.5
115
+ end
116
+ end
117
+
118
+ describe '#distribution_label' do
119
+ it 'returns a symbol' do
120
+ expect(engine.distribution_label).to be_a(Symbol)
121
+ end
122
+ end
123
+
124
+ describe '#decay_all' do
125
+ it 'reduces reliability of all participants' do
126
+ original = agent.reliability
127
+ engine.decay_all
128
+ expect(agent.reliability).to be < original
129
+ end
130
+ end
131
+
132
+ describe '#prune_failing' do
133
+ it 'removes very unreliable participants' do
134
+ agent
135
+ 30.times { agent.decay! }
136
+ pruned = engine.prune_failing
137
+ expect(pruned).to be >= 0
138
+ end
139
+ end
140
+
141
+ describe '#to_h' do
142
+ it 'returns summary stats' do
143
+ agent
144
+ stats = engine.to_h
145
+ expect(stats[:total_participants]).to eq(1)
146
+ expect(stats).to include(:distribution_score, :agent_count)
147
+ end
148
+ end
149
+ end
@@ -0,0 +1,116 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Legion::Extensions::Agentic::Integration::DistributedCognition::Helpers::Participant do
4
+ subject(:participant) do
5
+ described_class.new(
6
+ name: 'worker-alpha',
7
+ participant_type: :agent,
8
+ domain: :reasoning,
9
+ capabilities: %i[computation retrieval]
10
+ )
11
+ end
12
+
13
+ describe '#initialize' do
14
+ it 'assigns a UUID' do
15
+ expect(participant.id).to match(/\A[0-9a-f-]{36}\z/)
16
+ end
17
+
18
+ it 'stores name and type' do
19
+ expect(participant.name).to eq('worker-alpha')
20
+ expect(participant.participant_type).to eq(:agent)
21
+ end
22
+
23
+ it 'stores capabilities' do
24
+ expect(participant.capabilities).to eq(%i[computation retrieval])
25
+ end
26
+ end
27
+
28
+ describe '#contribute!' do
29
+ it 'increments contribution count' do
30
+ expect { participant.contribute!(success: true) }.to change(participant, :contribution_count).by(1)
31
+ end
32
+
33
+ it 'increments success count on success' do
34
+ expect { participant.contribute!(success: true) }.to change(participant, :success_count).by(1)
35
+ end
36
+
37
+ it 'increases reliability on success' do
38
+ original = participant.reliability
39
+ participant.contribute!(success: true)
40
+ expect(participant.reliability).to be > original
41
+ end
42
+
43
+ it 'decreases reliability on failure' do
44
+ original = participant.reliability
45
+ participant.contribute!(success: false)
46
+ expect(participant.reliability).to be < original
47
+ end
48
+ end
49
+
50
+ describe '#capable_of?' do
51
+ it 'returns true for known capability' do
52
+ expect(participant).to be_capable_of(:computation)
53
+ end
54
+
55
+ it 'returns false for unknown capability' do
56
+ expect(participant).not_to be_capable_of(:transformation)
57
+ end
58
+ end
59
+
60
+ describe '#add_capability' do
61
+ it 'adds a new capability' do
62
+ participant.add_capability(:storage)
63
+ expect(participant.capabilities).to include(:storage)
64
+ end
65
+
66
+ it 'does not add duplicates' do
67
+ 2.times { participant.add_capability(:computation) }
68
+ expect(participant.capabilities.count(:computation)).to eq(1)
69
+ end
70
+ end
71
+
72
+ describe '#success_rate' do
73
+ it 'returns 0.0 with no contributions' do
74
+ expect(participant.success_rate).to eq(0.0)
75
+ end
76
+
77
+ it 'computes ratio' do
78
+ 3.times { participant.contribute!(success: true) }
79
+ participant.contribute!(success: false)
80
+ expect(participant.success_rate).to eq(0.75)
81
+ end
82
+ end
83
+
84
+ describe '#agent?' do
85
+ it 'returns true for agent type' do
86
+ expect(participant).to be_agent
87
+ end
88
+ end
89
+
90
+ describe '#artifact?' do
91
+ it 'returns false for agent type' do
92
+ expect(participant).not_to be_artifact
93
+ end
94
+ end
95
+
96
+ describe '#reliability_label' do
97
+ it 'returns a symbol' do
98
+ expect(participant.reliability_label).to be_a(Symbol)
99
+ end
100
+ end
101
+
102
+ describe '#decay!' do
103
+ it 'reduces reliability' do
104
+ original = participant.reliability
105
+ participant.decay!
106
+ expect(participant.reliability).to be < original
107
+ end
108
+ end
109
+
110
+ describe '#to_h' do
111
+ it 'returns hash representation' do
112
+ hash = participant.to_h
113
+ expect(hash).to include(:id, :name, :participant_type, :reliability, :capabilities)
114
+ end
115
+ end
116
+ end
@@ -0,0 +1,102 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Legion::Extensions::Agentic::Integration::DistributedCognition::Runners::DistributedCognition do
4
+ let(:runner_host) do
5
+ obj = Object.new
6
+ obj.extend(described_class)
7
+ obj
8
+ end
9
+
10
+ describe '#register_cognitive_participant' do
11
+ it 'registers a participant' do
12
+ result = runner_host.register_cognitive_participant(
13
+ name: 'worker', participant_type: :agent, domain: :test
14
+ )
15
+ expect(result[:success]).to be true
16
+ expect(result[:participant_id]).to be_a(String)
17
+ end
18
+
19
+ it 'rejects invalid type' do
20
+ result = runner_host.register_cognitive_participant(
21
+ name: 'test', participant_type: :invalid, domain: :test
22
+ )
23
+ expect(result[:success]).to be false
24
+ end
25
+ end
26
+
27
+ describe '#record_cognitive_contribution' do
28
+ it 'records a contribution' do
29
+ created = runner_host.register_cognitive_participant(
30
+ name: 'worker', participant_type: :agent, domain: :test
31
+ )
32
+ result = runner_host.record_cognitive_contribution(
33
+ participant_id: created[:participant_id],
34
+ contribution_type: :computation, success: true
35
+ )
36
+ expect(result[:success]).to be true
37
+ end
38
+ end
39
+
40
+ describe '#find_capable_participants' do
41
+ it 'finds capable participants' do
42
+ runner_host.register_cognitive_participant(
43
+ name: 'worker', participant_type: :agent,
44
+ domain: :test, capabilities: [:computation]
45
+ )
46
+ result = runner_host.find_capable_participants(capability: :computation)
47
+ expect(result[:success]).to be true
48
+ expect(result[:count]).to eq(1)
49
+ end
50
+ end
51
+
52
+ describe '#most_reliable_participants' do
53
+ it 'returns reliable participants' do
54
+ result = runner_host.most_reliable_participants(limit: 3)
55
+ expect(result[:success]).to be true
56
+ end
57
+ end
58
+
59
+ describe '#distribution_assessment' do
60
+ it 'returns distribution metrics' do
61
+ result = runner_host.distribution_assessment
62
+ expect(result[:success]).to be true
63
+ expect(result).to include(:distribution_score, :distribution_label)
64
+ end
65
+ end
66
+
67
+ describe '#participants_by_type' do
68
+ it 'filters by type' do
69
+ runner_host.register_cognitive_participant(
70
+ name: 'db', participant_type: :artifact, domain: :storage
71
+ )
72
+ result = runner_host.participants_by_type(participant_type: :artifact)
73
+ expect(result[:count]).to eq(1)
74
+ end
75
+ end
76
+
77
+ describe '#participants_by_domain' do
78
+ it 'filters by domain' do
79
+ runner_host.register_cognitive_participant(
80
+ name: 'worker', participant_type: :agent, domain: :reasoning
81
+ )
82
+ result = runner_host.participants_by_domain(domain: :reasoning)
83
+ expect(result[:count]).to eq(1)
84
+ end
85
+ end
86
+
87
+ describe '#update_distributed_cognition' do
88
+ it 'runs decay and prune cycle' do
89
+ result = runner_host.update_distributed_cognition
90
+ expect(result[:success]).to be true
91
+ expect(result).to include(:pruned)
92
+ end
93
+ end
94
+
95
+ describe '#distributed_cognition_stats' do
96
+ it 'returns stats' do
97
+ result = runner_host.distributed_cognition_stats
98
+ expect(result[:success]).to be true
99
+ expect(result).to include(:total_participants, :distribution_score)
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe Legion::Extensions::Agentic::Integration::Gestalt::Client do
6
+ subject(:client) { described_class.new }
7
+
8
+ describe '#initialize' do
9
+ it 'creates a default store' do
10
+ expect(client.store).to be_a(Legion::Extensions::Agentic::Integration::Gestalt::Helpers::PatternStore)
11
+ end
12
+
13
+ it 'accepts an injected store' do
14
+ custom = Legion::Extensions::Agentic::Integration::Gestalt::Helpers::PatternStore.new
15
+ injected = described_class.new(store: custom)
16
+ expect(injected.store).to equal(custom)
17
+ end
18
+ end
19
+
20
+ describe 'gestalt pattern completion lifecycle' do
21
+ it 'learns patterns and completes fragments' do
22
+ # Learn some patterns
23
+ client.learn_pattern(name: :greeting, elements: %i[hello how are you today], domain: :social)
24
+ client.learn_pattern(name: :farewell, elements: %i[goodbye see you later], domain: :social)
25
+ client.learn_pattern(name: :fibonacci, elements: [1, 1, 2, 3, 5, 8, 13], domain: :math)
26
+
27
+ # Complete a partial greeting
28
+ result = client.complete_pattern(fragment: %i[hello how are])
29
+ expect(result[:count]).to eq(1)
30
+ expect(result[:best][:pattern_name]).to eq(:greeting)
31
+ expect(result[:best][:missing]).to eq(%i[you today])
32
+
33
+ # Confirm the completion was correct -> reinforces pattern
34
+ client.confirm_completion(pattern_id: result[:best][:pattern_id], correct: true)
35
+
36
+ # Try completing a math pattern
37
+ math_result = client.complete_pattern(fragment: [1, 1, 2, 3], domain: :math)
38
+ expect(math_result[:count]).to eq(1)
39
+ expect(math_result[:best][:missing]).to eq([5, 8, 13])
40
+
41
+ # Group items by proximity
42
+ groups = client.group_items(items: [1, 2, 3, 50, 51, 52], principle: :proximity)
43
+ expect(groups[:group_count]).to be >= 2
44
+
45
+ # Decay over time
46
+ client.update_gestalt
47
+
48
+ # Stats
49
+ stats = client.gestalt_stats
50
+ expect(stats[:stats][:pattern_count]).to eq(3)
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe Legion::Extensions::Agentic::Integration::Gestalt::Helpers::Constants do
6
+ describe 'COMPLETION_THRESHOLD' do
7
+ it 'is between 0 and 1' do
8
+ expect(described_class::COMPLETION_THRESHOLD).to be_between(0.0, 1.0).exclusive
9
+ end
10
+ end
11
+
12
+ describe 'GROUPING_PRINCIPLES' do
13
+ it 'includes all Wertheimer laws' do
14
+ expect(described_class::GROUPING_PRINCIPLES).to include(:proximity, :similarity, :closure)
15
+ end
16
+
17
+ it 'is frozen' do
18
+ expect(described_class::GROUPING_PRINCIPLES).to be_frozen
19
+ end
20
+ end
21
+
22
+ describe 'reinforcement asymmetry' do
23
+ it 'penalizes more than reinforces' do
24
+ expect(described_class::INCORRECT_PENALTY).to be > described_class::CORRECT_REINFORCEMENT
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,128 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe Legion::Extensions::Agentic::Integration::Gestalt::Helpers::Pattern do
6
+ subject(:pattern) { described_class.new(name: :abc_sequence, elements: %i[a b c d e]) }
7
+
8
+ describe '#initialize' do
9
+ it 'generates a uuid' do
10
+ expect(pattern.id).to match(/\A[0-9a-f-]{36}\z/)
11
+ end
12
+
13
+ it 'stores name and elements' do
14
+ expect(pattern.name).to eq(:abc_sequence)
15
+ expect(pattern.elements).to eq(%i[a b c d e])
16
+ end
17
+
18
+ it 'defaults domain to general' do
19
+ expect(pattern.domain).to eq(:general)
20
+ end
21
+
22
+ it 'starts with strength 1.0' do
23
+ expect(pattern.strength).to eq(1.0)
24
+ end
25
+
26
+ it 'starts with zero match count' do
27
+ expect(pattern.match_count).to eq(0)
28
+ end
29
+
30
+ it 'truncates elements at MAX_PATTERN_SIZE' do
31
+ big = described_class.new(name: :big, elements: (1..100).to_a)
32
+ expect(big.elements.size).to eq(Legion::Extensions::Agentic::Integration::Gestalt::Helpers::Constants::MAX_PATTERN_SIZE)
33
+ end
34
+ end
35
+
36
+ describe '#match_ratio' do
37
+ it 'returns 1.0 for perfect match' do
38
+ expect(pattern.match_ratio(%i[a b c d e])).to eq(1.0)
39
+ end
40
+
41
+ it 'returns 0.0 for no match' do
42
+ expect(pattern.match_ratio(%i[x y z])).to eq(0.0)
43
+ end
44
+
45
+ it 'returns partial ratio' do
46
+ expect(pattern.match_ratio(%i[a b c])).to eq(0.6)
47
+ end
48
+
49
+ it 'returns 0.0 for empty fragment' do
50
+ expect(pattern.match_ratio([])).to eq(0.0)
51
+ end
52
+ end
53
+
54
+ describe '#missing_elements' do
55
+ it 'returns elements not in fragment' do
56
+ expect(pattern.missing_elements(%i[a b c])).to eq(%i[d e])
57
+ end
58
+
59
+ it 'returns all elements for empty fragment' do
60
+ expect(pattern.missing_elements([])).to eq(%i[a b c d e])
61
+ end
62
+
63
+ it 'returns empty for complete fragment' do
64
+ expect(pattern.missing_elements(%i[a b c d e])).to eq([])
65
+ end
66
+ end
67
+
68
+ describe '#complete' do
69
+ it 'returns completion for sufficient match' do
70
+ result = pattern.complete(%i[a b c])
71
+ expect(result).not_to be_nil
72
+ expect(result[:pattern_name]).to eq(:abc_sequence)
73
+ expect(result[:missing]).to eq(%i[d e])
74
+ expect(result[:confidence]).to be > 0
75
+ end
76
+
77
+ it 'returns nil for insufficient match' do
78
+ result = pattern.complete(%i[x])
79
+ expect(result).to be_nil
80
+ end
81
+
82
+ it 'increments match count' do
83
+ pattern.complete(%i[a b c])
84
+ expect(pattern.match_count).to eq(1)
85
+ end
86
+ end
87
+
88
+ describe '#reinforce' do
89
+ it 'increases strength' do
90
+ initial = pattern.strength
91
+ pattern.reinforce
92
+ expect(pattern.strength).to be > initial
93
+ end
94
+
95
+ it 'caps at 2.0' do
96
+ 20.times { pattern.reinforce }
97
+ expect(pattern.strength).to eq(2.0)
98
+ end
99
+ end
100
+
101
+ describe '#penalize' do
102
+ it 'decreases strength' do
103
+ initial = pattern.strength
104
+ pattern.penalize
105
+ expect(pattern.strength).to be < initial
106
+ end
107
+
108
+ it 'floors at 0.1' do
109
+ 20.times { pattern.penalize }
110
+ expect(pattern.strength).to eq(0.1)
111
+ end
112
+ end
113
+
114
+ describe '#decay' do
115
+ it 'slowly reduces strength' do
116
+ initial = pattern.strength
117
+ pattern.decay
118
+ expect(pattern.strength).to be < initial
119
+ end
120
+ end
121
+
122
+ describe '#to_h' do
123
+ it 'returns all fields' do
124
+ h = pattern.to_h
125
+ expect(h).to include(:id, :name, :domain, :elements, :strength, :match_count, :size)
126
+ end
127
+ end
128
+ end