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,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Attention
7
+ module Telescope
8
+ module Helpers
9
+ module Constants
10
+ # Available lens types for cognitive telescopes
11
+ LENS_TYPES = %i[refractor reflector catadioptric radio adaptive].freeze
12
+
13
+ # Observation modes
14
+ OBSERVATION_MODES = %i[survey focused tracking spectral].freeze
15
+
16
+ # Maximum telescopes in the observatory
17
+ MAX_TELESCOPES = 100
18
+
19
+ # Maximum recorded observations
20
+ MAX_OBSERVATIONS = 500
21
+
22
+ # Base and max magnification bounds
23
+ BASE_MAGNIFICATION = 1.0
24
+ MAX_MAGNIFICATION = 100.0
25
+
26
+ # Field of view base in radians (wide-open single radian)
27
+ FIELD_OF_VIEW_BASE = 1.0
28
+
29
+ # Atmospheric distortion coefficient (reduces clarity at low magnification)
30
+ ATMOSPHERIC_DISTORTION = 0.1
31
+
32
+ # Clarity labels (range-based, descending)
33
+ CLARITY_LABELS = [
34
+ [(0.85..), :crystal],
35
+ [(0.65...0.85), :clear],
36
+ [(0.45...0.65), :hazy],
37
+ [(0.25...0.45), :blurry],
38
+ [(..0.25), :blind]
39
+ ].freeze
40
+
41
+ # Distance labels (range-based, descending)
42
+ DISTANCE_LABELS = [
43
+ [(0.85..), :cosmic],
44
+ [(0.65...0.85), :deep],
45
+ [(0.4...0.65), :medium],
46
+ [(0.2...0.4), :near],
47
+ [(..0.2), :myopic]
48
+ ].freeze
49
+
50
+ def self.label_for(table, value)
51
+ table.each { |range, label| return label if range.cover?(value) }
52
+ table.last.last
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Attention
7
+ module Telescope
8
+ module Helpers
9
+ class Observation
10
+ attr_reader :id, :telescope_id, :target, :distance,
11
+ :detail_level, :recorded_at
12
+
13
+ def initialize(telescope_id:, target:, distance:, telescope_magnification: 1.0)
14
+ @id = SecureRandom.uuid
15
+ @telescope_id = telescope_id
16
+ @target = target.to_s
17
+ @distance = distance.to_f.clamp(0.0, 1.0).round(10)
18
+ @detail_level = compute_detail(telescope_magnification)
19
+ @recorded_at = Time.now.utc
20
+ end
21
+
22
+ # True when detail is strong enough to be actionable
23
+ def significant?
24
+ @detail_level >= 0.7
25
+ end
26
+
27
+ # True when detail is too faint to interpret
28
+ def faint?
29
+ @detail_level < 0.3
30
+ end
31
+
32
+ def distance_label
33
+ Helpers::Constants.label_for(Constants::DISTANCE_LABELS, @distance)
34
+ end
35
+
36
+ def to_h
37
+ {
38
+ id: @id,
39
+ telescope_id: @telescope_id,
40
+ target: @target,
41
+ distance: @distance,
42
+ distance_label: distance_label,
43
+ detail_level: @detail_level,
44
+ significant: significant?,
45
+ faint: faint?,
46
+ recorded_at: @recorded_at
47
+ }
48
+ end
49
+
50
+ private
51
+
52
+ # Higher magnification + closer distance = richer detail
53
+ # Normalise magnification to 0..1 range relative to MAX_MAGNIFICATION
54
+ def compute_detail(magnification)
55
+ mag_factor = magnification.to_f.clamp(
56
+ Constants::BASE_MAGNIFICATION, Constants::MAX_MAGNIFICATION
57
+ ) / Constants::MAX_MAGNIFICATION
58
+ proximity = 1.0 - @distance
59
+ raw = (mag_factor * proximity).clamp(0.0, 1.0)
60
+ raw.round(10)
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,126 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Attention
7
+ module Telescope
8
+ module Helpers
9
+ class ObservatoryEngine
10
+ def initialize
11
+ @telescopes = {}
12
+ @observations = []
13
+ end
14
+
15
+ # Create and register a new telescope
16
+ def create_telescope(lens_type:, aperture: 0.5, magnification: 1.0, tracking: false)
17
+ raise ArgumentError, 'observatory full' if @telescopes.size >= Constants::MAX_TELESCOPES
18
+
19
+ scope = Telescope.new(
20
+ lens_type: lens_type,
21
+ aperture: aperture,
22
+ magnification: magnification,
23
+ tracking: tracking
24
+ )
25
+ @telescopes[scope.id] = scope
26
+ scope
27
+ end
28
+
29
+ # Zoom in on a telescope by multiplying magnification
30
+ def zoom_in(telescope_id:, factor:)
31
+ fetch_telescope(telescope_id).zoom_in!(factor)
32
+ end
33
+
34
+ # Zoom out on a telescope by dividing magnification
35
+ def zoom_out(telescope_id:, factor:)
36
+ fetch_telescope(telescope_id).zoom_out!(factor)
37
+ end
38
+
39
+ # Focus a telescope at a given target distance
40
+ def focus_telescope(telescope_id:, target_distance:)
41
+ fetch_telescope(telescope_id).focus!(target_distance)
42
+ end
43
+
44
+ # Record an observation for a target at a given distance
45
+ def observe(telescope_id:, target:, distance:)
46
+ raise ArgumentError, 'observation log full' if @observations.size >= Constants::MAX_OBSERVATIONS
47
+
48
+ scope = fetch_telescope(telescope_id)
49
+ obs = Observation.new(
50
+ telescope_id: scope.id,
51
+ target: target,
52
+ distance: distance,
53
+ telescope_magnification: scope.magnification
54
+ )
55
+ @observations << obs
56
+ obs
57
+ end
58
+
59
+ # Survey mode: zoom out to BASE_MAGNIFICATION (wide-field scan)
60
+ def survey_mode!(telescope_id:)
61
+ scope = fetch_telescope(telescope_id)
62
+ scope.zoom_out!(scope.magnification)
63
+ scope
64
+ end
65
+
66
+ # Deep-focus mode: zoom in to MAX_MAGNIFICATION
67
+ def deep_focus!(telescope_id:)
68
+ scope = fetch_telescope(telescope_id)
69
+ scope.zoom_in!(Constants::MAX_MAGNIFICATION)
70
+ scope
71
+ end
72
+
73
+ def all_telescopes
74
+ @telescopes.values
75
+ end
76
+
77
+ def all_observations
78
+ @observations.dup
79
+ end
80
+
81
+ def significant_observations
82
+ @observations.select(&:significant?)
83
+ end
84
+
85
+ # Summary report for the observatory
86
+ def observatory_report
87
+ {
88
+ total_telescopes: @telescopes.size,
89
+ total_observations: @observations.size,
90
+ significant_count: significant_observations.size,
91
+ faint_count: @observations.count(&:faint?),
92
+ avg_detail: avg_detail,
93
+ deepest_observation: deepest_observation,
94
+ widest_telescope: widest_telescope
95
+ }
96
+ end
97
+
98
+ private
99
+
100
+ def fetch_telescope(id)
101
+ @telescopes.fetch(id) do
102
+ raise ArgumentError, "telescope not found: #{id}"
103
+ end
104
+ end
105
+
106
+ def avg_detail
107
+ total = @observations.size
108
+ return 0.0 if total.zero?
109
+
110
+ (@observations.sum(&:detail_level) / total).round(10)
111
+ end
112
+
113
+ def deepest_observation
114
+ @observations.max_by(&:distance)&.to_h
115
+ end
116
+
117
+ def widest_telescope
118
+ @telescopes.values.min_by(&:magnification)&.to_h
119
+ end
120
+ end
121
+ end
122
+ end
123
+ end
124
+ end
125
+ end
126
+ end
@@ -0,0 +1,129 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Attention
7
+ module Telescope
8
+ module Helpers
9
+ class Telescope
10
+ attr_reader :id, :lens_type, :aperture, :magnification,
11
+ :tracking, :focal_distance, :created_at
12
+
13
+ def initialize(lens_type:, aperture: 0.5, magnification: 1.0, tracking: false)
14
+ validate_lens_type!(lens_type)
15
+ @id = SecureRandom.uuid
16
+ @lens_type = lens_type.to_sym
17
+ @aperture = aperture.to_f.clamp(0.1, 1.0).round(10)
18
+ @magnification = magnification.to_f.clamp(
19
+ Constants::BASE_MAGNIFICATION, Constants::MAX_MAGNIFICATION
20
+ ).round(10)
21
+ @tracking = tracking
22
+ @focal_distance = nil
23
+ @created_at = Time.now.utc
24
+ end
25
+
26
+ # Increase magnification by factor; field of view narrows inversely
27
+ def zoom_in!(factor)
28
+ factor = factor.to_f.clamp(1.0, Constants::MAX_MAGNIFICATION)
29
+ @magnification = (@magnification * factor).clamp(
30
+ Constants::BASE_MAGNIFICATION, Constants::MAX_MAGNIFICATION
31
+ ).round(10)
32
+ self
33
+ end
34
+
35
+ # Decrease magnification by factor; field of view widens
36
+ def zoom_out!(factor)
37
+ factor = [factor.to_f, 1.0].max
38
+ @magnification = (@magnification / factor).clamp(
39
+ Constants::BASE_MAGNIFICATION, Constants::MAX_MAGNIFICATION
40
+ ).round(10)
41
+ self
42
+ end
43
+
44
+ # Calculated field of view: wider aperture + lower magnification = wider field
45
+ def field_of_view
46
+ (Constants::FIELD_OF_VIEW_BASE / @magnification * @aperture).round(10)
47
+ end
48
+
49
+ # Clarity based on aperture and atmospheric distortion modulated by magnification
50
+ def clarity
51
+ distortion_factor = 1.0 - (Constants::ATMOSPHERIC_DISTORTION / @magnification.clamp(1.0, 10.0))
52
+ (@aperture * distortion_factor).clamp(0.0, 1.0).round(10)
53
+ end
54
+
55
+ # Focus on a target distance; focal alignment adjusts effective clarity
56
+ def focus!(target_distance)
57
+ @focal_distance = target_distance.to_f.clamp(0.0, 1.0).round(10)
58
+ self
59
+ end
60
+
61
+ def enable_tracking!
62
+ @tracking = true
63
+ self
64
+ end
65
+
66
+ def disable_tracking!
67
+ @tracking = false
68
+ self
69
+ end
70
+
71
+ # True when magnification >= 50 (deep-sky mode)
72
+ def deep_field?
73
+ @magnification >= 50.0
74
+ end
75
+
76
+ # True when magnification <= 5 (wide-field survey mode)
77
+ def wide_field?
78
+ @magnification <= 5.0
79
+ end
80
+
81
+ # True when clarity is at or above 0.8
82
+ def sharp?
83
+ clarity >= 0.8
84
+ end
85
+
86
+ # True when clarity falls below 0.3
87
+ def blurry?
88
+ clarity < 0.3
89
+ end
90
+
91
+ def clarity_label
92
+ Helpers::Constants.label_for(Constants::CLARITY_LABELS, clarity)
93
+ end
94
+
95
+ def to_h
96
+ {
97
+ id: @id,
98
+ lens_type: @lens_type,
99
+ aperture: @aperture,
100
+ magnification: @magnification,
101
+ tracking: @tracking,
102
+ focal_distance: @focal_distance,
103
+ field_of_view: field_of_view,
104
+ clarity: clarity,
105
+ clarity_label: clarity_label,
106
+ deep_field: deep_field?,
107
+ wide_field: wide_field?,
108
+ sharp: sharp?,
109
+ blurry: blurry?,
110
+ created_at: @created_at
111
+ }
112
+ end
113
+
114
+ private
115
+
116
+ def validate_lens_type!(val)
117
+ return if Constants::LENS_TYPES.include?(val.to_sym)
118
+
119
+ raise ArgumentError,
120
+ "unknown lens type: #{val.inspect}; " \
121
+ "must be one of #{Constants::LENS_TYPES.inspect}"
122
+ end
123
+ end
124
+ end
125
+ end
126
+ end
127
+ end
128
+ end
129
+ end
@@ -0,0 +1,103 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Attention
7
+ module Telescope
8
+ module Runners
9
+ module CognitiveTelescope
10
+ extend self
11
+
12
+ include Legion::Extensions::Helpers::Lex if defined?(Legion::Extensions::Helpers::Lex)
13
+
14
+ def create_telescope(lens_type:, aperture: 0.5, magnification: 1.0,
15
+ tracking: false, engine: nil, **)
16
+ eng = resolve_engine(engine)
17
+ scope = eng.create_telescope(
18
+ lens_type: lens_type,
19
+ aperture: aperture,
20
+ magnification: magnification,
21
+ tracking: tracking
22
+ )
23
+ { success: true, telescope: scope.to_h }
24
+ rescue ArgumentError => e
25
+ { success: false, error: e.message }
26
+ end
27
+
28
+ def zoom_in(telescope_id:, factor: 2.0, engine: nil, **)
29
+ eng = resolve_engine(engine)
30
+ scope = eng.zoom_in(telescope_id: telescope_id, factor: factor)
31
+ { success: true, telescope: scope.to_h }
32
+ rescue ArgumentError => e
33
+ { success: false, error: e.message }
34
+ end
35
+
36
+ def zoom_out(telescope_id:, factor: 2.0, engine: nil, **)
37
+ eng = resolve_engine(engine)
38
+ scope = eng.zoom_out(telescope_id: telescope_id, factor: factor)
39
+ { success: true, telescope: scope.to_h }
40
+ rescue ArgumentError => e
41
+ { success: false, error: e.message }
42
+ end
43
+
44
+ def observe(telescope_id:, target:, distance: 0.5, engine: nil, **)
45
+ eng = resolve_engine(engine)
46
+ obs = eng.observe(telescope_id: telescope_id, target: target, distance: distance)
47
+ { success: true, observation: obs.to_h }
48
+ rescue ArgumentError => e
49
+ { success: false, error: e.message }
50
+ end
51
+
52
+ def focus(telescope_id:, target_distance:, engine: nil, **)
53
+ eng = resolve_engine(engine)
54
+ scope = eng.focus_telescope(telescope_id: telescope_id,
55
+ target_distance: target_distance)
56
+ { success: true, telescope: scope.to_h }
57
+ rescue ArgumentError => e
58
+ { success: false, error: e.message }
59
+ end
60
+
61
+ def survey_mode(telescope_id:, engine: nil, **)
62
+ eng = resolve_engine(engine)
63
+ scope = eng.survey_mode!(telescope_id: telescope_id)
64
+ { success: true, telescope: scope.to_h }
65
+ rescue ArgumentError => e
66
+ { success: false, error: e.message }
67
+ end
68
+
69
+ def deep_focus(telescope_id:, engine: nil, **)
70
+ eng = resolve_engine(engine)
71
+ scope = eng.deep_focus!(telescope_id: telescope_id)
72
+ { success: true, telescope: scope.to_h }
73
+ rescue ArgumentError => e
74
+ { success: false, error: e.message }
75
+ end
76
+
77
+ def list_observations(engine: nil, significant_only: false, **)
78
+ eng = resolve_engine(engine)
79
+ list = significant_only ? eng.significant_observations : eng.all_observations
80
+ { success: true, observations: list.map(&:to_h), count: list.size }
81
+ end
82
+
83
+ def observatory_status(engine: nil, **)
84
+ eng = resolve_engine(engine)
85
+ { success: true, report: eng.observatory_report }
86
+ end
87
+
88
+ private
89
+
90
+ def resolve_engine(engine)
91
+ engine || default_engine
92
+ end
93
+
94
+ def default_engine
95
+ @default_engine ||= Helpers::ObservatoryEngine.new
96
+ end
97
+ end
98
+ end
99
+ end
100
+ end
101
+ end
102
+ end
103
+ 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 Telescope
8
+ VERSION = '0.1.0'
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'securerandom'
4
+
5
+ require_relative 'telescope/version'
6
+ require_relative 'telescope/helpers/constants'
7
+ require_relative 'telescope/helpers/telescope'
8
+ require_relative 'telescope/helpers/observation'
9
+ require_relative 'telescope/helpers/observatory_engine'
10
+ require_relative 'telescope/runners/cognitive_telescope'
11
+ require_relative 'telescope/client'
12
+
13
+ module Legion
14
+ module Extensions
15
+ module Agentic
16
+ module Attention
17
+ module Telescope
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Attention
7
+ VERSION = '0.1.0'
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'attention/version'
4
+ require_relative 'attention/focus'
5
+ require_relative 'attention/economy'
6
+ require_relative 'attention/regulation'
7
+ require_relative 'attention/schema'
8
+ require_relative 'attention/spotlight'
9
+ require_relative 'attention/switching'
10
+ require_relative 'attention/blink'
11
+ require_relative 'attention/telescope'
12
+ require_relative 'attention/lens'
13
+ require_relative 'attention/prism'
14
+ require_relative 'attention/lighthouse'
15
+ require_relative 'attention/blindspot'
16
+ require_relative 'attention/kaleidoscope'
17
+ require_relative 'attention/synesthesia'
18
+ require_relative 'attention/arousal'
19
+ require_relative 'attention/salience'
20
+ require_relative 'attention/sensory_gating'
21
+ require_relative 'attention/signal_detection'
22
+ require_relative 'attention/subliminal'
23
+ require_relative 'attention/latent_inhibition'
24
+ require_relative 'attention/surprise'
25
+ require_relative 'attention/relevance_theory'
26
+ require_relative 'attention/priming'
27
+ require_relative 'attention/feature_binding'
28
+
29
+ module Legion
30
+ module Extensions
31
+ module Agentic
32
+ module Attention
33
+ extend Legion::Extensions::Core if Legion::Extensions.const_defined? :Core
34
+
35
+ def remote_invocable?
36
+ false
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'legion/extensions/agentic/attention/arousal/client'
4
+
5
+ RSpec.describe Legion::Extensions::Agentic::Attention::Arousal::Client do
6
+ let(:client) { described_class.new }
7
+
8
+ it 'responds to all runner methods' do
9
+ expect(client).to respond_to(:stimulate)
10
+ expect(client).to respond_to(:calm)
11
+ expect(client).to respond_to(:update_arousal)
12
+ expect(client).to respond_to(:check_performance)
13
+ expect(client).to respond_to(:arousal_status)
14
+ expect(client).to respond_to(:arousal_guidance)
15
+ end
16
+
17
+ it 'runs a full arousal cycle' do
18
+ client.stimulate(amount: 0.3, source: :external)
19
+ status = client.arousal_status
20
+ expect(status[:arousal]).to be > Legion::Extensions::Agentic::Attention::Arousal::Helpers::Constants::DEFAULT_AROUSAL
21
+ expect(status[:label]).to be_a(Symbol)
22
+
23
+ client.calm(amount: 0.1)
24
+ calmed = client.arousal_status
25
+ expect(calmed[:arousal]).to be_a(Float)
26
+
27
+ guidance = client.arousal_guidance(task_complexity: :moderate)
28
+ expect(guidance[:guidance]).to be_a(Symbol)
29
+ end
30
+
31
+ it 'persists state across calls' do
32
+ client.stimulate(amount: 0.5, source: :test)
33
+ client.stimulate(amount: 0.2, source: :test)
34
+ status = client.arousal_status
35
+ expect(status[:history_size]).to be >= 2
36
+ end
37
+
38
+ it 'returns higher performance near the optimal arousal for a given complexity' do
39
+ perf_moderate = client.check_performance(task_complexity: :moderate)
40
+ expect(perf_moderate[:performance]).to be_between(0.0, 1.0)
41
+ end
42
+ end