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,146 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Executive
7
+ module ProspectiveMemory
8
+ module Runners
9
+ module ProspectiveMemory
10
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) &&
11
+ Legion::Extensions::Helpers.const_defined?(:Lex)
12
+
13
+ def create_intention(description:, trigger_type:, trigger_condition:,
14
+ urgency: Helpers::Constants::DEFAULT_URGENCY,
15
+ domain: nil, expires_at: nil, **)
16
+ unless Helpers::Constants::TRIGGER_TYPES.include?(trigger_type)
17
+ return { error: :invalid_trigger_type, valid_types: Helpers::Constants::TRIGGER_TYPES }
18
+ end
19
+
20
+ intention = prospective_engine.create_intention(
21
+ description: description,
22
+ trigger_type: trigger_type,
23
+ trigger_condition: trigger_condition,
24
+ urgency: urgency,
25
+ domain: domain,
26
+ expires_at: expires_at
27
+ )
28
+
29
+ Legion::Logging.debug "[prospective_memory] created intention id=#{intention.id[0..7]} " \
30
+ "type=#{trigger_type} urgency=#{intention.urgency.round(2)}"
31
+
32
+ { created: true, intention: intention.to_h }
33
+ end
34
+
35
+ def monitor_intention(intention_id:, **)
36
+ intention = prospective_engine.monitor_intention(intention_id: intention_id)
37
+ if intention
38
+ Legion::Logging.debug "[prospective_memory] monitoring intention id=#{intention_id[0..7]}"
39
+ { updated: true, intention: intention.to_h }
40
+ else
41
+ { updated: false, reason: :not_found }
42
+ end
43
+ end
44
+
45
+ def trigger_intention(intention_id:, **)
46
+ intention = prospective_engine.trigger_intention(intention_id: intention_id)
47
+ if intention
48
+ Legion::Logging.info "[prospective_memory] triggered intention id=#{intention_id[0..7]}"
49
+ { updated: true, intention: intention.to_h }
50
+ else
51
+ { updated: false, reason: :not_found }
52
+ end
53
+ end
54
+
55
+ def execute_intention(intention_id:, **)
56
+ intention = prospective_engine.execute_intention(intention_id: intention_id)
57
+ if intention
58
+ Legion::Logging.info "[prospective_memory] executed intention id=#{intention_id[0..7]}"
59
+ { updated: true, intention: intention.to_h }
60
+ else
61
+ { updated: false, reason: :not_found }
62
+ end
63
+ end
64
+
65
+ def cancel_intention(intention_id:, **)
66
+ intention = prospective_engine.cancel_intention(intention_id: intention_id)
67
+ if intention
68
+ Legion::Logging.debug "[prospective_memory] cancelled intention id=#{intention_id[0..7]}"
69
+ { updated: true, intention: intention.to_h }
70
+ else
71
+ { updated: false, reason: :not_found }
72
+ end
73
+ end
74
+
75
+ def check_expirations(**)
76
+ expired_count = prospective_engine.check_expirations
77
+ Legion::Logging.debug "[prospective_memory] expiration check expired=#{expired_count}"
78
+ { expired_count: expired_count }
79
+ end
80
+
81
+ def pending_intentions(**)
82
+ intentions = prospective_engine.pending_intentions
83
+ Legion::Logging.debug "[prospective_memory] pending count=#{intentions.size}"
84
+ { intentions: intentions.map(&:to_h), count: intentions.size }
85
+ end
86
+
87
+ def monitoring_intentions(**)
88
+ intentions = prospective_engine.monitoring_intentions
89
+ Legion::Logging.debug "[prospective_memory] monitoring count=#{intentions.size}"
90
+ { intentions: intentions.map(&:to_h), count: intentions.size }
91
+ end
92
+
93
+ def triggered_intentions(**)
94
+ intentions = prospective_engine.triggered_intentions
95
+ Legion::Logging.debug "[prospective_memory] triggered count=#{intentions.size}"
96
+ { intentions: intentions.map(&:to_h), count: intentions.size }
97
+ end
98
+
99
+ def intentions_by_domain(domain:, **)
100
+ intentions = prospective_engine.by_domain(domain: domain)
101
+ Legion::Logging.debug "[prospective_memory] by_domain domain=#{domain} count=#{intentions.size}"
102
+ { intentions: intentions.map(&:to_h), count: intentions.size, domain: domain }
103
+ end
104
+
105
+ def intentions_by_urgency(min_urgency: 0.5, **)
106
+ intentions = prospective_engine.by_urgency(min_urgency: min_urgency)
107
+ Legion::Logging.debug "[prospective_memory] by_urgency min=#{min_urgency} count=#{intentions.size}"
108
+ { intentions: intentions.map(&:to_h), count: intentions.size }
109
+ end
110
+
111
+ def most_urgent_intentions(limit: 5, **)
112
+ intentions = prospective_engine.most_urgent(limit: limit)
113
+ Legion::Logging.debug "[prospective_memory] most_urgent limit=#{limit} found=#{intentions.size}"
114
+ { intentions: intentions.map(&:to_h), count: intentions.size }
115
+ end
116
+
117
+ def decay_urgency(**)
118
+ prospective_engine.decay_all_urgency
119
+ Legion::Logging.debug '[prospective_memory] urgency decay cycle complete'
120
+ { decayed: true }
121
+ end
122
+
123
+ def execution_rate(**)
124
+ rate = prospective_engine.execution_rate
125
+ Legion::Logging.debug "[prospective_memory] execution_rate=#{rate.round(4)}"
126
+ { execution_rate: rate }
127
+ end
128
+
129
+ def intention_report(**)
130
+ report = prospective_engine.intention_report
131
+ Legion::Logging.debug "[prospective_memory] report total=#{report[:total]}"
132
+ report
133
+ end
134
+
135
+ private
136
+
137
+ def prospective_engine
138
+ @prospective_engine ||= Helpers::ProspectiveEngine.new
139
+ end
140
+ end
141
+ end
142
+ end
143
+ end
144
+ end
145
+ end
146
+ 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 ProspectiveMemory
8
+ VERSION = '0.1.0'
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'legion/extensions/agentic/executive/prospective_memory/version'
4
+ require 'legion/extensions/agentic/executive/prospective_memory/helpers/constants'
5
+ require 'legion/extensions/agentic/executive/prospective_memory/helpers/intention'
6
+ require 'legion/extensions/agentic/executive/prospective_memory/helpers/prospective_engine'
7
+ require 'legion/extensions/agentic/executive/prospective_memory/runners/prospective_memory'
8
+ require 'legion/extensions/agentic/executive/prospective_memory/client'
9
+
10
+ module Legion
11
+ module Extensions
12
+ module Agentic
13
+ module Executive
14
+ module ProspectiveMemory
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Executive
7
+ module Triage
8
+ class Client
9
+ include Runners::CognitiveTriage
10
+
11
+ def initialize(engine: nil)
12
+ @default_engine = engine || Helpers::TriageEngine.new
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Executive
7
+ module Triage
8
+ module Helpers
9
+ module Constants
10
+ MAX_DEMANDS = 500
11
+ MAX_QUEUE_SIZE = 100
12
+ CAPACITY_DEFAULT = 1.0
13
+ CAPACITY_DRAIN = 0.05
14
+ CAPACITY_RESTORE = 0.03
15
+ OVERLOAD_THRESHOLD = 0.2
16
+
17
+ SEVERITY_LEVELS = %i[critical major moderate minor trivial].freeze
18
+ URGENCY_LEVELS = %i[immediate urgent soon deferred indefinite].freeze
19
+
20
+ SEVERITY_WEIGHTS = {
21
+ critical: 1.0,
22
+ major: 0.8,
23
+ moderate: 0.5,
24
+ minor: 0.3,
25
+ trivial: 0.1
26
+ }.freeze
27
+
28
+ URGENCY_WEIGHTS = {
29
+ immediate: 1.0,
30
+ urgent: 0.8,
31
+ soon: 0.5,
32
+ deferred: 0.3,
33
+ indefinite: 0.1
34
+ }.freeze
35
+
36
+ TRIAGE_LABELS = {
37
+ (0.8..) => :red,
38
+ (0.6...0.8) => :orange,
39
+ (0.4...0.6) => :yellow,
40
+ (0.2...0.4) => :green,
41
+ (..0.2) => :white
42
+ }.freeze
43
+
44
+ CAPACITY_LABELS = {
45
+ (0.8..) => :fresh,
46
+ (0.6...0.8) => :engaged,
47
+ (0.4...0.6) => :strained,
48
+ (0.2...0.4) => :depleted,
49
+ (..0.2) => :overloaded
50
+ }.freeze
51
+
52
+ QUEUE_LABELS = {
53
+ (0.8..) => :overwhelmed,
54
+ (0.6...0.8) => :heavy,
55
+ (0.4...0.6) => :moderate,
56
+ (0.2...0.4) => :light,
57
+ (..0.2) => :empty
58
+ }.freeze
59
+
60
+ def self.label_for(labels, value)
61
+ match = labels.find { |range, _| range.cover?(value) }
62
+ match&.last
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,101 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'securerandom'
4
+
5
+ module Legion
6
+ module Extensions
7
+ module Agentic
8
+ module Executive
9
+ module Triage
10
+ module Helpers
11
+ class Demand
12
+ include Constants
13
+
14
+ attr_reader :id, :description, :domain, :severity, :urgency,
15
+ :triage_score, :status, :created_at, :triaged_at
16
+
17
+ def initialize(description:, domain: :general, severity: :moderate, urgency: :soon)
18
+ @id = SecureRandom.uuid
19
+ @description = description
20
+ @domain = domain.to_sym
21
+ @severity = validate_level(severity, SEVERITY_LEVELS, :moderate)
22
+ @urgency = validate_level(urgency, URGENCY_LEVELS, :soon)
23
+ @triage_score = compute_triage_score
24
+ @status = :pending
25
+ @created_at = Time.now.utc
26
+ @triaged_at = nil
27
+ end
28
+
29
+ def triage!
30
+ @status = :triaged
31
+ @triaged_at = Time.now.utc
32
+ self
33
+ end
34
+
35
+ def defer!
36
+ @status = :deferred
37
+ self
38
+ end
39
+
40
+ def process!
41
+ @status = :processing
42
+ self
43
+ end
44
+
45
+ def complete!
46
+ @status = :completed
47
+ self
48
+ end
49
+
50
+ def drop!
51
+ @status = :dropped
52
+ self
53
+ end
54
+
55
+ def active?
56
+ %i[pending triaged processing].include?(@status)
57
+ end
58
+
59
+ def triage_label
60
+ Constants.label_for(TRIAGE_LABELS, @triage_score)
61
+ end
62
+
63
+ def red?
64
+ @triage_score >= 0.8
65
+ end
66
+
67
+ def to_h
68
+ {
69
+ id: @id,
70
+ description: @description,
71
+ domain: @domain,
72
+ severity: @severity,
73
+ urgency: @urgency,
74
+ triage_score: @triage_score,
75
+ triage_label: triage_label,
76
+ status: @status,
77
+ red: red?,
78
+ created_at: @created_at,
79
+ triaged_at: @triaged_at
80
+ }
81
+ end
82
+
83
+ private
84
+
85
+ def validate_level(level, valid_levels, default)
86
+ sym = level.to_sym
87
+ valid_levels.include?(sym) ? sym : default
88
+ end
89
+
90
+ def compute_triage_score
91
+ sev = SEVERITY_WEIGHTS.fetch(@severity, 0.5)
92
+ urg = URGENCY_WEIGHTS.fetch(@urgency, 0.5)
93
+ ((sev * 0.6) + (urg * 0.4)).round(10)
94
+ end
95
+ end
96
+ end
97
+ end
98
+ end
99
+ end
100
+ end
101
+ end
@@ -0,0 +1,150 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Executive
7
+ module Triage
8
+ module Helpers
9
+ class TriageEngine
10
+ include Constants
11
+
12
+ attr_reader :capacity
13
+
14
+ def initialize
15
+ @demands = {}
16
+ @capacity = CAPACITY_DEFAULT
17
+ end
18
+
19
+ def add_demand(description:, domain: :general, severity: :moderate, urgency: :soon)
20
+ prune_if_needed
21
+ demand = Demand.new(
22
+ description: description, domain: domain, severity: severity, urgency: urgency
23
+ )
24
+ @demands[demand.id] = demand
25
+ drain_capacity!(demand.triage_score * CAPACITY_DRAIN)
26
+ demand.triage!
27
+ demand
28
+ end
29
+
30
+ def process_demand(demand_id:)
31
+ demand = @demands[demand_id]
32
+ return nil unless demand&.active?
33
+
34
+ demand.process!
35
+ demand
36
+ end
37
+
38
+ def complete_demand(demand_id:)
39
+ demand = @demands[demand_id]
40
+ return nil unless demand
41
+
42
+ demand.complete!
43
+ restore_capacity!(CAPACITY_RESTORE)
44
+ demand
45
+ end
46
+
47
+ def defer_demand(demand_id:)
48
+ demand = @demands[demand_id]
49
+ return nil unless demand&.active?
50
+
51
+ demand.defer!
52
+ restore_capacity!(CAPACITY_RESTORE * 0.5)
53
+ demand
54
+ end
55
+
56
+ def drop_demand(demand_id:)
57
+ demand = @demands[demand_id]
58
+ return nil unless demand&.active?
59
+
60
+ demand.drop!
61
+ restore_capacity!(CAPACITY_RESTORE)
62
+ demand
63
+ end
64
+
65
+ def next_demand
66
+ active_demands.max_by(&:triage_score)
67
+ end
68
+
69
+ def active_demands = @demands.values.select(&:active?)
70
+ def red_demands = @demands.values.select(&:red?)
71
+ def completed_demands = @demands.values.select { |d| d.status == :completed }
72
+ def dropped_demands = @demands.values.select { |d| d.status == :dropped }
73
+ def deferred_demands = @demands.values.select { |d| d.status == :deferred }
74
+
75
+ def demands_by_severity(severity:)
76
+ @demands.values.select { |d| d.severity == severity.to_sym }
77
+ end
78
+
79
+ def demands_by_domain(domain:)
80
+ @demands.values.select { |d| d.domain == domain.to_sym }
81
+ end
82
+
83
+ def overloaded?
84
+ @capacity <= OVERLOAD_THRESHOLD
85
+ end
86
+
87
+ def queue_pressure
88
+ return 0.0 if @demands.empty?
89
+
90
+ (active_demands.size.to_f / MAX_QUEUE_SIZE).clamp(0.0, 1.0).round(10)
91
+ end
92
+
93
+ def capacity_label = Constants.label_for(CAPACITY_LABELS, @capacity)
94
+ def queue_label = Constants.label_for(QUEUE_LABELS, queue_pressure)
95
+
96
+ def restore_capacity!(amount = CAPACITY_RESTORE)
97
+ @capacity = (@capacity + amount).clamp(0.0, 1.0).round(10)
98
+ self
99
+ end
100
+
101
+ def triage_report
102
+ {
103
+ total_demands: @demands.size,
104
+ active_count: active_demands.size,
105
+ red_count: red_demands.size,
106
+ completed: completed_demands.size,
107
+ dropped: dropped_demands.size,
108
+ deferred: deferred_demands.size,
109
+ capacity: @capacity,
110
+ capacity_label: capacity_label,
111
+ overloaded: overloaded?,
112
+ queue_pressure: queue_pressure,
113
+ queue_label: queue_label,
114
+ next_demand: next_demand&.to_h
115
+ }
116
+ end
117
+
118
+ def to_h
119
+ {
120
+ total_demands: @demands.size,
121
+ active: active_demands.size,
122
+ capacity: @capacity,
123
+ overloaded: overloaded?
124
+ }
125
+ end
126
+
127
+ private
128
+
129
+ def drain_capacity!(amount)
130
+ @capacity = (@capacity - amount).clamp(0.0, 1.0).round(10)
131
+ end
132
+
133
+ def prune_if_needed
134
+ return if @demands.size < MAX_DEMANDS
135
+
136
+ oldest_completed = completed_demands.min_by(&:created_at)
137
+ if oldest_completed
138
+ @demands.delete(oldest_completed.id)
139
+ else
140
+ lowest = @demands.values.min_by(&:triage_score)
141
+ @demands.delete(lowest.id) if lowest
142
+ end
143
+ end
144
+ end
145
+ end
146
+ end
147
+ end
148
+ end
149
+ end
150
+ end
@@ -0,0 +1,110 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Executive
7
+ module Triage
8
+ module Runners
9
+ module CognitiveTriage
10
+ include Legion::Extensions::Helpers::Lex if defined?(Legion::Extensions::Helpers::Lex)
11
+
12
+ def add_demand(description:, domain: :general, severity: :moderate, urgency: :soon, engine: nil, **)
13
+ eng = engine || default_engine
14
+ demand = eng.add_demand(
15
+ description: description, domain: domain, severity: severity, urgency: urgency
16
+ )
17
+ { success: true, demand: demand.to_h, capacity: eng.capacity }
18
+ end
19
+
20
+ def process_demand(demand_id:, engine: nil, **)
21
+ eng = engine || default_engine
22
+ demand = eng.process_demand(demand_id: demand_id)
23
+ return { success: false, error: 'demand not found or not active' } unless demand
24
+
25
+ { success: true, demand: demand.to_h }
26
+ end
27
+
28
+ def complete_demand(demand_id:, engine: nil, **)
29
+ eng = engine || default_engine
30
+ demand = eng.complete_demand(demand_id: demand_id)
31
+ return { success: false, error: 'demand not found' } unless demand
32
+
33
+ { success: true, demand: demand.to_h, capacity: eng.capacity }
34
+ end
35
+
36
+ def defer_demand(demand_id:, engine: nil, **)
37
+ eng = engine || default_engine
38
+ demand = eng.defer_demand(demand_id: demand_id)
39
+ return { success: false, error: 'demand not found or not active' } unless demand
40
+
41
+ { success: true, demand: demand.to_h, capacity: eng.capacity }
42
+ end
43
+
44
+ def drop_demand(demand_id:, engine: nil, **)
45
+ eng = engine || default_engine
46
+ demand = eng.drop_demand(demand_id: demand_id)
47
+ return { success: false, error: 'demand not found or not active' } unless demand
48
+
49
+ { success: true, demand: demand.to_h, capacity: eng.capacity }
50
+ end
51
+
52
+ def next_demand(engine: nil, **)
53
+ eng = engine || default_engine
54
+ demand = eng.next_demand
55
+ return { success: true, found: false } unless demand
56
+
57
+ { success: true, found: true, demand: demand.to_h }
58
+ end
59
+
60
+ def active_demands(engine: nil, **)
61
+ eng = engine || default_engine
62
+ { success: true, demands: eng.active_demands.map(&:to_h), count: eng.active_demands.size }
63
+ end
64
+
65
+ def red_demands(engine: nil, **)
66
+ eng = engine || default_engine
67
+ { success: true, demands: eng.red_demands.map(&:to_h), count: eng.red_demands.size }
68
+ end
69
+
70
+ def demands_by_severity(severity:, engine: nil, **)
71
+ eng = engine || default_engine
72
+ demands = eng.demands_by_severity(severity: severity)
73
+ { success: true, demands: demands.map(&:to_h), count: demands.size }
74
+ end
75
+
76
+ def demands_by_domain(domain:, engine: nil, **)
77
+ eng = engine || default_engine
78
+ demands = eng.demands_by_domain(domain: domain)
79
+ { success: true, demands: demands.map(&:to_h), count: demands.size }
80
+ end
81
+
82
+ def capacity_status(engine: nil, **)
83
+ eng = engine || default_engine
84
+ {
85
+ success: true,
86
+ capacity: eng.capacity,
87
+ capacity_label: eng.capacity_label,
88
+ overloaded: eng.overloaded?,
89
+ queue_pressure: eng.queue_pressure,
90
+ queue_label: eng.queue_label
91
+ }
92
+ end
93
+
94
+ def triage_report(engine: nil, **)
95
+ eng = engine || default_engine
96
+ { success: true, report: eng.triage_report }
97
+ end
98
+
99
+ private
100
+
101
+ def default_engine
102
+ @default_engine ||= Helpers::TriageEngine.new
103
+ end
104
+ end
105
+ end
106
+ end
107
+ end
108
+ end
109
+ end
110
+ 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 Triage
8
+ VERSION = '0.1.0'
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'triage/version'
4
+ require_relative 'triage/helpers/constants'
5
+ require_relative 'triage/helpers/demand'
6
+ require_relative 'triage/helpers/triage_engine'
7
+ require_relative 'triage/runners/cognitive_triage'
8
+ require_relative 'triage/client'
9
+
10
+ module Legion
11
+ module Extensions
12
+ module Agentic
13
+ module Executive
14
+ module Triage
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Executive
7
+ VERSION = '0.1.0'
8
+ end
9
+ end
10
+ end
11
+ end