lex-agentic-attention 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 (315) 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-attention.gemspec +30 -0
  7. data/lib/legion/extensions/agentic/attention/arousal/client.rb +27 -0
  8. data/lib/legion/extensions/agentic/attention/arousal/helpers/arousal_model.rb +84 -0
  9. data/lib/legion/extensions/agentic/attention/arousal/helpers/constants.rb +44 -0
  10. data/lib/legion/extensions/agentic/attention/arousal/runners/arousal.rb +119 -0
  11. data/lib/legion/extensions/agentic/attention/arousal/version.rb +13 -0
  12. data/lib/legion/extensions/agentic/attention/arousal.rb +18 -0
  13. data/lib/legion/extensions/agentic/attention/blindspot/client.rb +19 -0
  14. data/lib/legion/extensions/agentic/attention/blindspot/helpers/blindspot.rb +98 -0
  15. data/lib/legion/extensions/agentic/attention/blindspot/helpers/blindspot_engine.rb +174 -0
  16. data/lib/legion/extensions/agentic/attention/blindspot/helpers/constants.rb +63 -0
  17. data/lib/legion/extensions/agentic/attention/blindspot/helpers/knowledge_boundary.rb +62 -0
  18. data/lib/legion/extensions/agentic/attention/blindspot/runners/cognitive_blindspot.rb +103 -0
  19. data/lib/legion/extensions/agentic/attention/blindspot/version.rb +13 -0
  20. data/lib/legion/extensions/agentic/attention/blindspot.rb +20 -0
  21. data/lib/legion/extensions/agentic/attention/blink/client.rb +19 -0
  22. data/lib/legion/extensions/agentic/attention/blink/helpers/blink_engine.rb +171 -0
  23. data/lib/legion/extensions/agentic/attention/blink/helpers/constants.rb +46 -0
  24. data/lib/legion/extensions/agentic/attention/blink/helpers/stimulus.rb +68 -0
  25. data/lib/legion/extensions/agentic/attention/blink/runners/attentional_blink.rb +75 -0
  26. data/lib/legion/extensions/agentic/attention/blink/version.rb +13 -0
  27. data/lib/legion/extensions/agentic/attention/blink.rb +19 -0
  28. data/lib/legion/extensions/agentic/attention/economy/client.rb +28 -0
  29. data/lib/legion/extensions/agentic/attention/economy/helpers/attention_budget.rb +143 -0
  30. data/lib/legion/extensions/agentic/attention/economy/helpers/constants.rb +38 -0
  31. data/lib/legion/extensions/agentic/attention/economy/helpers/demand.rb +72 -0
  32. data/lib/legion/extensions/agentic/attention/economy/runners/attention_economy.rb +90 -0
  33. data/lib/legion/extensions/agentic/attention/economy/version.rb +13 -0
  34. data/lib/legion/extensions/agentic/attention/economy.rb +19 -0
  35. data/lib/legion/extensions/agentic/attention/feature_binding/actors/decay.rb +45 -0
  36. data/lib/legion/extensions/agentic/attention/feature_binding/client.rb +29 -0
  37. data/lib/legion/extensions/agentic/attention/feature_binding/helpers/binding_field.rb +124 -0
  38. data/lib/legion/extensions/agentic/attention/feature_binding/helpers/bound_object.rb +89 -0
  39. data/lib/legion/extensions/agentic/attention/feature_binding/helpers/constants.rb +52 -0
  40. data/lib/legion/extensions/agentic/attention/feature_binding/helpers/feature.rb +52 -0
  41. data/lib/legion/extensions/agentic/attention/feature_binding/runners/feature_binding.rb +102 -0
  42. data/lib/legion/extensions/agentic/attention/feature_binding/version.rb +13 -0
  43. data/lib/legion/extensions/agentic/attention/feature_binding.rb +20 -0
  44. data/lib/legion/extensions/agentic/attention/focus/client.rb +30 -0
  45. data/lib/legion/extensions/agentic/attention/focus/helpers/constants.rb +38 -0
  46. data/lib/legion/extensions/agentic/attention/focus/helpers/focus.rb +78 -0
  47. data/lib/legion/extensions/agentic/attention/focus/helpers/focus_manager.rb +67 -0
  48. data/lib/legion/extensions/agentic/attention/focus/helpers/habituation.rb +61 -0
  49. data/lib/legion/extensions/agentic/attention/focus/runners/attention.rb +121 -0
  50. data/lib/legion/extensions/agentic/attention/focus/version.rb +13 -0
  51. data/lib/legion/extensions/agentic/attention/focus.rb +20 -0
  52. data/lib/legion/extensions/agentic/attention/kaleidoscope/client.rb +15 -0
  53. data/lib/legion/extensions/agentic/attention/kaleidoscope/helpers/constants.rb +48 -0
  54. data/lib/legion/extensions/agentic/attention/kaleidoscope/helpers/facet.rb +90 -0
  55. data/lib/legion/extensions/agentic/attention/kaleidoscope/helpers/kaleidoscope_engine.rb +142 -0
  56. data/lib/legion/extensions/agentic/attention/kaleidoscope/helpers/pattern.rb +110 -0
  57. data/lib/legion/extensions/agentic/attention/kaleidoscope/runners/cognitive_kaleidoscope.rb +91 -0
  58. data/lib/legion/extensions/agentic/attention/kaleidoscope/version.rb +13 -0
  59. data/lib/legion/extensions/agentic/attention/kaleidoscope.rb +22 -0
  60. data/lib/legion/extensions/agentic/attention/latent_inhibition/client.rb +28 -0
  61. data/lib/legion/extensions/agentic/attention/latent_inhibition/helpers/constants.rb +33 -0
  62. data/lib/legion/extensions/agentic/attention/latent_inhibition/helpers/inhibition_engine.rb +118 -0
  63. data/lib/legion/extensions/agentic/attention/latent_inhibition/helpers/stimulus_record.rb +70 -0
  64. data/lib/legion/extensions/agentic/attention/latent_inhibition/runners/latent_inhibition.rb +78 -0
  65. data/lib/legion/extensions/agentic/attention/latent_inhibition/version.rb +13 -0
  66. data/lib/legion/extensions/agentic/attention/latent_inhibition.rb +19 -0
  67. data/lib/legion/extensions/agentic/attention/lens/client.rb +29 -0
  68. data/lib/legion/extensions/agentic/attention/lens/helpers/constants.rb +58 -0
  69. data/lib/legion/extensions/agentic/attention/lens/helpers/lens.rb +99 -0
  70. data/lib/legion/extensions/agentic/attention/lens/helpers/lens_engine.rb +101 -0
  71. data/lib/legion/extensions/agentic/attention/lens/helpers/lens_stack.rb +134 -0
  72. data/lib/legion/extensions/agentic/attention/lens/runners/cognitive_lens.rb +90 -0
  73. data/lib/legion/extensions/agentic/attention/lens/version.rb +13 -0
  74. data/lib/legion/extensions/agentic/attention/lens.rb +22 -0
  75. data/lib/legion/extensions/agentic/attention/lighthouse/client.rb +25 -0
  76. data/lib/legion/extensions/agentic/attention/lighthouse/helpers/beacon.rb +76 -0
  77. data/lib/legion/extensions/agentic/attention/lighthouse/helpers/constants.rb +49 -0
  78. data/lib/legion/extensions/agentic/attention/lighthouse/helpers/fog.rb +74 -0
  79. data/lib/legion/extensions/agentic/attention/lighthouse/helpers/lighthouse_engine.rb +127 -0
  80. data/lib/legion/extensions/agentic/attention/lighthouse/runners/cognitive_lighthouse.rb +80 -0
  81. data/lib/legion/extensions/agentic/attention/lighthouse/version.rb +13 -0
  82. data/lib/legion/extensions/agentic/attention/lighthouse.rb +22 -0
  83. data/lib/legion/extensions/agentic/attention/priming/client.rb +21 -0
  84. data/lib/legion/extensions/agentic/attention/priming/helpers/activation_network.rb +130 -0
  85. data/lib/legion/extensions/agentic/attention/priming/helpers/concept_node.rb +92 -0
  86. data/lib/legion/extensions/agentic/attention/priming/helpers/constants.rb +54 -0
  87. data/lib/legion/extensions/agentic/attention/priming/runners/priming.rb +94 -0
  88. data/lib/legion/extensions/agentic/attention/priming/version.rb +13 -0
  89. data/lib/legion/extensions/agentic/attention/priming.rb +19 -0
  90. data/lib/legion/extensions/agentic/attention/prism/client.rb +26 -0
  91. data/lib/legion/extensions/agentic/attention/prism/helpers/beam.rb +169 -0
  92. data/lib/legion/extensions/agentic/attention/prism/helpers/constants.rb +46 -0
  93. data/lib/legion/extensions/agentic/attention/prism/helpers/prism_engine.rb +136 -0
  94. data/lib/legion/extensions/agentic/attention/prism/helpers/spectral_component.rb +72 -0
  95. data/lib/legion/extensions/agentic/attention/prism/runners/cognitive_prism.rb +79 -0
  96. data/lib/legion/extensions/agentic/attention/prism/version.rb +13 -0
  97. data/lib/legion/extensions/agentic/attention/prism.rb +22 -0
  98. data/lib/legion/extensions/agentic/attention/regulation/client.rb +19 -0
  99. data/lib/legion/extensions/agentic/attention/regulation/helpers/attention_controller.rb +157 -0
  100. data/lib/legion/extensions/agentic/attention/regulation/helpers/attention_target.rb +64 -0
  101. data/lib/legion/extensions/agentic/attention/regulation/helpers/constants.rb +41 -0
  102. data/lib/legion/extensions/agentic/attention/regulation/runners/attention_regulation.rb +88 -0
  103. data/lib/legion/extensions/agentic/attention/regulation/version.rb +13 -0
  104. data/lib/legion/extensions/agentic/attention/regulation.rb +20 -0
  105. data/lib/legion/extensions/agentic/attention/relevance_theory/helpers/client.rb +17 -0
  106. data/lib/legion/extensions/agentic/attention/relevance_theory/helpers/cognitive_input.rb +88 -0
  107. data/lib/legion/extensions/agentic/attention/relevance_theory/helpers/constants.rb +50 -0
  108. data/lib/legion/extensions/agentic/attention/relevance_theory/helpers/relevance_engine.rb +152 -0
  109. data/lib/legion/extensions/agentic/attention/relevance_theory/runners/relevance_theory.rb +98 -0
  110. data/lib/legion/extensions/agentic/attention/relevance_theory/version.rb +13 -0
  111. data/lib/legion/extensions/agentic/attention/relevance_theory.rb +19 -0
  112. data/lib/legion/extensions/agentic/attention/salience/client.rb +21 -0
  113. data/lib/legion/extensions/agentic/attention/salience/helpers/constants.rb +44 -0
  114. data/lib/legion/extensions/agentic/attention/salience/helpers/salience_map.rb +122 -0
  115. data/lib/legion/extensions/agentic/attention/salience/helpers/signal_integrator.rb +97 -0
  116. data/lib/legion/extensions/agentic/attention/salience/runners/salience.rb +70 -0
  117. data/lib/legion/extensions/agentic/attention/salience/version.rb +13 -0
  118. data/lib/legion/extensions/agentic/attention/salience.rb +19 -0
  119. data/lib/legion/extensions/agentic/attention/schema/actors/decay.rb +45 -0
  120. data/lib/legion/extensions/agentic/attention/schema/client.rb +28 -0
  121. data/lib/legion/extensions/agentic/attention/schema/helpers/attention_schema_model.rb +226 -0
  122. data/lib/legion/extensions/agentic/attention/schema/helpers/constants.rb +66 -0
  123. data/lib/legion/extensions/agentic/attention/schema/helpers/schema_item.rb +68 -0
  124. data/lib/legion/extensions/agentic/attention/schema/runners/attention_schema.rb +117 -0
  125. data/lib/legion/extensions/agentic/attention/schema/version.rb +13 -0
  126. data/lib/legion/extensions/agentic/attention/schema.rb +19 -0
  127. data/lib/legion/extensions/agentic/attention/sensory_gating/client.rb +15 -0
  128. data/lib/legion/extensions/agentic/attention/sensory_gating/helpers/constants.rb +44 -0
  129. data/lib/legion/extensions/agentic/attention/sensory_gating/helpers/gating_engine.rb +109 -0
  130. data/lib/legion/extensions/agentic/attention/sensory_gating/helpers/sensory_filter.rb +100 -0
  131. data/lib/legion/extensions/agentic/attention/sensory_gating/runners/sensory_gating.rb +73 -0
  132. data/lib/legion/extensions/agentic/attention/sensory_gating/version.rb +13 -0
  133. data/lib/legion/extensions/agentic/attention/sensory_gating.rb +19 -0
  134. data/lib/legion/extensions/agentic/attention/signal_detection/client.rb +28 -0
  135. data/lib/legion/extensions/agentic/attention/signal_detection/helpers/constants.rb +66 -0
  136. data/lib/legion/extensions/agentic/attention/signal_detection/helpers/detection_engine.rb +129 -0
  137. data/lib/legion/extensions/agentic/attention/signal_detection/helpers/detector.rb +136 -0
  138. data/lib/legion/extensions/agentic/attention/signal_detection/runners/signal_detection.rb +113 -0
  139. data/lib/legion/extensions/agentic/attention/signal_detection/version.rb +13 -0
  140. data/lib/legion/extensions/agentic/attention/signal_detection.rb +19 -0
  141. data/lib/legion/extensions/agentic/attention/spotlight/client.rb +29 -0
  142. data/lib/legion/extensions/agentic/attention/spotlight/helpers/attention_target.rb +61 -0
  143. data/lib/legion/extensions/agentic/attention/spotlight/helpers/constants.rb +44 -0
  144. data/lib/legion/extensions/agentic/attention/spotlight/helpers/spotlight.rb +78 -0
  145. data/lib/legion/extensions/agentic/attention/spotlight/helpers/spotlight_engine.rb +163 -0
  146. data/lib/legion/extensions/agentic/attention/spotlight/runners/attention_spotlight.rb +122 -0
  147. data/lib/legion/extensions/agentic/attention/spotlight/version.rb +13 -0
  148. data/lib/legion/extensions/agentic/attention/spotlight.rb +20 -0
  149. data/lib/legion/extensions/agentic/attention/subliminal/client.rb +19 -0
  150. data/lib/legion/extensions/agentic/attention/subliminal/helpers/constants.rb +74 -0
  151. data/lib/legion/extensions/agentic/attention/subliminal/helpers/influence_event.rb +44 -0
  152. data/lib/legion/extensions/agentic/attention/subliminal/helpers/subliminal_engine.rb +149 -0
  153. data/lib/legion/extensions/agentic/attention/subliminal/helpers/subliminal_trace.rb +101 -0
  154. data/lib/legion/extensions/agentic/attention/subliminal/runners/subliminal.rb +71 -0
  155. data/lib/legion/extensions/agentic/attention/subliminal/version.rb +13 -0
  156. data/lib/legion/extensions/agentic/attention/subliminal.rb +20 -0
  157. data/lib/legion/extensions/agentic/attention/surprise/client.rb +22 -0
  158. data/lib/legion/extensions/agentic/attention/surprise/helpers/constants.rb +35 -0
  159. data/lib/legion/extensions/agentic/attention/surprise/helpers/habituation_model.rb +62 -0
  160. data/lib/legion/extensions/agentic/attention/surprise/helpers/surprise_event.rb +43 -0
  161. data/lib/legion/extensions/agentic/attention/surprise/helpers/surprise_store.rb +74 -0
  162. data/lib/legion/extensions/agentic/attention/surprise/runners/surprise.rb +174 -0
  163. data/lib/legion/extensions/agentic/attention/surprise/version.rb +13 -0
  164. data/lib/legion/extensions/agentic/attention/surprise.rb +20 -0
  165. data/lib/legion/extensions/agentic/attention/switching/client.rb +19 -0
  166. data/lib/legion/extensions/agentic/attention/switching/helpers/constants.rb +64 -0
  167. data/lib/legion/extensions/agentic/attention/switching/helpers/switch_event.rb +60 -0
  168. data/lib/legion/extensions/agentic/attention/switching/helpers/switching_engine.rb +172 -0
  169. data/lib/legion/extensions/agentic/attention/switching/helpers/task_set.rb +91 -0
  170. data/lib/legion/extensions/agentic/attention/switching/runners/attention_switching.rb +92 -0
  171. data/lib/legion/extensions/agentic/attention/switching/version.rb +13 -0
  172. data/lib/legion/extensions/agentic/attention/switching.rb +20 -0
  173. data/lib/legion/extensions/agentic/attention/synesthesia/client.rb +29 -0
  174. data/lib/legion/extensions/agentic/attention/synesthesia/helpers/constants.rb +52 -0
  175. data/lib/legion/extensions/agentic/attention/synesthesia/helpers/sensory_mapping.rb +70 -0
  176. data/lib/legion/extensions/agentic/attention/synesthesia/helpers/synesthesia_engine.rb +177 -0
  177. data/lib/legion/extensions/agentic/attention/synesthesia/helpers/synesthetic_event.rb +49 -0
  178. data/lib/legion/extensions/agentic/attention/synesthesia/runners/cognitive_synesthesia.rb +83 -0
  179. data/lib/legion/extensions/agentic/attention/synesthesia/version.rb +13 -0
  180. data/lib/legion/extensions/agentic/attention/synesthesia.rb +20 -0
  181. data/lib/legion/extensions/agentic/attention/telescope/client.rb +15 -0
  182. data/lib/legion/extensions/agentic/attention/telescope/helpers/constants.rb +60 -0
  183. data/lib/legion/extensions/agentic/attention/telescope/helpers/observation.rb +68 -0
  184. data/lib/legion/extensions/agentic/attention/telescope/helpers/observatory_engine.rb +126 -0
  185. data/lib/legion/extensions/agentic/attention/telescope/helpers/telescope.rb +129 -0
  186. data/lib/legion/extensions/agentic/attention/telescope/runners/cognitive_telescope.rb +103 -0
  187. data/lib/legion/extensions/agentic/attention/telescope/version.rb +13 -0
  188. data/lib/legion/extensions/agentic/attention/telescope.rb +22 -0
  189. data/lib/legion/extensions/agentic/attention/version.rb +11 -0
  190. data/lib/legion/extensions/agentic/attention.rb +41 -0
  191. data/spec/legion/extensions/agentic/attention/arousal/client_spec.rb +42 -0
  192. data/spec/legion/extensions/agentic/attention/arousal/helpers/arousal_model_spec.rb +160 -0
  193. data/spec/legion/extensions/agentic/attention/arousal/helpers/constants_spec.rb +61 -0
  194. data/spec/legion/extensions/agentic/attention/arousal/runners/arousal_spec.rb +137 -0
  195. data/spec/legion/extensions/agentic/attention/blindspot/client_spec.rb +41 -0
  196. data/spec/legion/extensions/agentic/attention/blindspot/helpers/blindspot_engine_spec.rb +246 -0
  197. data/spec/legion/extensions/agentic/attention/blindspot/helpers/blindspot_spec.rb +204 -0
  198. data/spec/legion/extensions/agentic/attention/blindspot/helpers/constants_spec.rb +82 -0
  199. data/spec/legion/extensions/agentic/attention/blindspot/helpers/knowledge_boundary_spec.rb +104 -0
  200. data/spec/legion/extensions/agentic/attention/blindspot/runners/cognitive_blindspot_spec.rb +179 -0
  201. data/spec/legion/extensions/agentic/attention/blink/client_spec.rb +18 -0
  202. data/spec/legion/extensions/agentic/attention/blink/helpers/blink_engine_spec.rb +147 -0
  203. data/spec/legion/extensions/agentic/attention/blink/helpers/constants_spec.rb +27 -0
  204. data/spec/legion/extensions/agentic/attention/blink/helpers/stimulus_spec.rb +77 -0
  205. data/spec/legion/extensions/agentic/attention/blink/runners/attentional_blink_spec.rb +77 -0
  206. data/spec/legion/extensions/agentic/attention/economy/client_spec.rb +30 -0
  207. data/spec/legion/extensions/agentic/attention/economy/helpers/attention_budget_spec.rb +222 -0
  208. data/spec/legion/extensions/agentic/attention/economy/helpers/constants_spec.rb +112 -0
  209. data/spec/legion/extensions/agentic/attention/economy/helpers/demand_spec.rb +128 -0
  210. data/spec/legion/extensions/agentic/attention/economy/runners/attention_economy_spec.rb +163 -0
  211. data/spec/legion/extensions/agentic/attention/feature_binding/client_spec.rb +20 -0
  212. data/spec/legion/extensions/agentic/attention/feature_binding/helpers/binding_field_spec.rb +207 -0
  213. data/spec/legion/extensions/agentic/attention/feature_binding/helpers/bound_object_spec.rb +149 -0
  214. data/spec/legion/extensions/agentic/attention/feature_binding/helpers/feature_spec.rb +86 -0
  215. data/spec/legion/extensions/agentic/attention/feature_binding/runners/feature_binding_spec.rb +106 -0
  216. data/spec/legion/extensions/agentic/attention/focus/client_spec.rb +19 -0
  217. data/spec/legion/extensions/agentic/attention/focus/helpers/focus_manager_spec.rb +105 -0
  218. data/spec/legion/extensions/agentic/attention/focus/helpers/focus_spec.rb +148 -0
  219. data/spec/legion/extensions/agentic/attention/focus/helpers/habituation_spec.rb +97 -0
  220. data/spec/legion/extensions/agentic/attention/focus/runners/attention_spec.rb +134 -0
  221. data/spec/legion/extensions/agentic/attention/kaleidoscope/client_spec.rb +38 -0
  222. data/spec/legion/extensions/agentic/attention/kaleidoscope/helpers/constants_spec.rb +79 -0
  223. data/spec/legion/extensions/agentic/attention/kaleidoscope/helpers/facet_spec.rb +155 -0
  224. data/spec/legion/extensions/agentic/attention/kaleidoscope/helpers/kaleidoscope_engine_spec.rb +164 -0
  225. data/spec/legion/extensions/agentic/attention/kaleidoscope/helpers/pattern_spec.rb +157 -0
  226. data/spec/legion/extensions/agentic/attention/kaleidoscope/runners/cognitive_kaleidoscope_spec.rb +112 -0
  227. data/spec/legion/extensions/agentic/attention/latent_inhibition/client_spec.rb +49 -0
  228. data/spec/legion/extensions/agentic/attention/latent_inhibition/helpers/constants_spec.rb +57 -0
  229. data/spec/legion/extensions/agentic/attention/latent_inhibition/helpers/inhibition_engine_spec.rb +207 -0
  230. data/spec/legion/extensions/agentic/attention/latent_inhibition/helpers/stimulus_record_spec.rb +175 -0
  231. data/spec/legion/extensions/agentic/attention/latent_inhibition/runners/latent_inhibition_spec.rb +148 -0
  232. data/spec/legion/extensions/agentic/attention/lens/client_spec.rb +64 -0
  233. data/spec/legion/extensions/agentic/attention/lens/helpers/constants_spec.rb +91 -0
  234. data/spec/legion/extensions/agentic/attention/lens/helpers/lens_engine_spec.rb +158 -0
  235. data/spec/legion/extensions/agentic/attention/lens/helpers/lens_spec.rb +222 -0
  236. data/spec/legion/extensions/agentic/attention/lens/helpers/lens_stack_spec.rb +179 -0
  237. data/spec/legion/extensions/agentic/attention/lens/runners/cognitive_lens_spec.rb +182 -0
  238. data/spec/legion/extensions/agentic/attention/lighthouse/client_spec.rb +103 -0
  239. data/spec/legion/extensions/agentic/attention/lighthouse/helpers/beacon_spec.rb +170 -0
  240. data/spec/legion/extensions/agentic/attention/lighthouse/helpers/constants_spec.rb +94 -0
  241. data/spec/legion/extensions/agentic/attention/lighthouse/helpers/fog_spec.rb +166 -0
  242. data/spec/legion/extensions/agentic/attention/lighthouse/helpers/lighthouse_engine_spec.rb +238 -0
  243. data/spec/legion/extensions/agentic/attention/lighthouse/runners/cognitive_lighthouse_spec.rb +182 -0
  244. data/spec/legion/extensions/agentic/attention/priming/client_spec.rb +80 -0
  245. data/spec/legion/extensions/agentic/attention/priming/helpers/activation_network_spec.rb +176 -0
  246. data/spec/legion/extensions/agentic/attention/priming/helpers/concept_node_spec.rb +165 -0
  247. data/spec/legion/extensions/agentic/attention/priming/helpers/constants_spec.rb +51 -0
  248. data/spec/legion/extensions/agentic/attention/priming/runners/priming_spec.rb +141 -0
  249. data/spec/legion/extensions/agentic/attention/prism/client_spec.rb +86 -0
  250. data/spec/legion/extensions/agentic/attention/prism/helpers/beam_spec.rb +182 -0
  251. data/spec/legion/extensions/agentic/attention/prism/helpers/constants_spec.rb +93 -0
  252. data/spec/legion/extensions/agentic/attention/prism/helpers/prism_engine_spec.rb +253 -0
  253. data/spec/legion/extensions/agentic/attention/prism/helpers/spectral_component_spec.rb +171 -0
  254. data/spec/legion/extensions/agentic/attention/prism/runners/cognitive_prism_spec.rb +132 -0
  255. data/spec/legion/extensions/agentic/attention/regulation/client_spec.rb +58 -0
  256. data/spec/legion/extensions/agentic/attention/regulation/helpers/attention_controller_spec.rb +295 -0
  257. data/spec/legion/extensions/agentic/attention/regulation/helpers/attention_target_spec.rb +122 -0
  258. data/spec/legion/extensions/agentic/attention/regulation/runners/attention_regulation_spec.rb +147 -0
  259. data/spec/legion/extensions/agentic/attention/relevance_theory/helpers/cognitive_input_spec.rb +121 -0
  260. data/spec/legion/extensions/agentic/attention/relevance_theory/helpers/relevance_engine_spec.rb +149 -0
  261. data/spec/legion/extensions/agentic/attention/relevance_theory/relevance_theory_spec.rb +11 -0
  262. data/spec/legion/extensions/agentic/attention/relevance_theory/runners/relevance_theory_spec.rb +86 -0
  263. data/spec/legion/extensions/agentic/attention/salience/client_spec.rb +60 -0
  264. data/spec/legion/extensions/agentic/attention/salience/helpers/constants_spec.rb +100 -0
  265. data/spec/legion/extensions/agentic/attention/salience/helpers/salience_map_spec.rb +189 -0
  266. data/spec/legion/extensions/agentic/attention/salience/helpers/signal_integrator_spec.rb +149 -0
  267. data/spec/legion/extensions/agentic/attention/salience/runners/salience_spec.rb +143 -0
  268. data/spec/legion/extensions/agentic/attention/schema/client_spec.rb +47 -0
  269. data/spec/legion/extensions/agentic/attention/schema/helpers/attention_schema_model_spec.rb +219 -0
  270. data/spec/legion/extensions/agentic/attention/schema/helpers/schema_item_spec.rb +114 -0
  271. data/spec/legion/extensions/agentic/attention/schema/runners/attention_schema_spec.rb +185 -0
  272. data/spec/legion/extensions/agentic/attention/sensory_gating/helpers/gating_engine_spec.rb +112 -0
  273. data/spec/legion/extensions/agentic/attention/sensory_gating/helpers/sensory_filter_spec.rb +121 -0
  274. data/spec/legion/extensions/agentic/attention/sensory_gating/runners/sensory_gating_spec.rb +61 -0
  275. data/spec/legion/extensions/agentic/attention/signal_detection/client_spec.rb +20 -0
  276. data/spec/legion/extensions/agentic/attention/signal_detection/helpers/constants_spec.rb +85 -0
  277. data/spec/legion/extensions/agentic/attention/signal_detection/helpers/detection_engine_spec.rb +143 -0
  278. data/spec/legion/extensions/agentic/attention/signal_detection/helpers/detector_spec.rb +179 -0
  279. data/spec/legion/extensions/agentic/attention/signal_detection/runners/signal_detection_spec.rb +151 -0
  280. data/spec/legion/extensions/agentic/attention/spotlight/client_spec.rb +31 -0
  281. data/spec/legion/extensions/agentic/attention/spotlight/helpers/attention_target_spec.rb +121 -0
  282. data/spec/legion/extensions/agentic/attention/spotlight/helpers/constants_spec.rb +82 -0
  283. data/spec/legion/extensions/agentic/attention/spotlight/helpers/spotlight_engine_spec.rb +275 -0
  284. data/spec/legion/extensions/agentic/attention/spotlight/helpers/spotlight_spec.rb +196 -0
  285. data/spec/legion/extensions/agentic/attention/spotlight/runners/attention_spotlight_spec.rb +251 -0
  286. data/spec/legion/extensions/agentic/attention/subliminal/client_spec.rb +21 -0
  287. data/spec/legion/extensions/agentic/attention/subliminal/helpers/influence_event_spec.rb +58 -0
  288. data/spec/legion/extensions/agentic/attention/subliminal/helpers/subliminal_engine_spec.rb +161 -0
  289. data/spec/legion/extensions/agentic/attention/subliminal/helpers/subliminal_trace_spec.rb +168 -0
  290. data/spec/legion/extensions/agentic/attention/subliminal/runners_spec.rb +78 -0
  291. data/spec/legion/extensions/agentic/attention/subliminal/subliminal_spec.rb +7 -0
  292. data/spec/legion/extensions/agentic/attention/surprise/client_spec.rb +122 -0
  293. data/spec/legion/extensions/agentic/attention/surprise/helpers/constants_spec.rb +112 -0
  294. data/spec/legion/extensions/agentic/attention/surprise/helpers/habituation_model_spec.rb +127 -0
  295. data/spec/legion/extensions/agentic/attention/surprise/helpers/surprise_event_spec.rb +102 -0
  296. data/spec/legion/extensions/agentic/attention/surprise/helpers/surprise_store_spec.rb +171 -0
  297. data/spec/legion/extensions/agentic/attention/surprise/runners/surprise_spec.rb +266 -0
  298. data/spec/legion/extensions/agentic/attention/switching/attention_switching_spec.rb +7 -0
  299. data/spec/legion/extensions/agentic/attention/switching/helpers/switch_event_spec.rb +74 -0
  300. data/spec/legion/extensions/agentic/attention/switching/helpers/switching_engine_spec.rb +164 -0
  301. data/spec/legion/extensions/agentic/attention/switching/helpers/task_set_spec.rb +134 -0
  302. data/spec/legion/extensions/agentic/attention/synesthesia/client_spec.rb +57 -0
  303. data/spec/legion/extensions/agentic/attention/synesthesia/helpers/constants_spec.rb +89 -0
  304. data/spec/legion/extensions/agentic/attention/synesthesia/helpers/sensory_mapping_spec.rb +135 -0
  305. data/spec/legion/extensions/agentic/attention/synesthesia/helpers/synesthesia_engine_spec.rb +260 -0
  306. data/spec/legion/extensions/agentic/attention/synesthesia/helpers/synesthetic_event_spec.rb +83 -0
  307. data/spec/legion/extensions/agentic/attention/synesthesia/runners/cognitive_synesthesia_spec.rb +192 -0
  308. data/spec/legion/extensions/agentic/attention/telescope/client_spec.rb +30 -0
  309. data/spec/legion/extensions/agentic/attention/telescope/helpers/constants_spec.rb +108 -0
  310. data/spec/legion/extensions/agentic/attention/telescope/helpers/observation_spec.rb +138 -0
  311. data/spec/legion/extensions/agentic/attention/telescope/helpers/observatory_engine_spec.rb +197 -0
  312. data/spec/legion/extensions/agentic/attention/telescope/helpers/telescope_spec.rb +251 -0
  313. data/spec/legion/extensions/agentic/attention/telescope/runners/cognitive_telescope_spec.rb +191 -0
  314. data/spec/spec_helper.rb +46 -0
  315. metadata +399 -0
