lex-agentic-social 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 (235) 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-social.gemspec +30 -0
  7. data/lib/legion/extensions/agentic/social/apprenticeship/client.rb +28 -0
  8. data/lib/legion/extensions/agentic/social/apprenticeship/helpers/apprenticeship.rb +90 -0
  9. data/lib/legion/extensions/agentic/social/apprenticeship/helpers/apprenticeship_engine.rb +109 -0
  10. data/lib/legion/extensions/agentic/social/apprenticeship/helpers/apprenticeship_model.rb +93 -0
  11. data/lib/legion/extensions/agentic/social/apprenticeship/runners/cognitive_apprenticeship.rb +112 -0
  12. data/lib/legion/extensions/agentic/social/apprenticeship/version.rb +13 -0
  13. data/lib/legion/extensions/agentic/social/apprenticeship.rb +19 -0
  14. data/lib/legion/extensions/agentic/social/conflict/actors/stale_check.rb +45 -0
  15. data/lib/legion/extensions/agentic/social/conflict/client.rb +27 -0
  16. data/lib/legion/extensions/agentic/social/conflict/helpers/conflict_log.rb +70 -0
  17. data/lib/legion/extensions/agentic/social/conflict/helpers/llm_enhancer.rb +130 -0
  18. data/lib/legion/extensions/agentic/social/conflict/helpers/severity.rb +47 -0
  19. data/lib/legion/extensions/agentic/social/conflict/runners/conflict.rb +112 -0
  20. data/lib/legion/extensions/agentic/social/conflict/version.rb +13 -0
  21. data/lib/legion/extensions/agentic/social/conflict.rb +19 -0
  22. data/lib/legion/extensions/agentic/social/conscience/client.rb +26 -0
  23. data/lib/legion/extensions/agentic/social/conscience/helpers/constants.rb +53 -0
  24. data/lib/legion/extensions/agentic/social/conscience/helpers/moral_evaluator.rb +178 -0
  25. data/lib/legion/extensions/agentic/social/conscience/helpers/moral_store.rb +116 -0
  26. data/lib/legion/extensions/agentic/social/conscience/runners/conscience.rb +117 -0
  27. data/lib/legion/extensions/agentic/social/conscience/version.rb +13 -0
  28. data/lib/legion/extensions/agentic/social/conscience.rb +19 -0
  29. data/lib/legion/extensions/agentic/social/consent/actors/tier_evaluation.rb +45 -0
  30. data/lib/legion/extensions/agentic/social/consent/client.rb +27 -0
  31. data/lib/legion/extensions/agentic/social/consent/helpers/consent_map.rb +199 -0
  32. data/lib/legion/extensions/agentic/social/consent/helpers/tiers.rb +54 -0
  33. data/lib/legion/extensions/agentic/social/consent/local_migrations/20260316000010_create_consent_domains.rb +16 -0
  34. data/lib/legion/extensions/agentic/social/consent/runners/consent.rb +228 -0
  35. data/lib/legion/extensions/agentic/social/consent/version.rb +13 -0
  36. data/lib/legion/extensions/agentic/social/consent.rb +25 -0
  37. data/lib/legion/extensions/agentic/social/entrainment/client.rb +19 -0
  38. data/lib/legion/extensions/agentic/social/entrainment/helpers/constants.rb +40 -0
  39. data/lib/legion/extensions/agentic/social/entrainment/helpers/entrainment_engine.rb +120 -0
  40. data/lib/legion/extensions/agentic/social/entrainment/helpers/pairing.rb +86 -0
  41. data/lib/legion/extensions/agentic/social/entrainment/runners/cognitive_entrainment.rb +89 -0
  42. data/lib/legion/extensions/agentic/social/entrainment/version.rb +13 -0
  43. data/lib/legion/extensions/agentic/social/entrainment.rb +19 -0
  44. data/lib/legion/extensions/agentic/social/governance/actors/shadow_ai_scan.rb +19 -0
  45. data/lib/legion/extensions/agentic/social/governance/actors/vote_timeout.rb +45 -0
  46. data/lib/legion/extensions/agentic/social/governance/client.rb +27 -0
  47. data/lib/legion/extensions/agentic/social/governance/helpers/layers.rb +40 -0
  48. data/lib/legion/extensions/agentic/social/governance/helpers/proposal.rb +94 -0
  49. data/lib/legion/extensions/agentic/social/governance/runners/governance.rb +87 -0
  50. data/lib/legion/extensions/agentic/social/governance/runners/shadow_ai.rb +93 -0
  51. data/lib/legion/extensions/agentic/social/governance/version.rb +13 -0
  52. data/lib/legion/extensions/agentic/social/governance.rb +20 -0
  53. data/lib/legion/extensions/agentic/social/joint_attention/actors/decay.rb +45 -0
  54. data/lib/legion/extensions/agentic/social/joint_attention/client.rb +28 -0
  55. data/lib/legion/extensions/agentic/social/joint_attention/helpers/attention_target.rb +124 -0
  56. data/lib/legion/extensions/agentic/social/joint_attention/helpers/constants.rb +34 -0
  57. data/lib/legion/extensions/agentic/social/joint_attention/helpers/joint_focus_manager.rb +157 -0
  58. data/lib/legion/extensions/agentic/social/joint_attention/runners/joint_attention.rb +88 -0
  59. data/lib/legion/extensions/agentic/social/joint_attention/version.rb +13 -0
  60. data/lib/legion/extensions/agentic/social/joint_attention.rb +20 -0
  61. data/lib/legion/extensions/agentic/social/mentalizing/actors/decay.rb +45 -0
  62. data/lib/legion/extensions/agentic/social/mentalizing/client.rb +28 -0
  63. data/lib/legion/extensions/agentic/social/mentalizing/helpers/belief_attribution.rb +58 -0
  64. data/lib/legion/extensions/agentic/social/mentalizing/helpers/constants.rb +33 -0
  65. data/lib/legion/extensions/agentic/social/mentalizing/helpers/mental_model.rb +137 -0
  66. data/lib/legion/extensions/agentic/social/mentalizing/runners/mentalizing.rb +93 -0
  67. data/lib/legion/extensions/agentic/social/mentalizing/version.rb +13 -0
  68. data/lib/legion/extensions/agentic/social/mentalizing.rb +20 -0
  69. data/lib/legion/extensions/agentic/social/mirror/client.rb +33 -0
  70. data/lib/legion/extensions/agentic/social/mirror/helpers/constants.rb +65 -0
  71. data/lib/legion/extensions/agentic/social/mirror/helpers/mirror_engine.rb +132 -0
  72. data/lib/legion/extensions/agentic/social/mirror/helpers/mirror_event.rb +46 -0
  73. data/lib/legion/extensions/agentic/social/mirror/helpers/simulation.rb +43 -0
  74. data/lib/legion/extensions/agentic/social/mirror/runners/observe.rb +52 -0
  75. data/lib/legion/extensions/agentic/social/mirror/runners/resonance.rb +79 -0
  76. data/lib/legion/extensions/agentic/social/mirror/runners/simulate.rb +63 -0
  77. data/lib/legion/extensions/agentic/social/mirror/version.rb +13 -0
  78. data/lib/legion/extensions/agentic/social/mirror.rb +22 -0
  79. data/lib/legion/extensions/agentic/social/mirror_system/actors/decay.rb +45 -0
  80. data/lib/legion/extensions/agentic/social/mirror_system/client.rb +28 -0
  81. data/lib/legion/extensions/agentic/social/mirror_system/helpers/constants.rb +62 -0
  82. data/lib/legion/extensions/agentic/social/mirror_system/helpers/mirror_system.rb +162 -0
  83. data/lib/legion/extensions/agentic/social/mirror_system/helpers/observed_behavior.rb +67 -0
  84. data/lib/legion/extensions/agentic/social/mirror_system/runners/mirror.rb +99 -0
  85. data/lib/legion/extensions/agentic/social/mirror_system/version.rb +13 -0
  86. data/lib/legion/extensions/agentic/social/mirror_system.rb +20 -0
  87. data/lib/legion/extensions/agentic/social/moral_reasoning/client.rb +19 -0
  88. data/lib/legion/extensions/agentic/social/moral_reasoning/helpers/constants.rb +49 -0
  89. data/lib/legion/extensions/agentic/social/moral_reasoning/helpers/dilemma.rb +68 -0
  90. data/lib/legion/extensions/agentic/social/moral_reasoning/helpers/llm_enhancer.rb +140 -0
  91. data/lib/legion/extensions/agentic/social/moral_reasoning/helpers/moral_engine.rb +239 -0
  92. data/lib/legion/extensions/agentic/social/moral_reasoning/helpers/moral_foundation.rb +45 -0
  93. data/lib/legion/extensions/agentic/social/moral_reasoning/runners/moral_reasoning.rb +121 -0
  94. data/lib/legion/extensions/agentic/social/moral_reasoning/version.rb +13 -0
  95. data/lib/legion/extensions/agentic/social/moral_reasoning.rb +21 -0
  96. data/lib/legion/extensions/agentic/social/perspective_shifting/client.rb +29 -0
  97. data/lib/legion/extensions/agentic/social/perspective_shifting/helpers/constants.rb +67 -0
  98. data/lib/legion/extensions/agentic/social/perspective_shifting/helpers/perspective.rb +45 -0
  99. data/lib/legion/extensions/agentic/social/perspective_shifting/helpers/perspective_view.rb +57 -0
  100. data/lib/legion/extensions/agentic/social/perspective_shifting/helpers/shifting_engine.rb +166 -0
  101. data/lib/legion/extensions/agentic/social/perspective_shifting/runners/perspective_shifting.rb +167 -0
  102. data/lib/legion/extensions/agentic/social/perspective_shifting/version.rb +13 -0
  103. data/lib/legion/extensions/agentic/social/perspective_shifting.rb +20 -0
  104. data/lib/legion/extensions/agentic/social/social/client.rb +25 -0
  105. data/lib/legion/extensions/agentic/social/social/helpers/constants.rb +84 -0
  106. data/lib/legion/extensions/agentic/social/social/helpers/social_graph.rb +172 -0
  107. data/lib/legion/extensions/agentic/social/social/runners/social.rb +146 -0
  108. data/lib/legion/extensions/agentic/social/social/version.rb +13 -0
  109. data/lib/legion/extensions/agentic/social/social.rb +18 -0
  110. data/lib/legion/extensions/agentic/social/social_learning/client.rb +25 -0
  111. data/lib/legion/extensions/agentic/social/social_learning/helpers/constants.rb +42 -0
  112. data/lib/legion/extensions/agentic/social/social_learning/helpers/model_agent.rb +82 -0
  113. data/lib/legion/extensions/agentic/social/social_learning/helpers/observed_behavior.rb +61 -0
  114. data/lib/legion/extensions/agentic/social/social_learning/helpers/social_learning_engine.rb +134 -0
  115. data/lib/legion/extensions/agentic/social/social_learning/runners/social_learning.rb +105 -0
  116. data/lib/legion/extensions/agentic/social/social_learning/version.rb +13 -0
  117. data/lib/legion/extensions/agentic/social/social_learning.rb +20 -0
  118. data/lib/legion/extensions/agentic/social/symbiosis/client.rb +23 -0
  119. data/lib/legion/extensions/agentic/social/symbiosis/helpers/constants.rb +50 -0
  120. data/lib/legion/extensions/agentic/social/symbiosis/helpers/ecosystem.rb +113 -0
  121. data/lib/legion/extensions/agentic/social/symbiosis/helpers/symbiosis_engine.rb +104 -0
  122. data/lib/legion/extensions/agentic/social/symbiosis/helpers/symbiotic_bond.rb +112 -0
  123. data/lib/legion/extensions/agentic/social/symbiosis/runners/cognitive_symbiosis.rb +101 -0
  124. data/lib/legion/extensions/agentic/social/symbiosis/version.rb +13 -0
  125. data/lib/legion/extensions/agentic/social/symbiosis.rb +22 -0
  126. data/lib/legion/extensions/agentic/social/theory_of_mind/client.rb +26 -0
  127. data/lib/legion/extensions/agentic/social/theory_of_mind/helpers/agent_model.rb +173 -0
  128. data/lib/legion/extensions/agentic/social/theory_of_mind/helpers/constants.rb +70 -0
  129. data/lib/legion/extensions/agentic/social/theory_of_mind/helpers/mental_state_tracker.rb +169 -0
  130. data/lib/legion/extensions/agentic/social/theory_of_mind/runners/theory_of_mind.rb +159 -0
  131. data/lib/legion/extensions/agentic/social/theory_of_mind/version.rb +13 -0
  132. data/lib/legion/extensions/agentic/social/theory_of_mind.rb +19 -0
  133. data/lib/legion/extensions/agentic/social/trust/actors/decay.rb +45 -0
  134. data/lib/legion/extensions/agentic/social/trust/client.rb +27 -0
  135. data/lib/legion/extensions/agentic/social/trust/helpers/trust_map.rb +160 -0
  136. data/lib/legion/extensions/agentic/social/trust/helpers/trust_model.rb +52 -0
  137. data/lib/legion/extensions/agentic/social/trust/local_migrations/20260316000020_create_trust_entries.rb +23 -0
  138. data/lib/legion/extensions/agentic/social/trust/runners/trust.rb +80 -0
  139. data/lib/legion/extensions/agentic/social/trust/version.rb +13 -0
  140. data/lib/legion/extensions/agentic/social/trust.rb +25 -0
  141. data/lib/legion/extensions/agentic/social/version.rb +11 -0
  142. data/lib/legion/extensions/agentic/social.rb +34 -0
  143. data/spec/legion/extensions/agentic/social/apprenticeship/client_spec.rb +20 -0
  144. data/spec/legion/extensions/agentic/social/apprenticeship/cognitive_apprenticeship_spec.rb +11 -0
  145. data/spec/legion/extensions/agentic/social/apprenticeship/helpers/apprenticeship_engine_spec.rb +146 -0
  146. data/spec/legion/extensions/agentic/social/apprenticeship/helpers/apprenticeship_model_spec.rb +124 -0
  147. data/spec/legion/extensions/agentic/social/apprenticeship/helpers/apprenticeship_spec.rb +136 -0
  148. data/spec/legion/extensions/agentic/social/apprenticeship/runners/cognitive_apprenticeship_spec.rb +154 -0
  149. data/spec/legion/extensions/agentic/social/conflict/actors/stale_check_spec.rb +45 -0
  150. data/spec/legion/extensions/agentic/social/conflict/client_spec.rb +15 -0
  151. data/spec/legion/extensions/agentic/social/conflict/helpers/conflict_log_spec.rb +232 -0
  152. data/spec/legion/extensions/agentic/social/conflict/helpers/llm_enhancer_spec.rb +189 -0
  153. data/spec/legion/extensions/agentic/social/conflict/helpers/severity_spec.rb +215 -0
  154. data/spec/legion/extensions/agentic/social/conflict/runners/conflict_spec.rb +151 -0
  155. data/spec/legion/extensions/agentic/social/conscience/client_spec.rb +58 -0
  156. data/spec/legion/extensions/agentic/social/conscience/helpers/constants_spec.rb +124 -0
  157. data/spec/legion/extensions/agentic/social/conscience/helpers/moral_evaluator_spec.rb +253 -0
  158. data/spec/legion/extensions/agentic/social/conscience/helpers/moral_store_spec.rb +230 -0
  159. data/spec/legion/extensions/agentic/social/conscience/runners/conscience_spec.rb +239 -0
  160. data/spec/legion/extensions/agentic/social/consent/actors/tier_evaluation_spec.rb +46 -0
  161. data/spec/legion/extensions/agentic/social/consent/client_spec.rb +33 -0
  162. data/spec/legion/extensions/agentic/social/consent/helpers/tiers_spec.rb +49 -0
  163. data/spec/legion/extensions/agentic/social/consent/local_persistence_spec.rb +234 -0
  164. data/spec/legion/extensions/agentic/social/consent/runners/consent_spec.rb +224 -0
  165. data/spec/legion/extensions/agentic/social/entrainment/client_spec.rb +21 -0
  166. data/spec/legion/extensions/agentic/social/entrainment/helpers/entrainment_engine_spec.rb +116 -0
  167. data/spec/legion/extensions/agentic/social/entrainment/helpers/pairing_spec.rb +103 -0
  168. data/spec/legion/extensions/agentic/social/entrainment/runners/cognitive_entrainment_spec.rb +87 -0
  169. data/spec/legion/extensions/agentic/social/governance/actors/vote_timeout_spec.rb +45 -0
  170. data/spec/legion/extensions/agentic/social/governance/client_spec.rb +14 -0
  171. data/spec/legion/extensions/agentic/social/governance/helpers/layers_spec.rb +190 -0
  172. data/spec/legion/extensions/agentic/social/governance/helpers/proposal_spec.rb +188 -0
  173. data/spec/legion/extensions/agentic/social/governance/runners/governance_spec.rb +101 -0
  174. data/spec/legion/extensions/agentic/social/governance/runners/shadow_ai_spec.rb +65 -0
  175. data/spec/legion/extensions/agentic/social/joint_attention/client_spec.rb +36 -0
  176. data/spec/legion/extensions/agentic/social/joint_attention/helpers/attention_target_spec.rb +258 -0
  177. data/spec/legion/extensions/agentic/social/joint_attention/helpers/joint_focus_manager_spec.rb +238 -0
  178. data/spec/legion/extensions/agentic/social/joint_attention/runners/joint_attention_spec.rb +228 -0
  179. data/spec/legion/extensions/agentic/social/mentalizing/client_spec.rb +19 -0
  180. data/spec/legion/extensions/agentic/social/mentalizing/helpers/belief_attribution_spec.rb +108 -0
  181. data/spec/legion/extensions/agentic/social/mentalizing/helpers/mental_model_spec.rb +179 -0
  182. data/spec/legion/extensions/agentic/social/mentalizing/runners/mentalizing_spec.rb +162 -0
  183. data/spec/legion/extensions/agentic/social/mirror/client_spec.rb +92 -0
  184. data/spec/legion/extensions/agentic/social/mirror/helpers/constants_spec.rb +123 -0
  185. data/spec/legion/extensions/agentic/social/mirror/helpers/mirror_engine_spec.rb +217 -0
  186. data/spec/legion/extensions/agentic/social/mirror/helpers/mirror_event_spec.rb +102 -0
  187. data/spec/legion/extensions/agentic/social/mirror/helpers/simulation_spec.rb +100 -0
  188. data/spec/legion/extensions/agentic/social/mirror/runners/observe_spec.rb +77 -0
  189. data/spec/legion/extensions/agentic/social/mirror/runners/resonance_spec.rb +123 -0
  190. data/spec/legion/extensions/agentic/social/mirror/runners/simulate_spec.rb +103 -0
  191. data/spec/legion/extensions/agentic/social/mirror_system/client_spec.rb +40 -0
  192. data/spec/legion/extensions/agentic/social/mirror_system/helpers/mirror_system_spec.rb +144 -0
  193. data/spec/legion/extensions/agentic/social/mirror_system/helpers/observed_behavior_spec.rb +98 -0
  194. data/spec/legion/extensions/agentic/social/mirror_system/runners/mirror_spec.rb +122 -0
  195. data/spec/legion/extensions/agentic/social/moral_reasoning/client_spec.rb +34 -0
  196. data/spec/legion/extensions/agentic/social/moral_reasoning/helpers/dilemma_spec.rb +108 -0
  197. data/spec/legion/extensions/agentic/social/moral_reasoning/helpers/llm_enhancer_spec.rb +232 -0
  198. data/spec/legion/extensions/agentic/social/moral_reasoning/helpers/moral_engine_spec.rb +266 -0
  199. data/spec/legion/extensions/agentic/social/moral_reasoning/helpers/moral_foundation_spec.rb +70 -0
  200. data/spec/legion/extensions/agentic/social/moral_reasoning/runners/moral_reasoning_spec.rb +275 -0
  201. data/spec/legion/extensions/agentic/social/perspective_shifting/client_spec.rb +30 -0
  202. data/spec/legion/extensions/agentic/social/perspective_shifting/helpers/constants_spec.rb +99 -0
  203. data/spec/legion/extensions/agentic/social/perspective_shifting/helpers/perspective_spec.rb +77 -0
  204. data/spec/legion/extensions/agentic/social/perspective_shifting/helpers/perspective_view_spec.rb +105 -0
  205. data/spec/legion/extensions/agentic/social/perspective_shifting/helpers/shifting_engine_spec.rb +246 -0
  206. data/spec/legion/extensions/agentic/social/perspective_shifting/runners/perspective_shifting_spec.rb +277 -0
  207. data/spec/legion/extensions/agentic/social/social/client_spec.rb +72 -0
  208. data/spec/legion/extensions/agentic/social/social/helpers/constants_spec.rb +99 -0
  209. data/spec/legion/extensions/agentic/social/social/helpers/social_graph_spec.rb +322 -0
  210. data/spec/legion/extensions/agentic/social/social/runners/social_spec.rb +220 -0
  211. data/spec/legion/extensions/agentic/social/social_learning/client_spec.rb +25 -0
  212. data/spec/legion/extensions/agentic/social/social_learning/helpers/constants_spec.rb +44 -0
  213. data/spec/legion/extensions/agentic/social/social_learning/helpers/model_agent_spec.rb +120 -0
  214. data/spec/legion/extensions/agentic/social/social_learning/helpers/observed_behavior_spec.rb +81 -0
  215. data/spec/legion/extensions/agentic/social/social_learning/helpers/social_learning_engine_spec.rb +196 -0
  216. data/spec/legion/extensions/agentic/social/social_learning/runners/social_learning_spec.rb +150 -0
  217. data/spec/legion/extensions/agentic/social/symbiosis/client_spec.rb +45 -0
  218. data/spec/legion/extensions/agentic/social/symbiosis/helpers/constants_spec.rb +73 -0
  219. data/spec/legion/extensions/agentic/social/symbiosis/helpers/ecosystem_spec.rb +185 -0
  220. data/spec/legion/extensions/agentic/social/symbiosis/helpers/symbiosis_engine_spec.rb +182 -0
  221. data/spec/legion/extensions/agentic/social/symbiosis/helpers/symbiotic_bond_spec.rb +209 -0
  222. data/spec/legion/extensions/agentic/social/symbiosis/runners/cognitive_symbiosis_spec.rb +182 -0
  223. data/spec/legion/extensions/agentic/social/theory_of_mind/client_spec.rb +63 -0
  224. data/spec/legion/extensions/agentic/social/theory_of_mind/helpers/agent_model_spec.rb +244 -0
  225. data/spec/legion/extensions/agentic/social/theory_of_mind/helpers/constants_spec.rb +71 -0
  226. data/spec/legion/extensions/agentic/social/theory_of_mind/helpers/mental_state_tracker_spec.rb +228 -0
  227. data/spec/legion/extensions/agentic/social/theory_of_mind/runners/theory_of_mind_spec.rb +221 -0
  228. data/spec/legion/extensions/agentic/social/trust/actors/decay_spec.rb +62 -0
  229. data/spec/legion/extensions/agentic/social/trust/client_spec.rb +17 -0
  230. data/spec/legion/extensions/agentic/social/trust/helpers/trust_map_spec.rb +299 -0
  231. data/spec/legion/extensions/agentic/social/trust/helpers/trust_model_spec.rb +179 -0
  232. data/spec/legion/extensions/agentic/social/trust/local_persistence_spec.rb +359 -0
  233. data/spec/legion/extensions/agentic/social/trust/runners/trust_spec.rb +84 -0
  234. data/spec/spec_helper.rb +54 -0
  235. metadata +319 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 80ee16f8854bb04f18fc39c15b9c6b32b5332ce7ecde6f25258fe897bce3116c
