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,213 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Legion::Extensions::Agentic::Memory::Hologram::Helpers::HolographicFragment do
4
+ let(:parent_id) { SecureRandom.uuid }
5
+ let(:content) { 'the cat sat on the mat' }
6
+
7
+ subject(:fragment) do
8
+ described_class.new(content: content, parent_hologram_id: parent_id)
9
+ end
10
+
11
+ describe '#initialize' do
12
+ it 'generates a UUID id' do
13
+ expect(fragment.id).to match(/\A[0-9a-f-]{36}\z/)
14
+ end
15
+
16
+ it 'stores content' do
17
+ expect(fragment.content).to eq(content)
18
+ end
19
+
20
+ it 'stores parent_hologram_id' do
21
+ expect(fragment.parent_hologram_id).to eq(parent_id)
22
+ end
23
+
24
+ it 'defaults completeness to 1.0' do
25
+ expect(fragment.completeness).to eq(1.0)
26
+ end
27
+
28
+ it 'defaults fidelity to 1.0' do
29
+ expect(fragment.fidelity).to eq(1.0)
30
+ end
31
+
32
+ it 'clamps completeness above 1.0' do
33
+ f = described_class.new(content: content, parent_hologram_id: parent_id, completeness: 1.5)
34
+ expect(f.completeness).to eq(1.0)
35
+ end
36
+
37
+ it 'clamps completeness below 0.0' do
38
+ f = described_class.new(content: content, parent_hologram_id: parent_id, completeness: -0.5)
39
+ expect(f.completeness).to eq(0.0)
40
+ end
41
+
42
+ it 'clamps fidelity above 1.0' do
43
+ f = described_class.new(content: content, parent_hologram_id: parent_id, fidelity: 2.0)
44
+ expect(f.fidelity).to eq(1.0)
45
+ end
46
+
47
+ it 'clamps fidelity below 0.0' do
48
+ f = described_class.new(content: content, parent_hologram_id: parent_id, fidelity: -1.0)
49
+ expect(f.fidelity).to eq(0.0)
50
+ end
51
+
52
+ it 'sets created_at to a Time object' do
53
+ expect(fragment.created_at).to be_a(Time)
54
+ end
55
+ end
56
+
57
+ describe '#degrade!' do
58
+ it 'reduces completeness by INTERFERENCE_DECAY' do
59
+ original = fragment.completeness
60
+ fragment.degrade!
61
+ expect(fragment.completeness).to be < original
62
+ end
63
+
64
+ it 'reduces fidelity by INTERFERENCE_DECAY' do
65
+ original = fragment.fidelity
66
+ fragment.degrade!
67
+ expect(fragment.fidelity).to be < original
68
+ end
69
+
70
+ it 'uses default decay rate when no argument given' do
71
+ original = fragment.completeness
72
+ fragment.degrade!
73
+ expected = (original - Legion::Extensions::Agentic::Memory::Hologram::Helpers::Constants::INTERFERENCE_DECAY).round(10)
74
+ expect(fragment.completeness).to be_within(0.0001).of(expected)
75
+ end
76
+
77
+ it 'accepts a custom decay rate' do
78
+ original = fragment.completeness
79
+ fragment.degrade!(0.1)
80
+ expect(fragment.completeness).to be_within(0.0001).of(original - 0.1)
81
+ end
82
+
83
+ it 'does not go below 0.0' do
84
+ 10.times { fragment.degrade!(0.2) }
85
+ expect(fragment.completeness).to eq(0.0)
86
+ end
87
+
88
+ it 'returns self for chaining' do
89
+ expect(fragment.degrade!).to eq(fragment)
90
+ end
91
+ end
92
+
93
+ describe '#enhance!' do
94
+ let(:low_fragment) do
95
+ described_class.new(content: content, parent_hologram_id: parent_id, completeness: 0.5, fidelity: 0.5)
96
+ end
97
+
98
+ it 'increases completeness' do
99
+ original = low_fragment.completeness
100
+ low_fragment.enhance!
101
+ expect(low_fragment.completeness).to be > original
102
+ end
103
+
104
+ it 'increases fidelity' do
105
+ original = low_fragment.fidelity
106
+ low_fragment.enhance!
107
+ expect(low_fragment.fidelity).to be > original
108
+ end
109
+
110
+ it 'accepts a custom boost' do
111
+ original = low_fragment.completeness
112
+ low_fragment.enhance!(0.2)
113
+ expect(low_fragment.completeness).to be_within(0.0001).of(original + 0.2)
114
+ end
115
+
116
+ it 'does not exceed 1.0' do
117
+ 3.times { fragment.enhance!(0.5) }
118
+ expect(fragment.completeness).to eq(1.0)
119
+ end
120
+
121
+ it 'returns self for chaining' do
122
+ expect(low_fragment.enhance!).to eq(low_fragment)
123
+ end
124
+ end
125
+
126
+ describe '#sufficient?' do
127
+ it 'returns true when completeness exceeds RECONSTRUCTION_THRESHOLD' do
128
+ f = described_class.new(content: content, parent_hologram_id: parent_id, completeness: 0.5)
129
+ expect(f.sufficient?).to be true
130
+ end
131
+
132
+ it 'returns false when completeness is at threshold' do
133
+ threshold = Legion::Extensions::Agentic::Memory::Hologram::Helpers::Constants::RECONSTRUCTION_THRESHOLD
134
+ f = described_class.new(content: content, parent_hologram_id: parent_id, completeness: threshold)
135
+ expect(f.sufficient?).to be false
136
+ end
137
+
138
+ it 'returns false when completeness is below threshold' do
139
+ f = described_class.new(content: content, parent_hologram_id: parent_id, completeness: 0.1)
140
+ expect(f.sufficient?).to be false
141
+ end
142
+ end
143
+
144
+ describe '#completeness_label' do
145
+ it 'returns a symbol' do
146
+ expect(fragment.completeness_label).to be_a(Symbol)
147
+ end
148
+
149
+ it 'returns :intact for completeness 1.0' do
150
+ expect(fragment.completeness_label).to eq(:intact)
151
+ end
152
+
153
+ it 'returns :fragmentary for very low completeness' do
154
+ f = described_class.new(content: content, parent_hologram_id: parent_id, completeness: 0.1)
155
+ expect(f.completeness_label).to eq(:fragmentary)
156
+ end
157
+ end
158
+
159
+ describe '#fidelity_label' do
160
+ it 'returns a symbol' do
161
+ expect(fragment.fidelity_label).to be_a(Symbol)
162
+ end
163
+
164
+ it 'returns :pristine for fidelity 1.0' do
165
+ expect(fragment.fidelity_label).to eq(:pristine)
166
+ end
167
+
168
+ it 'returns :corrupted for very low fidelity' do
169
+ f = described_class.new(content: content, parent_hologram_id: parent_id, fidelity: 0.1)
170
+ expect(f.fidelity_label).to eq(:corrupted)
171
+ end
172
+ end
173
+
174
+ describe '#to_h' do
175
+ subject(:hash) { fragment.to_h }
176
+
177
+ it 'includes :id' do
178
+ expect(hash[:id]).to eq(fragment.id)
179
+ end
180
+
181
+ it 'includes :parent_hologram_id' do
182
+ expect(hash[:parent_hologram_id]).to eq(parent_id)
183
+ end
184
+
185
+ it 'includes :content' do
186
+ expect(hash[:content]).to eq(content)
187
+ end
188
+
189
+ it 'includes :completeness' do
190
+ expect(hash[:completeness]).to eq(fragment.completeness)
191
+ end
192
+
193
+ it 'includes :fidelity' do
194
+ expect(hash[:fidelity]).to eq(fragment.fidelity)
195
+ end
196
+
197
+ it 'includes :completeness_label as symbol' do
198
+ expect(hash[:completeness_label]).to be_a(Symbol)
199
+ end
200
+
201
+ it 'includes :fidelity_label as symbol' do
202
+ expect(hash[:fidelity_label]).to be_a(Symbol)
203
+ end
204
+
205
+ it 'includes :sufficient as boolean' do
206
+ expect(hash[:sufficient]).to be(true).or be(false)
207
+ end
208
+
209
+ it 'includes :created_at as ISO8601 string' do
210
+ expect(hash[:created_at]).to match(/\d{4}-\d{2}-\d{2}T/)
211
+ end
212
+ end
213
+ end
@@ -0,0 +1,239 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Legion::Extensions::Agentic::Memory::Hologram::Runners::CognitiveHologram do
4
+ subject(:runner) do
5
+ obj = Object.new
6
+ obj.extend(described_class)
7
+ obj
8
+ end
9
+
10
+ let(:engine) { Legion::Extensions::Agentic::Memory::Hologram::Helpers::HologramEngine.new }
11
+
12
+ describe '#create' do
13
+ it 'returns success: true for valid input' do
14
+ result = runner.create(domain: :memory, content: 'test content here', engine: engine)
15
+ expect(result[:success]).to be true
16
+ end
17
+
18
+ it 'returns the hologram hash' do
19
+ result = runner.create(domain: :memory, content: 'test content', engine: engine)
20
+ expect(result[:hologram]).to be_a(Hash)
21
+ end
22
+
23
+ it 'includes the hologram id in the result' do
24
+ result = runner.create(domain: :memory, content: 'test content', engine: engine)
25
+ expect(result[:hologram][:id]).to match(/\A[0-9a-f-]{36}\z/)
26
+ end
27
+
28
+ it 'uses the provided domain' do
29
+ result = runner.create(domain: :emotion, content: 'emotion content', engine: engine)
30
+ expect(result[:hologram][:domain]).to eq(:emotion)
31
+ end
32
+
33
+ it 'returns success: false for empty content' do
34
+ result = runner.create(domain: :memory, content: '', engine: engine)
35
+ expect(result[:success]).to be false
36
+ end
37
+
38
+ it 'returns success: false for whitespace-only content' do
39
+ result = runner.create(domain: :memory, content: ' ', engine: engine)
40
+ expect(result[:success]).to be false
41
+ end
42
+
43
+ it 'includes error message on failure' do
44
+ result = runner.create(domain: :memory, content: '', engine: engine)
45
+ expect(result[:error]).to be_a(String)
46
+ end
47
+
48
+ it 'accepts extra keyword arguments via ** splat' do
49
+ expect do
50
+ runner.create(domain: :memory, content: 'valid', engine: engine, extra: :ignored)
51
+ end.not_to raise_error
52
+ end
53
+ end
54
+
55
+ describe '#fragment' do
56
+ let(:hologram_id) do
57
+ runner.create(domain: :memory, content: 'fragment test content', engine: engine)[:hologram][:id]
58
+ end
59
+
60
+ it 'returns success: true for existing hologram' do
61
+ result = runner.fragment(hologram_id: hologram_id, count: 3, engine: engine)
62
+ expect(result[:success]).to be true
63
+ end
64
+
65
+ it 'returns fragment_count matching request' do
66
+ result = runner.fragment(hologram_id: hologram_id, count: 3, engine: engine)
67
+ expect(result[:fragment_count]).to eq(3)
68
+ end
69
+
70
+ it 'returns fragments as array of hashes' do
71
+ result = runner.fragment(hologram_id: hologram_id, count: 2, engine: engine)
72
+ expect(result[:fragments]).to be_an(Array)
73
+ expect(result[:fragments].first).to be_a(Hash)
74
+ end
75
+
76
+ it 'returns success: false for unknown hologram_id' do
77
+ result = runner.fragment(hologram_id: SecureRandom.uuid, count: 2, engine: engine)
78
+ expect(result[:success]).to be false
79
+ expect(result[:reason]).to eq(:hologram_not_found)
80
+ end
81
+
82
+ it 'accepts extra keyword arguments' do
83
+ expect do
84
+ runner.fragment(hologram_id: hologram_id, count: 2, engine: engine, extra: :ignored)
85
+ end.not_to raise_error
86
+ end
87
+ end
88
+
89
+ describe '#reconstruct' do
90
+ let(:hologram_id) do
91
+ runner.create(domain: :memory, content: 'reconstruction test content', engine: engine)[:hologram][:id]
92
+ end
93
+ let(:fragment_ids) do
94
+ result = runner.fragment(hologram_id: hologram_id, count: 4, engine: engine)
95
+ result[:fragments].select { |f| f[:sufficient] }.map { |f| f[:id] }
96
+ end
97
+
98
+ it 'returns success true when sufficient fragments provided' do
99
+ result = runner.reconstruct(hologram_id: hologram_id, fragment_ids: fragment_ids, engine: engine)
100
+ expect(result[:success]).to be(true).or be(false)
101
+ end
102
+
103
+ it 'returns a resolution value on successful reconstruction' do
104
+ result = runner.reconstruct(hologram_id: hologram_id, fragment_ids: fragment_ids, engine: engine)
105
+ expect(result[:resolution]).to be_a(Float) if result[:success]
106
+ end
107
+
108
+ it 'returns success: false for unknown hologram_id' do
109
+ result = runner.reconstruct(
110
+ hologram_id: SecureRandom.uuid,
111
+ fragment_ids: [],
112
+ engine: engine
113
+ )
114
+ expect(result[:success]).to be false
115
+ end
116
+
117
+ it 'accepts extra keyword arguments' do
118
+ expect do
119
+ runner.reconstruct(hologram_id: hologram_id, fragment_ids: [], engine: engine, extra: :ok)
120
+ end.not_to raise_error
121
+ end
122
+ end
123
+
124
+ describe '#list_holograms' do
125
+ before do
126
+ 3.times { |i| runner.create(domain: :memory, content: "hologram number #{i}", engine: engine) }
127
+ end
128
+
129
+ it 'returns success: true' do
130
+ result = runner.list_holograms(engine: engine)
131
+ expect(result[:success]).to be true
132
+ end
133
+
134
+ it 'returns holograms as array' do
135
+ result = runner.list_holograms(engine: engine)
136
+ expect(result[:holograms]).to be_an(Array)
137
+ end
138
+
139
+ it 'returns count matching holograms array size' do
140
+ result = runner.list_holograms(engine: engine)
141
+ expect(result[:count]).to eq(result[:holograms].size)
142
+ end
143
+
144
+ it 'respects the limit parameter' do
145
+ result = runner.list_holograms(limit: 2, engine: engine)
146
+ expect(result[:holograms].size).to be <= 2
147
+ end
148
+
149
+ it 'returns 3 holograms with default limit' do
150
+ result = runner.list_holograms(engine: engine)
151
+ expect(result[:count]).to eq(3)
152
+ end
153
+
154
+ it 'accepts extra keyword arguments' do
155
+ expect do
156
+ runner.list_holograms(engine: engine, extra: :ignored)
157
+ end.not_to raise_error
158
+ end
159
+ end
160
+
161
+ describe '#interference_check' do
162
+ let(:id_a) do
163
+ runner.create(domain: :memory, content: 'the quick brown fox', engine: engine)[:hologram][:id]
164
+ end
165
+ let(:id_b) do
166
+ runner.create(domain: :memory, content: 'the quick brown fox', engine: engine)[:hologram][:id]
167
+ end
168
+
169
+ it 'returns success: true for known holograms' do
170
+ result = runner.interference_check(hologram_id_a: id_a, hologram_id_b: id_b, engine: engine)
171
+ expect(result[:success]).to be true
172
+ end
173
+
174
+ it 'returns interference score as float' do
175
+ result = runner.interference_check(hologram_id_a: id_a, hologram_id_b: id_b, engine: engine)
176
+ expect(result[:interference]).to be_a(Float)
177
+ end
178
+
179
+ it 'returns a label' do
180
+ result = runner.interference_check(hologram_id_a: id_a, hologram_id_b: id_b, engine: engine)
181
+ expect(result[:label]).to be_a(Symbol)
182
+ end
183
+
184
+ it 'includes success key even on missing hologram' do
185
+ result = runner.interference_check(
186
+ hologram_id_a: SecureRandom.uuid,
187
+ hologram_id_b: id_b,
188
+ engine: engine
189
+ )
190
+ expect(result).to have_key(:success)
191
+ end
192
+
193
+ it 'accepts extra keyword arguments' do
194
+ expect do
195
+ runner.interference_check(hologram_id_a: id_a, hologram_id_b: id_b, engine: engine, extra: :ok)
196
+ end.not_to raise_error
197
+ end
198
+ end
199
+
200
+ describe '#hologram_status' do
201
+ before do
202
+ 2.times do |i|
203
+ h_result = runner.create(domain: :memory, content: "status test hologram #{i}", engine: engine)
204
+ runner.fragment(hologram_id: h_result[:hologram][:id], count: 2, engine: engine)
205
+ end
206
+ end
207
+
208
+ it 'returns success: true' do
209
+ result = runner.hologram_status(engine: engine)
210
+ expect(result[:success]).to be true
211
+ end
212
+
213
+ it 'returns a report hash' do
214
+ result = runner.hologram_status(engine: engine)
215
+ expect(result[:report]).to be_a(Hash)
216
+ end
217
+
218
+ it 'report includes total_holograms' do
219
+ result = runner.hologram_status(engine: engine)
220
+ expect(result[:report][:total_holograms]).to eq(2)
221
+ end
222
+
223
+ it 'report includes average_resolution' do
224
+ result = runner.hologram_status(engine: engine)
225
+ expect(result[:report][:average_resolution]).to be_a(Float)
226
+ end
227
+
228
+ it 'report includes resolution_label' do
229
+ result = runner.hologram_status(engine: engine)
230
+ expect(result[:report][:resolution_label]).to be_a(Symbol)
231
+ end
232
+
233
+ it 'accepts extra keyword arguments' do
234
+ expect do
235
+ runner.hologram_status(engine: engine, extra: :ignored)
236
+ end.not_to raise_error
237
+ end
238
+ end
239
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Legion::Extensions::Agentic::Memory::ImmuneMemory::Client do
4
+ subject(:client) { described_class.new }
5
+
6
+ it 'responds to runner methods' do
7
+ expect(client).to respond_to(:create_memory_cell, :vaccinate, :encounter_threat, :immune_status)
8
+ end
9
+
10
+ it 'runs a full immune lifecycle' do
11
+ client.vaccinate(threat_type: :prompt_injection, signature: 'known-threat')
12
+ result = client.encounter_threat(threat_type: :prompt_injection, threat_signature: 'known-threat')
13
+ expect(result[:encounter][:response_type]).to eq(:secondary)
14
+
15
+ status = client.immune_status
16
+ expect(status[:total_cells]).to be >= 1
17
+ end
18
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Legion::Extensions::Agentic::Memory::ImmuneMemory do
4
+ it 'has a version number' do
5
+ expect(Legion::Extensions::Agentic::Memory::ImmuneMemory::VERSION).to eq('0.1.0')
6
+ end
7
+ end
@@ -0,0 +1,85 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Legion::Extensions::Agentic::Memory::ImmuneMemory::Helpers::Encounter do
4
+ subject(:encounter) do
5
+ described_class.new(threat_type: :prompt_injection, threat_signature: 'sig-001', severity: 0.7)
6
+ end
7
+
8
+ describe '#initialize' do
9
+ it 'assigns a UUID id' do
10
+ expect(encounter.id).to match(/\A[0-9a-f-]{36}\z/)
11
+ end
12
+
13
+ it 'stores threat_type' do
14
+ expect(encounter.threat_type).to eq(:prompt_injection)
15
+ end
16
+
17
+ it 'stores threat_signature' do
18
+ expect(encounter.threat_signature).to eq('sig-001')
19
+ end
20
+
21
+ it 'stores severity' do
22
+ expect(encounter.severity).to eq(0.7)
23
+ end
24
+
25
+ it 'defaults response_type to primary' do
26
+ expect(encounter.response_type).to eq(:primary)
27
+ end
28
+
29
+ it 'defaults outcome to neutralized' do
30
+ expect(encounter.outcome).to eq(:neutralized)
31
+ end
32
+ end
33
+
34
+ describe '#secondary?' do
35
+ it 'is false for primary' do
36
+ expect(encounter.secondary?).to be false
37
+ end
38
+
39
+ it 'is true for secondary' do
40
+ sec = described_class.new(threat_type: :logic_manipulation, threat_signature: 's',
41
+ response_type: :secondary)
42
+ expect(sec.secondary?).to be true
43
+ end
44
+ end
45
+
46
+ describe '#primary?' do
47
+ it 'is true for primary' do
48
+ expect(encounter.primary?).to be true
49
+ end
50
+ end
51
+
52
+ describe '#neutralized?' do
53
+ it 'is true when neutralized' do
54
+ expect(encounter.neutralized?).to be true
55
+ end
56
+ end
57
+
58
+ describe '#evaded?' do
59
+ it 'is true when evaded' do
60
+ evaded = described_class.new(threat_type: :data_poisoning, threat_signature: 's', outcome: :evaded)
61
+ expect(evaded.evaded?).to be true
62
+ end
63
+ end
64
+
65
+ describe '#critical?' do
66
+ it 'is false for moderate severity' do
67
+ expect(encounter.critical?).to be false
68
+ end
69
+
70
+ it 'is true for high severity' do
71
+ crit = described_class.new(threat_type: :resource_exhaustion, threat_signature: 's', severity: 0.9)
72
+ expect(crit.critical?).to be true
73
+ end
74
+ end
75
+
76
+ describe '#to_h' do
77
+ it 'includes all fields' do
78
+ hash = encounter.to_h
79
+ expect(hash).to include(
80
+ :id, :threat_type, :threat_signature, :severity,
81
+ :response_type, :response_speed, :outcome, :critical, :created_at
82
+ )
83
+ end
84
+ end
85
+ end