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,68 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'securerandom'
4
+
5
+ module Legion
6
+ module Extensions
7
+ module Agentic
8
+ module Attention
9
+ module Blink
10
+ module Helpers
11
+ class Stimulus
12
+ include Constants
13
+
14
+ attr_reader :id, :stimulus_type, :content, :salience, :processed,
15
+ :processing_quality, :arrival_time, :created_at
16
+
17
+ def initialize(stimulus_type:, content:, salience: 0.5, arrival_time: nil)
18
+ @id = SecureRandom.uuid
19
+ @stimulus_type = stimulus_type.to_sym
20
+ @content = content
21
+ @salience = salience.to_f.clamp(0.0, 1.0)
22
+ @processed = false
23
+ @processing_quality = 0.0
24
+ @arrival_time = arrival_time || Time.now.utc.to_f
25
+ @created_at = Time.now.utc
26
+ end
27
+
28
+ def process!(quality:)
29
+ @processed = true
30
+ @processing_quality = quality.to_f.clamp(0.0, 1.0)
31
+ self
32
+ end
33
+
34
+ def salient?
35
+ @salience >= SALIENCE_THRESHOLD
36
+ end
37
+
38
+ def processing_label
39
+ match = PROCESSING_LABELS.find { |range, _| range.cover?(@processing_quality) }
40
+ match ? match.last : :blinked
41
+ end
42
+
43
+ def missed?
44
+ @processed && @processing_quality < 0.2
45
+ end
46
+
47
+ def to_h
48
+ {
49
+ id: @id,
50
+ stimulus_type: @stimulus_type,
51
+ content: @content,
52
+ salience: @salience,
53
+ processed: @processed,
54
+ processing_quality: @processing_quality,
55
+ processing_label: processing_label,
56
+ salient: salient?,
57
+ missed: missed?,
58
+ arrival_time: @arrival_time,
59
+ created_at: @created_at
60
+ }
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,75 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Attention
7
+ module Blink
8
+ module Runners
9
+ module AttentionalBlink
10
+ include Legion::Extensions::Helpers::Lex if defined?(Legion::Extensions::Helpers::Lex)
11
+
12
+ def submit_stimulus(stimulus_type:, content:, salience: 0.5, **)
13
+ stimulus = engine.submit_stimulus(
14
+ stimulus_type: stimulus_type,
15
+ content: content,
16
+ salience: salience
17
+ )
18
+ { success: true }.merge(stimulus.to_h)
19
+ end
20
+
21
+ def check_blink_status(**)
22
+ {
23
+ success: true,
24
+ blink_active: engine.blink_active?,
25
+ recovery_level: engine.recovery_level,
26
+ recovery_label: engine.recovery_label
27
+ }
28
+ end
29
+
30
+ def force_blink(duration: nil, **)
31
+ d = duration || Helpers::Constants::DEFAULT_BLINK_DURATION
32
+ result = engine.force_blink!(duration: d)
33
+ { success: true }.merge(result)
34
+ end
35
+
36
+ def force_recover(**)
37
+ result = engine.force_recover!
38
+ { success: true }.merge(result)
39
+ end
40
+
41
+ def adjust_blink_duration(duration:, **)
42
+ engine.adjust_blink_duration(duration: duration)
43
+ { success: true, blink_duration: duration }
44
+ end
45
+
46
+ def recent_stimuli_report(limit: 10, **)
47
+ stimuli = engine.recent_stimuli(limit: limit)
48
+ { success: true, count: stimuli.size, stimuli: stimuli.map(&:to_h) }
49
+ end
50
+
51
+ def missed_stimuli_report(**)
52
+ missed = engine.missed_stimuli
53
+ { success: true, count: missed.size, stimuli: missed.map(&:to_h) }
54
+ end
55
+
56
+ def stimuli_by_type_report(stimulus_type:, **)
57
+ stimuli = engine.stimuli_by_type(stimulus_type: stimulus_type)
58
+ { success: true, stimulus_type: stimulus_type.to_sym, count: stimuli.size,
59
+ stimuli: stimuli.map(&:to_h) }
60
+ end
61
+
62
+ def blink_report(**)
63
+ engine.blink_report
64
+ end
65
+
66
+ def attentional_blink_stats(**)
67
+ engine.to_h
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
75
+ 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 Blink
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 'blink/version'
4
+ require_relative 'blink/helpers/constants'
5
+ require_relative 'blink/helpers/stimulus'
6
+ require_relative 'blink/helpers/blink_engine'
7
+ require_relative 'blink/runners/attentional_blink'
8
+ require_relative 'blink/client'
9
+
10
+ module Legion
11
+ module Extensions
12
+ module Agentic
13
+ module Attention
14
+ module Blink
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'legion/extensions/agentic/attention/economy/helpers/constants'
4
+ require 'legion/extensions/agentic/attention/economy/helpers/demand'
5
+ require 'legion/extensions/agentic/attention/economy/helpers/attention_budget'
6
+ require 'legion/extensions/agentic/attention/economy/runners/attention_economy'
7
+
8
+ module Legion
9
+ module Extensions
10
+ module Agentic
11
+ module Attention
12
+ module Economy
13
+ class Client
14
+ include Runners::AttentionEconomy
15
+
16
+ def initialize(**)
17
+ @attention_budget = Helpers::AttentionBudget.new
18
+ end
19
+
20
+ private
21
+
22
+ attr_reader :attention_budget
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,143 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'constants'
4
+ require_relative 'demand'
5
+
6
+ module Legion
7
+ module Extensions
8
+ module Agentic
9
+ module Attention
10
+ module Economy
11
+ module Helpers
12
+ class AttentionBudget
13
+ include Constants
14
+
15
+ attr_reader :total_budget, :spent, :recovered
16
+
17
+ def initialize(total_budget: Constants::DEFAULT_BUDGET)
18
+ @demands = {}
19
+ @total_budget = total_budget
20
+ @spent = 0.0
21
+ @recovered = 0.0
22
+ end
23
+
24
+ def create_demand(label:, demand_type:, priority:, cost:, roi: 0.5)
25
+ raise ArgumentError, "demand_type must be one of #{Constants::DEMAND_TYPES.inspect}" unless Constants::DEMAND_TYPES.include?(demand_type)
26
+ raise ArgumentError, "max demands (#{Constants::MAX_DEMANDS}) reached" if @demands.size >= Constants::MAX_DEMANDS
27
+
28
+ demand = Demand.new(label: label, demand_type: demand_type, priority: priority, cost: cost, roi: roi)
29
+ @demands[demand.id] = demand
30
+ demand
31
+ end
32
+
33
+ def allocate(demand_id:, amount: nil)
34
+ demand = @demands.fetch(demand_id, nil)
35
+ return { allocated: false, reason: :not_found } unless demand
36
+
37
+ alloc_amount = (amount || demand.cost).clamp(Constants::MIN_ALLOCATION, 1.0)
38
+
39
+ return { allocated: false, reason: :insufficient_budget, available: available_budget.round(10) } if alloc_amount > available_budget
40
+
41
+ demand.allocate!(amount: alloc_amount)
42
+ @spent = (@spent + alloc_amount).round(10)
43
+ { allocated: true, demand_id: demand_id, amount: alloc_amount, remaining: available_budget.round(10) }
44
+ end
45
+
46
+ def deallocate(demand_id:)
47
+ demand = @demands.fetch(demand_id, nil)
48
+ return { deallocated: false, reason: :not_found } unless demand
49
+
50
+ freed = demand.allocated
51
+ demand.deallocate!
52
+ @spent = [(@spent - freed).round(10), 0.0].max
53
+ { deallocated: true, demand_id: demand_id, freed: freed.round(10), remaining: available_budget.round(10) }
54
+ end
55
+
56
+ def recover!(amount: Constants::BUDGET_RECOVERY_RATE)
57
+ previous = @spent
58
+ @spent = [(@spent - amount).round(10), 0.0].max
59
+ delta = (previous - @spent).round(10)
60
+ @recovered = (@recovered + delta).round(10)
61
+ { recovered: delta, spent: @spent, available: available_budget.round(10) }
62
+ end
63
+
64
+ def available_budget
65
+ (@total_budget - @spent).clamp(0.0, @total_budget).round(10)
66
+ end
67
+
68
+ def utilization
69
+ return 0.0 if @total_budget.zero?
70
+
71
+ (@spent / @total_budget).clamp(0.0, 1.0).round(10)
72
+ end
73
+
74
+ def prioritized_demands
75
+ @demands.values.sort_by { |d| -d.priority }
76
+ end
77
+
78
+ def best_roi(limit: 5)
79
+ @demands.values
80
+ .sort_by { |d| -d.efficiency }
81
+ .first(limit)
82
+ end
83
+
84
+ def over_budget?
85
+ @spent > @total_budget
86
+ end
87
+
88
+ def budget_pressure
89
+ utilization
90
+ end
91
+
92
+ def rebalance
93
+ return { rebalanced: 0 } unless over_budget?
94
+
95
+ sorted = @demands.values.select { |d| d.allocated.positive? }.sort_by(&:priority)
96
+ freed_count = 0
97
+
98
+ sorted.each do |demand|
99
+ break unless over_budget?
100
+
101
+ freed = demand.allocated
102
+ demand.deallocate!
103
+ @spent = [(@spent - freed).round(10), 0.0].max
104
+ freed_count += 1
105
+ end
106
+
107
+ { rebalanced: freed_count, spent: @spent, available: available_budget.round(10) }
108
+ end
109
+
110
+ def budget_report
111
+ {
112
+ total_budget: @total_budget,
113
+ spent: @spent.round(10),
114
+ available: available_budget,
115
+ utilization: utilization,
116
+ recovered: @recovered.round(10),
117
+ over_budget: over_budget?,
118
+ budget_pressure: budget_pressure,
119
+ demand_count: @demands.size,
120
+ allocated_count: @demands.values.count { |d| d.allocated.positive? }
121
+ }
122
+ end
123
+
124
+ def to_h
125
+ budget_report.merge(
126
+ demands: @demands.values.map(&:to_h)
127
+ )
128
+ end
129
+
130
+ def demands
131
+ @demands.values
132
+ end
133
+
134
+ def find_demand(demand_id)
135
+ @demands[demand_id]
136
+ end
137
+ end
138
+ end
139
+ end
140
+ end
141
+ end
142
+ end
143
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Attention
7
+ module Economy
8
+ module Helpers
9
+ module Constants
10
+ MAX_DEMANDS = 200
11
+ DEFAULT_BUDGET = 1.0
12
+ BUDGET_RECOVERY_RATE = 0.05
13
+ MIN_ALLOCATION = 0.01
14
+
15
+ PRIORITY_LABELS = {
16
+ (0.8..) => :critical,
17
+ (0.6...0.8) => :high,
18
+ (0.4...0.6) => :moderate,
19
+ (0.2...0.4) => :low,
20
+ (..0.2) => :background
21
+ }.freeze
22
+
23
+ EFFICIENCY_LABELS = {
24
+ (0.8..) => :excellent,
25
+ (0.6...0.8) => :good,
26
+ (0.4...0.6) => :adequate,
27
+ (0.2...0.4) => :poor,
28
+ (..0.2) => :wasted
29
+ }.freeze
30
+
31
+ DEMAND_TYPES = %i[task sensory social emotional cognitive maintenance].freeze
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'securerandom'
4
+ require_relative 'constants'
5
+
6
+ module Legion
7
+ module Extensions
8
+ module Agentic
9
+ module Attention
10
+ module Economy
11
+ module Helpers
12
+ class Demand
13
+ include Constants
14
+
15
+ attr_reader :id, :label, :demand_type, :priority, :cost, :roi, :created_at
16
+ attr_accessor :allocated
17
+
18
+ def initialize(label:, demand_type:, priority:, cost:, roi: 0.5)
19
+ @id = SecureRandom.uuid
20
+ @label = label
21
+ @demand_type = demand_type
22
+ @priority = priority.clamp(0.0, 1.0)
23
+ @cost = cost.clamp(0.0, 1.0)
24
+ @roi = roi.clamp(0.0, 1.0)
25
+ @allocated = 0.0
26
+ @created_at = Time.now.utc
27
+ end
28
+
29
+ def allocate!(amount:)
30
+ @allocated = amount.clamp(0.0, 1.0).round(10)
31
+ end
32
+
33
+ def deallocate!
34
+ @allocated = 0.0
35
+ end
36
+
37
+ def efficiency
38
+ return 0.0 if cost.zero?
39
+
40
+ (roi / cost).clamp(0.0, 1.0).round(10)
41
+ end
42
+
43
+ def efficiency_label
44
+ Constants::EFFICIENCY_LABELS.find { |range, _| range.cover?(efficiency) }&.last || :wasted
45
+ end
46
+
47
+ def priority_label
48
+ Constants::PRIORITY_LABELS.find { |range, _| range.cover?(priority) }&.last || :background
49
+ end
50
+
51
+ def to_h
52
+ {
53
+ id: id,
54
+ label: label,
55
+ demand_type: demand_type,
56
+ priority: priority,
57
+ priority_label: priority_label,
58
+ cost: cost,
59
+ roi: roi,
60
+ allocated: allocated,
61
+ efficiency: efficiency,
62
+ efficiency_label: efficiency_label,
63
+ created_at: created_at
64
+ }
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,90 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Attention
7
+ module Economy
8
+ module Runners
9
+ module AttentionEconomy
10
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) &&
11
+ Legion::Extensions::Helpers.const_defined?(:Lex)
12
+
13
+ def add_demand(label:, demand_type:, priority:, cost:, roi: 0.5, **)
14
+ d = attention_budget.create_demand(
15
+ label: label,
16
+ demand_type: demand_type,
17
+ priority: priority,
18
+ cost: cost,
19
+ roi: roi
20
+ )
21
+ Legion::Logging.info "[attention] demand added: id=#{d.id} label=#{label} priority=#{priority} cost=#{cost}"
22
+ { created: true, demand: d.to_h }
23
+ rescue ArgumentError => e
24
+ Legion::Logging.warn "[attention] add_demand failed: #{e.message}"
25
+ { created: false, reason: e.message }
26
+ end
27
+
28
+ def allocate_demand(demand_id:, amount: nil, **)
29
+ result = attention_budget.allocate(demand_id: demand_id, amount: amount)
30
+ if result[:allocated]
31
+ Legion::Logging.info "[attention] allocated: demand_id=#{demand_id} amount=#{result[:amount]} remaining=#{result[:remaining]}"
32
+ else
33
+ Legion::Logging.debug "[attention] allocation failed: demand_id=#{demand_id} reason=#{result[:reason]}"
34
+ end
35
+ result
36
+ end
37
+
38
+ def deallocate_demand(demand_id:, **)
39
+ result = attention_budget.deallocate(demand_id: demand_id)
40
+ Legion::Logging.debug "[attention] deallocated: demand_id=#{demand_id} freed=#{result[:freed]}"
41
+ result
42
+ end
43
+
44
+ def recover_budget(amount: nil, **)
45
+ opts = amount ? { amount: amount } : {}
46
+ result = attention_budget.recover!(**opts)
47
+ Legion::Logging.debug "[attention] recovery: delta=#{result[:recovered]} spent=#{result[:spent]}"
48
+ result
49
+ end
50
+
51
+ def prioritized_demands(**)
52
+ demands = attention_budget.prioritized_demands
53
+ Legion::Logging.debug "[attention] prioritized_demands: count=#{demands.size}"
54
+ { demands: demands.map(&:to_h), count: demands.size }
55
+ end
56
+
57
+ def best_roi_demands(limit: 5, **)
58
+ demands = attention_budget.best_roi(limit: limit)
59
+ Legion::Logging.debug "[attention] best_roi: limit=#{limit} count=#{demands.size}"
60
+ { demands: demands.map(&:to_h), count: demands.size }
61
+ end
62
+
63
+ def rebalance_budget(**)
64
+ result = attention_budget.rebalance
65
+ Legion::Logging.info "[attention] rebalance: freed=#{result[:rebalanced]} spent=#{result[:spent]}"
66
+ result
67
+ end
68
+
69
+ def attention_status(**)
70
+ report = attention_budget.budget_report
71
+ Legion::Logging.debug "[attention] status: utilization=#{report[:utilization]} demands=#{report[:demand_count]}"
72
+ report
73
+ end
74
+
75
+ def attention_snapshot(**)
76
+ attention_budget.to_h
77
+ end
78
+
79
+ private
80
+
81
+ def attention_budget
82
+ @attention_budget ||= Helpers::AttentionBudget.new
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end
90
+ 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 Economy
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 'legion/extensions/agentic/attention/economy/version'
4
+ require 'legion/extensions/agentic/attention/economy/helpers/constants'
5
+ require 'legion/extensions/agentic/attention/economy/helpers/demand'
6
+ require 'legion/extensions/agentic/attention/economy/helpers/attention_budget'
7
+ require 'legion/extensions/agentic/attention/economy/runners/attention_economy'
8
+ require 'legion/extensions/agentic/attention/economy/client'
9
+
10
+ module Legion
11
+ module Extensions
12
+ module Agentic
13
+ module Attention
14
+ module Economy
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'legion/extensions/actors/every'
4
+
5
+ module Legion
6
+ module Extensions
7
+ module Agentic
8
+ module Attention
9
+ module FeatureBinding
10
+ module Actor
11
+ class Decay < Legion::Extensions::Actors::Every
12
+ def runner_class
13
+ Legion::Extensions::Agentic::Attention::FeatureBinding::Runners::FeatureBinding
14
+ end
15
+
16
+ def runner_function
17
+ 'update_feature_binding'
18
+ end
19
+
20
+ def time
21
+ 30
22
+ end
23
+
24
+ def run_now?
25
+ false
26
+ end
27
+
28
+ def use_runner?
29
+ false
30
+ end
31
+
32
+ def check_subtask?
33
+ false
34
+ end
35
+
36
+ def generate_task?
37
+ false
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'legion/extensions/agentic/attention/feature_binding/helpers/constants'
4
+ require 'legion/extensions/agentic/attention/feature_binding/helpers/feature'
5
+ require 'legion/extensions/agentic/attention/feature_binding/helpers/bound_object'
6
+ require 'legion/extensions/agentic/attention/feature_binding/helpers/binding_field'
7
+ require 'legion/extensions/agentic/attention/feature_binding/runners/feature_binding'
8
+
9
+ module Legion
10
+ module Extensions
11
+ module Agentic
12
+ module Attention
13
+ module FeatureBinding
14
+ class Client
15
+ include Runners::FeatureBinding
16
+
17
+ def initialize(field: nil, **)
18
+ @field = field || Helpers::BindingField.new
19
+ end
20
+
21
+ private
22
+
23
+ attr_reader :field
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end