4
+ data.tar.gz: dbff7513ce10185e77b74cf224a74550ce6bc356a1f170e33305f23190691951
5
+ SHA512:
6
+ metadata.gz: 402582867dcf379985efdb90d1763448d57c1158662cd65f2862b7765ecb7767933df2deee9f24381b9197fa8ae85fe2a2191325100215ac224340f184574768
7
+ data.tar.gz: 5dd65fa4d350317c6fe6fe0f7e330dd507c1b678726d106f688dccd98ea4233689755e62e9dd7d42c446fb2d80c38e2df930e86964072482d7968e2929732cbb
data/CHANGELOG.md ADDED
@@ -0,0 +1,12 @@
1
+ # Changelog
2
+
3
+ ## [Unreleased]
4
+
5
+ ## [0.1.0] - 2026-03-18
6
+
7
+ ### Added
8
+ - Initial release as domain consolidation gem
9
+ - Consolidated source extensions into unified domain gem under `Legion::Extensions::Agentic::<Domain>`
10
+ - All sub-modules loaded from single entry point
11
+ - Full spec suite with zero failures
12
+ - RuboCop compliance across all files
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Matthew Iverson
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,13 @@
1
+ # lex-agentic-social
2
+
3
+ LEX agentic social domain: empathy, social cognition, theory of mind
4
+
5
+ ## Sub-modules
6
+
7
+ *(populated as extensions are consolidated)*
8
+
9
+ ## Installation
10
+
11
+ ```ruby
12
+ gem 'lex-agentic-social'
13
+ ```
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'lib/legion/extensions/agentic/social/version'
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = 'lex-agentic-social'
7
+ spec.version = Legion::Extensions::Agentic::Social::VERSION
8
+ spec.authors = ['Esity']
9
+ spec.email = ['matthewdiverson@gmail.com']
10
+
11
+ spec.summary = 'LEX Agentic Social'
12
+ spec.description = 'LEX agentic social domain: empathy, social cognition, theory of mind'
13
+ spec.homepage = 'https://github.com/LegionIO/lex-agentic-social'
14
+ spec.license = 'MIT'
15
+ spec.required_ruby_version = '>= 3.4'
16
+
17
+ spec.metadata['homepage_uri'] = spec.homepage
18
+ spec.metadata['source_code_uri'] = spec.homepage
19
+ spec.metadata['changelog_uri'] = "#{spec.homepage}/blob/main/CHANGELOG.md"
20
+ spec.metadata['rubygems_mfa_required'] = 'true'
21
+
22
+ spec.files = Dir.chdir(__dir__) do
23
+ Dir.glob('{lib,spec}/**/*.rb') + %w[lex-agentic-social.gemspec Gemfile LICENSE README.md CHANGELOG.md]
24
+ end
25
+ spec.require_paths = ['lib']
26
+
27
+ spec.add_development_dependency 'rspec', '~> 3.13'
28
+ spec.add_development_dependency 'rubocop', '~> 1.60'
29
+ spec.add_development_dependency 'rubocop-rspec', '~> 2.26'
30
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'legion/extensions/agentic/social/apprenticeship/helpers/apprenticeship_model'
4
+ require 'legion/extensions/agentic/social/apprenticeship/helpers/apprenticeship'
5
+ require 'legion/extensions/agentic/social/apprenticeship/helpers/apprenticeship_engine'
6
+ require 'legion/extensions/agentic/social/apprenticeship/runners/cognitive_apprenticeship'
7
+
8
+ module Legion
9
+ module Extensions
10
+ module Agentic
11
+ module Social
12
+ module Apprenticeship
13
+ class Client
14
+ include Runners::CognitiveApprenticeship
15
+
16
+ def initialize(**)
17
+ @engine = Helpers::ApprenticeshipEngine.new
18
+ end
19
+
20
+ private
21
+
22
+ attr_reader :engine
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,90 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Social
7
+ module Apprenticeship
8
+ module Helpers
9
+ class Apprenticeship
10
+ include ApprenticeshipModel
11
+
12
+ attr_reader :id, :skill_name, :domain, :mentor_id, :apprentice_id,
13
+ :mastery, :session_count, :created_at, :last_session_at
14
+
15
+ def initialize(skill_name:, domain:, mentor_id:, apprentice_id:)
16
+ data = ApprenticeshipModel.new_apprenticeship(
17
+ skill_name: skill_name,
18
+ domain: domain,
19
+ mentor_id: mentor_id,
20
+ apprentice_id: apprentice_id
21
+ )
22
+ @id = data[:id]
23
+ @skill_name = data[:skill_name]
24
+ @domain = data[:domain]
25
+ @mentor_id = data[:mentor_id]
26
+ @apprentice_id = data[:apprentice_id]
27
+ @mastery = data[:mastery]
28
+ @session_count = data[:session_count]
29
+ @created_at = data[:created_at]
30
+ @last_session_at = data[:last_session_at]
31
+ end
32
+
33
+ def current_phase
34
+ ApprenticeshipModel.phase_for(@mastery)
35
+ end
36
+
37
+ def mastery_label
38
+ ApprenticeshipModel.mastery_label_for(@mastery)
39
+ end
40
+
41
+ def graduated?
42
+ @mastery >= ApprenticeshipModel::MASTERY_THRESHOLD
43
+ end
44
+
45
+ def recommended_method
46
+ ApprenticeshipModel.phase_for(@mastery)
47
+ end
48
+
49
+ def learn!(method:, success:)
50
+ multiplier = case method
51
+ when :exploration then ApprenticeshipModel::EXPLORATION_MULTIPLIER
52
+ when :coaching then ApprenticeshipModel::COACHING_MULTIPLIER
53
+ else 1.0
54
+ end
55
+
56
+ gain = success ? ApprenticeshipModel::LEARNING_GAIN * multiplier : 0.0
57
+ @mastery = ApprenticeshipModel.clamp_mastery(@mastery + gain)
58
+ @session_count += 1
59
+ @last_session_at = Time.now.utc
60
+ self
61
+ end
62
+
63
+ def decay!
64
+ @mastery = ApprenticeshipModel.clamp_mastery(@mastery - ApprenticeshipModel::DECAY_RATE)
65
+ self
66
+ end
67
+
68
+ def to_h
69
+ {
70
+ id: @id,
71
+ skill_name: @skill_name,
72
+ domain: @domain,
73
+ mentor_id: @mentor_id,
74
+ apprentice_id: @apprentice_id,
75
+ mastery: @mastery,
76
+ current_phase: current_phase,
77
+ mastery_label: mastery_label,
78
+ graduated: graduated?,
79
+ session_count: @session_count,
80
+ created_at: @created_at,
81
+ last_session_at: @last_session_at
82
+ }
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,109 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Social
7
+ module Apprenticeship
8
+ module Helpers
9
+ class ApprenticeshipEngine
10
+ def initialize
11
+ @apprenticeships = {}
12
+ @sessions = []
13
+ end
14
+
15
+ def create_apprenticeship(skill_name:, domain:, mentor_id:, apprentice_id:)
16
+ return nil if @apprenticeships.size >= ApprenticeshipModel::MAX_APPRENTICESHIPS
17
+
18
+ appr = Apprenticeship.new(
19
+ skill_name: skill_name,
20
+ domain: domain,
21
+ mentor_id: mentor_id,
22
+ apprentice_id: apprentice_id
23
+ )
24
+ @apprenticeships[appr.id] = appr
25
+ appr
26
+ end
27
+
28
+ def conduct_session(apprenticeship_id:, method:, success:)
29
+ appr = @apprenticeships[apprenticeship_id]
30
+ return nil unless appr
31
+
32
+ appr.learn!(method: method, success: success)
33
+ record_session(apprenticeship_id: apprenticeship_id, method: method, success: success)
34
+ appr
35
+ end
36
+
37
+ def recommend_method(apprenticeship_id:)
38
+ appr = @apprenticeships[apprenticeship_id]
39
+ return nil unless appr
40
+
41
+ appr.recommended_method
42
+ end
43
+
44
+ def graduated_apprenticeships
45
+ @apprenticeships.values.select(&:graduated?)
46
+ end
47
+
48
+ def active_apprenticeships
49
+ @apprenticeships.values.reject(&:graduated?)
50
+ end
51
+
52
+ def by_mentor(mentor_id:)
53
+ @apprenticeships.values.select { |a| a.mentor_id == mentor_id }
54
+ end
55
+
56
+ def by_apprentice(apprentice_id:)
57
+ @apprenticeships.values.select { |a| a.apprentice_id == apprentice_id }
58
+ end
59
+
60
+ def by_domain(domain:)
61
+ @apprenticeships.values.select { |a| a.domain == domain }
62
+ end
63
+
64
+ def decay_all
65
+ @apprenticeships.each_value(&:decay!)
66
+ @apprenticeships.size
67
+ end
68
+
69
+ def get(apprenticeship_id)
70
+ @apprenticeships[apprenticeship_id]
71
+ end
72
+
73
+ def count
74
+ @apprenticeships.size
75
+ end
76
+
77
+ def sessions
78
+ @sessions.dup
79
+ end
80
+
81
+ def to_h
82
+ {
83
+ total: @apprenticeships.size,
84
+ active: active_apprenticeships.size,
85
+ graduated: graduated_apprenticeships.size,
86
+ sessions: @sessions.size
87
+ }
88
+ end
89
+
90
+ private
91
+
92
+ def record_session(apprenticeship_id:, method:, success:)
93
+ return if @sessions.size >= ApprenticeshipModel::MAX_SESSIONS
94
+
95
+ @sessions << {
96
+ apprenticeship_id: apprenticeship_id,
97
+ method: method,
98
+ success: success,
99
+ recorded_at: Time.now.utc
100
+ }
101
+ @sessions.shift while @sessions.size > ApprenticeshipModel::MAX_HISTORY
102
+ end
103
+ end
104
+ end
105
+ end
106
+ end
107
+ end
108
+ end
109
+ end
@@ -0,0 +1,93 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'securerandom'
4
+
5
+ module Legion
6
+ module Extensions
7
+ module Agentic
8
+ module Social
9
+ module Apprenticeship
10
+ module Helpers
11
+ module ApprenticeshipModel
12
+ # Capacity limits
13
+ MAX_APPRENTICESHIPS = 100
14
+ MAX_SESSIONS = 500
15
+ MAX_HISTORY = 300
16
+
17
+ # Mastery defaults and bounds
18
+ DEFAULT_MASTERY = 0.1
19
+ MASTERY_FLOOR = 0.0
20
+ MASTERY_CEILING = 1.0
21
+ MASTERY_THRESHOLD = 0.85
22
+ PHASE_THRESHOLD = 0.5
23
+
24
+ # Learning dynamics
25
+ LEARNING_GAIN = 0.08
26
+ COACHING_MULTIPLIER = 1.5
27
+ EXPLORATION_MULTIPLIER = 2.0
28
+ DECAY_RATE = 0.01
29
+
30
+ # Collins' six instructional methods
31
+ METHODS = %i[modeling coaching scaffolding articulation reflection exploration].freeze
32
+
33
+ # Phase labels derived from mastery range
34
+ PHASE_LABELS = {
35
+ (0.0...0.2) => :modeling,
36
+ (0.2...0.4) => :coaching,
37
+ (0.4...0.6) => :scaffolding,
38
+ (0.6...0.75) => :articulation,
39
+ (0.75...0.85) => :reflection,
40
+ (0.85..1.0) => :exploration
41
+ }.freeze
42
+
43
+ # Mastery level labels
44
+ MASTERY_LABELS = {
45
+ (0.8..) => :expert,
46
+ (0.6...0.8) => :proficient,
47
+ (0.4...0.6) => :intermediate,
48
+ (0.2...0.4) => :apprentice,
49
+ (..0.2) => :novice
50
+ }.freeze
51
+
52
+ module_function
53
+
54
+ def phase_for(mastery)
55
+ PHASE_LABELS.each do |range, phase|
56
+ return phase if range.cover?(mastery)
57
+ end
58
+ :exploration
59
+ end
60
+
61
+ def mastery_label_for(mastery)
62
+ MASTERY_LABELS.each do |range, label|
63
+ return label if range.cover?(mastery)
64
+ end
65
+ :expert
66
+ end
67
+
68
+ def clamp_mastery(value)
69
+ value.clamp(MASTERY_FLOOR, MASTERY_CEILING)
70
+ end
71
+
72
+ def new_apprenticeship(skill_name:, domain:, mentor_id:, apprentice_id:)
73
+ now = Time.now.utc
74
+ {
75
+ id: SecureRandom.uuid,
76
+ skill_name: skill_name,
77
+ domain: domain,
78
+ mentor_id: mentor_id,
79
+ apprentice_id: apprentice_id,
80
+ mastery: DEFAULT_MASTERY,
81
+ current_phase: phase_for(DEFAULT_MASTERY),
82
+ session_count: 0,
83
+ created_at: now,
84
+ last_session_at: nil
85
+ }
86
+ end
87
+ end
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,112 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Social
7
+ module Apprenticeship
8
+ module Runners
9
+ module CognitiveApprenticeship
10
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) &&
11
+ Legion::Extensions::Helpers.const_defined?(:Lex)
12
+
13
+ def create_apprenticeship(skill_name:, domain:, mentor_id:, apprentice_id:, **)
14
+ return { success: false, reason: :param_too_short } if [skill_name, domain, mentor_id, apprentice_id].any? { |p| p.to_s.length < 3 }
15
+
16
+ appr = engine.create_apprenticeship(
17
+ skill_name: skill_name,
18
+ domain: domain,
19
+ mentor_id: mentor_id,
20
+ apprentice_id: apprentice_id
21
+ )
22
+
23
+ if appr
24
+ Legion::Logging.info "[cognitive_apprenticeship] created id=#{appr.id} skill=#{skill_name} domain=#{domain}"
25
+ { success: true, apprenticeship: appr.to_h }
26
+ else
27
+ Legion::Logging.warn '[cognitive_apprenticeship] create failed: capacity reached'
28
+ { success: false, reason: :capacity_reached }
29
+ end
30
+ end
31
+
32
+ def conduct_apprenticeship_session(apprenticeship_id:, method:, success:, **)
33
+ return { success: false, reason: :invalid_method } unless Helpers::ApprenticeshipModel::METHODS.include?(method.to_sym)
34
+
35
+ appr = engine.conduct_session(
36
+ apprenticeship_id: apprenticeship_id,
37
+ method: method.to_sym,
38
+ success: success
39
+ )
40
+
41
+ if appr
42
+ Legion::Logging.debug "[cognitive_apprenticeship] session id=#{apprenticeship_id} method=#{method} " \
43
+ "success=#{success} mastery=#{appr.mastery.round(3)}"
44
+ { success: true, apprenticeship: appr.to_h }
45
+ else
46
+ { success: false, reason: :not_found }
47
+ end
48
+ end
49
+
50
+ def recommend_apprenticeship_method(apprenticeship_id:, **)
51
+ method = engine.recommend_method(apprenticeship_id: apprenticeship_id)
52
+
53
+ if method
54
+ Legion::Logging.debug "[cognitive_apprenticeship] recommend id=#{apprenticeship_id} method=#{method}"
55
+ { success: true, apprenticeship_id: apprenticeship_id, recommended_method: method }
56
+ else
57
+ { success: false, reason: :not_found }
58
+ end
59
+ end
60
+
61
+ def graduated_apprenticeships(**)
62
+ list = engine.graduated_apprenticeships
63
+ Legion::Logging.debug "[cognitive_apprenticeship] graduated count=#{list.size}"
64
+ { success: true, apprenticeships: list.map(&:to_h), count: list.size }
65
+ end
66
+
67
+ def active_apprenticeships(**)
68
+ list = engine.active_apprenticeships
69
+ Legion::Logging.debug "[cognitive_apprenticeship] active count=#{list.size}"
70
+ { success: true, apprenticeships: list.map(&:to_h), count: list.size }
71
+ end
72
+
73
+ def mentor_apprenticeships(mentor_id:, **)
74
+ list = engine.by_mentor(mentor_id: mentor_id)
75
+ Legion::Logging.debug "[cognitive_apprenticeship] mentor=#{mentor_id} count=#{list.size}"
76
+ { success: true, mentor_id: mentor_id, apprenticeships: list.map(&:to_h), count: list.size }
77
+ end
78
+
79
+ def apprentice_apprenticeships(apprentice_id:, **)
80
+ list = engine.by_apprentice(apprentice_id: apprentice_id)
81
+ Legion::Logging.debug "[cognitive_apprenticeship] apprentice=#{apprentice_id} count=#{list.size}"
82
+ { success: true, apprentice_id: apprentice_id, apprenticeships: list.map(&:to_h), count: list.size }
83
+ end
84
+
85
+ def domain_apprenticeships(domain:, **)
86
+ list = engine.by_domain(domain: domain)
87
+ Legion::Logging.debug "[cognitive_apprenticeship] domain=#{domain} count=#{list.size}"
88
+ { success: true, domain: domain, apprenticeships: list.map(&:to_h), count: list.size }
89
+ end
90
+
91
+ def update_cognitive_apprenticeship(apprenticeship_id:, method:, success:, **)
92
+ conduct_apprenticeship_session(apprenticeship_id: apprenticeship_id, method: method, success: success)
93
+ end
94
+
95
+ def cognitive_apprenticeship_stats(**)
96
+ stats = engine.to_h
97
+ Legion::Logging.debug "[cognitive_apprenticeship] stats=#{stats.inspect}"
98
+ { success: true }.merge(stats)
99
+ end
100
+
101
+ private
102
+
103
+ def engine
104
+ @engine ||= Helpers::ApprenticeshipEngine.new
105
+ end
106
+ end
107
+ end
108
+ end
109
+ end
110
+ end
111
+ end
112
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Agentic
6
+ module Social
7
+ module Apprenticeship
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/social/apprenticeship/version'
4
+ require 'legion/extensions/agentic/social/apprenticeship/helpers/apprenticeship_model'
5
+ require 'legion/extensions/agentic/social/apprenticeship/helpers/apprenticeship'
6
+ require 'legion/extensions/agentic/social/apprenticeship/helpers/apprenticeship_engine'
7
+ require 'legion/extensions/agentic/social/apprenticeship/runners/cognitive_apprenticeship'
8
+ require 'legion/extensions/agentic/social/apprenticeship/client'
9
+
10
+ module Legion
11
+ module Extensions
12
+ module Agentic
13
+ module Social
14
+ module Apprenticeship
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'legion/extensions/actors/every'
4
+
5
+ module Legion
6
+ module Extensions
7
+ module Agentic
8
+ module Social
9
+ module Conflict
10
+ module Actor
11
+ class StaleCheck < Legion::Extensions::Actors::Every
12
+ def runner_class
13
+ Legion::Extensions::Agentic::Social::Conflict::Runners::Conflict
14
+ end
15
+
16
+ def runner_function
17
+ 'check_stale_conflicts'
18
+ end
19
+
20
+ def time
21
+ 3600
22
+ end
23
+
24
+ def run_now?
25
+ false
26
+ end
27
+
28
+ def use_runner?
29
+ false
30
+ end
31
+
32
+ def check_subtask?
33
+ false
34
+ end
35
+
36
+ def generate_task?
37
+ false
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'legion/extensions/agentic/social/conflict/helpers/severity'
4
+ require 'legion/extensions/agentic/social/conflict/helpers/conflict_log'
5
+ require 'legion/extensions/agentic/social/conflict/runners/conflict'
6
+
7
+ module Legion
8
+ module Extensions
9
+ module Agentic
10
+ module Social
11
+ module Conflict
12
+ class Client
13
+ include Runners::Conflict
14
+
15
+ def initialize(**)
16
+ @conflict_log = Helpers::ConflictLog.new
17
+ end
18
+
19
+ private
20
+
21
+ attr_reader :conflict_log
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end