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,138 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'constants'
4
+ require_relative 'external_store'
5
+ require_relative 'offloaded_item'
6
+
7
+ module Legion
8
+ module Extensions
9
+ module Agentic
10
+ module Memory
11
+ module Offloading
12
+ module Helpers
13
+ class OffloadingEngine
14
+ include Constants
15
+
16
+ attr_reader :items, :stores
17
+
18
+ def initialize
19
+ @items = {}
20
+ @stores = {}
21
+ end
22
+
23
+ def register_store(name:, store_type:)
24
+ return nil if @stores.size >= MAX_STORES
25
+
26
+ store = ExternalStore.new(name: name, store_type: store_type)
27
+ @stores[store.id] = store
28
+ store
29
+ end
30
+
31
+ def offload(content:, item_type:, importance:, store_id:)
32
+ return nil if @items.size >= MAX_ITEMS
33
+ return nil unless @stores.key?(store_id)
34
+
35
+ item = OffloadedItem.new(
36
+ content: content,
37
+ item_type: item_type,
38
+ importance: importance,
39
+ store_id: store_id
40
+ )
41
+ @items[item.id] = item
42
+ @stores[store_id].increment_items!
43
+ item
44
+ end
45
+
46
+ def retrieve(item_id:)
47
+ item = @items[item_id]
48
+ return nil unless item
49
+
50
+ store = @stores[item.store_id]
51
+ store&.record_success!
52
+ item.retrieve!
53
+ item
54
+ end
55
+
56
+ def retrieve_failed(item_id:)
57
+ item = @items[item_id]
58
+ return nil unless item
59
+
60
+ store = @stores[item.store_id]
61
+ store&.record_failure!
62
+ item
63
+ end
64
+
65
+ def items_in_store(store_id:)
66
+ @items.values.select { |i| i.store_id == store_id }
67
+ end
68
+
69
+ def items_by_type(item_type:)
70
+ @items.values.select { |i| i.item_type == item_type }
71
+ end
72
+
73
+ def most_important_offloaded(limit: 10)
74
+ @items.values
75
+ .sort_by { |i| -i.importance }
76
+ .first(limit)
77
+ end
78
+
79
+ def offloading_ratio
80
+ return 0.0 if MAX_ITEMS.zero?
81
+
82
+ (@items.size.to_f / MAX_ITEMS).round(10)
83
+ end
84
+
85
+ def overall_store_trust
86
+ return 0.0 if @stores.empty?
87
+
88
+ total = @stores.values.sum(&:trust)
89
+ (total / @stores.size).round(10)
90
+ end
91
+
92
+ def most_trusted_store
93
+ @stores.values.max_by(&:trust)
94
+ end
95
+
96
+ def least_trusted_store
97
+ @stores.values.min_by(&:trust)
98
+ end
99
+
100
+ def offloading_report
101
+ {
102
+ total_items: @items.size,
103
+ total_stores: @stores.size,
104
+ offloading_ratio: offloading_ratio,
105
+ offloading_label: offloading_label,
106
+ overall_store_trust: overall_store_trust,
107
+ most_trusted_store: most_trusted_store&.to_h,
108
+ least_trusted_store: least_trusted_store&.to_h,
109
+ items_by_type: items_type_summary,
110
+ stores_summary: @stores.values.map(&:to_h)
111
+ }
112
+ end
113
+
114
+ def to_h
115
+ {
116
+ items: @items.transform_values(&:to_h),
117
+ stores: @stores.transform_values(&:to_h)
118
+ }
119
+ end
120
+
121
+ private
122
+
123
+ def offloading_label
124
+ OFFLOAD_LABELS.find { |range, _| range.cover?(offloading_ratio) }&.last || :self_reliant
125
+ end
126
+
127
+ def items_type_summary
128
+ ITEM_TYPES.to_h do |type|
129
+ [type, @items.values.count { |i| i.item_type == type }]
130
+ end
131
+ end
132
+ end
133
+ end
134
+ end
135
+ end
136
+ end
137
+ end
138
+ end
@@ -0,0 +1,102 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Memory
7
+ module Offloading
8
+ module Runners
9
+ module CognitiveOffloading
10
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) &&
11
+ Legion::Extensions::Helpers.const_defined?(:Lex)
12
+
13
+ def register_store(name:, store_type:, engine: nil, **)
14
+ eng = engine || offloading_engine
15
+ store = eng.register_store(name: name, store_type: store_type)
16
+ if store
17
+ Legion::Logging.info "[cognitive_offloading] registered store name=#{name} type=#{store_type} id=#{store.id}"
18
+ { success: true, store: store.to_h }
19
+ else
20
+ Legion::Logging.warn '[cognitive_offloading] register_store failed: limit reached or invalid store_type'
21
+ { success: false, reason: :limit_reached }
22
+ end
23
+ end
24
+
25
+ def offload_item(content:, item_type:, importance:, store_id:, engine: nil, **)
26
+ eng = engine || offloading_engine
27
+ item = eng.offload(content: content, item_type: item_type, importance: importance, store_id: store_id)
28
+ if item
29
+ Legion::Logging.info "[cognitive_offloading] offloaded item=#{item.id} type=#{item_type} importance=#{importance.round(2)} store=#{store_id}"
30
+ { success: true, item: item.to_h }
31
+ else
32
+ Legion::Logging.warn "[cognitive_offloading] offload failed: limit reached or store not found store_id=#{store_id}"
33
+ { success: false, reason: :offload_failed }
34
+ end
35
+ end
36
+
37
+ def retrieve_item(item_id:, engine: nil, **)
38
+ eng = engine || offloading_engine
39
+ item = eng.retrieve(item_id: item_id)
40
+ if item
41
+ Legion::Logging.debug "[cognitive_offloading] retrieved item=#{item_id} count=#{item.retrieved_count}"
42
+ { success: true, item: item.to_h }
43
+ else
44
+ Legion::Logging.warn "[cognitive_offloading] retrieve failed: item not found item_id=#{item_id}"
45
+ { success: false, reason: :not_found }
46
+ end
47
+ end
48
+
49
+ def report_retrieval_failure(item_id:, engine: nil, **)
50
+ eng = engine || offloading_engine
51
+ item = eng.retrieve_failed(item_id: item_id)
52
+ if item
53
+ store = eng.stores[item.store_id]
54
+ trust = store&.trust&.round(2)
55
+ Legion::Logging.warn "[cognitive_offloading] retrieval failure item=#{item_id} store_trust=#{trust}"
56
+ { success: true, item_id: item_id, store_trust: trust }
57
+ else
58
+ { success: false, reason: :not_found }
59
+ end
60
+ end
61
+
62
+ def items_in_store(store_id:, engine: nil, **)
63
+ eng = engine || offloading_engine
64
+ items = eng.items_in_store(store_id: store_id)
65
+ Legion::Logging.debug "[cognitive_offloading] items_in_store store=#{store_id} count=#{items.size}"
66
+ { success: true, items: items.map(&:to_h), count: items.size }
67
+ end
68
+
69
+ def items_by_type(item_type:, engine: nil, **)
70
+ eng = engine || offloading_engine
71
+ items = eng.items_by_type(item_type: item_type)
72
+ Legion::Logging.debug "[cognitive_offloading] items_by_type type=#{item_type} count=#{items.size}"
73
+ { success: true, items: items.map(&:to_h), count: items.size }
74
+ end
75
+
76
+ def most_important_offloaded(limit: 10, engine: nil, **)
77
+ eng = engine || offloading_engine
78
+ items = eng.most_important_offloaded(limit: limit)
79
+ Legion::Logging.debug "[cognitive_offloading] most_important limit=#{limit} count=#{items.size}"
80
+ { success: true, items: items.map(&:to_h), count: items.size }
81
+ end
82
+
83
+ def offloading_status(engine: nil, **)
84
+ eng = engine || offloading_engine
85
+ report = eng.offloading_report
86
+ ratio = report[:offloading_ratio]
87
+ Legion::Logging.debug "[cognitive_offloading] status items=#{report[:total_items]} stores=#{report[:total_stores]} ratio=#{ratio}"
88
+ { success: true, report: report }
89
+ end
90
+
91
+ private
92
+
93
+ def offloading_engine
94
+ @offloading_engine ||= Helpers::OffloadingEngine.new
95
+ end
96
+ end
97
+ end
98
+ end
99
+ end
100
+ end
101
+ end
102
+ 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 Offloading
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/offloading/version'
4
+ require 'legion/extensions/agentic/memory/offloading/helpers/constants'
5
+ require 'legion/extensions/agentic/memory/offloading/helpers/external_store'
6
+ require 'legion/extensions/agentic/memory/offloading/helpers/offloaded_item'
7
+ require 'legion/extensions/agentic/memory/offloading/helpers/offloading_engine'
8
+ require 'legion/extensions/agentic/memory/offloading/runners/cognitive_offloading'
9
+ require 'legion/extensions/agentic/memory/offloading/client'
10
+
11
+ module Legion
12
+ module Extensions
13
+ module Agentic
14
+ module Memory
15
+ module Offloading
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Memory
7
+ module Paleontology
8
+ class Client
9
+ include Runners::CognitivePaleontology
10
+
11
+ def initialize(engine: nil)
12
+ @default_engine = engine || Helpers::PaleontologyEngine.new
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,69 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Memory
7
+ module Paleontology
8
+ module Helpers
9
+ module Constants
10
+ MAX_FOSSILS = 500
11
+ MAX_STRATA = 20
12
+ MAX_EXCAVATIONS = 100
13
+ FOSSILIZATION_RATE = 0.02
14
+ MIN_FOSSIL_AGE = 300
15
+
16
+ FOSSIL_TYPES = %i[
17
+ strategy pattern belief heuristic
18
+ association routine assumption framework
19
+ ].freeze
20
+
21
+ EXTINCTION_CAUSES = %i[
22
+ obsolescence contradiction displacement
23
+ energy_cost irrelevance environmental_shift
24
+ ].freeze
25
+
26
+ ERA_NAMES = %i[
27
+ primordial archaic classical medieval
28
+ renaissance industrial modern contemporary
29
+ ].freeze
30
+
31
+ PRESERVATION_STATES = %i[
32
+ pristine mineralized fragmented trace imprint
33
+ ].freeze
34
+
35
+ PRESERVATION_LABELS = [
36
+ [0.8..1.0, :pristine],
37
+ [0.6..0.8, :mineralized],
38
+ [0.4..0.6, :fragmented],
39
+ [0.2..0.4, :trace],
40
+ [0.0..0.2, :imprint]
41
+ ].freeze
42
+
43
+ SIGNIFICANCE_LABELS = [
44
+ [0.8..1.0, :keystone],
45
+ [0.6..0.8, :significant],
46
+ [0.4..0.6, :notable],
47
+ [0.2..0.4, :minor],
48
+ [0.0..0.2, :trivial]
49
+ ].freeze
50
+
51
+ STRATUM_LABELS = {
52
+ 0 => 'Surface (contemporary)',
53
+ 1 => 'Shallow (recent history)',
54
+ 2 => 'Mid (established patterns)',
55
+ 3 => 'Deep (foundational layers)',
56
+ 4 => 'Bedrock (primordial cognition)'
57
+ }.freeze
58
+
59
+ def self.label_for(table, value)
60
+ table.each { |range, label| return label if range.cover?(value) }
61
+ table.last.last
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Memory
7
+ module Paleontology
8
+ module Helpers
9
+ class Excavation
10
+ attr_reader :id, :target_stratum, :fossils_found,
11
+ :started_at, :completed_at, :status
12
+
13
+ def initialize(target_stratum:)
14
+ @id = SecureRandom.uuid
15
+ @target_stratum = target_stratum.to_i.clamp(0, 4)
16
+ @fossils_found = []
17
+ @started_at = Time.now.utc
18
+ @completed_at = nil
19
+ @status = :in_progress
20
+ end
21
+
22
+ def record_find!(fossil)
23
+ @fossils_found << fossil
24
+ end
25
+
26
+ def complete!
27
+ return false if @status == :completed
28
+
29
+ @completed_at = Time.now.utc
30
+ @status = :completed
31
+ true
32
+ end
33
+
34
+ def completed?
35
+ @status == :completed
36
+ end
37
+
38
+ def yield_rate
39
+ return 0.0 if @fossils_found.empty?
40
+
41
+ @fossils_found.sum(&:significance) / @fossils_found.size
42
+ end
43
+
44
+ def to_h
45
+ {
46
+ id: @id,
47
+ target_stratum: @target_stratum,
48
+ stratum_label: Constants::STRATUM_LABELS[@target_stratum],
49
+ fossils_count: @fossils_found.size,
50
+ yield_rate: yield_rate.round(10),
51
+ status: @status,
52
+ started_at: @started_at,
53
+ completed_at: @completed_at
54
+ }
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,125 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Memory
7
+ module Paleontology
8
+ module Helpers
9
+ class Fossil
10
+ attr_reader :id, :fossil_type, :domain, :content,
11
+ :extinction_cause, :era, :stratum_depth,
12
+ :discovered_at, :extinct_at, :lineage_ids
13
+ attr_accessor :preservation, :significance
14
+
15
+ def initialize(fossil_type:, domain:, content:, extinction_cause:,
16
+ era: nil, stratum_depth: 0, preservation: nil,
17
+ significance: nil)
18
+ validate_type!(fossil_type)
19
+ validate_cause!(extinction_cause)
20
+ assign_core(fossil_type, domain, content, extinction_cause)
21
+ assign_metadata(era, stratum_depth, preservation, significance)
22
+ end
23
+
24
+ def erode!(rate: Constants::FOSSILIZATION_RATE)
25
+ @preservation = (@preservation - rate.abs).clamp(0.0, 1.0).round(10)
26
+ self
27
+ end
28
+
29
+ def reinforce!(boost: 0.1)
30
+ @significance = (@significance + boost.abs).clamp(0.0, 1.0).round(10)
31
+ self
32
+ end
33
+
34
+ def imprint?
35
+ @preservation < 0.2
36
+ end
37
+
38
+ def keystone?
39
+ @significance >= 0.8
40
+ end
41
+
42
+ def ancient?
43
+ (Time.now.utc - @extinct_at) > 5_000_000
44
+ end
45
+
46
+ def preservation_label
47
+ Constants.label_for(Constants::PRESERVATION_LABELS, @preservation)
48
+ end
49
+
50
+ def significance_label
51
+ Constants.label_for(Constants::SIGNIFICANCE_LABELS, @significance)
52
+ end
53
+
54
+ def link_lineage(other_id)
55
+ @lineage_ids << other_id unless @lineage_ids.include?(other_id)
56
+ end
57
+
58
+ def to_h
59
+ {
60
+ id: @id,
61
+ fossil_type: @fossil_type,
62
+ domain: @domain,
63
+ content: @content,
64
+ extinction_cause: @extinction_cause,
65
+ era: @era,
66
+ stratum_depth: @stratum_depth,
67
+ preservation: @preservation,
68
+ preservation_label: preservation_label,
69
+ significance: @significance,
70
+ significance_label: significance_label,
71
+ discovered_at: @discovered_at,
72
+ extinct_at: @extinct_at,
73
+ lineage_ids: @lineage_ids,
74
+ imprint: imprint?,
75
+ keystone: keystone?,
76
+ ancient: ancient?
77
+ }
78
+ end
79
+
80
+ private
81
+
82
+ def assign_core(fossil_type, domain, content, extinction_cause)
83
+ @id = SecureRandom.uuid
84
+ @fossil_type = fossil_type.to_sym
85
+ @domain = domain.to_sym
86
+ @content = content.to_s
87
+ @extinction_cause = extinction_cause.to_sym
88
+ end
89
+
90
+ def assign_metadata(era, stratum_depth, preservation, significance)
91
+ @era = (era || assign_era(stratum_depth)).to_sym
92
+ @stratum_depth = stratum_depth.to_i.clamp(0, 4)
93
+ @preservation = (preservation || 0.8).to_f.clamp(0.0, 1.0).round(10)
94
+ @significance = (significance || 0.5).to_f.clamp(0.0, 1.0).round(10)
95
+ @discovered_at = Time.now.utc
96
+ @extinct_at = Time.now.utc - rand(100..10_000_000)
97
+ @lineage_ids = []
98
+ end
99
+
100
+ def validate_type!(val)
101
+ return if Constants::FOSSIL_TYPES.include?(val.to_sym)
102
+
103
+ raise ArgumentError,
104
+ "unknown fossil type: #{val.inspect}; " \
105
+ "must be one of #{Constants::FOSSIL_TYPES.inspect}"
106
+ end
107
+
108
+ def validate_cause!(val)
109
+ return if Constants::EXTINCTION_CAUSES.include?(val.to_sym)
110
+
111
+ raise ArgumentError,
112
+ "unknown extinction cause: #{val.inspect}; " \
113
+ "must be one of #{Constants::EXTINCTION_CAUSES.inspect}"
114
+ end
115
+
116
+ def assign_era(depth)
117
+ Constants::ERA_NAMES[depth.to_i.clamp(0, Constants::ERA_NAMES.size - 1)]
118
+ end
119
+ end
120
+ end
121
+ end
122
+ end
123
+ end
124
+ end
125
+ end