lex-agentic-memory 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 (267) 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-memory.gemspec +30 -0
  7. data/lib/legion/extensions/agentic/memory/archaeology/client.rb +19 -0
  8. data/lib/legion/extensions/agentic/memory/archaeology/helpers/archaeology_engine.rb +184 -0
  9. data/lib/legion/extensions/agentic/memory/archaeology/helpers/artifact.rb +146 -0
  10. data/lib/legion/extensions/agentic/memory/archaeology/helpers/constants.rb +95 -0
  11. data/lib/legion/extensions/agentic/memory/archaeology/helpers/excavation_site.rb +97 -0
  12. data/lib/legion/extensions/agentic/memory/archaeology/runners/cognitive_archaeology.rb +86 -0
  13. data/lib/legion/extensions/agentic/memory/archaeology/version.rb +13 -0
  14. data/lib/legion/extensions/agentic/memory/archaeology.rb +22 -0
  15. data/lib/legion/extensions/agentic/memory/compression/client.rb +15 -0
  16. data/lib/legion/extensions/agentic/memory/compression/helpers/compression_engine.rb +145 -0
  17. data/lib/legion/extensions/agentic/memory/compression/helpers/constants.rb +44 -0
  18. data/lib/legion/extensions/agentic/memory/compression/helpers/information_chunk.rb +81 -0
  19. data/lib/legion/extensions/agentic/memory/compression/runners/cognitive_compression.rb +76 -0
  20. data/lib/legion/extensions/agentic/memory/compression/version.rb +13 -0
  21. data/lib/legion/extensions/agentic/memory/compression.rb +19 -0
  22. data/lib/legion/extensions/agentic/memory/echo/client.rb +19 -0
  23. data/lib/legion/extensions/agentic/memory/echo/helpers/constants.rb +57 -0
  24. data/lib/legion/extensions/agentic/memory/echo/helpers/echo.rb +95 -0
  25. data/lib/legion/extensions/agentic/memory/echo/helpers/echo_engine.rb +136 -0
  26. data/lib/legion/extensions/agentic/memory/echo/runners/cognitive_echo.rb +81 -0
  27. data/lib/legion/extensions/agentic/memory/echo/version.rb +13 -0
  28. data/lib/legion/extensions/agentic/memory/echo.rb +19 -0
  29. data/lib/legion/extensions/agentic/memory/echo_chamber/client.rb +19 -0
  30. data/lib/legion/extensions/agentic/memory/echo_chamber/helpers/chamber.rb +134 -0
  31. data/lib/legion/extensions/agentic/memory/echo_chamber/helpers/chamber_engine.rb +156 -0
  32. data/lib/legion/extensions/agentic/memory/echo_chamber/helpers/constants.rb +60 -0
  33. data/lib/legion/extensions/agentic/memory/echo_chamber/helpers/echo.rb +96 -0
  34. data/lib/legion/extensions/agentic/memory/echo_chamber/runners/cognitive_echo_chamber.rb +84 -0
  35. data/lib/legion/extensions/agentic/memory/echo_chamber/version.rb +13 -0
  36. data/lib/legion/extensions/agentic/memory/echo_chamber.rb +21 -0
  37. data/lib/legion/extensions/agentic/memory/episodic/actors/decay.rb +45 -0
  38. data/lib/legion/extensions/agentic/memory/episodic/client.rb +25 -0
  39. data/lib/legion/extensions/agentic/memory/episodic/helpers/constants.rb +36 -0
  40. data/lib/legion/extensions/agentic/memory/episodic/helpers/episode.rb +104 -0
  41. data/lib/legion/extensions/agentic/memory/episodic/helpers/episodic_binding.rb +57 -0
  42. data/lib/legion/extensions/agentic/memory/episodic/helpers/episodic_store.rb +141 -0
  43. data/lib/legion/extensions/agentic/memory/episodic/runners/episodic_buffer.rb +108 -0
  44. data/lib/legion/extensions/agentic/memory/episodic/version.rb +13 -0
  45. data/lib/legion/extensions/agentic/memory/episodic.rb +20 -0
  46. data/lib/legion/extensions/agentic/memory/hologram/client.rb +23 -0
  47. data/lib/legion/extensions/agentic/memory/hologram/helpers/constants.rb +67 -0
  48. data/lib/legion/extensions/agentic/memory/hologram/helpers/hologram.rb +118 -0
  49. data/lib/legion/extensions/agentic/memory/hologram/helpers/hologram_engine.rb +117 -0
  50. data/lib/legion/extensions/agentic/memory/hologram/helpers/holographic_fragment.rb +70 -0
  51. data/lib/legion/extensions/agentic/memory/hologram/runners/cognitive_hologram.rb +110 -0
  52. data/lib/legion/extensions/agentic/memory/hologram/version.rb +13 -0
  53. data/lib/legion/extensions/agentic/memory/hologram.rb +22 -0
  54. data/lib/legion/extensions/agentic/memory/immune_memory/client.rb +19 -0
  55. data/lib/legion/extensions/agentic/memory/immune_memory/helpers/constants.rb +84 -0
  56. data/lib/legion/extensions/agentic/memory/immune_memory/helpers/encounter.rb +54 -0
  57. data/lib/legion/extensions/agentic/memory/immune_memory/helpers/immune_memory_engine.rb +171 -0
  58. data/lib/legion/extensions/agentic/memory/immune_memory/helpers/memory_cell.rb +97 -0
  59. data/lib/legion/extensions/agentic/memory/immune_memory/runners/cognitive_immune_memory.rb +76 -0
  60. data/lib/legion/extensions/agentic/memory/immune_memory/version.rb +13 -0
  61. data/lib/legion/extensions/agentic/memory/immune_memory.rb +20 -0
  62. data/lib/legion/extensions/agentic/memory/nostalgia/client.rb +31 -0
  63. data/lib/legion/extensions/agentic/memory/nostalgia/helpers/constants.rb +68 -0
  64. data/lib/legion/extensions/agentic/memory/nostalgia/helpers/nostalgia_engine.rb +148 -0
  65. data/lib/legion/extensions/agentic/memory/nostalgia/helpers/nostalgia_event.rb +44 -0
  66. data/lib/legion/extensions/agentic/memory/nostalgia/helpers/nostalgic_memory.rb +97 -0
  67. data/lib/legion/extensions/agentic/memory/nostalgia/runners/analysis.rb +61 -0
  68. data/lib/legion/extensions/agentic/memory/nostalgia/runners/recall.rb +60 -0
  69. data/lib/legion/extensions/agentic/memory/nostalgia/version.rb +13 -0
  70. data/lib/legion/extensions/agentic/memory/nostalgia.rb +21 -0
  71. data/lib/legion/extensions/agentic/memory/offloading/client.rb +29 -0
  72. data/lib/legion/extensions/agentic/memory/offloading/helpers/constants.rb +55 -0
  73. data/lib/legion/extensions/agentic/memory/offloading/helpers/external_store.rb +82 -0
  74. data/lib/legion/extensions/agentic/memory/offloading/helpers/offloaded_item.rb +65 -0
  75. data/lib/legion/extensions/agentic/memory/offloading/helpers/offloading_engine.rb +138 -0
  76. data/lib/legion/extensions/agentic/memory/offloading/runners/cognitive_offloading.rb +102 -0
  77. data/lib/legion/extensions/agentic/memory/offloading/version.rb +13 -0
  78. data/lib/legion/extensions/agentic/memory/offloading.rb +20 -0
  79. data/lib/legion/extensions/agentic/memory/paleontology/client.rb +19 -0
  80. data/lib/legion/extensions/agentic/memory/paleontology/helpers/constants.rb +69 -0
  81. data/lib/legion/extensions/agentic/memory/paleontology/helpers/excavation.rb +62 -0
  82. data/lib/legion/extensions/agentic/memory/paleontology/helpers/fossil.rb +125 -0
  83. data/lib/legion/extensions/agentic/memory/paleontology/helpers/paleontology_engine.rb +170 -0
  84. data/lib/legion/extensions/agentic/memory/paleontology/runners/cognitive_paleontology.rb +93 -0
  85. data/lib/legion/extensions/agentic/memory/paleontology/version.rb +13 -0
  86. data/lib/legion/extensions/agentic/memory/paleontology.rb +22 -0
  87. data/lib/legion/extensions/agentic/memory/palimpsest/client.rb +19 -0
  88. data/lib/legion/extensions/agentic/memory/palimpsest/helpers/belief_layer.rb +81 -0
  89. data/lib/legion/extensions/agentic/memory/palimpsest/helpers/constants.rb +56 -0
  90. data/lib/legion/extensions/agentic/memory/palimpsest/helpers/palimpsest.rb +124 -0
  91. data/lib/legion/extensions/agentic/memory/palimpsest/helpers/palimpsest_engine.rb +117 -0
  92. data/lib/legion/extensions/agentic/memory/palimpsest/runners/cognitive_palimpsest.rb +105 -0
  93. data/lib/legion/extensions/agentic/memory/palimpsest/version.rb +13 -0
  94. data/lib/legion/extensions/agentic/memory/palimpsest.rb +21 -0
  95. data/lib/legion/extensions/agentic/memory/reserve/client.rb +19 -0
  96. data/lib/legion/extensions/agentic/memory/reserve/helpers/constants.rb +58 -0
  97. data/lib/legion/extensions/agentic/memory/reserve/helpers/pathway.rb +112 -0
  98. data/lib/legion/extensions/agentic/memory/reserve/helpers/reserve_engine.rb +163 -0
  99. data/lib/legion/extensions/agentic/memory/reserve/runners/cognitive_reserve.rb +92 -0
  100. data/lib/legion/extensions/agentic/memory/reserve/version.rb +13 -0
  101. data/lib/legion/extensions/agentic/memory/reserve.rb +19 -0
  102. data/lib/legion/extensions/agentic/memory/semantic/actors/decay.rb +45 -0
  103. data/lib/legion/extensions/agentic/memory/semantic/client.rb +28 -0
  104. data/lib/legion/extensions/agentic/memory/semantic/helpers/concept.rb +101 -0
  105. data/lib/legion/extensions/agentic/memory/semantic/helpers/constants.rb +51 -0
  106. data/lib/legion/extensions/agentic/memory/semantic/helpers/knowledge_store.rb +145 -0
  107. data/lib/legion/extensions/agentic/memory/semantic/runners/semantic_memory.rb +94 -0
  108. data/lib/legion/extensions/agentic/memory/semantic/version.rb +13 -0
  109. data/lib/legion/extensions/agentic/memory/semantic.rb +20 -0
  110. data/lib/legion/extensions/agentic/memory/semantic_priming/client.rb +19 -0
  111. data/lib/legion/extensions/agentic/memory/semantic_priming/helpers/connection.rb +77 -0
  112. data/lib/legion/extensions/agentic/memory/semantic_priming/helpers/constants.rb +68 -0
  113. data/lib/legion/extensions/agentic/memory/semantic_priming/helpers/priming_network.rb +206 -0
  114. data/lib/legion/extensions/agentic/memory/semantic_priming/helpers/semantic_node.rb +81 -0
  115. data/lib/legion/extensions/agentic/memory/semantic_priming/runners/semantic_priming.rb +120 -0
  116. data/lib/legion/extensions/agentic/memory/semantic_priming/version.rb +13 -0
  117. data/lib/legion/extensions/agentic/memory/semantic_priming.rb +20 -0
  118. data/lib/legion/extensions/agentic/memory/semantic_satiation/client.rb +28 -0
  119. data/lib/legion/extensions/agentic/memory/semantic_satiation/helpers/concept.rb +82 -0
  120. data/lib/legion/extensions/agentic/memory/semantic_satiation/helpers/constants.rb +37 -0
  121. data/lib/legion/extensions/agentic/memory/semantic_satiation/helpers/satiation_engine.rb +103 -0
  122. data/lib/legion/extensions/agentic/memory/semantic_satiation/runners/semantic_satiation.rb +92 -0
  123. data/lib/legion/extensions/agentic/memory/semantic_satiation/version.rb +13 -0
  124. data/lib/legion/extensions/agentic/memory/semantic_satiation.rb +19 -0
  125. data/lib/legion/extensions/agentic/memory/source_monitoring/actors/decay.rb +31 -0
  126. data/lib/legion/extensions/agentic/memory/source_monitoring/client.rb +28 -0
  127. data/lib/legion/extensions/agentic/memory/source_monitoring/helpers/constants.rb +66 -0
  128. data/lib/legion/extensions/agentic/memory/source_monitoring/helpers/source_record.rb +94 -0
  129. data/lib/legion/extensions/agentic/memory/source_monitoring/helpers/source_tracker.rb +119 -0
  130. data/lib/legion/extensions/agentic/memory/source_monitoring/runners/source_monitoring.rb +95 -0
  131. data/lib/legion/extensions/agentic/memory/source_monitoring/version.rb +13 -0
  132. data/lib/legion/extensions/agentic/memory/source_monitoring.rb +19 -0
  133. data/lib/legion/extensions/agentic/memory/trace/actors/decay.rb +45 -0
  134. data/lib/legion/extensions/agentic/memory/trace/actors/tier_migration.rb +45 -0
  135. data/lib/legion/extensions/agentic/memory/trace/batch_decay.rb +44 -0
  136. data/lib/legion/extensions/agentic/memory/trace/client.rb +32 -0
  137. data/lib/legion/extensions/agentic/memory/trace/helpers/cache_store.rb +167 -0
  138. data/lib/legion/extensions/agentic/memory/trace/helpers/decay.rb +68 -0
  139. data/lib/legion/extensions/agentic/memory/trace/helpers/error_tracer.rb +94 -0
  140. data/lib/legion/extensions/agentic/memory/trace/helpers/store.rb +260 -0
  141. data/lib/legion/extensions/agentic/memory/trace/helpers/trace.rb +106 -0
  142. data/lib/legion/extensions/agentic/memory/trace/local_migrations/20260316000001_create_memory_traces.rb +31 -0
  143. data/lib/legion/extensions/agentic/memory/trace/local_migrations/20260316000002_create_memory_associations.rb +13 -0
  144. data/lib/legion/extensions/agentic/memory/trace/persistent_store.rb +94 -0
  145. data/lib/legion/extensions/agentic/memory/trace/quota.rb +55 -0
  146. data/lib/legion/extensions/agentic/memory/trace/runners/consolidation.rb +121 -0
  147. data/lib/legion/extensions/agentic/memory/trace/runners/traces.rb +105 -0
  148. data/lib/legion/extensions/agentic/memory/trace/version.rb +13 -0
  149. data/lib/legion/extensions/agentic/memory/trace.rb +54 -0
  150. data/lib/legion/extensions/agentic/memory/transfer/client.rb +28 -0
  151. data/lib/legion/extensions/agentic/memory/transfer/helpers/constants.rb +34 -0
  152. data/lib/legion/extensions/agentic/memory/transfer/helpers/domain_knowledge.rb +74 -0
  153. data/lib/legion/extensions/agentic/memory/transfer/helpers/transfer_engine.rb +188 -0
  154. data/lib/legion/extensions/agentic/memory/transfer/runners/transfer_learning.rb +77 -0
  155. data/lib/legion/extensions/agentic/memory/transfer/version.rb +13 -0
  156. data/lib/legion/extensions/agentic/memory/transfer.rb +19 -0
  157. data/lib/legion/extensions/agentic/memory/version.rb +11 -0
  158. data/lib/legion/extensions/agentic/memory.rb +35 -0
  159. data/spec/legion/extensions/agentic/memory/archaeology/client_spec.rb +38 -0
  160. data/spec/legion/extensions/agentic/memory/archaeology/cognitive_archaeology_spec.rb +7 -0
  161. data/spec/legion/extensions/agentic/memory/archaeology/helpers/archaeology_engine_spec.rb +165 -0
  162. data/spec/legion/extensions/agentic/memory/archaeology/helpers/artifact_spec.rb +196 -0
  163. data/spec/legion/extensions/agentic/memory/archaeology/helpers/constants_spec.rb +42 -0
  164. data/spec/legion/extensions/agentic/memory/archaeology/helpers/excavation_site_spec.rb +115 -0
  165. data/spec/legion/extensions/agentic/memory/archaeology/runners/cognitive_archaeology_spec.rb +96 -0
  166. data/spec/legion/extensions/agentic/memory/compression/helpers/compression_engine_spec.rb +138 -0
  167. data/spec/legion/extensions/agentic/memory/compression/helpers/constants_spec.rb +50 -0
  168. data/spec/legion/extensions/agentic/memory/compression/helpers/information_chunk_spec.rb +123 -0
  169. data/spec/legion/extensions/agentic/memory/compression/runners/cognitive_compression_spec.rb +80 -0
  170. data/spec/legion/extensions/agentic/memory/echo/client_spec.rb +20 -0
  171. data/spec/legion/extensions/agentic/memory/echo/cognitive_echo_spec.rb +7 -0
  172. data/spec/legion/extensions/agentic/memory/echo/helpers/echo_engine_spec.rb +152 -0
  173. data/spec/legion/extensions/agentic/memory/echo/helpers/echo_spec.rb +128 -0
  174. data/spec/legion/extensions/agentic/memory/echo/runners_spec.rb +80 -0
  175. data/spec/legion/extensions/agentic/memory/echo_chamber/client_spec.rb +84 -0
  176. data/spec/legion/extensions/agentic/memory/echo_chamber/helpers/chamber_engine_spec.rb +266 -0
  177. data/spec/legion/extensions/agentic/memory/echo_chamber/helpers/chamber_spec.rb +249 -0
  178. data/spec/legion/extensions/agentic/memory/echo_chamber/helpers/constants_spec.rb +130 -0
  179. data/spec/legion/extensions/agentic/memory/echo_chamber/helpers/echo_spec.rb +252 -0
  180. data/spec/legion/extensions/agentic/memory/echo_chamber/runners/cognitive_echo_chamber_spec.rb +185 -0
  181. data/spec/legion/extensions/agentic/memory/episodic/client_spec.rb +80 -0
  182. data/spec/legion/extensions/agentic/memory/episodic/episodic_buffer_spec.rb +15 -0
  183. data/spec/legion/extensions/agentic/memory/episodic/helpers/constants_spec.rb +86 -0
  184. data/spec/legion/extensions/agentic/memory/episodic/helpers/episode_spec.rb +188 -0
  185. data/spec/legion/extensions/agentic/memory/episodic/helpers/episodic_binding_spec.rb +114 -0
  186. data/spec/legion/extensions/agentic/memory/episodic/helpers/episodic_store_spec.rb +201 -0
  187. data/spec/legion/extensions/agentic/memory/episodic/runners/episodic_buffer_spec.rb +208 -0
  188. data/spec/legion/extensions/agentic/memory/hologram/client_spec.rb +89 -0
  189. data/spec/legion/extensions/agentic/memory/hologram/cognitive_hologram_spec.rb +39 -0
  190. data/spec/legion/extensions/agentic/memory/hologram/helpers/constants_spec.rb +143 -0
  191. data/spec/legion/extensions/agentic/memory/hologram/helpers/hologram_engine_spec.rb +268 -0
  192. data/spec/legion/extensions/agentic/memory/hologram/helpers/hologram_spec.rb +256 -0
  193. data/spec/legion/extensions/agentic/memory/hologram/helpers/holographic_fragment_spec.rb +213 -0
  194. data/spec/legion/extensions/agentic/memory/hologram/runners/cognitive_hologram_spec.rb +239 -0
  195. data/spec/legion/extensions/agentic/memory/immune_memory/client_spec.rb +18 -0
  196. data/spec/legion/extensions/agentic/memory/immune_memory/cognitive_immune_memory_spec.rb +7 -0
  197. data/spec/legion/extensions/agentic/memory/immune_memory/helpers/encounter_spec.rb +85 -0
  198. data/spec/legion/extensions/agentic/memory/immune_memory/helpers/immune_memory_engine_spec.rb +203 -0
  199. data/spec/legion/extensions/agentic/memory/immune_memory/helpers/memory_cell_spec.rb +190 -0
  200. data/spec/legion/extensions/agentic/memory/immune_memory/runners_spec.rb +83 -0
  201. data/spec/legion/extensions/agentic/memory/nostalgia/client_spec.rb +71 -0
  202. data/spec/legion/extensions/agentic/memory/nostalgia/helpers/constants_spec.rb +65 -0
  203. data/spec/legion/extensions/agentic/memory/nostalgia/helpers/nostalgia_engine_spec.rb +191 -0
  204. data/spec/legion/extensions/agentic/memory/nostalgia/helpers/nostalgia_event_spec.rb +59 -0
  205. data/spec/legion/extensions/agentic/memory/nostalgia/helpers/nostalgic_memory_spec.rb +134 -0
  206. data/spec/legion/extensions/agentic/memory/nostalgia/runners/analysis_spec.rb +97 -0
  207. data/spec/legion/extensions/agentic/memory/nostalgia/runners/recall_spec.rb +81 -0
  208. data/spec/legion/extensions/agentic/memory/offloading/client_spec.rb +30 -0
  209. data/spec/legion/extensions/agentic/memory/offloading/helpers/constants_spec.rb +71 -0
  210. data/spec/legion/extensions/agentic/memory/offloading/helpers/external_store_spec.rb +158 -0
  211. data/spec/legion/extensions/agentic/memory/offloading/helpers/offloaded_item_spec.rb +123 -0
  212. data/spec/legion/extensions/agentic/memory/offloading/helpers/offloading_engine_spec.rb +250 -0
  213. data/spec/legion/extensions/agentic/memory/offloading/runners/cognitive_offloading_spec.rb +194 -0
  214. data/spec/legion/extensions/agentic/memory/paleontology/client_spec.rb +27 -0
  215. data/spec/legion/extensions/agentic/memory/paleontology/cognitive_paleontology_spec.rb +7 -0
  216. data/spec/legion/extensions/agentic/memory/paleontology/helpers/constants_spec.rb +33 -0
  217. data/spec/legion/extensions/agentic/memory/paleontology/helpers/excavation_spec.rb +71 -0
  218. data/spec/legion/extensions/agentic/memory/paleontology/helpers/fossil_spec.rb +134 -0
  219. data/spec/legion/extensions/agentic/memory/paleontology/helpers/paleontology_engine_spec.rb +148 -0
  220. data/spec/legion/extensions/agentic/memory/paleontology/runners/cognitive_paleontology_spec.rb +89 -0
  221. data/spec/legion/extensions/agentic/memory/palimpsest/client_spec.rb +58 -0
  222. data/spec/legion/extensions/agentic/memory/palimpsest/helpers/belief_layer_spec.rb +150 -0
  223. data/spec/legion/extensions/agentic/memory/palimpsest/helpers/constants_spec.rb +63 -0
  224. data/spec/legion/extensions/agentic/memory/palimpsest/helpers/palimpsest_engine_spec.rb +164 -0
  225. data/spec/legion/extensions/agentic/memory/palimpsest/helpers/palimpsest_spec.rb +172 -0
  226. data/spec/legion/extensions/agentic/memory/palimpsest/runners/cognitive_palimpsest_spec.rb +165 -0
  227. data/spec/legion/extensions/agentic/memory/reserve/client_spec.rb +37 -0
  228. data/spec/legion/extensions/agentic/memory/reserve/helpers/pathway_spec.rb +165 -0
  229. data/spec/legion/extensions/agentic/memory/reserve/helpers/reserve_engine_spec.rb +196 -0
  230. data/spec/legion/extensions/agentic/memory/reserve/runners/cognitive_reserve_spec.rb +96 -0
  231. data/spec/legion/extensions/agentic/memory/semantic/client_spec.rb +35 -0
  232. data/spec/legion/extensions/agentic/memory/semantic/helpers/concept_spec.rb +119 -0
  233. data/spec/legion/extensions/agentic/memory/semantic/helpers/knowledge_store_spec.rb +140 -0
  234. data/spec/legion/extensions/agentic/memory/semantic/runners/semantic_memory_spec.rb +103 -0
  235. data/spec/legion/extensions/agentic/memory/semantic_priming/helpers/connection_spec.rb +98 -0
  236. data/spec/legion/extensions/agentic/memory/semantic_priming/helpers/priming_network_spec.rb +208 -0
  237. data/spec/legion/extensions/agentic/memory/semantic_priming/helpers/semantic_node_spec.rb +125 -0
  238. data/spec/legion/extensions/agentic/memory/semantic_priming/semantic_priming_spec.rb +7 -0
  239. data/spec/legion/extensions/agentic/memory/semantic_satiation/client_spec.rb +19 -0
  240. data/spec/legion/extensions/agentic/memory/semantic_satiation/helpers/concept_spec.rb +167 -0
  241. data/spec/legion/extensions/agentic/memory/semantic_satiation/helpers/constants_spec.rb +81 -0
  242. data/spec/legion/extensions/agentic/memory/semantic_satiation/helpers/satiation_engine_spec.rb +189 -0
  243. data/spec/legion/extensions/agentic/memory/semantic_satiation/runners/semantic_satiation_spec.rb +176 -0
  244. data/spec/legion/extensions/agentic/memory/source_monitoring/client_spec.rb +25 -0
  245. data/spec/legion/extensions/agentic/memory/source_monitoring/helpers/source_record_spec.rb +152 -0
  246. data/spec/legion/extensions/agentic/memory/source_monitoring/helpers/source_tracker_spec.rb +139 -0
  247. data/spec/legion/extensions/agentic/memory/source_monitoring/runners/source_monitoring_spec.rb +102 -0
  248. data/spec/legion/extensions/agentic/memory/trace/actors/decay_spec.rb +62 -0
  249. data/spec/legion/extensions/agentic/memory/trace/actors/tier_migration_spec.rb +62 -0
  250. data/spec/legion/extensions/agentic/memory/trace/batch_decay_spec.rb +26 -0
  251. data/spec/legion/extensions/agentic/memory/trace/client_spec.rb +62 -0
  252. data/spec/legion/extensions/agentic/memory/trace/helpers/decay_spec.rb +134 -0
  253. data/spec/legion/extensions/agentic/memory/trace/helpers/store_spec.rb +217 -0
  254. data/spec/legion/extensions/agentic/memory/trace/helpers/trace_spec.rb +120 -0
  255. data/spec/legion/extensions/agentic/memory/trace/local_persistence_spec.rb +255 -0
  256. data/spec/legion/extensions/agentic/memory/trace/memory_spec.rb +11 -0
  257. data/spec/legion/extensions/agentic/memory/trace/persistent_store_spec.rb +50 -0
  258. data/spec/legion/extensions/agentic/memory/trace/quota_spec.rb +56 -0
  259. data/spec/legion/extensions/agentic/memory/trace/runners/consolidation_spec.rb +118 -0
  260. data/spec/legion/extensions/agentic/memory/trace/runners/traces_spec.rb +69 -0
  261. data/spec/legion/extensions/agentic/memory/transfer/client_spec.rb +18 -0
  262. data/spec/legion/extensions/agentic/memory/transfer/helpers/constants_spec.rb +41 -0
  263. data/spec/legion/extensions/agentic/memory/transfer/helpers/domain_knowledge_spec.rb +134 -0
  264. data/spec/legion/extensions/agentic/memory/transfer/helpers/transfer_engine_spec.rb +299 -0
  265. data/spec/legion/extensions/agentic/memory/transfer/runners/transfer_learning_spec.rb +144 -0
  266. data/spec/spec_helper.rb +46 -0
  267. metadata +351 -0
