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,92 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Attention
7
+ module Switching
8
+ module Runners
9
+ module AttentionSwitching
10
+ include Legion::Extensions::Helpers::Lex if defined?(Legion::Extensions::Helpers::Lex)
11
+
12
+ def register_task(name:, task_type: :analytical, complexity: 0.5, engine: nil, **)
13
+ eng = engine || default_engine
14
+ task = eng.register_task(name: name, task_type: task_type, complexity: complexity)
15
+ { success: true, task: task.to_h }
16
+ end
17
+
18
+ def switch_to(task_id:, engine: nil, **)
19
+ eng = engine || default_engine
20
+ result = eng.switch_to(task_id: task_id)
21
+ return { success: false, error: 'task not found' } unless result
22
+
23
+ { success: true, **result }
24
+ end
25
+
26
+ def warmup(engine: nil, **)
27
+ eng = engine || default_engine
28
+ task = eng.warmup_active
29
+ return { success: false, error: 'no active task' } unless task
30
+
31
+ { success: true, task: task.to_h }
32
+ end
33
+
34
+ def decay_residuals(engine: nil, **)
35
+ eng = engine || default_engine
36
+ result = eng.decay_all_residuals!
37
+ { success: true, **result }
38
+ end
39
+
40
+ def active_task(engine: nil, **)
41
+ eng = engine || default_engine
42
+ task = eng.active_task
43
+ return { success: false, error: 'no active task' } unless task
44
+
45
+ { success: true, task: task.to_h }
46
+ end
47
+
48
+ def residual_tasks(engine: nil, **)
49
+ eng = engine || default_engine
50
+ { success: true, tasks: eng.tasks_with_residual.map(&:to_h) }
51
+ end
52
+
53
+ def recent_switches(limit: 10, engine: nil, **)
54
+ eng = engine || default_engine
55
+ { success: true, switches: eng.recent_switches(limit: limit).map(&:to_h) }
56
+ end
57
+
58
+ def average_switch_cost(engine: nil, **)
59
+ eng = engine || default_engine
60
+ { success: true, average_cost: eng.average_switch_cost }
61
+ end
62
+
63
+ def switch_cost_between(from_id:, to_id:, engine: nil, **)
64
+ eng = engine || default_engine
65
+ cost = eng.switch_cost_between(from_id: from_id, to_id: to_id)
66
+ return { success: false, error: 'no switches found for this pair' } unless cost
67
+
68
+ { success: true, cost: cost }
69
+ end
70
+
71
+ def switching_report(engine: nil, **)
72
+ eng = engine || default_engine
73
+ { success: true, report: eng.switching_report }
74
+ end
75
+
76
+ def status(engine: nil, **)
77
+ eng = engine || default_engine
78
+ { success: true, **eng.to_h }
79
+ end
80
+
81
+ private
82
+
83
+ def default_engine
84
+ @default_engine ||= Helpers::SwitchingEngine.new
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end
90
+ end
91
+ end
92
+ 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 Switching
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_relative 'switching/version'
4
+ require_relative 'switching/helpers/constants'
5
+ require_relative 'switching/helpers/task_set'
6
+ require_relative 'switching/helpers/switch_event'
7
+ require_relative 'switching/helpers/switching_engine'
8
+ require_relative 'switching/runners/attention_switching'
9
+ require_relative 'switching/client'
10
+
11
+ module Legion
12
+ module Extensions
13
+ module Agentic
14
+ module Attention
15
+ module Switching
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'legion/extensions/agentic/attention/synesthesia/helpers/constants'
4
+ require 'legion/extensions/agentic/attention/synesthesia/helpers/sensory_mapping'
5
+ require 'legion/extensions/agentic/attention/synesthesia/helpers/synesthetic_event'
6
+ require 'legion/extensions/agentic/attention/synesthesia/helpers/synesthesia_engine'
7
+ require 'legion/extensions/agentic/attention/synesthesia/runners/cognitive_synesthesia'
8
+
9
+ module Legion
10
+ module Extensions
11
+ module Agentic
12
+ module Attention
13
+ module Synesthesia
14
+ class Client
15
+ include Runners::CognitiveSynesthesia
16
+
17
+ def initialize(engine: nil, **)
18
+ @synesthesia_engine = engine || Helpers::SynesthesiaEngine.new
19
+ end
20
+
21
+ private
22
+
23
+ attr_reader :synesthesia_engine
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Attention
7
+ module Synesthesia
8
+ module Helpers
9
+ module Constants
10
+ MAX_MAPPINGS = 200
11
+ MAX_EVENTS = 500
12
+ DEFAULT_STRENGTH = 0.5
13
+ STRENGTH_BOOST = 0.1
14
+ STRENGTH_DECAY = 0.02
15
+ TRIGGER_THRESHOLD = 0.3
16
+
17
+ MODALITIES = %i[visual auditory tactile emotional semantic temporal spatial abstract].freeze
18
+
19
+ STRENGTH_LABELS = {
20
+ (0.8..) => :dominant,
21
+ (0.6...0.8) => :strong,
22
+ (0.4...0.6) => :moderate,
23
+ (0.2...0.4) => :faint,
24
+ (..0.2) => :trace
25
+ }.freeze
26
+
27
+ RICHNESS_LABELS = {
28
+ (0.8..) => :synesthetic,
29
+ (0.6...0.8) => :vivid,
30
+ (0.4...0.6) => :partial,
31
+ (0.2...0.4) => :sparse,
32
+ (..0.2) => :amodal
33
+ }.freeze
34
+
35
+ INTENSITY_LABELS = {
36
+ (0.8..) => :overwhelming,
37
+ (0.6...0.8) => :intense,
38
+ (0.4...0.6) => :moderate,
39
+ (0.2...0.4) => :subtle,
40
+ (..0.2) => :subliminal
41
+ }.freeze
42
+
43
+ def self.label_for(labels_hash, value)
44
+ labels_hash.find { |range, _| range.cover?(value) }&.last || :unknown
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'securerandom'
4
+
5
+ module Legion
6
+ module Extensions
7
+ module Agentic
8
+ module Attention
9
+ module Synesthesia
10
+ module Helpers
11
+ class SensoryMapping
12
+ include Constants
13
+
14
+ attr_reader :id, :source_modality, :target_modality,
15
+ :trigger_pattern, :response_pattern,
16
+ :strength, :activation_count, :created_at, :last_activated_at
17
+
18
+ def initialize(source_modality:, target_modality:, trigger_pattern:, response_pattern:,
19
+ strength: DEFAULT_STRENGTH)
20
+ @id = SecureRandom.uuid
21
+ @source_modality = source_modality
22
+ @target_modality = target_modality
23
+ @trigger_pattern = trigger_pattern
24
+ @response_pattern = response_pattern
25
+ @strength = strength.clamp(0.0, 1.0)
26
+ @activation_count = 0
27
+ @created_at = Time.now.utc
28
+ @last_activated_at = nil
29
+ end
30
+
31
+ def activate!
32
+ @activation_count += 1
33
+ @last_activated_at = Time.now.utc
34
+ @strength = (@strength + STRENGTH_BOOST).clamp(0.0, 1.0).round(10)
35
+ end
36
+
37
+ def decay!
38
+ @strength = (@strength - STRENGTH_DECAY).clamp(0.0, 1.0).round(10)
39
+ end
40
+
41
+ def active?
42
+ @strength >= TRIGGER_THRESHOLD
43
+ end
44
+
45
+ def strength_label
46
+ Constants.label_for(STRENGTH_LABELS, @strength)
47
+ end
48
+
49
+ def to_h
50
+ {
51
+ id: @id,
52
+ source_modality: @source_modality,
53
+ target_modality: @target_modality,
54
+ trigger_pattern: @trigger_pattern,
55
+ response_pattern: @response_pattern,
56
+ strength: @strength,
57
+ activation_count: @activation_count,
58
+ strength_label: strength_label,
59
+ active: active?,
60
+ created_at: @created_at,
61
+ last_activated_at: @last_activated_at
62
+ }
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,177 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Attention
7
+ module Synesthesia
8
+ module Helpers
9
+ class SynesthesiaEngine
10
+ include Constants
11
+
12
+ attr_reader :mappings, :events
13
+
14
+ def initialize
15
+ @mappings = {}
16
+ @events = []
17
+ end
18
+
19
+ def register_mapping(source_modality:, target_modality:, trigger_pattern:,
20
+ response_pattern:, strength: DEFAULT_STRENGTH, **)
21
+ return invalid_modality_error(:source_modality) unless MODALITIES.include?(source_modality)
22
+ return invalid_modality_error(:target_modality) unless MODALITIES.include?(target_modality)
23
+
24
+ mapping = SensoryMapping.new(
25
+ source_modality: source_modality,
26
+ target_modality: target_modality,
27
+ trigger_pattern: trigger_pattern,
28
+ response_pattern: response_pattern,
29
+ strength: strength
30
+ )
31
+
32
+ @mappings[mapping.id] = mapping
33
+ prune_mappings! if @mappings.size > MAX_MAPPINGS
34
+
35
+ Legion::Logging.debug "[cognitive_synesthesia] mapping registered id=#{mapping.id[0..7]} " \
36
+ "#{source_modality}->#{target_modality} strength=#{strength.round(2)}"
37
+
38
+ { success: true, mapping_id: mapping.id, source_modality: source_modality,
39
+ target_modality: target_modality }
40
+ end
41
+
42
+ def trigger(source_modality:, input:, **)
43
+ active = active_mappings_for(source_modality)
44
+ return { success: true, events: [], triggered_count: 0 } if active.empty?
45
+
46
+ triggered_events = active.map do |mapping|
47
+ fire_event(mapping, input)
48
+ end
49
+
50
+ { success: true, events: triggered_events.map(&:to_h), triggered_count: triggered_events.size }
51
+ end
52
+
53
+ def decay_mappings!(**)
54
+ @mappings.each_value(&:decay!)
55
+ removed = prune_weak_mappings!
56
+
57
+ Legion::Logging.debug "[cognitive_synesthesia] decay_mappings! removed=#{removed} remaining=#{@mappings.size}"
58
+ { success: true, mappings_removed: removed, mappings_remaining: @mappings.size }
59
+ end
60
+
61
+ def cross_modal_richness(**)
62
+ return 0.0 if @mappings.empty?
63
+
64
+ pairs = active_mapping_pairs
65
+ total_possible = (MODALITIES.size * (MODALITIES.size - 1)).to_f
66
+ return 0.0 if total_possible.zero?
67
+
68
+ (pairs.size.to_f / total_possible).clamp(0.0, 1.0).round(10)
69
+ end
70
+
71
+ def dominant_modality_pairs(limit: 5, **)
72
+ pair_counts = Hash.new(0)
73
+ @mappings.each_value do |m|
74
+ next unless m.active?
75
+
76
+ pair_counts["#{m.source_modality}->#{m.target_modality}"] += m.activation_count
77
+ end
78
+
79
+ sorted = pair_counts.sort_by { |_, count| -count }.first(limit)
80
+ sorted.map { |pair, count| { pair: pair, activation_count: count } }
81
+ end
82
+
83
+ def event_history(limit: 20, **)
84
+ recent = @events.last(limit)
85
+ { success: true, events: recent.map(&:to_h), count: recent.size }
86
+ end
87
+
88
+ def modality_coverage(**)
89
+ covered = Set.new
90
+ @mappings.each_value do |m|
91
+ next unless m.active?
92
+
93
+ covered << m.source_modality
94
+ covered << m.target_modality
95
+ end
96
+ {
97
+ covered_modalities: covered.to_a.sort,
98
+ coverage_count: covered.size,
99
+ total_modalities: MODALITIES.size
100
+ }
101
+ end
102
+
103
+ def synesthesia_report(**)
104
+ richness = cross_modal_richness
105
+ {
106
+ mapping_count: @mappings.size,
107
+ active_mapping_count: @mappings.values.count(&:active?),
108
+ event_count: @events.size,
109
+ cross_modal_richness: richness,
110
+ richness_label: Constants.label_for(RICHNESS_LABELS, richness),
111
+ dominant_modality_pairs: dominant_modality_pairs,
112
+ modality_coverage: modality_coverage
113
+ }
114
+ end
115
+
116
+ private
117
+
118
+ def invalid_modality_error(field)
119
+ { success: false, error: :invalid_modality, field: field, valid_modalities: MODALITIES }
120
+ end
121
+
122
+ def active_mappings_for(source_modality)
123
+ @mappings.values.select { |m| m.source_modality == source_modality && m.active? }
124
+ end
125
+
126
+ def fire_event(mapping, input)
127
+ mapping.activate!
128
+ intensity = mapping.strength.clamp(0.0, 1.0)
129
+ event = SynestheticEvent.new(
130
+ mapping_id: mapping.id,
131
+ source_input: input,
132
+ target_output: build_target_output(mapping, input),
133
+ intensity: intensity
134
+ )
135
+ @events << event
136
+ @events.shift while @events.size > MAX_EVENTS
137
+
138
+ Legion::Logging.debug "[cognitive_synesthesia] event fired id=#{event.id[0..7]} " \
139
+ "mapping=#{mapping.id[0..7]} intensity=#{intensity.round(2)}"
140
+ event
141
+ end
142
+
143
+ def build_target_output(mapping, input)
144
+ {
145
+ modality: mapping.target_modality,
146
+ response_pattern: mapping.response_pattern,
147
+ source_input: input,
148
+ source_modality: mapping.source_modality
149
+ }
150
+ end
151
+
152
+ def active_mapping_pairs
153
+ @mappings.values.select(&:active?).map do |m|
154
+ [m.source_modality, m.target_modality]
155
+ end.uniq
156
+ end
157
+
158
+ def prune_mappings!
159
+ overflow = @mappings.size - MAX_MAPPINGS
160
+ return if overflow <= 0
161
+
162
+ ids_to_prune = @mappings.min_by(overflow) { |_, m| m.strength }.map(&:first)
163
+ ids_to_prune.each { |id| @mappings.delete(id) }
164
+ end
165
+
166
+ def prune_weak_mappings!
167
+ before = @mappings.size
168
+ @mappings.reject! { |_, m| m.strength <= 0.0 }
169
+ before - @mappings.size
170
+ end
171
+ end
172
+ end
173
+ end
174
+ end
175
+ end
176
+ end
177
+ end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'securerandom'
4
+
5
+ module Legion
6
+ module Extensions
7
+ module Agentic
8
+ module Attention
9
+ module Synesthesia
10
+ module Helpers
11
+ class SynestheticEvent
12
+ include Constants
13
+
14
+ attr_reader :id, :mapping_id, :source_input, :target_output,
15
+ :intensity, :involuntary, :triggered_at
16
+
17
+ def initialize(mapping_id:, source_input:, target_output:, intensity:, involuntary: true)
18
+ @id = SecureRandom.uuid
19
+ @mapping_id = mapping_id
20
+ @source_input = source_input
21
+ @target_output = target_output
22
+ @intensity = intensity.clamp(0.0, 1.0)
23
+ @involuntary = involuntary
24
+ @triggered_at = Time.now.utc
25
+ end
26
+
27
+ def intensity_label
28
+ Constants.label_for(INTENSITY_LABELS, @intensity)
29
+ end
30
+
31
+ def to_h
32
+ {
33
+ id: @id,
34
+ mapping_id: @mapping_id,
35
+ source_input: @source_input,
36
+ target_output: @target_output,
37
+ intensity: @intensity,
38
+ intensity_label: intensity_label,
39
+ involuntary: @involuntary,
40
+ triggered_at: @triggered_at
41
+ }
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,83 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Attention
7
+ module Synesthesia
8
+ module Runners
9
+ module CognitiveSynesthesia
10
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) &&
11
+ Legion::Extensions::Helpers.const_defined?(:Lex)
12
+
13
+ def register_mapping(source_modality:, target_modality:, trigger_pattern:,
14
+ response_pattern:, strength: Helpers::Constants::DEFAULT_STRENGTH,
15
+ engine: nil, **)
16
+ target = engine || synesthesia_engine
17
+ Legion::Logging.debug "[cognitive_synesthesia] runner register_mapping #{source_modality}->#{target_modality}"
18
+ target.register_mapping(
19
+ source_modality: source_modality,
20
+ target_modality: target_modality,
21
+ trigger_pattern: trigger_pattern,
22
+ response_pattern: response_pattern,
23
+ strength: strength
24
+ )
25
+ end
26
+
27
+ def trigger(source_modality:, input:, engine: nil, **)
28
+ target = engine || synesthesia_engine
29
+ Legion::Logging.debug "[cognitive_synesthesia] runner trigger modality=#{source_modality}"
30
+ target.trigger(source_modality: source_modality, input: input)
31
+ end
32
+
33
+ def decay_mappings(engine: nil, **)
34
+ target = engine || synesthesia_engine
35
+ Legion::Logging.debug '[cognitive_synesthesia] runner decay_mappings'
36
+ target.decay_mappings!
37
+ end
38
+
39
+ def cross_modal_richness(engine: nil, **)
40
+ target = engine || synesthesia_engine
41
+ richness = target.cross_modal_richness
42
+ label = Helpers::Constants.label_for(Helpers::Constants::RICHNESS_LABELS, richness)
43
+ Legion::Logging.debug "[cognitive_synesthesia] runner cross_modal_richness=#{richness.round(4)} label=#{label}"
44
+ { success: true, richness: richness, richness_label: label }
45
+ end
46
+
47
+ def dominant_modality_pairs(limit: 5, engine: nil, **)
48
+ target = engine || synesthesia_engine
49
+ pairs = target.dominant_modality_pairs(limit: limit)
50
+ Legion::Logging.debug "[cognitive_synesthesia] runner dominant_modality_pairs limit=#{limit}"
51
+ { success: true, pairs: pairs, count: pairs.size }
52
+ end
53
+
54
+ def event_history(limit: 20, engine: nil, **)
55
+ target = engine || synesthesia_engine
56
+ Legion::Logging.debug "[cognitive_synesthesia] runner event_history limit=#{limit}"
57
+ target.event_history(limit: limit)
58
+ end
59
+
60
+ def modality_coverage(engine: nil, **)
61
+ target = engine || synesthesia_engine
62
+ Legion::Logging.debug '[cognitive_synesthesia] runner modality_coverage'
63
+ { success: true }.merge(target.modality_coverage)
64
+ end
65
+
66
+ def synesthesia_report(engine: nil, **)
67
+ target = engine || synesthesia_engine
68
+ Legion::Logging.debug '[cognitive_synesthesia] runner synesthesia_report'
69
+ { success: true }.merge(target.synesthesia_report)
70
+ end
71
+
72
+ private
73
+
74
+ def synesthesia_engine
75
+ @synesthesia_engine ||= Helpers::SynesthesiaEngine.new
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
83
+ 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 Synesthesia
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/synesthesia/version'
4
+ require 'legion/extensions/agentic/attention/synesthesia/helpers/constants'
5
+ require 'legion/extensions/agentic/attention/synesthesia/helpers/sensory_mapping'
6
+ require 'legion/extensions/agentic/attention/synesthesia/helpers/synesthetic_event'
7
+ require 'legion/extensions/agentic/attention/synesthesia/helpers/synesthesia_engine'
8
+ require 'legion/extensions/agentic/attention/synesthesia/runners/cognitive_synesthesia'
9
+ require 'legion/extensions/agentic/attention/synesthesia/client'
10
+
11
+ module Legion
12
+ module Extensions
13
+ module Agentic
14
+ module Attention
15
+ module Synesthesia
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Attention
7
+ module Telescope
8
+ class Client
9
+ include Runners::CognitiveTelescope
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end