lex-agentic-executive 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 (296) 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-executive.gemspec +30 -0
  7. data/lib/legion/extensions/agentic/executive/autopilot/client.rb +19 -0
  8. data/lib/legion/extensions/agentic/executive/autopilot/helpers/autopilot_engine.rb +161 -0
  9. data/lib/legion/extensions/agentic/executive/autopilot/helpers/constants.rb +62 -0
  10. data/lib/legion/extensions/agentic/executive/autopilot/helpers/mode_event.rb +51 -0
  11. data/lib/legion/extensions/agentic/executive/autopilot/helpers/routine.rb +91 -0
  12. data/lib/legion/extensions/agentic/executive/autopilot/runners/cognitive_autopilot.rb +93 -0
  13. data/lib/legion/extensions/agentic/executive/autopilot/version.rb +13 -0
  14. data/lib/legion/extensions/agentic/executive/autopilot.rb +20 -0
  15. data/lib/legion/extensions/agentic/executive/chunking/client.rb +21 -0
  16. data/lib/legion/extensions/agentic/executive/chunking/helpers/chunk.rb +92 -0
  17. data/lib/legion/extensions/agentic/executive/chunking/helpers/chunking_engine.rb +147 -0
  18. data/lib/legion/extensions/agentic/executive/chunking/helpers/constants.rb +56 -0
  19. data/lib/legion/extensions/agentic/executive/chunking/helpers/information_item.rb +51 -0
  20. data/lib/legion/extensions/agentic/executive/chunking/runners/cognitive_chunking.rb +111 -0
  21. data/lib/legion/extensions/agentic/executive/chunking/version.rb +13 -0
  22. data/lib/legion/extensions/agentic/executive/chunking.rb +21 -0
  23. data/lib/legion/extensions/agentic/executive/cognitive_debt/client.rb +28 -0
  24. data/lib/legion/extensions/agentic/executive/cognitive_debt/helpers/constants.rb +36 -0
  25. data/lib/legion/extensions/agentic/executive/cognitive_debt/helpers/debt_engine.rb +118 -0
  26. data/lib/legion/extensions/agentic/executive/cognitive_debt/helpers/debt_item.rb +83 -0
  27. data/lib/legion/extensions/agentic/executive/cognitive_debt/runners/cognitive_debt.rb +84 -0
  28. data/lib/legion/extensions/agentic/executive/cognitive_debt/version.rb +13 -0
  29. data/lib/legion/extensions/agentic/executive/cognitive_debt.rb +19 -0
  30. data/lib/legion/extensions/agentic/executive/compass/client.rb +15 -0
  31. data/lib/legion/extensions/agentic/executive/compass/helpers/bearing.rb +79 -0
  32. data/lib/legion/extensions/agentic/executive/compass/helpers/compass_engine.rb +108 -0
  33. data/lib/legion/extensions/agentic/executive/compass/helpers/constants.rb +65 -0
  34. data/lib/legion/extensions/agentic/executive/compass/helpers/magnetic_bias.rb +81 -0
  35. data/lib/legion/extensions/agentic/executive/compass/runners/cognitive_compass.rb +76 -0
  36. data/lib/legion/extensions/agentic/executive/compass/version.rb +13 -0
  37. data/lib/legion/extensions/agentic/executive/compass.rb +22 -0
  38. data/lib/legion/extensions/agentic/executive/control/client.rb +19 -0
  39. data/lib/legion/extensions/agentic/executive/control/helpers/constants.rb +45 -0
  40. data/lib/legion/extensions/agentic/executive/control/helpers/control_signal.rb +79 -0
  41. data/lib/legion/extensions/agentic/executive/control/helpers/controller.rb +140 -0
  42. data/lib/legion/extensions/agentic/executive/control/helpers/goal.rb +72 -0
  43. data/lib/legion/extensions/agentic/executive/control/runners/cognitive_control.rb +74 -0
  44. data/lib/legion/extensions/agentic/executive/control/version.rb +13 -0
  45. data/lib/legion/extensions/agentic/executive/control.rb +21 -0
  46. data/lib/legion/extensions/agentic/executive/decision_fatigue/client.rb +28 -0
  47. data/lib/legion/extensions/agentic/executive/decision_fatigue/helpers/constants.rb +51 -0
  48. data/lib/legion/extensions/agentic/executive/decision_fatigue/helpers/decision_record.rb +50 -0
  49. data/lib/legion/extensions/agentic/executive/decision_fatigue/helpers/fatigue_engine.rb +114 -0
  50. data/lib/legion/extensions/agentic/executive/decision_fatigue/runners/decision_fatigue.rb +94 -0
  51. data/lib/legion/extensions/agentic/executive/decision_fatigue/version.rb +13 -0
  52. data/lib/legion/extensions/agentic/executive/decision_fatigue.rb +19 -0
  53. data/lib/legion/extensions/agentic/executive/disengagement/client.rb +24 -0
  54. data/lib/legion/extensions/agentic/executive/disengagement/helpers/constants.rb +48 -0
  55. data/lib/legion/extensions/agentic/executive/disengagement/helpers/disengagement_engine.rb +101 -0
  56. data/lib/legion/extensions/agentic/executive/disengagement/helpers/goal.rb +105 -0
  57. data/lib/legion/extensions/agentic/executive/disengagement/runners/cognitive_disengagement.rb +90 -0
  58. data/lib/legion/extensions/agentic/executive/disengagement/version.rb +13 -0
  59. data/lib/legion/extensions/agentic/executive/disengagement.rb +19 -0
  60. data/lib/legion/extensions/agentic/executive/dissonance_resolution/client.rb +19 -0
  61. data/lib/legion/extensions/agentic/executive/dissonance_resolution/helpers/constants.rb +38 -0
  62. data/lib/legion/extensions/agentic/executive/dissonance_resolution/helpers/dissonance_conflict.rb +90 -0
  63. data/lib/legion/extensions/agentic/executive/dissonance_resolution/helpers/resolution_engine.rb +155 -0
  64. data/lib/legion/extensions/agentic/executive/dissonance_resolution/runners/cognitive_dissonance_resolution.rb +74 -0
  65. data/lib/legion/extensions/agentic/executive/dissonance_resolution/version.rb +13 -0
  66. data/lib/legion/extensions/agentic/executive/dissonance_resolution.rb +19 -0
  67. data/lib/legion/extensions/agentic/executive/dual_process/client.rb +25 -0
  68. data/lib/legion/extensions/agentic/executive/dual_process/helpers/constants.rb +44 -0
  69. data/lib/legion/extensions/agentic/executive/dual_process/helpers/decision.rb +50 -0
  70. data/lib/legion/extensions/agentic/executive/dual_process/helpers/dual_process_engine.rb +200 -0
  71. data/lib/legion/extensions/agentic/executive/dual_process/helpers/heuristic.rb +67 -0
  72. data/lib/legion/extensions/agentic/executive/dual_process/runners/dual_process.rb +87 -0
  73. data/lib/legion/extensions/agentic/executive/dual_process/version.rb +13 -0
  74. data/lib/legion/extensions/agentic/executive/dual_process.rb +20 -0
  75. data/lib/legion/extensions/agentic/executive/dwell/client.rb +19 -0
  76. data/lib/legion/extensions/agentic/executive/dwell/helpers/constants.rb +65 -0
  77. data/lib/legion/extensions/agentic/executive/dwell/helpers/dwell_engine.rb +126 -0
  78. data/lib/legion/extensions/agentic/executive/dwell/helpers/dwell_topic.rb +119 -0
  79. data/lib/legion/extensions/agentic/executive/dwell/runners/cognitive_dwell.rb +87 -0
  80. data/lib/legion/extensions/agentic/executive/dwell/version.rb +13 -0
  81. data/lib/legion/extensions/agentic/executive/dwell.rb +19 -0
  82. data/lib/legion/extensions/agentic/executive/executive_function/actors/recovery.rb +45 -0
  83. data/lib/legion/extensions/agentic/executive/executive_function/client.rb +27 -0
  84. data/lib/legion/extensions/agentic/executive/executive_function/helpers/ef_component.rb +58 -0
  85. data/lib/legion/extensions/agentic/executive/executive_function/helpers/executive_controller.rb +129 -0
  86. data/lib/legion/extensions/agentic/executive/executive_function/runners/executive_function.rb +104 -0
  87. data/lib/legion/extensions/agentic/executive/executive_function/version.rb +13 -0
  88. data/lib/legion/extensions/agentic/executive/executive_function.rb +18 -0
  89. data/lib/legion/extensions/agentic/executive/flexibility/actors/tick.rb +31 -0
  90. data/lib/legion/extensions/agentic/executive/flexibility/client.rb +28 -0
  91. data/lib/legion/extensions/agentic/executive/flexibility/helpers/constants.rb +39 -0
  92. data/lib/legion/extensions/agentic/executive/flexibility/helpers/flexibility_engine.rb +109 -0
  93. data/lib/legion/extensions/agentic/executive/flexibility/helpers/task_set.rb +69 -0
  94. data/lib/legion/extensions/agentic/executive/flexibility/runners/cognitive_flexibility.rb +77 -0
  95. data/lib/legion/extensions/agentic/executive/flexibility/version.rb +13 -0
  96. data/lib/legion/extensions/agentic/executive/flexibility.rb +19 -0
  97. data/lib/legion/extensions/agentic/executive/flexibility_training/client.rb +29 -0
  98. data/lib/legion/extensions/agentic/executive/flexibility_training/helpers/constants.rb +57 -0
  99. data/lib/legion/extensions/agentic/executive/flexibility_training/helpers/flexibility_engine.rb +178 -0
  100. data/lib/legion/extensions/agentic/executive/flexibility_training/helpers/switch_trial.rb +54 -0
  101. data/lib/legion/extensions/agentic/executive/flexibility_training/helpers/training_task.rb +54 -0
  102. data/lib/legion/extensions/agentic/executive/flexibility_training/runners/cognitive_flexibility_training.rb +134 -0
  103. data/lib/legion/extensions/agentic/executive/flexibility_training/version.rb +13 -0
  104. data/lib/legion/extensions/agentic/executive/flexibility_training.rb +20 -0
  105. data/lib/legion/extensions/agentic/executive/goal_management/client.rb +28 -0
  106. data/lib/legion/extensions/agentic/executive/goal_management/helpers/constants.rb +49 -0
  107. data/lib/legion/extensions/agentic/executive/goal_management/helpers/goal.rb +153 -0
  108. data/lib/legion/extensions/agentic/executive/goal_management/helpers/goal_engine.rb +265 -0
  109. data/lib/legion/extensions/agentic/executive/goal_management/runners/goal_management.rb +169 -0
  110. data/lib/legion/extensions/agentic/executive/goal_management/version.rb +13 -0
  111. data/lib/legion/extensions/agentic/executive/goal_management.rb +19 -0
  112. data/lib/legion/extensions/agentic/executive/inertia/client.rb +15 -0
  113. data/lib/legion/extensions/agentic/executive/inertia/helpers/belief.rb +99 -0
  114. data/lib/legion/extensions/agentic/executive/inertia/helpers/constants.rb +45 -0
  115. data/lib/legion/extensions/agentic/executive/inertia/helpers/inertia_engine.rb +111 -0
  116. data/lib/legion/extensions/agentic/executive/inertia/runners/cognitive_inertia.rb +74 -0
  117. data/lib/legion/extensions/agentic/executive/inertia/version.rb +13 -0
  118. data/lib/legion/extensions/agentic/executive/inertia.rb +19 -0
  119. data/lib/legion/extensions/agentic/executive/inhibition/client.rb +27 -0
  120. data/lib/legion/extensions/agentic/executive/inhibition/helpers/constants.rb +36 -0
  121. data/lib/legion/extensions/agentic/executive/inhibition/helpers/impulse.rb +37 -0
  122. data/lib/legion/extensions/agentic/executive/inhibition/helpers/inhibition_model.rb +122 -0
  123. data/lib/legion/extensions/agentic/executive/inhibition/helpers/inhibition_store.rb +72 -0
  124. data/lib/legion/extensions/agentic/executive/inhibition/runners/inhibition.rb +155 -0
  125. data/lib/legion/extensions/agentic/executive/inhibition/version.rb +13 -0
  126. data/lib/legion/extensions/agentic/executive/inhibition.rb +20 -0
  127. data/lib/legion/extensions/agentic/executive/load/client.rb +25 -0
  128. data/lib/legion/extensions/agentic/executive/load/helpers/constants.rb +36 -0
  129. data/lib/legion/extensions/agentic/executive/load/helpers/load_model.rb +146 -0
  130. data/lib/legion/extensions/agentic/executive/load/runners/cognitive_load.rb +120 -0
  131. data/lib/legion/extensions/agentic/executive/load/version.rb +13 -0
  132. data/lib/legion/extensions/agentic/executive/load.rb +18 -0
  133. data/lib/legion/extensions/agentic/executive/load_balancing/client.rb +19 -0
  134. data/lib/legion/extensions/agentic/executive/load_balancing/helpers/constants.rb +44 -0
  135. data/lib/legion/extensions/agentic/executive/load_balancing/helpers/load_balancer.rb +137 -0
  136. data/lib/legion/extensions/agentic/executive/load_balancing/helpers/subsystem.rb +101 -0
  137. data/lib/legion/extensions/agentic/executive/load_balancing/runners/cognitive_load_balancing.rb +69 -0
  138. data/lib/legion/extensions/agentic/executive/load_balancing/version.rb +13 -0
  139. data/lib/legion/extensions/agentic/executive/load_balancing.rb +19 -0
  140. data/lib/legion/extensions/agentic/executive/planning/client.rb +27 -0
  141. data/lib/legion/extensions/agentic/executive/planning/helpers/constants.rb +26 -0
  142. data/lib/legion/extensions/agentic/executive/planning/helpers/plan.rb +110 -0
  143. data/lib/legion/extensions/agentic/executive/planning/helpers/plan_step.rb +82 -0
  144. data/lib/legion/extensions/agentic/executive/planning/helpers/plan_store.rb +161 -0
  145. data/lib/legion/extensions/agentic/executive/planning/runners/planning.rb +123 -0
  146. data/lib/legion/extensions/agentic/executive/planning/version.rb +13 -0
  147. data/lib/legion/extensions/agentic/executive/planning.rb +20 -0
  148. data/lib/legion/extensions/agentic/executive/prospective_memory/client.rb +28 -0
  149. data/lib/legion/extensions/agentic/executive/prospective_memory/helpers/constants.rb +32 -0
  150. data/lib/legion/extensions/agentic/executive/prospective_memory/helpers/intention.rb +94 -0
  151. data/lib/legion/extensions/agentic/executive/prospective_memory/helpers/prospective_engine.rb +157 -0
  152. data/lib/legion/extensions/agentic/executive/prospective_memory/runners/prospective_memory.rb +146 -0
  153. data/lib/legion/extensions/agentic/executive/prospective_memory/version.rb +13 -0
  154. data/lib/legion/extensions/agentic/executive/prospective_memory.rb +19 -0
  155. data/lib/legion/extensions/agentic/executive/triage/client.rb +19 -0
  156. data/lib/legion/extensions/agentic/executive/triage/helpers/constants.rb +70 -0
  157. data/lib/legion/extensions/agentic/executive/triage/helpers/demand.rb +101 -0
  158. data/lib/legion/extensions/agentic/executive/triage/helpers/triage_engine.rb +150 -0
  159. data/lib/legion/extensions/agentic/executive/triage/runners/cognitive_triage.rb +110 -0
  160. data/lib/legion/extensions/agentic/executive/triage/version.rb +13 -0
  161. data/lib/legion/extensions/agentic/executive/triage.rb +19 -0
  162. data/lib/legion/extensions/agentic/executive/version.rb +11 -0
  163. data/lib/legion/extensions/agentic/executive/volition/client.rb +27 -0
  164. data/lib/legion/extensions/agentic/executive/volition/helpers/constants.rb +51 -0
  165. data/lib/legion/extensions/agentic/executive/volition/helpers/drive_synthesizer.rb +158 -0
  166. data/lib/legion/extensions/agentic/executive/volition/helpers/intention.rb +56 -0
  167. data/lib/legion/extensions/agentic/executive/volition/helpers/intention_stack.rb +140 -0
  168. data/lib/legion/extensions/agentic/executive/volition/runners/volition.rb +129 -0
  169. data/lib/legion/extensions/agentic/executive/volition/version.rb +13 -0
  170. data/lib/legion/extensions/agentic/executive/volition.rb +20 -0
  171. data/lib/legion/extensions/agentic/executive/working_memory/client.rb +21 -0
  172. data/lib/legion/extensions/agentic/executive/working_memory/helpers/buffer.rb +124 -0
  173. data/lib/legion/extensions/agentic/executive/working_memory/helpers/buffer_item.rb +72 -0
  174. data/lib/legion/extensions/agentic/executive/working_memory/helpers/constants.rb +47 -0
  175. data/lib/legion/extensions/agentic/executive/working_memory/runners/working_memory.rb +102 -0
  176. data/lib/legion/extensions/agentic/executive/working_memory/version.rb +13 -0
  177. data/lib/legion/extensions/agentic/executive/working_memory.rb +19 -0
  178. data/lib/legion/extensions/agentic/executive.rb +40 -0
  179. data/spec/legion/extensions/agentic/executive/autopilot/client_spec.rb +21 -0
  180. data/spec/legion/extensions/agentic/executive/autopilot/cognitive_autopilot_spec.rb +7 -0
  181. data/spec/legion/extensions/agentic/executive/autopilot/helpers/autopilot_engine_spec.rb +166 -0
  182. data/spec/legion/extensions/agentic/executive/autopilot/helpers/constants_spec.rb +37 -0
  183. data/spec/legion/extensions/agentic/executive/autopilot/helpers/mode_event_spec.rb +30 -0
  184. data/spec/legion/extensions/agentic/executive/autopilot/helpers/routine_spec.rb +133 -0
  185. data/spec/legion/extensions/agentic/executive/autopilot/runners_spec.rb +108 -0
  186. data/spec/legion/extensions/agentic/executive/chunking/client_spec.rb +67 -0
  187. data/spec/legion/extensions/agentic/executive/chunking/helpers/chunk_spec.rb +187 -0
  188. data/spec/legion/extensions/agentic/executive/chunking/helpers/chunking_engine_spec.rb +290 -0
  189. data/spec/legion/extensions/agentic/executive/chunking/helpers/constants_spec.rb +116 -0
  190. data/spec/legion/extensions/agentic/executive/chunking/helpers/information_item_spec.rb +75 -0
  191. data/spec/legion/extensions/agentic/executive/chunking/runners/cognitive_chunking_spec.rb +169 -0
  192. data/spec/legion/extensions/agentic/executive/cognitive_debt/client_spec.rb +73 -0
  193. data/spec/legion/extensions/agentic/executive/cognitive_debt/cognitive_debt_spec.rb +15 -0
  194. data/spec/legion/extensions/agentic/executive/cognitive_debt/helpers/constants_spec.rb +78 -0
  195. data/spec/legion/extensions/agentic/executive/cognitive_debt/helpers/debt_engine_spec.rb +297 -0
  196. data/spec/legion/extensions/agentic/executive/cognitive_debt/helpers/debt_item_spec.rb +233 -0
  197. data/spec/legion/extensions/agentic/executive/cognitive_debt/runners/cognitive_debt_spec.rb +196 -0
  198. data/spec/legion/extensions/agentic/executive/compass/client_spec.rb +16 -0
  199. data/spec/legion/extensions/agentic/executive/compass/helpers/bearing_spec.rb +93 -0
  200. data/spec/legion/extensions/agentic/executive/compass/helpers/compass_engine_spec.rb +113 -0
  201. data/spec/legion/extensions/agentic/executive/compass/helpers/constants_spec.rb +45 -0
  202. data/spec/legion/extensions/agentic/executive/compass/helpers/magnetic_bias_spec.rb +103 -0
  203. data/spec/legion/extensions/agentic/executive/compass/runners/cognitive_compass_spec.rb +80 -0
  204. data/spec/legion/extensions/agentic/executive/control/client_spec.rb +23 -0
  205. data/spec/legion/extensions/agentic/executive/control/helpers/control_signal_spec.rb +118 -0
  206. data/spec/legion/extensions/agentic/executive/control/helpers/controller_spec.rb +167 -0
  207. data/spec/legion/extensions/agentic/executive/control/helpers/goal_spec.rb +99 -0
  208. data/spec/legion/extensions/agentic/executive/control/runners/cognitive_control_spec.rb +107 -0
  209. data/spec/legion/extensions/agentic/executive/decision_fatigue/client_spec.rb +24 -0
  210. data/spec/legion/extensions/agentic/executive/decision_fatigue/helpers/constants_spec.rb +93 -0
  211. data/spec/legion/extensions/agentic/executive/decision_fatigue/helpers/decision_record_spec.rb +89 -0
  212. data/spec/legion/extensions/agentic/executive/decision_fatigue/helpers/fatigue_engine_spec.rb +216 -0
  213. data/spec/legion/extensions/agentic/executive/decision_fatigue/runners/decision_fatigue_spec.rb +180 -0
  214. data/spec/legion/extensions/agentic/executive/disengagement/helpers/constants_spec.rb +81 -0
  215. data/spec/legion/extensions/agentic/executive/disengagement/helpers/disengagement_engine_spec.rb +213 -0
  216. data/spec/legion/extensions/agentic/executive/disengagement/helpers/goal_spec.rb +289 -0
  217. data/spec/legion/extensions/agentic/executive/disengagement/runners/cognitive_disengagement_spec.rb +215 -0
  218. data/spec/legion/extensions/agentic/executive/dissonance_resolution/client_spec.rb +20 -0
  219. data/spec/legion/extensions/agentic/executive/dissonance_resolution/helpers/dissonance_conflict_spec.rb +107 -0
  220. data/spec/legion/extensions/agentic/executive/dissonance_resolution/helpers/resolution_engine_spec.rb +122 -0
  221. data/spec/legion/extensions/agentic/executive/dissonance_resolution/runners/cognitive_dissonance_resolution_spec.rb +49 -0
  222. data/spec/legion/extensions/agentic/executive/dual_process/client_spec.rb +74 -0
  223. data/spec/legion/extensions/agentic/executive/dual_process/helpers/constants_spec.rb +55 -0
  224. data/spec/legion/extensions/agentic/executive/dual_process/helpers/decision_spec.rb +76 -0
  225. data/spec/legion/extensions/agentic/executive/dual_process/helpers/dual_process_engine_spec.rb +274 -0
  226. data/spec/legion/extensions/agentic/executive/dual_process/helpers/heuristic_spec.rb +144 -0
  227. data/spec/legion/extensions/agentic/executive/dual_process/runners/dual_process_spec.rb +188 -0
  228. data/spec/legion/extensions/agentic/executive/dwell/cognitive_dwell_spec.rb +7 -0
  229. data/spec/legion/extensions/agentic/executive/dwell/helpers/dwell_engine_spec.rb +136 -0
  230. data/spec/legion/extensions/agentic/executive/dwell/helpers/dwell_topic_spec.rb +152 -0
  231. data/spec/legion/extensions/agentic/executive/executive_function/client_spec.rb +40 -0
  232. data/spec/legion/extensions/agentic/executive/executive_function/helpers/ef_component_spec.rb +108 -0
  233. data/spec/legion/extensions/agentic/executive/executive_function/helpers/executive_controller_spec.rb +136 -0
  234. data/spec/legion/extensions/agentic/executive/executive_function/runners/executive_function_spec.rb +191 -0
  235. data/spec/legion/extensions/agentic/executive/flexibility/client_spec.rb +20 -0
  236. data/spec/legion/extensions/agentic/executive/flexibility/helpers/flexibility_engine_spec.rb +119 -0
  237. data/spec/legion/extensions/agentic/executive/flexibility/helpers/task_set_spec.rb +87 -0
  238. data/spec/legion/extensions/agentic/executive/flexibility/runners/cognitive_flexibility_spec.rb +69 -0
  239. data/spec/legion/extensions/agentic/executive/flexibility_training/client_spec.rb +39 -0
  240. data/spec/legion/extensions/agentic/executive/flexibility_training/helpers/constants_spec.rb +67 -0
  241. data/spec/legion/extensions/agentic/executive/flexibility_training/helpers/flexibility_engine_spec.rb +209 -0
  242. data/spec/legion/extensions/agentic/executive/flexibility_training/helpers/switch_trial_spec.rb +77 -0
  243. data/spec/legion/extensions/agentic/executive/flexibility_training/helpers/training_task_spec.rb +97 -0
  244. data/spec/legion/extensions/agentic/executive/flexibility_training/runners/cognitive_flexibility_training_spec.rb +171 -0
  245. data/spec/legion/extensions/agentic/executive/goal_management/client_spec.rb +34 -0
  246. data/spec/legion/extensions/agentic/executive/goal_management/goal_management_spec.rb +11 -0
  247. data/spec/legion/extensions/agentic/executive/goal_management/helpers/constants_spec.rb +94 -0
  248. data/spec/legion/extensions/agentic/executive/goal_management/helpers/goal_engine_spec.rb +358 -0
  249. data/spec/legion/extensions/agentic/executive/goal_management/helpers/goal_spec.rb +283 -0
  250. data/spec/legion/extensions/agentic/executive/goal_management/runners/goal_management_spec.rb +244 -0
  251. data/spec/legion/extensions/agentic/executive/inertia/helpers/belief_spec.rb +128 -0
  252. data/spec/legion/extensions/agentic/executive/inertia/helpers/inertia_engine_spec.rb +104 -0
  253. data/spec/legion/extensions/agentic/executive/inertia/runners/cognitive_inertia_spec.rb +59 -0
  254. data/spec/legion/extensions/agentic/executive/inhibition/client_spec.rb +43 -0
  255. data/spec/legion/extensions/agentic/executive/inhibition/helpers/constants_spec.rb +108 -0
  256. data/spec/legion/extensions/agentic/executive/inhibition/helpers/impulse_spec.rb +101 -0
  257. data/spec/legion/extensions/agentic/executive/inhibition/helpers/inhibition_model_spec.rb +245 -0
  258. data/spec/legion/extensions/agentic/executive/inhibition/helpers/inhibition_store_spec.rb +126 -0
  259. data/spec/legion/extensions/agentic/executive/inhibition/runners/inhibition_spec.rb +242 -0
  260. data/spec/legion/extensions/agentic/executive/load/client_spec.rb +94 -0
  261. data/spec/legion/extensions/agentic/executive/load/helpers/constants_spec.rb +62 -0
  262. data/spec/legion/extensions/agentic/executive/load/helpers/load_model_spec.rb +314 -0
  263. data/spec/legion/extensions/agentic/executive/load/runners/cognitive_load_spec.rb +231 -0
  264. data/spec/legion/extensions/agentic/executive/load_balancing/client_spec.rb +20 -0
  265. data/spec/legion/extensions/agentic/executive/load_balancing/helpers/load_balancer_spec.rb +106 -0
  266. data/spec/legion/extensions/agentic/executive/load_balancing/helpers/subsystem_spec.rb +106 -0
  267. data/spec/legion/extensions/agentic/executive/load_balancing/runners/cognitive_load_balancing_spec.rb +52 -0
  268. data/spec/legion/extensions/agentic/executive/planning/client_spec.rb +91 -0
  269. data/spec/legion/extensions/agentic/executive/planning/helpers/constants_spec.rb +91 -0
  270. data/spec/legion/extensions/agentic/executive/planning/helpers/plan_spec.rb +230 -0
  271. data/spec/legion/extensions/agentic/executive/planning/helpers/plan_step_spec.rb +159 -0
  272. data/spec/legion/extensions/agentic/executive/planning/helpers/plan_store_spec.rb +317 -0
  273. data/spec/legion/extensions/agentic/executive/planning/runners/planning_spec.rb +217 -0
  274. data/spec/legion/extensions/agentic/executive/prospective_memory/client_spec.rb +24 -0
  275. data/spec/legion/extensions/agentic/executive/prospective_memory/helpers/constants_spec.rb +84 -0
  276. data/spec/legion/extensions/agentic/executive/prospective_memory/helpers/intention_spec.rb +194 -0
  277. data/spec/legion/extensions/agentic/executive/prospective_memory/helpers/prospective_engine_spec.rb +255 -0
  278. data/spec/legion/extensions/agentic/executive/prospective_memory/runners/prospective_memory_spec.rb +220 -0
  279. data/spec/legion/extensions/agentic/executive/triage/client_spec.rb +28 -0
  280. data/spec/legion/extensions/agentic/executive/triage/cognitive_triage_spec.rb +7 -0
  281. data/spec/legion/extensions/agentic/executive/triage/helpers/constants_spec.rb +41 -0
  282. data/spec/legion/extensions/agentic/executive/triage/helpers/demand_spec.rb +139 -0
  283. data/spec/legion/extensions/agentic/executive/triage/helpers/triage_engine_spec.rb +183 -0
  284. data/spec/legion/extensions/agentic/executive/triage/runners_spec.rb +127 -0
  285. data/spec/legion/extensions/agentic/executive/volition/client_spec.rb +25 -0
  286. data/spec/legion/extensions/agentic/executive/volition/helpers/drive_synthesizer_spec.rb +99 -0
  287. data/spec/legion/extensions/agentic/executive/volition/helpers/intention_spec.rb +93 -0
  288. data/spec/legion/extensions/agentic/executive/volition/helpers/intention_stack_spec.rb +129 -0
  289. data/spec/legion/extensions/agentic/executive/volition/runners/volition_spec.rb +135 -0
  290. data/spec/legion/extensions/agentic/executive/working_memory/client_spec.rb +93 -0
  291. data/spec/legion/extensions/agentic/executive/working_memory/helpers/buffer_item_spec.rb +185 -0
  292. data/spec/legion/extensions/agentic/executive/working_memory/helpers/buffer_spec.rb +232 -0
  293. data/spec/legion/extensions/agentic/executive/working_memory/helpers/constants_spec.rb +99 -0
  294. data/spec/legion/extensions/agentic/executive/working_memory/runners/working_memory_spec.rb +191 -0
  295. data/spec/spec_helper.rb +46 -0
  296. metadata +380 -0
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'legion/extensions/agentic/executive/volition/helpers/constants'
4
+ require 'legion/extensions/agentic/executive/volition/helpers/intention'
5
+ require 'legion/extensions/agentic/executive/volition/helpers/intention_stack'
6
+ require 'legion/extensions/agentic/executive/volition/helpers/drive_synthesizer'
7
+ require 'legion/extensions/agentic/executive/volition/runners/volition'
8
+
9
+ module Legion
10
+ module Extensions
11
+ module Agentic
12
+ module Executive
13
+ module Volition
14
+ class Client
15
+ include Runners::Volition
16
+
17
+ attr_reader :intention_stack
18
+
19
+ def initialize(stack: nil, **)
20
+ @intention_stack = stack || Helpers::IntentionStack.new
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Executive
7
+ module Volition
8
+ module Helpers
9
+ module Constants
10
+ # Maximum active intentions
11
+ MAX_INTENTIONS = 7
12
+
13
+ # Drive sources and their default weights
14
+ DRIVE_WEIGHTS = {
15
+ curiosity: 0.25, # from lex-curiosity wonder intensity
16
+ corrective: 0.20, # from lex-reflection adaptation recommendations
17
+ urgency: 0.20, # from lex-emotion gut signal + arousal
18
+ epistemic: 0.20, # from lex-prediction confidence gaps
19
+ social: 0.15 # from lex-trust + mesh signals
20
+ }.freeze
21
+
22
+ # Minimum drive strength to generate an intention
23
+ DRIVE_THRESHOLD = 0.15
24
+
25
+ # Intention decay per tick when not reinforced
26
+ INTENTION_DECAY = 0.05
27
+
28
+ # Intention salience floor before removal
29
+ INTENTION_FLOOR = 0.1
30
+
31
+ # Maximum intention age in ticks before forced expiry
32
+ MAX_INTENTION_AGE = 100
33
+
34
+ # Drive labels for narrative output
35
+ DRIVE_LABELS = {
36
+ curiosity: 'knowledge seeking',
37
+ corrective: 'self-improvement',
38
+ urgency: 'urgent response',
39
+ epistemic: 'uncertainty reduction',
40
+ social: 'collaborative engagement'
41
+ }.freeze
42
+
43
+ # Intention states
44
+ STATES = %i[active suspended completed expired].freeze
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,158 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Executive
7
+ module Volition
8
+ module Helpers
9
+ module DriveSynthesizer
10
+ module_function
11
+
12
+ def synthesize(tick_results: {}, cognitive_state: {})
13
+ drives = {}
14
+ drives[:curiosity] = compute_curiosity_drive(tick_results, cognitive_state)
15
+ drives[:corrective] = compute_corrective_drive(cognitive_state)
16
+ drives[:urgency] = compute_urgency_drive(tick_results, cognitive_state)
17
+ drives[:epistemic] = compute_epistemic_drive(tick_results, cognitive_state)
18
+ drives[:social] = compute_social_drive(cognitive_state)
19
+ drives
20
+ end
21
+
22
+ def weighted_drives(drives)
23
+ drives.each_with_object({}) do |(drive, strength), result|
24
+ weight = Constants::DRIVE_WEIGHTS[drive] || 0.0
25
+ result[drive] = {
26
+ raw: strength,
27
+ weighted: (strength * weight).round(4),
28
+ weight: weight
29
+ }
30
+ end
31
+ end
32
+
33
+ def dominant_drive(drives)
34
+ return nil if drives.empty?
35
+
36
+ drives.max_by { |_, strength| strength }&.first
37
+ end
38
+
39
+ def generate_intentions(drives, cognitive_state: {})
40
+ intentions = []
41
+
42
+ drives.each do |drive, strength|
43
+ next if strength < Constants::DRIVE_THRESHOLD
44
+
45
+ intention = build_intention_for_drive(drive, strength, cognitive_state)
46
+ intentions << intention if intention
47
+ end
48
+
49
+ intentions.sort_by { |i| -(i[:salience] || 0) }
50
+ end
51
+
52
+ def compute_curiosity_drive(tick_results, cognitive_state)
53
+ curiosity = cognitive_state[:curiosity] || {}
54
+ wonder_data = tick_results[:working_memory_integration] || {}
55
+
56
+ intensity = curiosity[:intensity] || wonder_data[:curiosity_intensity] || 0.0
57
+ active_count = curiosity[:active_count] || wonder_data[:active_wonders] || 0
58
+
59
+ count_factor = [active_count / 5.0, 1.0].min
60
+ ((intensity * 0.7) + (count_factor * 0.3)).clamp(0.0, 1.0)
61
+ end
62
+
63
+ def compute_corrective_drive(cognitive_state)
64
+ reflection = cognitive_state[:reflection] || {}
65
+ health = reflection[:health] || 1.0
66
+ pending = reflection[:pending_adaptations] || 0
67
+
68
+ health_gap = 1.0 - health
69
+ pending_factor = [pending / 3.0, 1.0].min
70
+ ((health_gap * 0.6) + (pending_factor * 0.4)).clamp(0.0, 1.0)
71
+ end
72
+
73
+ def compute_urgency_drive(tick_results, cognitive_state)
74
+ gut = tick_results[:gut_instinct] || cognitive_state[:gut] || {}
75
+ emotion = tick_results[:emotional_evaluation] || {}
76
+
77
+ arousal = emotion[:arousal] || cognitive_state.dig(:emotion, :arousal) || 0.5
78
+ gut_signal = extract_gut_strength(gut)
79
+
80
+ ((arousal * 0.5) + (gut_signal * 0.5)).clamp(0.0, 1.0)
81
+ end
82
+
83
+ def compute_epistemic_drive(tick_results, cognitive_state)
84
+ pred = tick_results[:prediction_engine] || {}
85
+ pred_state = cognitive_state[:prediction] || {}
86
+
87
+ confidence = pred[:confidence] || pred_state[:confidence] || 0.5
88
+ pending = pred_state[:pending_count] || 0
89
+
90
+ confidence_gap = 1.0 - confidence
91
+ pending_factor = [pending / 10.0, 1.0].min
92
+ ((confidence_gap * 0.6) + (pending_factor * 0.4)).clamp(0.0, 1.0)
93
+ end
94
+
95
+ def compute_social_drive(cognitive_state)
96
+ mesh = cognitive_state[:mesh] || {}
97
+ trust = cognitive_state[:trust] || {}
98
+
99
+ peer_count = mesh[:peer_count] || 0
100
+ trust_level = trust[:avg_composite] || 0.5
101
+
102
+ peer_factor = [peer_count / 5.0, 1.0].min
103
+ ((peer_factor * 0.4) + (trust_level * 0.6)).clamp(0.0, 1.0)
104
+ end
105
+
106
+ def extract_gut_strength(gut)
107
+ signal = gut[:signal]
108
+ return 0.3 unless signal
109
+
110
+ case signal
111
+ when :alarm then 1.0
112
+ when :heightened then 0.7
113
+ when :explore then 0.5
114
+ when :attend then 0.4
115
+ when :calm then 0.1
116
+ else 0.3
117
+ end
118
+ end
119
+
120
+ def build_intention_for_drive(drive, strength, cognitive_state)
121
+ case drive
122
+ when :curiosity then build_curiosity_intention(strength, cognitive_state)
123
+ when :corrective then build_corrective_intention(strength, cognitive_state)
124
+ when :urgency then build_urgency_intention(strength, cognitive_state)
125
+ when :epistemic then build_epistemic_intention(strength, cognitive_state)
126
+ when :social then build_social_intention(strength, cognitive_state)
127
+ end
128
+ end
129
+
130
+ def build_curiosity_intention(strength, cognitive_state)
131
+ question = cognitive_state.dig(:curiosity, :top_question) || 'explore knowledge gaps'
132
+ domain = cognitive_state.dig(:curiosity, :top_domain) || :general
133
+ Intention.new_intention(drive: :curiosity, domain: domain, goal: question, salience: strength)
134
+ end
135
+
136
+ def build_corrective_intention(strength, cognitive_state)
137
+ severity = cognitive_state.dig(:reflection, :recent_severity) || 'cognitive health'
138
+ Intention.new_intention(drive: :corrective, domain: :self, goal: "address #{severity}", salience: strength)
139
+ end
140
+
141
+ def build_urgency_intention(strength, _cognitive_state)
142
+ Intention.new_intention(drive: :urgency, domain: :general, goal: 'respond to urgent signal', salience: strength)
143
+ end
144
+
145
+ def build_epistemic_intention(strength, _cognitive_state)
146
+ Intention.new_intention(drive: :epistemic, domain: :general, goal: 'reduce prediction uncertainty', salience: strength)
147
+ end
148
+
149
+ def build_social_intention(strength, _cognitive_state)
150
+ Intention.new_intention(drive: :social, domain: :general, goal: 'engage with peer agents', salience: strength)
151
+ end
152
+ end
153
+ end
154
+ end
155
+ end
156
+ end
157
+ end
158
+ end
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'securerandom'
4
+
5
+ module Legion
6
+ module Extensions
7
+ module Agentic
8
+ module Executive
9
+ module Volition
10
+ module Helpers
11
+ module Intention
12
+ module_function
13
+
14
+ def new_intention(drive:, domain:, goal:, salience:, context: {})
15
+ {
16
+ intention_id: SecureRandom.hex(8),
17
+ drive: drive.to_sym,
18
+ domain: domain.to_sym,
19
+ goal: goal,
20
+ salience: salience.clamp(0.0, 1.0),
21
+ state: :active,
22
+ created_at: Time.now.utc,
23
+ age_ticks: 0,
24
+ context: context
25
+ }
26
+ end
27
+
28
+ def decay(intention)
29
+ new_salience = [intention[:salience] - Constants::INTENTION_DECAY, 0.0].max
30
+ intention.merge(salience: new_salience, age_ticks: intention[:age_ticks] + 1)
31
+ end
32
+
33
+ def reinforce(intention, amount: 0.1)
34
+ new_salience = [intention[:salience] + amount, 1.0].min
35
+ intention.merge(salience: new_salience)
36
+ end
37
+
38
+ def expired?(intention)
39
+ intention[:age_ticks] >= Constants::MAX_INTENTION_AGE ||
40
+ intention[:salience] < Constants::INTENTION_FLOOR
41
+ end
42
+
43
+ def active?(intention)
44
+ intention[:state] == :active && !expired?(intention)
45
+ end
46
+
47
+ def drive_label(drive)
48
+ Constants::DRIVE_LABELS[drive.to_sym] || drive.to_s
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,140 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Executive
7
+ module Volition
8
+ module Helpers
9
+ class IntentionStack
10
+ attr_reader :intentions
11
+
12
+ def initialize
13
+ @intentions = []
14
+ end
15
+
16
+ def push(intention)
17
+ return :duplicate if duplicate?(intention)
18
+ return :capacity_full if @intentions.size >= Constants::MAX_INTENTIONS
19
+
20
+ @intentions << intention
21
+ sort!
22
+ :pushed
23
+ end
24
+
25
+ def active
26
+ @intentions.select { |i| Intention.active?(i) }
27
+ end
28
+
29
+ def top
30
+ active.first
31
+ end
32
+
33
+ def by_drive(drive)
34
+ @intentions.select { |i| i[:drive] == drive.to_sym && Intention.active?(i) }
35
+ end
36
+
37
+ def by_domain(domain)
38
+ @intentions.select { |i| i[:domain] == domain.to_sym && Intention.active?(i) }
39
+ end
40
+
41
+ def find(intention_id)
42
+ @intentions.find { |i| i[:intention_id] == intention_id }
43
+ end
44
+
45
+ def complete(intention_id)
46
+ intention = find(intention_id)
47
+ return :not_found unless intention
48
+
49
+ intention[:state] = :completed
50
+ intention[:completed_at] = Time.now.utc
51
+ :completed
52
+ end
53
+
54
+ def suspend(intention_id)
55
+ intention = find(intention_id)
56
+ return :not_found unless intention
57
+
58
+ intention[:state] = :suspended
59
+ :suspended
60
+ end
61
+
62
+ def resume(intention_id)
63
+ intention = find(intention_id)
64
+ return :not_found unless intention
65
+ return :not_suspended unless intention[:state] == :suspended
66
+
67
+ intention[:state] = :active
68
+ :resumed
69
+ end
70
+
71
+ def decay_all
72
+ @intentions.each do |intention|
73
+ next unless Intention.active?(intention)
74
+
75
+ updated = Intention.decay(intention)
76
+ intention.merge!(updated)
77
+
78
+ intention[:state] = :expired if Intention.expired?(intention)
79
+ end
80
+
81
+ expired_count = @intentions.count { |i| i[:state] == :expired }
82
+ prune_expired
83
+ expired_count
84
+ end
85
+
86
+ def reinforce(intention_id, amount: 0.1)
87
+ intention = find(intention_id)
88
+ return :not_found unless intention
89
+
90
+ updated = Intention.reinforce(intention, amount: amount)
91
+ intention.merge!(updated)
92
+ sort!
93
+ :reinforced
94
+ end
95
+
96
+ def size
97
+ @intentions.size
98
+ end
99
+
100
+ def active_count
101
+ active.size
102
+ end
103
+
104
+ def stats
105
+ by_state = @intentions.each_with_object(Hash.new(0)) { |i, h| h[i[:state]] += 1 }
106
+ by_drive = active.each_with_object(Hash.new(0)) { |i, h| h[i[:drive]] += 1 }
107
+ {
108
+ total: @intentions.size,
109
+ active: active_count,
110
+ by_state: by_state,
111
+ by_drive: by_drive,
112
+ top_intention: top&.slice(:intention_id, :drive, :domain, :goal, :salience)
113
+ }
114
+ end
115
+
116
+ private
117
+
118
+ def sort!
119
+ @intentions.sort_by! { |i| -(i[:salience] || 0) }
120
+ end
121
+
122
+ def duplicate?(intention)
123
+ @intentions.any? do |existing|
124
+ Intention.active?(existing) &&
125
+ existing[:drive] == intention[:drive] &&
126
+ existing[:domain] == intention[:domain] &&
127
+ existing[:goal] == intention[:goal]
128
+ end
129
+ end
130
+
131
+ def prune_expired
132
+ @intentions.reject! { |i| i[:state] == :expired }
133
+ end
134
+ end
135
+ end
136
+ end
137
+ end
138
+ end
139
+ end
140
+ end
@@ -0,0 +1,129 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Executive
7
+ module Volition
8
+ module Runners
9
+ module Volition
10
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) &&
11
+ Legion::Extensions::Helpers.const_defined?(:Lex)
12
+
13
+ def form_intentions(tick_results: {}, cognitive_state: {}, **)
14
+ drives = Helpers::DriveSynthesizer.synthesize(
15
+ tick_results: tick_results,
16
+ cognitive_state: cognitive_state
17
+ )
18
+
19
+ new_intentions = Helpers::DriveSynthesizer.generate_intentions(drives, cognitive_state: cognitive_state)
20
+ pushed = 0
21
+ new_intentions.each do |intention|
22
+ result = intention_stack.push(intention)
23
+ pushed += 1 if result == :pushed
24
+ end
25
+
26
+ expired = intention_stack.decay_all
27
+ dominant = Helpers::DriveSynthesizer.dominant_drive(drives)
28
+ current = intention_stack.top
29
+
30
+ Legion::Logging.debug "[volition] drives=#{format_drives(drives)} pushed=#{pushed} expired=#{expired} " \
31
+ "active=#{intention_stack.active_count} top=#{current&.dig(:goal)}"
32
+
33
+ {
34
+ drives: drives,
35
+ dominant_drive: dominant,
36
+ new_intentions: pushed,
37
+ expired: expired,
38
+ active_intentions: intention_stack.active_count,
39
+ current_intention: format_intention(current)
40
+ }
41
+ end
42
+
43
+ def current_intention(**)
44
+ intention = intention_stack.top
45
+ return { intention: nil, has_will: false } unless intention
46
+
47
+ {
48
+ intention: format_intention(intention),
49
+ has_will: true,
50
+ drive: intention[:drive],
51
+ goal: intention[:goal],
52
+ salience: intention[:salience]
53
+ }
54
+ end
55
+
56
+ def complete_intention(intention_id:, **)
57
+ result = intention_stack.complete(intention_id)
58
+ Legion::Logging.info "[volition] complete intention=#{intention_id} result=#{result}"
59
+ { status: result, intention_id: intention_id }
60
+ end
61
+
62
+ def suspend_intention(intention_id:, **)
63
+ result = intention_stack.suspend(intention_id)
64
+ Legion::Logging.info "[volition] suspend intention=#{intention_id} result=#{result}"
65
+ { status: result, intention_id: intention_id }
66
+ end
67
+
68
+ def resume_intention(intention_id:, **)
69
+ result = intention_stack.resume(intention_id)
70
+ Legion::Logging.info "[volition] resume intention=#{intention_id} result=#{result}"
71
+ { status: result, intention_id: intention_id }
72
+ end
73
+
74
+ def reinforce_intention(intention_id:, amount: 0.1, **)
75
+ result = intention_stack.reinforce(intention_id, amount: amount)
76
+ { status: result, intention_id: intention_id }
77
+ end
78
+
79
+ def volition_status(**)
80
+ stats = intention_stack.stats
81
+ drives = Helpers::DriveSynthesizer.synthesize(tick_results: {}, cognitive_state: {})
82
+
83
+ {
84
+ intention_stats: stats,
85
+ current_drives: drives,
86
+ has_will: stats[:active].positive?,
87
+ dominant_drive: Helpers::DriveSynthesizer.dominant_drive(drives)
88
+ }
89
+ end
90
+
91
+ def intention_history(limit: 20, **)
92
+ all = intention_stack.intentions.last(limit)
93
+ {
94
+ intentions: all.map { |i| format_intention(i) },
95
+ count: all.size
96
+ }
97
+ end
98
+
99
+ private
100
+
101
+ def intention_stack
102
+ @intention_stack ||= Helpers::IntentionStack.new
103
+ end
104
+
105
+ def format_intention(intention)
106
+ return nil unless intention
107
+
108
+ {
109
+ intention_id: intention[:intention_id],
110
+ drive: intention[:drive],
111
+ drive_label: Helpers::Intention.drive_label(intention[:drive]),
112
+ domain: intention[:domain],
113
+ goal: intention[:goal],
114
+ salience: intention[:salience].round(3),
115
+ state: intention[:state],
116
+ age_ticks: intention[:age_ticks]
117
+ }
118
+ end
119
+
120
+ def format_drives(drives)
121
+ drives.map { |k, v| "#{k}=#{v.round(2)}" }.join(' ')
122
+ end
123
+ end
124
+ end
125
+ end
126
+ end
127
+ end
128
+ end
129
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Executive
7
+ module Volition
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/executive/volition/version'
4
+ require 'legion/extensions/agentic/executive/volition/helpers/constants'
5
+ require 'legion/extensions/agentic/executive/volition/helpers/intention'
6
+ require 'legion/extensions/agentic/executive/volition/helpers/intention_stack'
7
+ require 'legion/extensions/agentic/executive/volition/helpers/drive_synthesizer'
8
+ require 'legion/extensions/agentic/executive/volition/runners/volition'
9
+ require 'legion/extensions/agentic/executive/volition/client'
10
+
11
+ module Legion
12
+ module Extensions
13
+ module Agentic
14
+ module Executive
15
+ module Volition
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Executive
7
+ module WorkingMemory
8
+ class Client
9
+ include Runners::WorkingMemory
10
+
11
+ attr_reader :buffer
12
+
13
+ def initialize(buffer: nil, **)
14
+ @buffer = buffer || Helpers::Buffer.new
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end