@@ -0,0 +1,108 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Memory
7
+ module Episodic
8
+ module Runners
9
+ module EpisodicBuffer
10
+ def create_episode(**)
11
+ store = default_store
12
+ episode = store.create_episode
13
+ Legion::Logging.debug "[episodic_buffer] created episode id=#{episode.id[0..7]}"
14
+ { success: true, episode_id: episode.id, created_at: episode.created_at }
15
+ end
16
+
17
+ def add_binding(episode_id:, modality:, content:, source:,
18
+ strength: Helpers::Constants::DEFAULT_BINDING_STRENGTH, **)
19
+ raise ArgumentError, "invalid modality: #{modality}" unless Helpers::Constants::MODALITIES.include?(modality.to_sym)
20
+
21
+ store = default_store
22
+ result = store.add_to_episode(
23
+ episode_id: episode_id,
24
+ modality: modality.to_sym,
25
+ content: content,
26
+ source: source,
27
+ strength: strength
28
+ )
29
+
30
+ if result[:added]
31
+ Legion::Logging.debug "[episodic_buffer] add_binding ep=#{episode_id[0..7]} mod=#{modality}"
32
+ { success: true, episode_id: episode_id, binding_id: result[:binding_id] }
33
+ else
34
+ Legion::Logging.debug "[episodic_buffer] add_binding failed ep=#{episode_id[0..7]} r=#{result[:reason]}"
35
+ { success: false, episode_id: episode_id, reason: result[:reason] }
36
+ end
37
+ end
38
+
39
+ def attend_episode(episode_id:, **)
40
+ store = default_store
41
+ result = store.attend_episode(episode_id: episode_id)
42
+ Legion::Logging.debug "[episodic_buffer] attend ep=#{episode_id[0..7]} success=#{result[:success]}"
43
+ result.merge(success: result[:success])
44
+ end
45
+
46
+ def rehearse_episode(episode_id:, **)
47
+ store = default_store
48
+ result = store.rehearse_episode(episode_id: episode_id)
49
+ Legion::Logging.debug "[episodic_buffer] rehearse ep=#{episode_id[0..7]} success=#{result[:success]}"
50
+ result.merge(success: result[:success])
51
+ end
52
+
53
+ def check_integration(episode_id:, **)
54
+ store = default_store
55
+ result = store.integrate(episode_id: episode_id)
56
+ Legion::Logging.debug "[episodic_buffer] check_integration ep=#{episode_id[0..7]} ok=#{result[:integrated]}"
57
+ result.merge(success: true)
58
+ end
59
+
60
+ def retrieve_by_modality(modality:, **)
61
+ store = default_store
62
+ episodes = store.retrieve_by_modality(modality: modality.to_sym)
63
+ Legion::Logging.debug "[episodic_buffer] retrieve_by_modality mod=#{modality} count=#{episodes.size}"
64
+ { success: true, modality: modality, count: episodes.size, episodes: episodes.map(&:to_h) }
65
+ end
66
+
67
+ def retrieve_multimodal(**)
68
+ store = default_store
69
+ episodes = store.retrieve_multimodal
70
+ Legion::Logging.debug "[episodic_buffer] retrieve_multimodal count=#{episodes.size}"
71
+ { success: true, count: episodes.size, episodes: episodes.map(&:to_h) }
72
+ end
73
+
74
+ def most_coherent(limit: 5, **)
75
+ store = default_store
76
+ episodes = store.most_coherent(limit: limit)
77
+ Legion::Logging.debug "[episodic_buffer] most_coherent limit=#{limit} returned=#{episodes.size}"
78
+ { success: true, count: episodes.size, episodes: episodes.map(&:to_h) }
79
+ end
80
+
81
+ def update_episodic_buffer(**)
82
+ store = default_store
83
+ result = store.tick
84
+ Legion::Logging.debug "[episodic_buffer] tick decayed=#{result[:decayed]} expired=#{result[:expired]}"
85
+ { success: true }.merge(result)
86
+ end
87
+
88
+ def episodic_buffer_stats(**)
89
+ store = default_store
90
+ stats = store.to_h
91
+ Legion::Logging.debug "[episodic_buffer] stats episodes=#{stats[:episode_count]}"
92
+ { success: true }.merge(stats)
93
+ end
94
+
95
+ private
96
+
97
+ def default_store
98
+ @default_store ||= Helpers::EpisodicStore.new
99
+ end
100
+
101
+ include Legion::Extensions::Helpers::Lex if defined?(Legion::Extensions::Helpers::Lex)
102
+ end
103
+ end
104
+ end
105
+ end
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Memory
7
+ module Episodic
8
+ VERSION = '0.1.0'
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'legion/extensions/agentic/memory/episodic/version'
4
+ require 'legion/extensions/agentic/memory/episodic/helpers/constants'
5
+ require 'legion/extensions/agentic/memory/episodic/helpers/episodic_binding'
6
+ require 'legion/extensions/agentic/memory/episodic/helpers/episode'
7
+ require 'legion/extensions/agentic/memory/episodic/helpers/episodic_store'
8
+ require 'legion/extensions/agentic/memory/episodic/runners/episodic_buffer'
9
+ require 'legion/extensions/agentic/memory/episodic/client'
10
+
11
+ module Legion
12
+ module Extensions
13
+ module Agentic
14
+ module Memory
15
+ module Episodic
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Memory
7
+ module Hologram
8
+ class Client
9
+ include Runners::CognitiveHologram
10
+
11
+ def initialize(engine: nil, **)
12
+ @default_engine = engine || Helpers::HologramEngine.new
13
+ end
14
+
15
+ private
16
+
17
+ attr_reader :default_engine
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,67 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Memory
7
+ module Hologram
8
+ module Helpers
9
+ module Constants
10
+ # Resolution levels for holographic recall quality
11
+ RESOLUTION_LEVELS = %i[perfect high medium low fragmentary].freeze
12
+
13
+ # Maximum number of holograms retained in the engine
14
+ MAX_HOLOGRAMS = 100
15
+
16
+ # Per-cycle decay applied to fragment fidelity
17
+ INTERFERENCE_DECAY = 0.03
18
+
19
+ # Minimum completeness for a fragment to contribute to reconstruction
20
+ RECONSTRUCTION_THRESHOLD = 0.3
21
+
22
+ # Fragment labels based on completeness range
23
+ FRAGMENT_LABELS = [
24
+ [(0.9..), :intact],
25
+ [(0.7...0.9), :substantial],
26
+ [(0.5...0.7), :partial],
27
+ [(0.3...0.5), :degraded],
28
+ [(..0.3), :fragmentary]
29
+ ].freeze
30
+
31
+ # Resolution labels mapping hologram resolution to symbol
32
+ RESOLUTION_LABELS = [
33
+ [(0.9..), :perfect],
34
+ [(0.7...0.9), :high],
35
+ [(0.5...0.7), :medium],
36
+ [(0.3...0.5), :low],
37
+ [(..0.3), :fragmentary]
38
+ ].freeze
39
+
40
+ # Fidelity labels for individual fragments
41
+ FIDELITY_LABELS = [
42
+ [(0.8..), :pristine],
43
+ [(0.6...0.8), :clear],
44
+ [(0.4...0.6), :hazy],
45
+ [(0.2...0.4), :clouded],
46
+ [(..0.2), :corrupted]
47
+ ].freeze
48
+
49
+ # Interference strength labels
50
+ INTERFERENCE_LABELS = [
51
+ [(0.7..), :strong],
52
+ [(0.4...0.7), :moderate],
53
+ [(0.1...0.4), :weak],
54
+ [(..0.1), :negligible]
55
+ ].freeze
56
+
57
+ def self.label_for(table, value)
58
+ table.each { |range, label| return label if range.cover?(value) }
59
+ table.last.last
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,118 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'securerandom'
4
+ require 'time'
5
+
6
+ module Legion
7
+ module Extensions
8
+ module Agentic
9
+ module Memory
10
+ module Hologram
11
+ module Helpers
12
+ class Hologram
13
+ include Constants
14
+
15
+ attr_reader :id, :domain, :content, :fragments, :created_at
16
+
17
+ def initialize(domain:, content:)
18
+ @id = SecureRandom.uuid
19
+ @domain = domain.to_sym
20
+ @content = content
21
+ @fragments = []
22
+ @created_at = Time.now.utc
23
+ end
24
+
25
+ def resolution
26
+ return 0.0 if @fragments.empty?
27
+
28
+ sufficient = @fragments.select(&:sufficient?)
29
+ return 0.0 if sufficient.empty?
30
+
31
+ avg_completeness = sufficient.sum(&:completeness).round(10) / sufficient.size
32
+ avg_fidelity = sufficient.sum(&:fidelity).round(10) / sufficient.size
33
+ ((avg_completeness + avg_fidelity) / 2.0).round(10)
34
+ end
35
+
36
+ def fragment!(count)
37
+ count = count.clamp(1, 20)
38
+ new_fragments = (1..count).map do |i|
39
+ completeness = ((1.0 / count) + (rand * 0.2)).clamp(0.0, 1.0)
40
+ fidelity = (1.0 - ((i - 1).to_f / (count * 2))).clamp(0.0, 1.0)
41
+ HolographicFragment.new(
42
+ content: @content,
43
+ parent_hologram_id: @id,
44
+ completeness: completeness,
45
+ fidelity: fidelity
46
+ )
47
+ end
48
+ @fragments.concat(new_fragments)
49
+ new_fragments
50
+ end
51
+
52
+ def reconstruct(fragments)
53
+ sufficient = Array(fragments).select(&:sufficient?)
54
+ return { success: false, reason: :insufficient_fragments, resolution: 0.0 } if sufficient.empty?
55
+
56
+ avg_completeness = sufficient.sum(&:completeness).round(10) / sufficient.size
57
+ avg_fidelity = sufficient.sum(&:fidelity).round(10) / sufficient.size
58
+ reconstructed_resolution = ((avg_completeness + avg_fidelity) / 2.0).round(10)
59
+
60
+ {
61
+ success: true,
62
+ resolution: reconstructed_resolution,
63
+ label: resolution_label(reconstructed_resolution),
64
+ fragment_count: sufficient.size,
65
+ total_fragments: fragments.size
66
+ }
67
+ end
68
+
69
+ def add_fragment(fragment)
70
+ @fragments << fragment
71
+ fragment
72
+ end
73
+
74
+ def resolution_label(res = nil)
75
+ value = res || resolution
76
+ Constants.label_for(Constants::RESOLUTION_LABELS, value)
77
+ end
78
+
79
+ def interference_with(other_hologram)
80
+ return 0.0 if other_hologram.nil? || other_hologram.id == @id
81
+
82
+ self_words = tokenize(@content)
83
+ other_words = tokenize(other_hologram.content)
84
+
85
+ return 0.0 if self_words.empty? || other_words.empty?
86
+
87
+ shared = (self_words & other_words).size
88
+ total = (self_words | other_words).size
89
+ return 0.0 if total.zero?
90
+
91
+ (shared.to_f / total).round(10)
92
+ end
93
+
94
+ def to_h
95
+ {
96
+ id: @id,
97
+ domain: @domain,
98
+ content: @content,
99
+ resolution: resolution,
100
+ resolution_label: resolution_label,
101
+ fragment_count: @fragments.size,
102
+ fragments: @fragments.map(&:to_h),
103
+ created_at: @created_at.iso8601
104
+ }
105
+ end
106
+
107
+ private
108
+
109
+ def tokenize(text)
110
+ text.to_s.downcase.scan(/\w+/).uniq
111
+ end
112
+ end
113
+ end
114
+ end
115
+ end
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,117 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Memory
7
+ module Hologram
8
+ module Helpers
9
+ class HologramEngine
10
+ include Constants
11
+
12
+ def initialize
13
+ @holograms = {}
14
+ end
15
+
16
+ def create_hologram(domain:, content:)
17
+ prune! if @holograms.size >= Constants::MAX_HOLOGRAMS
18
+
19
+ hologram = Hologram.new(domain: domain, content: content)
20
+ @holograms[hologram.id] = hologram
21
+ hologram
22
+ end
23
+
24
+ def fragment_hologram(hologram_id:, count: 4)
25
+ hologram = @holograms[hologram_id]
26
+ return nil unless hologram
27
+
28
+ hologram.fragment!(count)
29
+ end
30
+
31
+ def reconstruct_from_fragments(fragment_ids:, hologram_id:)
32
+ hologram = @holograms[hologram_id]
33
+ return { success: false, reason: :hologram_not_found } unless hologram
34
+
35
+ fragments = hologram.fragments.select { |f| fragment_ids.include?(f.id) }
36
+ hologram.reconstruct(fragments)
37
+ end
38
+
39
+ def measure_interference(hologram_id_a:, hologram_id_b:)
40
+ holo_a = @holograms[hologram_id_a]
41
+ holo_b = @holograms[hologram_id_b]
42
+
43
+ return { interference: 0.0, label: :negligible, reason: :hologram_not_found } unless holo_a && holo_b
44
+
45
+ score = holo_a.interference_with(holo_b)
46
+ {
47
+ interference: score,
48
+ label: Constants.label_for(Constants::INTERFERENCE_LABELS, score),
49
+ hologram_a: hologram_id_a,
50
+ hologram_b: hologram_id_b
51
+ }
52
+ end
53
+
54
+ def degrade_all!
55
+ @holograms.each_value do |hologram|
56
+ hologram.fragments.each(&:degrade!)
57
+ end
58
+ end
59
+
60
+ def best_preserved(limit: 5)
61
+ @holograms.values
62
+ .select { |h| h.fragments.any? }
63
+ .sort_by { |h| -h.resolution }
64
+ .first(limit)
65
+ end
66
+
67
+ def most_fragmented(limit: 5)
68
+ @holograms.values
69
+ .select { |h| h.fragments.any? }
70
+ .sort_by(&:resolution)
71
+ .first(limit)
72
+ end
73
+
74
+ def hologram_report
75
+ total = @holograms.size
76
+ with_fragments = @holograms.values.count { |h| h.fragments.any? }
77
+ avg_resolution = resolution_average
78
+
79
+ {
80
+ total_holograms: total,
81
+ holograms_with_frags: with_fragments,
82
+ average_resolution: avg_resolution,
83
+ resolution_label: Constants.label_for(Constants::RESOLUTION_LABELS, avg_resolution),
84
+ best_preserved_count: best_preserved(limit: 3).size,
85
+ most_fragmented_count: most_fragmented(limit: 3).size
86
+ }
87
+ end
88
+
89
+ def holograms
90
+ @holograms.values
91
+ end
92
+
93
+ def get(hologram_id)
94
+ @holograms[hologram_id]
95
+ end
96
+
97
+ private
98
+
99
+ def resolution_average
100
+ return 0.0 if @holograms.empty?
101
+
102
+ values = @holograms.values.map(&:resolution)
103
+ (values.sum.round(10) / values.size).round(10)
104
+ end
105
+
106
+ def prune!
107
+ worst = most_fragmented(limit: 10)
108
+ to_remove = worst.size.positive? ? worst : [@holograms.values.first]
109
+ to_remove.each { |h| @holograms.delete(h.id) }
110
+ end
111
+ end
112
+ end
113
+ end
114
+ end
115
+ end
116
+ end
117
+ end
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'securerandom'
4
+ require 'time'
5
+
6
+ module Legion
7
+ module Extensions
8
+ module Agentic
9
+ module Memory
10
+ module Hologram
11
+ module Helpers
12
+ class HolographicFragment
13
+ include Constants
14
+
15
+ attr_reader :id, :parent_hologram_id, :content, :created_at
16
+ attr_accessor :completeness, :fidelity
17
+
18
+ def initialize(content:, parent_hologram_id:, completeness: 1.0, fidelity: 1.0)
19
+ @id = SecureRandom.uuid
20
+ @content = content
21
+ @parent_hologram_id = parent_hologram_id
22
+ @completeness = completeness.clamp(0.0, 1.0)
23
+ @fidelity = fidelity.clamp(0.0, 1.0)
24
+ @created_at = Time.now.utc
25
+ end
26
+
27
+ def degrade!(rate = Constants::INTERFERENCE_DECAY)
28
+ @completeness = (@completeness - rate).round(10).clamp(0.0, 1.0)
29
+ @fidelity = (@fidelity - rate).round(10).clamp(0.0, 1.0)
30
+ self
31
+ end
32
+
33
+ def enhance!(boost = 0.1)
34
+ @completeness = (@completeness + boost).round(10).clamp(0.0, 1.0)
35
+ @fidelity = (@fidelity + boost).round(10).clamp(0.0, 1.0)
36
+ self
37
+ end
38
+
39
+ def sufficient?
40
+ @completeness > Constants::RECONSTRUCTION_THRESHOLD
41
+ end
42
+
43
+ def completeness_label
44
+ Constants.label_for(Constants::FRAGMENT_LABELS, @completeness)
45
+ end
46
+
47
+ def fidelity_label
48
+ Constants.label_for(Constants::FIDELITY_LABELS, @fidelity)
49
+ end
50
+
51
+ def to_h
52
+ {
53
+ id: @id,
54
+ parent_hologram_id: @parent_hologram_id,
55
+ content: @content,
56
+ completeness: @completeness,
57
+ fidelity: @fidelity,
58
+ completeness_label: completeness_label,
59
+ fidelity_label: fidelity_label,
60
+ sufficient: sufficient?,
61
+ created_at: @created_at.iso8601
62
+ }
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,110 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Memory
7
+ module Hologram
8
+ module Runners
9
+ module CognitiveHologram
10
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) &&
11
+ Legion::Extensions::Helpers.const_defined?(:Lex)
12
+
13
+ def create(domain: :general, content: '', engine: nil, **)
14
+ raise ArgumentError, 'content cannot be empty' if content.to_s.strip.empty?
15
+
16
+ target_engine = engine || default_engine
17
+ hologram = target_engine.create_hologram(domain: domain, content: content)
18
+
19
+ Legion::Logging.debug "[cognitive_hologram] created hologram: domain=#{domain} id=#{hologram.id}"
20
+
21
+ { success: true, hologram: hologram.to_h }
22
+ rescue StandardError => e
23
+ Legion::Logging.error "[cognitive_hologram] create failed: #{e.message}"
24
+ { success: false, error: e.message }
25
+ end
26
+
27
+ def fragment(hologram_id:, count: 4, engine: nil, **)
28
+ target_engine = engine || default_engine
29
+ fragments = target_engine.fragment_hologram(hologram_id: hologram_id, count: count)
30
+
31
+ unless fragments
32
+ Legion::Logging.warn "[cognitive_hologram] fragment: hologram not found id=#{hologram_id}"
33
+ return { success: false, reason: :hologram_not_found }
34
+ end
35
+
36
+ Legion::Logging.debug "[cognitive_hologram] fragmented hologram id=#{hologram_id} count=#{fragments.size}"
37
+ { success: true, fragment_count: fragments.size, fragments: fragments.map(&:to_h) }
38
+ rescue StandardError => e
39
+ Legion::Logging.error "[cognitive_hologram] fragment failed: #{e.message}"
40
+ { success: false, error: e.message }
41
+ end
42
+
43
+ def reconstruct(hologram_id:, fragment_ids: [], engine: nil, **)
44
+ target_engine = engine || default_engine
45
+ result = target_engine.reconstruct_from_fragments(
46
+ hologram_id: hologram_id,
47
+ fragment_ids: fragment_ids
48
+ )
49
+
50
+ Legion::Logging.debug "[cognitive_hologram] reconstruct hologram=#{hologram_id} " \
51
+ "fragments=#{fragment_ids.size} success=#{result[:success]}"
52
+
53
+ result.merge(success: result[:success])
54
+ rescue StandardError => e
55
+ Legion::Logging.error "[cognitive_hologram] reconstruct failed: #{e.message}"
56
+ { success: false, error: e.message }
57
+ end
58
+
59
+ def list_holograms(limit: 20, engine: nil, **)
60
+ target_engine = engine || default_engine
61
+ holograms = target_engine.holograms.first(limit)
62
+
63
+ Legion::Logging.debug "[cognitive_hologram] list_holograms: count=#{holograms.size} limit=#{limit}"
64
+ { success: true, holograms: holograms.map(&:to_h), count: holograms.size }
65
+ rescue StandardError => e
66
+ Legion::Logging.error "[cognitive_hologram] list_holograms failed: #{e.message}"
67
+ { success: false, error: e.message }
68
+ end
69
+
70
+ def interference_check(hologram_id_a:, hologram_id_b:, engine: nil, **)
71
+ target_engine = engine || default_engine
72
+ result = target_engine.measure_interference(
73
+ hologram_id_a: hologram_id_a,
74
+ hologram_id_b: hologram_id_b
75
+ )
76
+
77
+ Legion::Logging.debug '[cognitive_hologram] interference_check: ' \
78
+ "a=#{hologram_id_a} b=#{hologram_id_b} score=#{result[:interference]}"
79
+
80
+ result.merge(success: true)
81
+ rescue StandardError => e
82
+ Legion::Logging.error "[cognitive_hologram] interference_check failed: #{e.message}"
83
+ { success: false, error: e.message }
84
+ end
85
+
86
+ def hologram_status(engine: nil, **)
87
+ target_engine = engine || default_engine
88
+ report = target_engine.hologram_report
89
+
90
+ Legion::Logging.debug "[cognitive_hologram] status: total=#{report[:total_holograms]} " \
91
+ "avg_resolution=#{report[:average_resolution].round(2)}"
92
+
93
+ { success: true, report: report }
94
+ rescue StandardError => e
95
+ Legion::Logging.error "[cognitive_hologram] hologram_status failed: #{e.message}"
96
+ { success: false, error: e.message }
97
+ end
98
+
99
+ private
100
+
101
+ def default_engine
102
+ @default_engine ||= Helpers::HologramEngine.new
103
+ end
104
+ end
105
+ end
106
+ end
107
+ end
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Memory
7
+ module Hologram
8
+ VERSION = '0.1.0'
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'securerandom'
4
+
5
+ require_relative 'hologram/version'
6
+ require_relative 'hologram/helpers/constants'
7
+ require_relative 'hologram/helpers/holographic_fragment'
8
+ require_relative 'hologram/helpers/hologram'
9
+ require_relative 'hologram/helpers/hologram_engine'
10
+ require_relative 'hologram/runners/cognitive_hologram'
11
+ require_relative 'hologram/client'
12
+
13
+ module Legion
14
+ module Extensions
15
+ module Agentic
16
+ module Memory
17
+ module Hologram
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end