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,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Attention
7
+ module SignalDetection
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/signal_detection/version'
4
+ require 'legion/extensions/agentic/attention/signal_detection/helpers/constants'
5
+ require 'legion/extensions/agentic/attention/signal_detection/helpers/detector'
6
+ require 'legion/extensions/agentic/attention/signal_detection/helpers/detection_engine'
7
+ require 'legion/extensions/agentic/attention/signal_detection/runners/signal_detection'
8
+ require 'legion/extensions/agentic/attention/signal_detection/client'
9
+
10
+ module Legion
11
+ module Extensions
12
+ module Agentic
13
+ module Attention
14
+ module SignalDetection
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'legion/extensions/agentic/attention/spotlight/helpers/constants'
4
+ require 'legion/extensions/agentic/attention/spotlight/helpers/attention_target'
5
+ require 'legion/extensions/agentic/attention/spotlight/helpers/spotlight'
6
+ require 'legion/extensions/agentic/attention/spotlight/helpers/spotlight_engine'
7
+ require 'legion/extensions/agentic/attention/spotlight/runners/attention_spotlight'
8
+
9
+ module Legion
10
+ module Extensions
11
+ module Agentic
12
+ module Attention
13
+ module Spotlight
14
+ class Client
15
+ include Runners::AttentionSpotlight
16
+
17
+ def initialize(engine: nil, **)
18
+ @engine = engine || Helpers::SpotlightEngine.new
19
+ end
20
+
21
+ private
22
+
23
+ attr_reader :engine
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'securerandom'
4
+
5
+ module Legion
6
+ module Extensions
7
+ module Agentic
8
+ module Attention
9
+ module Spotlight
10
+ module Helpers
11
+ class AttentionTarget
12
+ include Constants
13
+
14
+ attr_reader :id, :label, :domain, :created_at
15
+ attr_accessor :salience, :relevance, :in_spotlight, :in_periphery,
16
+ :capture_count, :last_attended_at
17
+
18
+ def initialize(label:, domain:, salience: 0.5, relevance: 0.5)
19
+ @id = SecureRandom.uuid
20
+ @label = label
21
+ @domain = domain
22
+ @salience = salience.clamp(0.0, 1.0)
23
+ @relevance = relevance.clamp(0.0, 1.0)
24
+ @in_spotlight = false
25
+ @in_periphery = false
26
+ @capture_count = 0
27
+ @created_at = Time.now.utc
28
+ @last_attended_at = nil
29
+ end
30
+
31
+ def compelling?
32
+ @salience >= Constants::CAPTURE_THRESHOLD
33
+ end
34
+
35
+ def salient?
36
+ @salience >= Constants::PERIPHERAL_DETECTION_THRESHOLD
37
+ end
38
+
39
+ def to_h
40
+ {
41
+ id: @id,
42
+ label: @label,
43
+ domain: @domain,
44
+ salience: @salience.round(10),
45
+ relevance: @relevance.round(10),
46
+ in_spotlight: @in_spotlight,
47
+ in_periphery: @in_periphery,
48
+ capture_count: @capture_count,
49
+ compelling: compelling?,
50
+ salient: salient?,
51
+ created_at: @created_at,
52
+ last_attended_at: @last_attended_at
53
+ }
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Attention
7
+ module Spotlight
8
+ module Helpers
9
+ module Constants
10
+ MAX_TARGETS = 200
11
+ MAX_PERIPHERAL = 100
12
+ DEFAULT_INTENSITY = 0.5
13
+ DEFAULT_BREADTH = 0.5
14
+ ZOOM_STEP = 0.1
15
+ INTENSITY_GAIN = 0.15
16
+ INTENSITY_LOSS = 0.1
17
+ PERIPHERAL_DETECTION_THRESHOLD = 0.3
18
+ CAPTURE_THRESHOLD = 0.8
19
+
20
+ ZOOM_LEVELS = %i[laser narrow moderate wide diffuse].freeze
21
+ MODE_LABELS = %i[focused scanning captured idle].freeze
22
+
23
+ ZOOM_RANGES = [
24
+ { range: (0.0..0.2), level: :laser },
25
+ { range: (0.21..0.4), level: :narrow },
26
+ { range: (0.41..0.6), level: :moderate },
27
+ { range: (0.61..0.8), level: :wide },
28
+ { range: (0.81..1.0), level: :diffuse }
29
+ ].freeze
30
+
31
+ INTENSITY_LABELS = [
32
+ { range: (0.8..1.0), label: :blazing },
33
+ { range: (0.6..0.79), label: :bright },
34
+ { range: (0.4..0.59), label: :moderate },
35
+ { range: (0.2..0.39), label: :dim },
36
+ { range: (0.0..0.19), label: :dark }
37
+ ].freeze
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Attention
7
+ module Spotlight
8
+ module Helpers
9
+ class Spotlight
10
+ include Constants
11
+
12
+ attr_reader :center_target_id, :intensity, :breadth, :mode
13
+
14
+ def initialize
15
+ @center_target_id = nil
16
+ @intensity = Constants::DEFAULT_INTENSITY
17
+ @breadth = Constants::DEFAULT_BREADTH
18
+ @mode = :idle
19
+ end
20
+
21
+ def focus_on!(target_id)
22
+ @center_target_id = target_id
23
+ @mode = :focused
24
+ @intensity = (@intensity + Constants::INTENSITY_GAIN).clamp(0.0, 1.0).round(10)
25
+ end
26
+
27
+ def broaden!
28
+ @breadth = (@breadth + Constants::ZOOM_STEP).clamp(0.0, 1.0).round(10)
29
+ @intensity = (@intensity - Constants::INTENSITY_LOSS).clamp(0.0, 1.0).round(10)
30
+ @mode = :scanning if @mode == :focused
31
+ end
32
+
33
+ def narrow!
34
+ @breadth = (@breadth - Constants::ZOOM_STEP).clamp(0.0, 1.0).round(10)
35
+ @intensity = (@intensity + Constants::INTENSITY_GAIN).clamp(0.0, 1.0).round(10)
36
+ @mode = :focused if @center_target_id && @mode == :scanning
37
+ end
38
+
39
+ def capture!(target_id)
40
+ @center_target_id = target_id
41
+ @mode = :captured
42
+ @intensity = 1.0
43
+ end
44
+
45
+ def release!
46
+ @center_target_id = nil
47
+ @mode = :idle
48
+ @intensity = Constants::DEFAULT_INTENSITY
49
+ @breadth = Constants::DEFAULT_BREADTH
50
+ end
51
+
52
+ def zoom_level
53
+ entry = Constants::ZOOM_RANGES.find { |z| z[:range].cover?(@breadth) }
54
+ entry&.fetch(:level, :moderate) || :moderate
55
+ end
56
+
57
+ def intensity_label
58
+ entry = Constants::INTENSITY_LABELS.find { |il| il[:range].cover?(@intensity) }
59
+ entry&.fetch(:label, :moderate) || :moderate
60
+ end
61
+
62
+ def to_h
63
+ {
64
+ center_target_id: @center_target_id,
65
+ intensity: @intensity.round(10),
66
+ breadth: @breadth.round(10),
67
+ mode: @mode,
68
+ zoom_level: zoom_level,
69
+ intensity_label: intensity_label
70
+ }
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,163 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Attention
7
+ module Spotlight
8
+ module Helpers
9
+ class SpotlightEngine
10
+ include Constants
11
+
12
+ attr_reader :targets, :spotlight, :peripheral
13
+
14
+ def initialize
15
+ @targets = {}
16
+ @spotlight = Spotlight.new
17
+ @peripheral = []
18
+ end
19
+
20
+ def register_target(label:, domain:, salience: 0.5, relevance: 0.5)
21
+ return { registered: false, reason: :max_targets_reached, limit: Constants::MAX_TARGETS } if @targets.size >= Constants::MAX_TARGETS
22
+
23
+ target = AttentionTarget.new(label: label, domain: domain,
24
+ salience: salience, relevance: relevance)
25
+ @targets[target.id] = target
26
+ { registered: true, target_id: target.id, label: label, domain: domain }
27
+ end
28
+
29
+ def focus(target_id:)
30
+ target = @targets[target_id]
31
+ return { focused: false, reason: :not_found } unless target
32
+
33
+ clear_spotlight_flags
34
+ @spotlight.focus_on!(target_id)
35
+ target.in_spotlight = true
36
+ target.last_attended_at = Time.now.utc
37
+ { focused: true, target_id: target_id, mode: @spotlight.mode, intensity: @spotlight.intensity }
38
+ end
39
+
40
+ def broaden
41
+ @spotlight.broaden!
42
+ mark_spotlight_coverage
43
+ { broadened: true, breadth: @spotlight.breadth, zoom_level: @spotlight.zoom_level }
44
+ end
45
+
46
+ def narrow
47
+ @spotlight.narrow!
48
+ mark_spotlight_coverage
49
+ { narrowed: true, breadth: @spotlight.breadth, zoom_level: @spotlight.zoom_level }
50
+ end
51
+
52
+ def scan
53
+ @spotlight.instance_variable_set(:@mode, :scanning)
54
+ mark_spotlight_coverage
55
+ sorted = @targets.values.sort_by { |t| -t.salience }
56
+ sorted.each { |t| t.last_attended_at = Time.now.utc }
57
+ { scanning: true, targets_swept: sorted.size }
58
+ end
59
+
60
+ def check_peripheral
61
+ outside = @targets.values.reject(&:in_spotlight)
62
+ detected = outside.select(&:salient?).first(Constants::MAX_PERIPHERAL)
63
+ @peripheral = detected.map(&:id)
64
+ detected.each { |t| t.in_periphery = true }
65
+ (outside - detected).each { |t| t.in_periphery = false }
66
+ { detected: @peripheral.size, peripheral_ids: @peripheral }
67
+ end
68
+
69
+ def check_capture
70
+ candidate = @targets.values
71
+ .reject(&:in_spotlight)
72
+ .select(&:compelling?)
73
+ .max_by(&:salience)
74
+ return { captured: false } unless candidate
75
+
76
+ clear_spotlight_flags
77
+ @spotlight.capture!(candidate.id)
78
+ candidate.in_spotlight = true
79
+ candidate.capture_count += 1
80
+ candidate.last_attended_at = Time.now.utc
81
+ mark_spotlight_coverage
82
+ { captured: true, target_id: candidate.id, salience: candidate.salience }
83
+ end
84
+
85
+ def release_focus
86
+ clear_spotlight_flags
87
+ @spotlight.release!
88
+ { released: true }
89
+ end
90
+
91
+ def targets_in_spotlight
92
+ @targets.values.select(&:in_spotlight)
93
+ end
94
+
95
+ def peripheral_alerts
96
+ @peripheral.filter_map { |id| @targets[id] }
97
+ end
98
+
99
+ def most_salient(limit: 5)
100
+ @targets.values.sort_by { |t| -t.salience }.first(limit)
101
+ end
102
+
103
+ def spotlight_report
104
+ {
105
+ spotlight: @spotlight.to_h,
106
+ in_spotlight: targets_in_spotlight.map(&:to_h),
107
+ in_periphery: peripheral_alerts.map(&:to_h),
108
+ most_salient: most_salient.map(&:to_h),
109
+ total_targets: @targets.size,
110
+ peripheral_count: @peripheral.size
111
+ }
112
+ end
113
+
114
+ def to_h
115
+ {
116
+ spotlight: @spotlight.to_h,
117
+ target_count: @targets.size,
118
+ peripheral_count: @peripheral.size,
119
+ spotlight_targets: targets_in_spotlight.map(&:to_h)
120
+ }
121
+ end
122
+
123
+ private
124
+
125
+ def clear_spotlight_flags
126
+ @targets.each_value { |t| t.in_spotlight = false }
127
+ end
128
+
129
+ def covered_target_ids
130
+ center_id = @spotlight.center_target_id
131
+ return [] unless center_id
132
+ return [center_id] if @spotlight.breadth <= 0.2
133
+
134
+ count = breadth_to_count(@spotlight.breadth)
135
+ sorted_by_salience = @targets.values.sort_by { |t| -t.salience }
136
+ candidates = sorted_by_salience.first(count)
137
+ result = [center_id]
138
+ candidates.each { |t| result << t.id unless result.include?(t.id) }
139
+ result.first(count)
140
+ end
141
+
142
+ def breadth_to_count(breadth)
143
+ return 1 if breadth <= 0.2
144
+ return 3 if breadth <= 0.4
145
+ return 7 if breadth <= 0.6
146
+ return 15 if breadth <= 0.8
147
+
148
+ [30, @targets.size].min
149
+ end
150
+
151
+ def mark_spotlight_coverage
152
+ covered = covered_target_ids.to_set
153
+ @targets.each_value do |t|
154
+ t.in_spotlight = covered.include?(t.id)
155
+ end
156
+ end
157
+ end
158
+ end
159
+ end
160
+ end
161
+ end
162
+ end
163
+ end
@@ -0,0 +1,122 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Attention
7
+ module Spotlight
8
+ module Runners
9
+ module AttentionSpotlight
10
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) &&
11
+ Legion::Extensions::Helpers.const_defined?(:Lex)
12
+
13
+ def register_target(label:, domain:, salience: 0.5, relevance: 0.5, **)
14
+ Legion::Logging.debug "[attention_spotlight] register target label=#{label} domain=#{domain}"
15
+ result = engine.register_target(label: label, domain: domain,
16
+ salience: salience, relevance: relevance)
17
+ { success: result[:registered], **result }
18
+ rescue StandardError => e
19
+ Legion::Logging.error "[attention_spotlight] register_target error: #{e.message}"
20
+ { success: false, error: e.message }
21
+ end
22
+
23
+ def focus_spotlight(target_id:, **)
24
+ Legion::Logging.debug "[attention_spotlight] focus target_id=#{target_id[0..7]}"
25
+ result = engine.focus(target_id: target_id)
26
+ { success: result[:focused], **result }
27
+ rescue StandardError => e
28
+ Legion::Logging.error "[attention_spotlight] focus_spotlight error: #{e.message}"
29
+ { success: false, error: e.message }
30
+ end
31
+
32
+ def broaden_spotlight(**)
33
+ Legion::Logging.debug '[attention_spotlight] broadening spotlight'
34
+ result = engine.broaden
35
+ { success: true, **result }
36
+ rescue StandardError => e
37
+ Legion::Logging.error "[attention_spotlight] broaden_spotlight error: #{e.message}"
38
+ { success: false, error: e.message }
39
+ end
40
+
41
+ def narrow_spotlight(**)
42
+ Legion::Logging.debug '[attention_spotlight] narrowing spotlight'
43
+ result = engine.narrow
44
+ { success: true, **result }
45
+ rescue StandardError => e
46
+ Legion::Logging.error "[attention_spotlight] narrow_spotlight error: #{e.message}"
47
+ { success: false, error: e.message }
48
+ end
49
+
50
+ def scan_targets(**)
51
+ Legion::Logging.debug '[attention_spotlight] initiating scan'
52
+ result = engine.scan
53
+ { success: true, **result }
54
+ rescue StandardError => e
55
+ Legion::Logging.error "[attention_spotlight] scan_targets error: #{e.message}"
56
+ { success: false, error: e.message }
57
+ end
58
+
59
+ def check_peripheral(**)
60
+ Legion::Logging.debug '[attention_spotlight] checking periphery'
61
+ result = engine.check_peripheral
62
+ { success: true, **result }
63
+ rescue StandardError => e
64
+ Legion::Logging.error "[attention_spotlight] check_peripheral error: #{e.message}"
65
+ { success: false, error: e.message }
66
+ end
67
+
68
+ def check_capture(**)
69
+ Legion::Logging.debug '[attention_spotlight] checking for attention capture'
70
+ result = engine.check_capture
71
+ { success: true, **result }
72
+ rescue StandardError => e
73
+ Legion::Logging.error "[attention_spotlight] check_capture error: #{e.message}"
74
+ { success: false, error: e.message }
75
+ end
76
+
77
+ def release_focus(**)
78
+ Legion::Logging.debug '[attention_spotlight] releasing focus'
79
+ result = engine.release_focus
80
+ { success: true, **result }
81
+ rescue StandardError => e
82
+ Legion::Logging.error "[attention_spotlight] release_focus error: #{e.message}"
83
+ { success: false, error: e.message }
84
+ end
85
+
86
+ def spotlight_report(**)
87
+ Legion::Logging.debug '[attention_spotlight] generating report'
88
+ report = engine.spotlight_report
89
+ { success: true, **report }
90
+ rescue StandardError => e
91
+ Legion::Logging.error "[attention_spotlight] spotlight_report error: #{e.message}"
92
+ { success: false, error: e.message }
93
+ end
94
+
95
+ def most_salient(limit: 5, **)
96
+ Legion::Logging.debug "[attention_spotlight] most_salient limit=#{limit}"
97
+ targets = engine.most_salient(limit: limit)
98
+ { success: true, targets: targets.map(&:to_h), count: targets.size }
99
+ rescue StandardError => e
100
+ Legion::Logging.error "[attention_spotlight] most_salient error: #{e.message}"
101
+ { success: false, error: e.message }
102
+ end
103
+
104
+ def spotlight_state(**)
105
+ { success: true, **engine.to_h }
106
+ rescue StandardError => e
107
+ Legion::Logging.error "[attention_spotlight] spotlight_state error: #{e.message}"
108
+ { success: false, error: e.message }
109
+ end
110
+
111
+ private
112
+
113
+ def engine
114
+ @engine ||= Helpers::SpotlightEngine.new
115
+ end
116
+ end
117
+ end
118
+ end
119
+ end
120
+ end
121
+ end
122
+ 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 Spotlight
8
+ VERSION = '0.1.0'
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'legion/extensions/agentic/attention/spotlight/version'
4
+ require 'legion/extensions/agentic/attention/spotlight/helpers/constants'
5
+ require 'legion/extensions/agentic/attention/spotlight/helpers/attention_target'
6
+ require 'legion/extensions/agentic/attention/spotlight/helpers/spotlight'
7
+ require 'legion/extensions/agentic/attention/spotlight/helpers/spotlight_engine'
8
+ require 'legion/extensions/agentic/attention/spotlight/runners/attention_spotlight'
9
+ require 'legion/extensions/agentic/attention/spotlight/client'
10
+
11
+ module Legion
12
+ module Extensions
13
+ module Agentic
14
+ module Attention
15
+ module Spotlight
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Attention
7
+ module Subliminal
8
+ class Client
9
+ include Runners::Subliminal
10
+
11
+ def initialize
12
+ @default_engine = Helpers::SubliminalEngine.new
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,74 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Attention
7
+ module Subliminal
8
+ module Helpers
9
+ module Constants
10
+ MAX_TRACES = 500
11
+ MAX_INFLUENCES = 1000
12
+
13
+ # Threshold boundaries
14
+ CONSCIOUS_THRESHOLD = 0.4
15
+ SUBLIMINAL_CEILING = 0.39
16
+ SUBLIMINAL_FLOOR = 0.02
17
+ EXTINCTION_THRESHOLD = 0.01
18
+
19
+ # Dynamics
20
+ DEFAULT_ACTIVATION = 0.2
21
+ ACTIVATION_BOOST = 0.08
22
+ ACTIVATION_DECAY = 0.015
23
+ INFLUENCE_STRENGTH = 0.05
24
+ ACCUMULATION_RATE = 0.03
25
+
26
+ # Influence caps
27
+ MAX_INFLUENCE_PER_DOMAIN = 0.3
28
+ MAX_TOTAL_INFLUENCE = 0.5
29
+
30
+ TRACE_TYPES = %i[
31
+ perceptual emotional associative procedural
32
+ semantic motivational aversive appetitive
33
+ ].freeze
34
+
35
+ INFLUENCE_TARGETS = %i[
36
+ attention emotion decision memory
37
+ preference avoidance approach valence
38
+ ].freeze
39
+
40
+ ACTIVATION_LABELS = {
41
+ (0.3...0.4) => :near_threshold,
42
+ (0.2...0.3) => :moderate,
43
+ (0.1...0.2) => :faint,
44
+ (0.02...0.1) => :trace,
45
+ (..0.02) => :extinct
46
+ }.freeze
47
+
48
+ INFLUENCE_LABELS = {
49
+ (0.2..) => :strong,
50
+ (0.1...0.2) => :moderate,
51
+ (0.05...0.1) => :subtle,
52
+ (0.01...0.05) => :minimal,
53
+ (..0.01) => :none
54
+ }.freeze
55
+
56
+ SATURATION_LABELS = {
57
+ (0.8..) => :saturated,
58
+ (0.6...0.8) => :heavy,
59
+ (0.4...0.6) => :moderate,
60
+ (0.2...0.4) => :light,
61
+ (..0.2) => :clear
62
+ }.freeze
63
+
64
+ def self.label_for(labels, value)
65
+ labels.each { |range, label| return label if range.cover?(value) }
66
+ :unknown
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end