@@ -0,0 +1,127 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Attention
7
+ module Lighthouse
8
+ module Helpers
9
+ class LighthouseEngine
10
+ def initialize
11
+ @beacons = {}
12
+ @fog_banks = {}
13
+ end
14
+
15
+ def light_beacon(beacon_type:, domain:, content:, luminosity: nil, sweep_angle: nil)
16
+ raise ArgumentError, 'too many beacons' if @beacons.size >= Constants::MAX_BEACONS
17
+
18
+ beacon = Beacon.new(
19
+ beacon_type: beacon_type,
20
+ domain: domain,
21
+ content: content,
22
+ luminosity: luminosity,
23
+ sweep_angle: sweep_angle
24
+ )
25
+ @beacons[beacon.id] = beacon
26
+ beacon
27
+ end
28
+
29
+ def create_fog(fog_type:, domain:, density: nil, extent: nil)
30
+ raise ArgumentError, 'too many fog banks' if @fog_banks.size >= Constants::MAX_FOG_BANKS
31
+
32
+ fog = Fog.new(fog_type: fog_type, domain: domain, density: density, extent: extent)
33
+ @fog_banks[fog.id] = fog
34
+ fog
35
+ end
36
+
37
+ def sweep(beacon_id:, fog_id:)
38
+ beacon = fetch_beacon(beacon_id)
39
+ fog = fetch_fog(fog_id)
40
+
41
+ reduction = (beacon.luminosity * 0.5).round(10)
42
+ fog.disperse!(rate: reduction)
43
+
44
+ { beacon: beacon.to_h, fog: fog.to_h, reduction: reduction }
45
+ end
46
+
47
+ def dim_all!(rate: Constants::LUMINOSITY_RATE)
48
+ @beacons.each_value { |b| b.dim!(rate: rate) }
49
+ pruned = @beacons.select { |_, b| b.extinguished? }.keys
50
+ pruned.each { |id| @beacons.delete(id) }
51
+ { remaining: @beacons.size, pruned: pruned.size }
52
+ end
53
+
54
+ def thicken_all!(rate: Constants::FOG_DENSITY_RATE)
55
+ @fog_banks.each_value { |f| f.thicken!(rate: rate) }
56
+ { fog_banks: @fog_banks.size }
57
+ end
58
+
59
+ def brightest_beacons(limit: 5)
60
+ @beacons.values
61
+ .reject(&:extinguished?)
62
+ .sort_by { |b| -b.luminosity }
63
+ .first(limit)
64
+ end
65
+
66
+ def densest_fogs(limit: 5)
67
+ @fog_banks.values
68
+ .sort_by { |f| -f.density }
69
+ .first(limit)
70
+ end
71
+
72
+ def visibility_report
73
+ avg_luminosity = compute_average_luminosity
74
+ avg_density = compute_average_density
75
+ net_visibility = (avg_luminosity - avg_density).clamp(0.0, 1.0).round(10)
76
+
77
+ {
78
+ total_beacons: @beacons.size,
79
+ total_fog_banks: @fog_banks.size,
80
+ avg_luminosity: avg_luminosity,
81
+ avg_density: avg_density,
82
+ net_visibility: net_visibility,
83
+ blazing_beacons: @beacons.count { |_, b| b.blazing? },
84
+ extinguished: @beacons.count { |_, b| b.extinguished? },
85
+ impenetrable_fog: @fog_banks.count { |_, f| f.impenetrable? },
86
+ clearing_fog: @fog_banks.count { |_, f| f.clearing? }
87
+ }
88
+ end
89
+
90
+ def all_beacons
91
+ @beacons.values
92
+ end
93
+
94
+ def all_fog_banks
95
+ @fog_banks.values
96
+ end
97
+
98
+ private
99
+
100
+ def fetch_beacon(id)
101
+ @beacons.fetch(id) { raise ArgumentError, "beacon not found: #{id}" }
102
+ end
103
+
104
+ def fetch_fog(id)
105
+ @fog_banks.fetch(id) { raise ArgumentError, "fog bank not found: #{id}" }
106
+ end
107
+
108
+ def compute_average_luminosity
109
+ return 0.0 if @beacons.empty?
110
+
111
+ total = @beacons.values.sum(&:luminosity)
112
+ (total / @beacons.size).round(10)
113
+ end
114
+
115
+ def compute_average_density
116
+ return 0.0 if @fog_banks.empty?
117
+
118
+ total = @fog_banks.values.sum(&:density)
119
+ (total / @fog_banks.size).round(10)
120
+ end
121
+ end
122
+ end
123
+ end
124
+ end
125
+ end
126
+ end
127
+ end
@@ -0,0 +1,80 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Attention
7
+ module Lighthouse
8
+ module Runners
9
+ module CognitiveLighthouse
10
+ extend self
11
+
12
+ include Legion::Extensions::Helpers::Lex if defined?(Legion::Extensions::Helpers::Lex)
13
+
14
+ def light_beacon(beacon_type:, domain:, content:, luminosity: nil,
15
+ sweep_angle: nil, engine: nil, **)
16
+ eng = resolve_engine(engine)
17
+ beacon = eng.light_beacon(
18
+ beacon_type: beacon_type,
19
+ domain: domain,
20
+ content: content,
21
+ luminosity: luminosity,
22
+ sweep_angle: sweep_angle
23
+ )
24
+ Legion::Logging.debug "[lighthouse] lit beacon: type=#{beacon_type} domain=#{domain} " \
25
+ "luminosity=#{beacon.luminosity}"
26
+ { success: true, beacon: beacon.to_h }
27
+ rescue ArgumentError => e
28
+ { success: false, error: e.message }
29
+ end
30
+
31
+ def create_fog(fog_type:, domain:, density: nil, extent: nil, engine: nil, **)
32
+ eng = resolve_engine(engine)
33
+ fog = eng.create_fog(fog_type: fog_type, domain: domain,
34
+ density: density, extent: extent)
35
+ Legion::Logging.debug "[lighthouse] created fog: type=#{fog_type} domain=#{domain} " \
36
+ "density=#{fog.density}"
37
+ { success: true, fog: fog.to_h }
38
+ rescue ArgumentError => e
39
+ { success: false, error: e.message }
40
+ end
41
+
42
+ def sweep(beacon_id:, fog_id:, engine: nil, **)
43
+ eng = resolve_engine(engine)
44
+ result = eng.sweep(beacon_id: beacon_id, fog_id: fog_id)
45
+ Legion::Logging.debug "[lighthouse] sweep: beacon=#{beacon_id} fog=#{fog_id} " \
46
+ "reduction=#{result[:reduction]}"
47
+ { success: true, **result }
48
+ rescue ArgumentError => e
49
+ { success: false, error: e.message }
50
+ end
51
+
52
+ def list_beacons(engine: nil, domain: nil, beacon_type: nil, **)
53
+ eng = resolve_engine(engine)
54
+ results = eng.all_beacons
55
+ results = results.select { |b| b.domain == domain.to_s } if domain
56
+ results = results.select { |b| b.beacon_type == beacon_type.to_sym } if beacon_type
57
+ { success: true, beacons: results.map(&:to_h), count: results.size }
58
+ end
59
+
60
+ def navigation_status(engine: nil, **)
61
+ eng = resolve_engine(engine)
62
+ { success: true, report: eng.visibility_report }
63
+ end
64
+
65
+ private
66
+
67
+ def resolve_engine(engine)
68
+ engine || default_engine
69
+ end
70
+
71
+ def default_engine
72
+ @default_engine ||= Helpers::LighthouseEngine.new
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Attention
7
+ module Lighthouse
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 'lighthouse/version'
6
+ require_relative 'lighthouse/helpers/constants'
7
+ require_relative 'lighthouse/helpers/beacon'
8
+ require_relative 'lighthouse/helpers/fog'
9
+ require_relative 'lighthouse/helpers/lighthouse_engine'
10
+ require_relative 'lighthouse/runners/cognitive_lighthouse'
11
+ require_relative 'lighthouse/client'
12
+
13
+ module Legion
14
+ module Extensions
15
+ module Agentic
16
+ module Attention
17
+ module Lighthouse
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Attention
7
+ module Priming
8
+ class Client
9
+ include Runners::Priming
10
+
11
+ attr_reader :network
12
+
13
+ def initialize(network: nil, **)
14
+ @network = network || Helpers::ActivationNetwork.new
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,130 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Attention
7
+ module Priming
8
+ module Helpers
9
+ class ActivationNetwork
10
+ attr_reader :concepts
11
+
12
+ def initialize
13
+ @concepts = {}
14
+ end
15
+
16
+ def add_concept(name:, domain: :general)
17
+ @concepts[name] ||= ConceptNode.new(name: name, domain: domain)
18
+ trim_concepts
19
+ @concepts[name]
20
+ end
21
+
22
+ def link(name_a, name_b, strength: Constants::DEFAULT_ASSOCIATION_STRENGTH)
23
+ add_concept(name: name_a) unless @concepts.key?(name_a)
24
+ add_concept(name: name_b) unless @concepts.key?(name_b)
25
+ @concepts[name_a].associate(name_b, strength: strength)
26
+ @concepts[name_b].associate(name_a, strength: strength)
27
+ end
28
+
29
+ def prime(name, boost: Constants::PRIME_BOOST, source: nil, spread: true)
30
+ concept = @concepts[name]
31
+ return nil unless concept
32
+
33
+ concept.prime(boost: boost, source: source)
34
+ spread_activation(name, boost) if spread
35
+ concept
36
+ end
37
+
38
+ def activation_for(name)
39
+ concept = @concepts[name]
40
+ concept ? concept.activation : 0.0
41
+ end
42
+
43
+ def primed_concepts
44
+ @concepts.values.select(&:primed?)
45
+ end
46
+
47
+ def primed_in_domain(domain)
48
+ @concepts.values.select { |c| c.domain == domain && c.primed? }
49
+ end
50
+
51
+ def decay_all
52
+ @concepts.each_value do |concept|
53
+ concept.decay_activation
54
+ concept.decay_associations
55
+ end
56
+ end
57
+
58
+ def neighbors(name)
59
+ concept = @concepts[name]
60
+ return [] unless concept
61
+
62
+ concept.associated_names.filter_map { |n| @concepts[n] }
63
+ end
64
+
65
+ def concept_count
66
+ @concepts.size
67
+ end
68
+
69
+ def active_prime_count
70
+ primed_concepts.size
71
+ end
72
+
73
+ def strongest_primes(count = 5)
74
+ primed_concepts.sort_by { |c| -c.activation }.first(count)
75
+ end
76
+
77
+ def to_h
78
+ {
79
+ concept_count: @concepts.size,
80
+ active_primes: active_prime_count,
81
+ primed_concepts: primed_concepts.map { |c| { name: c.name, activation: c.activation.round(4) } },
82
+ domains: @concepts.values.map(&:domain).uniq
83
+ }
84
+ end
85
+
86
+ private
87
+
88
+ def spread_activation(source_name, initial_boost)
89
+ visited = Set.new([source_name])
90
+ queue = [[source_name, initial_boost, 0]]
91
+
92
+ while queue.any?
93
+ current_name, current_boost, depth = queue.shift
94
+ next if depth >= Constants::MAX_SPREAD_HOPS
95
+
96
+ concept = @concepts[current_name]
97
+ next unless concept
98
+
99
+ concept.associated_names.each do |neighbor_name|
100
+ next if visited.include?(neighbor_name)
101
+
102
+ visited.add(neighbor_name)
103
+ neighbor = @concepts[neighbor_name]
104
+ next unless neighbor
105
+
106
+ strength = concept.association_strength(neighbor_name)
107
+ spread_boost = current_boost * Constants::SPREAD_FACTOR * strength
108
+ next if spread_boost < Constants::PRIME_THRESHOLD
109
+
110
+ neighbor.prime(boost: spread_boost, source: source_name)
111
+ concept.strengthen_association(neighbor_name)
112
+ queue << [neighbor_name, spread_boost, depth + 1]
113
+ end
114
+ end
115
+ end
116
+
117
+ def trim_concepts
118
+ return unless @concepts.size > Constants::MAX_CONCEPTS
119
+
120
+ sorted = @concepts.sort_by { |_, c| c.activation }
121
+ excess = @concepts.size - Constants::MAX_CONCEPTS
122
+ sorted.first(excess).each { |name, _| @concepts.delete(name) } # rubocop:disable Style/HashEachMethods
123
+ end
124
+ end
125
+ end
126
+ end
127
+ end
128
+ end
129
+ end
130
+ end
@@ -0,0 +1,92 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Attention
7
+ module Priming
8
+ module Helpers
9
+ class ConceptNode
10
+ attr_reader :name, :domain, :associations
11
+ attr_accessor :activation, :prime_source
12
+
13
+ def initialize(name:, domain: :general)
14
+ @name = name
15
+ @domain = domain
16
+ @activation = 0.0
17
+ @prime_source = nil
18
+ @associations = {}
19
+ end
20
+
21
+ def primed?
22
+ @activation >= Constants::PRIME_THRESHOLD
23
+ end
24
+
25
+ def associate(other_name, strength: Constants::DEFAULT_ASSOCIATION_STRENGTH)
26
+ @associations[other_name] = strength.clamp(Constants::ASSOCIATION_FLOOR, Constants::ASSOCIATION_CEILING)
27
+ trim_associations
28
+ end
29
+
30
+ def strengthen_association(other_name)
31
+ return unless @associations.key?(other_name)
32
+
33
+ @associations[other_name] = [
34
+ @associations[other_name] + Constants::ASSOCIATION_STRENGTHEN,
35
+ Constants::ASSOCIATION_CEILING
36
+ ].min
37
+ end
38
+
39
+ def decay_associations
40
+ @associations.each_key do |key|
41
+ @associations[key] = [
42
+ @associations[key] - Constants::ASSOCIATION_DECAY,
43
+ Constants::ASSOCIATION_FLOOR
44
+ ].max
45
+ end
46
+ end
47
+
48
+ def decay_activation
49
+ @activation = [@activation - Constants::PRIME_DECAY, 0.0].max
50
+ @prime_source = nil unless primed?
51
+ end
52
+
53
+ def prime(boost: Constants::PRIME_BOOST, source: nil)
54
+ @activation = [@activation + boost, 1.0].min
55
+ @prime_source = source
56
+ end
57
+
58
+ def association_strength(other_name)
59
+ @associations[other_name] || 0.0
60
+ end
61
+
62
+ def associated_names
63
+ @associations.keys
64
+ end
65
+
66
+ def to_h
67
+ {
68
+ name: @name,
69
+ domain: @domain,
70
+ activation: @activation.round(4),
71
+ primed: primed?,
72
+ prime_source: @prime_source,
73
+ associations: @associations.transform_values { |v| v.round(4) }
74
+ }
75
+ end
76
+
77
+ private
78
+
79
+ def trim_associations
80
+ return unless @associations.size > Constants::MAX_ASSOCIATIONS
81
+
82
+ sorted = @associations.sort_by { |_, v| v }
83
+ excess = @associations.size - Constants::MAX_ASSOCIATIONS
84
+ sorted.first(excess).each { |name, _| @associations.delete(name) } # rubocop:disable Style/HashEachMethods
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Attention
7
+ module Priming
8
+ module Helpers
9
+ module Constants
10
+ # Base activation boost from a prime
11
+ PRIME_BOOST = 0.3
12
+
13
+ # How fast priming decays per tick
14
+ PRIME_DECAY = 0.08
15
+
16
+ # Spreading activation factor (each hop reduces by this ratio)
17
+ SPREAD_FACTOR = 0.5
18
+
19
+ # Maximum hops for spreading activation
20
+ MAX_SPREAD_HOPS = 3
21
+
22
+ # Minimum activation to be considered primed
23
+ PRIME_THRESHOLD = 0.1
24
+
25
+ # Maximum concepts in the network
26
+ MAX_CONCEPTS = 500
27
+
28
+ # Maximum associations per concept
29
+ MAX_ASSOCIATIONS = 20
30
+
31
+ # Maximum active primes at once
32
+ MAX_ACTIVE_PRIMES = 100
33
+
34
+ # Default association strength between new connections
35
+ DEFAULT_ASSOCIATION_STRENGTH = 0.5
36
+
37
+ # Strengthening factor when association is activated
38
+ ASSOCIATION_STRENGTHEN = 0.05
39
+
40
+ # Weakening factor for unused associations
41
+ ASSOCIATION_DECAY = 0.01
42
+
43
+ # Association strength floor (never fully disconnect)
44
+ ASSOCIATION_FLOOR = 0.05
45
+
46
+ # Association strength ceiling
47
+ ASSOCIATION_CEILING = 1.0
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,94 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Attention
7
+ module Priming
8
+ module Runners
9
+ module Priming
10
+ include Legion::Extensions::Helpers::Lex
11
+
12
+ def network
13
+ @network ||= Helpers::ActivationNetwork.new
14
+ end
15
+
16
+ def prime_concept(name:, boost: nil, source: nil, spread: true, **)
17
+ boost ||= Helpers::Constants::PRIME_BOOST
18
+ network.add_concept(name: name) unless network.concepts.key?(name)
19
+ concept = network.prime(name, boost: boost, source: source, spread: spread)
20
+ return { success: false, reason: :not_found } unless concept
21
+
22
+ Legion::Logging.debug "[priming] primed #{name} activation=#{concept.activation.round(4)} spread=#{spread}"
23
+ { success: true, concept: concept.to_h, active_primes: network.active_prime_count }
24
+ end
25
+
26
+ def add_concept(name:, domain: :general, **)
27
+ concept = network.add_concept(name: name, domain: domain)
28
+ { success: true, concept: concept.to_h }
29
+ end
30
+
31
+ def link_concepts(name_a:, name_b:, strength: nil, **)
32
+ strength ||= Helpers::Constants::DEFAULT_ASSOCIATION_STRENGTH
33
+ network.link(name_a, name_b, strength: strength)
34
+ Legion::Logging.debug "[priming] linked #{name_a} <-> #{name_b} strength=#{strength}"
35
+ { success: true, name_a: name_a, name_b: name_b, strength: strength }
36
+ end
37
+
38
+ def update_priming(**)
39
+ network.decay_all
40
+ primed = network.primed_concepts
41
+ Legion::Logging.debug "[priming] tick: concepts=#{network.concept_count} active=#{primed.size}"
42
+ { success: true, active_primes: primed.size, concept_count: network.concept_count }
43
+ end
44
+
45
+ def check_primed(name:, **)
46
+ activation = network.activation_for(name)
47
+ concept = network.concepts[name]
48
+ {
49
+ success: true,
50
+ name: name,
51
+ activation: activation.round(4),
52
+ primed: activation >= Helpers::Constants::PRIME_THRESHOLD,
53
+ source: concept&.prime_source
54
+ }
55
+ end
56
+
57
+ def primed_concepts(domain: nil, **)
58
+ concepts = domain ? network.primed_in_domain(domain) : network.primed_concepts
59
+ {
60
+ success: true,
61
+ concepts: concepts.map { |c| { name: c.name, activation: c.activation.round(4), domain: c.domain } },
62
+ count: concepts.size
63
+ }
64
+ end
65
+
66
+ def strongest_primes(count: 5, **)
67
+ top = network.strongest_primes(count)
68
+ {
69
+ success: true,
70
+ primes: top.map { |c| { name: c.name, activation: c.activation.round(4), domain: c.domain } },
71
+ count: top.size
72
+ }
73
+ end
74
+
75
+ def neighbors_for(name:, **)
76
+ nbrs = network.neighbors(name)
77
+ {
78
+ success: true,
79
+ name: name,
80
+ neighbors: nbrs.map { |c| { name: c.name, activation: c.activation.round(4), primed: c.primed? } },
81
+ count: nbrs.size
82
+ }
83
+ end
84
+
85
+ def priming_stats(**)
86
+ { success: true, stats: network.to_h }
87
+ end
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Attention
7
+ module Priming
8
+ VERSION = '0.1.0'
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'priming/version'
4
+ require_relative 'priming/helpers/constants'
5
+ require_relative 'priming/helpers/concept_node'
6
+ require_relative 'priming/helpers/activation_network'
7
+ require_relative 'priming/runners/priming'
8
+ require_relative 'priming/client'
9
+
10
+ module Legion
11
+ module Extensions
12
+ module Agentic
13
+ module Attention
14
+ module Priming
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end