empathy-framework 2.4.0__py3-none-any.whl → 3.8.2__py3-none-any.whl

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 (329) hide show
  1. coach_wizards/__init__.py +13 -12
  2. coach_wizards/accessibility_wizard.py +12 -12
  3. coach_wizards/api_wizard.py +12 -12
  4. coach_wizards/base_wizard.py +26 -20
  5. coach_wizards/cicd_wizard.py +15 -13
  6. coach_wizards/code_reviewer_README.md +60 -0
  7. coach_wizards/code_reviewer_wizard.py +180 -0
  8. coach_wizards/compliance_wizard.py +12 -12
  9. coach_wizards/database_wizard.py +12 -12
  10. coach_wizards/debugging_wizard.py +12 -12
  11. coach_wizards/documentation_wizard.py +12 -12
  12. coach_wizards/generate_wizards.py +1 -2
  13. coach_wizards/localization_wizard.py +101 -19
  14. coach_wizards/migration_wizard.py +12 -12
  15. coach_wizards/monitoring_wizard.py +12 -12
  16. coach_wizards/observability_wizard.py +12 -12
  17. coach_wizards/performance_wizard.py +12 -12
  18. coach_wizards/prompt_engineering_wizard.py +661 -0
  19. coach_wizards/refactoring_wizard.py +12 -12
  20. coach_wizards/scaling_wizard.py +12 -12
  21. coach_wizards/security_wizard.py +12 -12
  22. coach_wizards/testing_wizard.py +12 -12
  23. empathy_framework-3.8.2.dist-info/METADATA +1176 -0
  24. empathy_framework-3.8.2.dist-info/RECORD +333 -0
  25. empathy_framework-3.8.2.dist-info/entry_points.txt +22 -0
  26. {empathy_framework-2.4.0.dist-info → empathy_framework-3.8.2.dist-info}/top_level.txt +5 -1
  27. empathy_healthcare_plugin/__init__.py +1 -2
  28. empathy_healthcare_plugin/monitors/__init__.py +9 -0
  29. empathy_healthcare_plugin/monitors/clinical_protocol_monitor.py +315 -0
  30. empathy_healthcare_plugin/monitors/monitoring/__init__.py +44 -0
  31. empathy_healthcare_plugin/monitors/monitoring/protocol_checker.py +300 -0
  32. empathy_healthcare_plugin/monitors/monitoring/protocol_loader.py +214 -0
  33. empathy_healthcare_plugin/monitors/monitoring/sensor_parsers.py +306 -0
  34. empathy_healthcare_plugin/monitors/monitoring/trajectory_analyzer.py +389 -0
  35. empathy_llm_toolkit/__init__.py +7 -7
  36. empathy_llm_toolkit/agent_factory/__init__.py +53 -0
  37. empathy_llm_toolkit/agent_factory/adapters/__init__.py +85 -0
  38. empathy_llm_toolkit/agent_factory/adapters/autogen_adapter.py +312 -0
  39. empathy_llm_toolkit/agent_factory/adapters/crewai_adapter.py +454 -0
  40. empathy_llm_toolkit/agent_factory/adapters/haystack_adapter.py +298 -0
  41. empathy_llm_toolkit/agent_factory/adapters/langchain_adapter.py +362 -0
  42. empathy_llm_toolkit/agent_factory/adapters/langgraph_adapter.py +333 -0
  43. empathy_llm_toolkit/agent_factory/adapters/native.py +228 -0
  44. empathy_llm_toolkit/agent_factory/adapters/wizard_adapter.py +426 -0
  45. empathy_llm_toolkit/agent_factory/base.py +305 -0
  46. empathy_llm_toolkit/agent_factory/crews/__init__.py +67 -0
  47. empathy_llm_toolkit/agent_factory/crews/code_review.py +1113 -0
  48. empathy_llm_toolkit/agent_factory/crews/health_check.py +1246 -0
  49. empathy_llm_toolkit/agent_factory/crews/refactoring.py +1128 -0
  50. empathy_llm_toolkit/agent_factory/crews/security_audit.py +1018 -0
  51. empathy_llm_toolkit/agent_factory/decorators.py +286 -0
  52. empathy_llm_toolkit/agent_factory/factory.py +558 -0
  53. empathy_llm_toolkit/agent_factory/framework.py +192 -0
  54. empathy_llm_toolkit/agent_factory/memory_integration.py +324 -0
  55. empathy_llm_toolkit/agent_factory/resilient.py +320 -0
  56. empathy_llm_toolkit/claude_memory.py +14 -15
  57. empathy_llm_toolkit/cli/__init__.py +8 -0
  58. empathy_llm_toolkit/cli/sync_claude.py +487 -0
  59. empathy_llm_toolkit/code_health.py +186 -28
  60. empathy_llm_toolkit/config/__init__.py +29 -0
  61. empathy_llm_toolkit/config/unified.py +295 -0
  62. empathy_llm_toolkit/contextual_patterns.py +11 -12
  63. empathy_llm_toolkit/core.py +168 -53
  64. empathy_llm_toolkit/git_pattern_extractor.py +17 -13
  65. empathy_llm_toolkit/levels.py +6 -13
  66. empathy_llm_toolkit/pattern_confidence.py +14 -18
  67. empathy_llm_toolkit/pattern_resolver.py +10 -12
  68. empathy_llm_toolkit/pattern_summary.py +16 -14
  69. empathy_llm_toolkit/providers.py +194 -28
  70. empathy_llm_toolkit/routing/__init__.py +32 -0
  71. empathy_llm_toolkit/routing/model_router.py +362 -0
  72. empathy_llm_toolkit/security/IMPLEMENTATION_SUMMARY.md +413 -0
  73. empathy_llm_toolkit/security/PHASE2_COMPLETE.md +384 -0
  74. empathy_llm_toolkit/security/PHASE2_SECRETS_DETECTOR_COMPLETE.md +271 -0
  75. empathy_llm_toolkit/security/QUICK_REFERENCE.md +316 -0
  76. empathy_llm_toolkit/security/README.md +262 -0
  77. empathy_llm_toolkit/security/__init__.py +62 -0
  78. empathy_llm_toolkit/security/audit_logger.py +929 -0
  79. empathy_llm_toolkit/security/audit_logger_example.py +152 -0
  80. empathy_llm_toolkit/security/pii_scrubber.py +640 -0
  81. empathy_llm_toolkit/security/secrets_detector.py +678 -0
  82. empathy_llm_toolkit/security/secrets_detector_example.py +304 -0
  83. empathy_llm_toolkit/security/secure_memdocs.py +1192 -0
  84. empathy_llm_toolkit/security/secure_memdocs_example.py +278 -0
  85. empathy_llm_toolkit/session_status.py +20 -22
  86. empathy_llm_toolkit/state.py +28 -21
  87. empathy_llm_toolkit/wizards/__init__.py +38 -0
  88. empathy_llm_toolkit/wizards/base_wizard.py +364 -0
  89. empathy_llm_toolkit/wizards/customer_support_wizard.py +190 -0
  90. empathy_llm_toolkit/wizards/healthcare_wizard.py +362 -0
  91. empathy_llm_toolkit/wizards/patient_assessment_README.md +64 -0
  92. empathy_llm_toolkit/wizards/patient_assessment_wizard.py +193 -0
  93. empathy_llm_toolkit/wizards/technology_wizard.py +194 -0
  94. empathy_os/__init__.py +125 -84
  95. empathy_os/adaptive/__init__.py +13 -0
  96. empathy_os/adaptive/task_complexity.py +127 -0
  97. empathy_os/{monitoring.py → agent_monitoring.py} +28 -28
  98. empathy_os/cache/__init__.py +117 -0
  99. empathy_os/cache/base.py +166 -0
  100. empathy_os/cache/dependency_manager.py +253 -0
  101. empathy_os/cache/hash_only.py +248 -0
  102. empathy_os/cache/hybrid.py +390 -0
  103. empathy_os/cache/storage.py +282 -0
  104. empathy_os/cli.py +1516 -70
  105. empathy_os/cli_unified.py +597 -0
  106. empathy_os/config/__init__.py +63 -0
  107. empathy_os/config/xml_config.py +239 -0
  108. empathy_os/config.py +95 -37
  109. empathy_os/coordination.py +72 -68
  110. empathy_os/core.py +94 -107
  111. empathy_os/cost_tracker.py +74 -55
  112. empathy_os/dashboard/__init__.py +15 -0
  113. empathy_os/dashboard/server.py +743 -0
  114. empathy_os/discovery.py +17 -14
  115. empathy_os/emergence.py +21 -22
  116. empathy_os/exceptions.py +18 -30
  117. empathy_os/feedback_loops.py +30 -33
  118. empathy_os/levels.py +32 -35
  119. empathy_os/leverage_points.py +31 -32
  120. empathy_os/logging_config.py +19 -16
  121. empathy_os/memory/__init__.py +195 -0
  122. empathy_os/memory/claude_memory.py +466 -0
  123. empathy_os/memory/config.py +224 -0
  124. empathy_os/memory/control_panel.py +1298 -0
  125. empathy_os/memory/edges.py +179 -0
  126. empathy_os/memory/graph.py +567 -0
  127. empathy_os/memory/long_term.py +1194 -0
  128. empathy_os/memory/nodes.py +179 -0
  129. empathy_os/memory/redis_bootstrap.py +540 -0
  130. empathy_os/memory/security/__init__.py +31 -0
  131. empathy_os/memory/security/audit_logger.py +930 -0
  132. empathy_os/memory/security/pii_scrubber.py +640 -0
  133. empathy_os/memory/security/secrets_detector.py +678 -0
  134. empathy_os/memory/short_term.py +2119 -0
  135. empathy_os/memory/storage/__init__.py +15 -0
  136. empathy_os/memory/summary_index.py +583 -0
  137. empathy_os/memory/unified.py +619 -0
  138. empathy_os/metrics/__init__.py +12 -0
  139. empathy_os/metrics/prompt_metrics.py +190 -0
  140. empathy_os/models/__init__.py +136 -0
  141. empathy_os/models/__main__.py +13 -0
  142. empathy_os/models/cli.py +655 -0
  143. empathy_os/models/empathy_executor.py +354 -0
  144. empathy_os/models/executor.py +252 -0
  145. empathy_os/models/fallback.py +671 -0
  146. empathy_os/models/provider_config.py +563 -0
  147. empathy_os/models/registry.py +382 -0
  148. empathy_os/models/tasks.py +302 -0
  149. empathy_os/models/telemetry.py +548 -0
  150. empathy_os/models/token_estimator.py +378 -0
  151. empathy_os/models/validation.py +274 -0
  152. empathy_os/monitoring/__init__.py +52 -0
  153. empathy_os/monitoring/alerts.py +23 -0
  154. empathy_os/monitoring/alerts_cli.py +268 -0
  155. empathy_os/monitoring/multi_backend.py +271 -0
  156. empathy_os/monitoring/otel_backend.py +363 -0
  157. empathy_os/optimization/__init__.py +19 -0
  158. empathy_os/optimization/context_optimizer.py +272 -0
  159. empathy_os/pattern_library.py +30 -29
  160. empathy_os/persistence.py +35 -37
  161. empathy_os/platform_utils.py +261 -0
  162. empathy_os/plugins/__init__.py +28 -0
  163. empathy_os/plugins/base.py +361 -0
  164. empathy_os/plugins/registry.py +268 -0
  165. empathy_os/project_index/__init__.py +30 -0
  166. empathy_os/project_index/cli.py +335 -0
  167. empathy_os/project_index/crew_integration.py +430 -0
  168. empathy_os/project_index/index.py +425 -0
  169. empathy_os/project_index/models.py +501 -0
  170. empathy_os/project_index/reports.py +473 -0
  171. empathy_os/project_index/scanner.py +538 -0
  172. empathy_os/prompts/__init__.py +61 -0
  173. empathy_os/prompts/config.py +77 -0
  174. empathy_os/prompts/context.py +177 -0
  175. empathy_os/prompts/parser.py +285 -0
  176. empathy_os/prompts/registry.py +313 -0
  177. empathy_os/prompts/templates.py +208 -0
  178. empathy_os/redis_config.py +144 -58
  179. empathy_os/redis_memory.py +79 -77
  180. empathy_os/resilience/__init__.py +56 -0
  181. empathy_os/resilience/circuit_breaker.py +256 -0
  182. empathy_os/resilience/fallback.py +179 -0
  183. empathy_os/resilience/health.py +300 -0
  184. empathy_os/resilience/retry.py +209 -0
  185. empathy_os/resilience/timeout.py +135 -0
  186. empathy_os/routing/__init__.py +43 -0
  187. empathy_os/routing/chain_executor.py +433 -0
  188. empathy_os/routing/classifier.py +217 -0
  189. empathy_os/routing/smart_router.py +234 -0
  190. empathy_os/routing/wizard_registry.py +307 -0
  191. empathy_os/templates.py +19 -14
  192. empathy_os/trust/__init__.py +28 -0
  193. empathy_os/trust/circuit_breaker.py +579 -0
  194. empathy_os/trust_building.py +67 -58
  195. empathy_os/validation/__init__.py +19 -0
  196. empathy_os/validation/xml_validator.py +281 -0
  197. empathy_os/wizard_factory_cli.py +170 -0
  198. empathy_os/{workflows.py → workflow_commands.py} +131 -37
  199. empathy_os/workflows/__init__.py +360 -0
  200. empathy_os/workflows/base.py +1660 -0
  201. empathy_os/workflows/bug_predict.py +962 -0
  202. empathy_os/workflows/code_review.py +960 -0
  203. empathy_os/workflows/code_review_adapters.py +310 -0
  204. empathy_os/workflows/code_review_pipeline.py +720 -0
  205. empathy_os/workflows/config.py +600 -0
  206. empathy_os/workflows/dependency_check.py +648 -0
  207. empathy_os/workflows/document_gen.py +1069 -0
  208. empathy_os/workflows/documentation_orchestrator.py +1205 -0
  209. empathy_os/workflows/health_check.py +679 -0
  210. empathy_os/workflows/keyboard_shortcuts/__init__.py +39 -0
  211. empathy_os/workflows/keyboard_shortcuts/generators.py +386 -0
  212. empathy_os/workflows/keyboard_shortcuts/parsers.py +414 -0
  213. empathy_os/workflows/keyboard_shortcuts/prompts.py +295 -0
  214. empathy_os/workflows/keyboard_shortcuts/schema.py +193 -0
  215. empathy_os/workflows/keyboard_shortcuts/workflow.py +505 -0
  216. empathy_os/workflows/manage_documentation.py +804 -0
  217. empathy_os/workflows/new_sample_workflow1.py +146 -0
  218. empathy_os/workflows/new_sample_workflow1_README.md +150 -0
  219. empathy_os/workflows/perf_audit.py +687 -0
  220. empathy_os/workflows/pr_review.py +748 -0
  221. empathy_os/workflows/progress.py +445 -0
  222. empathy_os/workflows/progress_server.py +322 -0
  223. empathy_os/workflows/refactor_plan.py +693 -0
  224. empathy_os/workflows/release_prep.py +808 -0
  225. empathy_os/workflows/research_synthesis.py +404 -0
  226. empathy_os/workflows/secure_release.py +585 -0
  227. empathy_os/workflows/security_adapters.py +297 -0
  228. empathy_os/workflows/security_audit.py +1046 -0
  229. empathy_os/workflows/step_config.py +234 -0
  230. empathy_os/workflows/test5.py +125 -0
  231. empathy_os/workflows/test5_README.md +158 -0
  232. empathy_os/workflows/test_gen.py +1855 -0
  233. empathy_os/workflows/test_lifecycle.py +526 -0
  234. empathy_os/workflows/test_maintenance.py +626 -0
  235. empathy_os/workflows/test_maintenance_cli.py +590 -0
  236. empathy_os/workflows/test_maintenance_crew.py +821 -0
  237. empathy_os/workflows/xml_enhanced_crew.py +285 -0
  238. empathy_software_plugin/__init__.py +1 -2
  239. empathy_software_plugin/cli/__init__.py +120 -0
  240. empathy_software_plugin/cli/inspect.py +362 -0
  241. empathy_software_plugin/cli.py +49 -27
  242. empathy_software_plugin/plugin.py +4 -8
  243. empathy_software_plugin/wizards/__init__.py +42 -0
  244. empathy_software_plugin/wizards/advanced_debugging_wizard.py +392 -0
  245. empathy_software_plugin/wizards/agent_orchestration_wizard.py +511 -0
  246. empathy_software_plugin/wizards/ai_collaboration_wizard.py +503 -0
  247. empathy_software_plugin/wizards/ai_context_wizard.py +441 -0
  248. empathy_software_plugin/wizards/ai_documentation_wizard.py +503 -0
  249. empathy_software_plugin/wizards/base_wizard.py +288 -0
  250. empathy_software_plugin/wizards/book_chapter_wizard.py +519 -0
  251. empathy_software_plugin/wizards/code_review_wizard.py +606 -0
  252. empathy_software_plugin/wizards/debugging/__init__.py +50 -0
  253. empathy_software_plugin/wizards/debugging/bug_risk_analyzer.py +414 -0
  254. empathy_software_plugin/wizards/debugging/config_loaders.py +442 -0
  255. empathy_software_plugin/wizards/debugging/fix_applier.py +469 -0
  256. empathy_software_plugin/wizards/debugging/language_patterns.py +383 -0
  257. empathy_software_plugin/wizards/debugging/linter_parsers.py +470 -0
  258. empathy_software_plugin/wizards/debugging/verification.py +369 -0
  259. empathy_software_plugin/wizards/enhanced_testing_wizard.py +537 -0
  260. empathy_software_plugin/wizards/memory_enhanced_debugging_wizard.py +816 -0
  261. empathy_software_plugin/wizards/multi_model_wizard.py +501 -0
  262. empathy_software_plugin/wizards/pattern_extraction_wizard.py +422 -0
  263. empathy_software_plugin/wizards/pattern_retriever_wizard.py +400 -0
  264. empathy_software_plugin/wizards/performance/__init__.py +9 -0
  265. empathy_software_plugin/wizards/performance/bottleneck_detector.py +221 -0
  266. empathy_software_plugin/wizards/performance/profiler_parsers.py +278 -0
  267. empathy_software_plugin/wizards/performance/trajectory_analyzer.py +429 -0
  268. empathy_software_plugin/wizards/performance_profiling_wizard.py +305 -0
  269. empathy_software_plugin/wizards/prompt_engineering_wizard.py +425 -0
  270. empathy_software_plugin/wizards/rag_pattern_wizard.py +461 -0
  271. empathy_software_plugin/wizards/security/__init__.py +32 -0
  272. empathy_software_plugin/wizards/security/exploit_analyzer.py +290 -0
  273. empathy_software_plugin/wizards/security/owasp_patterns.py +241 -0
  274. empathy_software_plugin/wizards/security/vulnerability_scanner.py +604 -0
  275. empathy_software_plugin/wizards/security_analysis_wizard.py +322 -0
  276. empathy_software_plugin/wizards/security_learning_wizard.py +740 -0
  277. empathy_software_plugin/wizards/tech_debt_wizard.py +726 -0
  278. empathy_software_plugin/wizards/testing/__init__.py +27 -0
  279. empathy_software_plugin/wizards/testing/coverage_analyzer.py +459 -0
  280. empathy_software_plugin/wizards/testing/quality_analyzer.py +531 -0
  281. empathy_software_plugin/wizards/testing/test_suggester.py +533 -0
  282. empathy_software_plugin/wizards/testing_wizard.py +274 -0
  283. hot_reload/README.md +473 -0
  284. hot_reload/__init__.py +62 -0
  285. hot_reload/config.py +84 -0
  286. hot_reload/integration.py +228 -0
  287. hot_reload/reloader.py +298 -0
  288. hot_reload/watcher.py +179 -0
  289. hot_reload/websocket.py +176 -0
  290. scaffolding/README.md +589 -0
  291. scaffolding/__init__.py +35 -0
  292. scaffolding/__main__.py +14 -0
  293. scaffolding/cli.py +240 -0
  294. test_generator/__init__.py +38 -0
  295. test_generator/__main__.py +14 -0
  296. test_generator/cli.py +226 -0
  297. test_generator/generator.py +325 -0
  298. test_generator/risk_analyzer.py +216 -0
  299. workflow_patterns/__init__.py +33 -0
  300. workflow_patterns/behavior.py +249 -0
  301. workflow_patterns/core.py +76 -0
  302. workflow_patterns/output.py +99 -0
  303. workflow_patterns/registry.py +255 -0
  304. workflow_patterns/structural.py +288 -0
  305. workflow_scaffolding/__init__.py +11 -0
  306. workflow_scaffolding/__main__.py +12 -0
  307. workflow_scaffolding/cli.py +206 -0
  308. workflow_scaffolding/generator.py +265 -0
  309. agents/code_inspection/patterns/inspection/recurring_B112.json +0 -18
  310. agents/code_inspection/patterns/inspection/recurring_F541.json +0 -16
  311. agents/code_inspection/patterns/inspection/recurring_FORMAT.json +0 -25
  312. agents/code_inspection/patterns/inspection/recurring_bug_20250822_def456.json +0 -16
  313. agents/code_inspection/patterns/inspection/recurring_bug_20250915_abc123.json +0 -16
  314. agents/code_inspection/patterns/inspection/recurring_bug_20251212_3c5b9951.json +0 -16
  315. agents/code_inspection/patterns/inspection/recurring_bug_20251212_97c0f72f.json +0 -16
  316. agents/code_inspection/patterns/inspection/recurring_bug_20251212_a0871d53.json +0 -16
  317. agents/code_inspection/patterns/inspection/recurring_bug_20251212_a9b6ec41.json +0 -16
  318. agents/code_inspection/patterns/inspection/recurring_bug_null_001.json +0 -16
  319. agents/code_inspection/patterns/inspection/recurring_builtin.json +0 -16
  320. agents/compliance_anticipation_agent.py +0 -1427
  321. agents/epic_integration_wizard.py +0 -541
  322. agents/trust_building_behaviors.py +0 -891
  323. empathy_framework-2.4.0.dist-info/METADATA +0 -485
  324. empathy_framework-2.4.0.dist-info/RECORD +0 -102
  325. empathy_framework-2.4.0.dist-info/entry_points.txt +0 -6
  326. empathy_llm_toolkit/htmlcov/status.json +0 -1
  327. empathy_llm_toolkit/security/htmlcov/status.json +0 -1
  328. {empathy_framework-2.4.0.dist-info → empathy_framework-3.8.2.dist-info}/WHEEL +0 -0
  329. {empathy_framework-2.4.0.dist-info → empathy_framework-3.8.2.dist-info}/licenses/LICENSE +0 -0
empathy_os/discovery.py CHANGED
@@ -1,5 +1,4 @@
1
- """
2
- Progressive Feature Discovery for Empathy Framework
1
+ """Progressive Feature Discovery for Empathy Framework
3
2
 
4
3
  Surface tips and suggestions at the right time based on usage patterns.
5
4
  Helps users discover power-user features without overwhelming them upfront.
@@ -87,8 +86,7 @@ def _days_since_sync(stats: dict) -> int:
87
86
 
88
87
 
89
88
  class DiscoveryEngine:
90
- """
91
- Tracks usage and surfaces contextual tips.
89
+ """Tracks usage and surfaces contextual tips.
92
90
 
93
91
  Usage:
94
92
  engine = DiscoveryEngine()
@@ -136,14 +134,14 @@ class DiscoveryEngine:
136
134
  json.dump(self.state, f, indent=2)
137
135
 
138
136
  def record_command(self, command: str) -> list:
139
- """
140
- Record a command execution and return any triggered tips.
137
+ """Record a command execution and return any triggered tips.
141
138
 
142
139
  Args:
143
140
  command: The command that was executed
144
141
 
145
142
  Returns:
146
143
  List of tip messages to show
144
+
147
145
  """
148
146
  # Update counts
149
147
  counts = self.state.get("command_counts", {})
@@ -177,8 +175,7 @@ class DiscoveryEngine:
177
175
  self._save()
178
176
 
179
177
  def get_pending_tips(self, trigger: str | None = None, max_tips: int = 2) -> list:
180
- """
181
- Get pending tips based on current state.
178
+ """Get pending tips based on current state.
182
179
 
183
180
  Args:
184
181
  trigger: Command that triggered this check (optional)
@@ -186,6 +183,7 @@ class DiscoveryEngine:
186
183
 
187
184
  Returns:
188
185
  List of tip messages
186
+
189
187
  """
190
188
  tips_to_show = []
191
189
  shown_tips = set(self.state.get("tips_shown", []))
@@ -207,7 +205,8 @@ class DiscoveryEngine:
207
205
  # Check condition-based tips
208
206
  elif "condition" in tip_config:
209
207
  try:
210
- if tip_config["condition"](self.state):
208
+ condition = tip_config["condition"]
209
+ if callable(condition) and condition(self.state):
211
210
  should_show = True
212
211
  except Exception:
213
212
  pass
@@ -218,11 +217,15 @@ class DiscoveryEngine:
218
217
  "id": tip_id,
219
218
  "tip": tip_config["tip"],
220
219
  "priority": tip_config.get("priority", 3),
221
- }
220
+ },
222
221
  )
223
222
 
224
- # Sort by priority and limit
225
- tips_to_show.sort(key=lambda x: x["priority"])
223
+ # Sort by priority and limit - ensure we get an int for sorting
224
+ def get_priority(x: dict) -> int:
225
+ p = x.get("priority", 3)
226
+ return int(p) if isinstance(p, int | float | str) else 3
227
+
228
+ tips_to_show.sort(key=get_priority)
226
229
  return tips_to_show[:max_tips]
227
230
 
228
231
  def mark_shown(self, tip_id: str) -> None:
@@ -269,12 +272,12 @@ def get_engine(storage_dir: str = ".empathy") -> DiscoveryEngine:
269
272
 
270
273
 
271
274
  def show_tip_if_available(command: str, quiet: bool = False) -> None:
272
- """
273
- Check for tips after a command and display them.
275
+ """Check for tips after a command and display them.
274
276
 
275
277
  Args:
276
278
  command: The command that was just executed
277
279
  quiet: If True, don't print anything
280
+
278
281
  """
279
282
  engine = get_engine()
280
283
  tips = engine.record_command(command)
empathy_os/emergence.py CHANGED
@@ -1,5 +1,4 @@
1
- """
2
- Emergence Detection for AI-Human Collaboration
1
+ """Emergence Detection for AI-Human Collaboration
3
2
 
4
3
  Detects emergent properties in AI-human collaboration - system-level behaviors
5
4
  that arise from component interactions but aren't properties of components.
@@ -17,8 +16,7 @@ from typing import Any
17
16
 
18
17
  @dataclass
19
18
  class EmergentProperty:
20
- """
21
- An emergent property discovered in the system
19
+ """An emergent property discovered in the system
22
20
 
23
21
  Emergent properties are behaviors or patterns that arise from the
24
22
  interactions of system components but cannot be predicted from
@@ -34,8 +32,7 @@ class EmergentProperty:
34
32
 
35
33
 
36
34
  class EmergenceDetector:
37
- """
38
- Detects emergent properties in AI-human collaboration
35
+ """Detects emergent properties in AI-human collaboration
39
36
 
40
37
  Emergent properties are system-level behaviors that arise from
41
38
  component interactions but aren't properties of the components themselves.
@@ -57,6 +54,7 @@ class EmergenceDetector:
57
54
  >>> current = {"trust": 0.8, "interactions": 50, "shared_patterns": 5}
58
55
  >>> score = detector.measure_emergence(baseline, current)
59
56
  >>> print(f"Emergence score: {score:.2f}")
57
+
60
58
  """
61
59
 
62
60
  def __init__(self):
@@ -65,10 +63,10 @@ class EmergenceDetector:
65
63
  self.baseline_metrics: dict[str, Any] = {}
66
64
 
67
65
  def detect_emergent_norms(
68
- self, team_interactions: list[dict[str, Any]]
66
+ self,
67
+ team_interactions: list[dict[str, Any]],
69
68
  ) -> list[EmergentProperty]:
70
- """
71
- Detect team norms that emerged organically
69
+ """Detect team norms that emerged organically
72
70
 
73
71
  Analyzes interaction history to identify behavioral patterns that:
74
72
  1. Were not explicitly programmed or prescribed
@@ -88,6 +86,7 @@ class EmergenceDetector:
88
86
  ... {"type": "help_request", "response_time": 4}
89
87
  ... ]
90
88
  >>> norms = detector.detect_emergent_norms(interactions)
89
+
91
90
  """
92
91
  norms: list[EmergentProperty] = []
93
92
 
@@ -131,8 +130,7 @@ class EmergenceDetector:
131
130
  return norms
132
131
 
133
132
  def measure_emergence(self, baseline: dict[str, Any], current: dict[str, Any]) -> float:
134
- """
135
- Quantify emergence by comparing baseline to current state
133
+ """Quantify emergence by comparing baseline to current state
136
134
 
137
135
  Measures how much new system-level properties have emerged that
138
136
  weren't present in the baseline state.
@@ -151,6 +149,7 @@ class EmergenceDetector:
151
149
  >>> baseline = {"trust": 0.3, "interactions": 10}
152
150
  >>> current = {"trust": 0.8, "interactions": 50, "patterns": 5}
153
151
  >>> score = detector.measure_emergence(baseline, current)
152
+
154
153
  """
155
154
  emergence_score = 0.0
156
155
  max_score = 0.0
@@ -191,10 +190,10 @@ class EmergenceDetector:
191
190
  return 0.0
192
191
 
193
192
  def detect_emergent_capabilities(
194
- self, historical_states: list[dict[str, Any]]
193
+ self,
194
+ historical_states: list[dict[str, Any]],
195
195
  ) -> list[EmergentProperty]:
196
- """
197
- Detect new capabilities that emerged over time
196
+ """Detect new capabilities that emerged over time
198
197
 
199
198
  Analyzes historical system states to identify capabilities that:
200
199
  1. Weren't present initially
@@ -206,6 +205,7 @@ class EmergenceDetector:
206
205
 
207
206
  Returns:
208
207
  List of emergent capabilities detected
208
+
209
209
  """
210
210
  if len(historical_states) < 2:
211
211
  return []
@@ -231,8 +231,7 @@ class EmergenceDetector:
231
231
  return capabilities
232
232
 
233
233
  def _calculate_consistency(self, values: list[float]) -> float:
234
- """
235
- Calculate consistency of a set of values (0.0-1.0)
234
+ """Calculate consistency of a set of values (0.0-1.0)
236
235
 
237
236
  Uses coefficient of variation: lower variation = higher consistency
238
237
  """
@@ -248,14 +247,14 @@ class EmergenceDetector:
248
247
  cv = std_dev / mean # Coefficient of variation
249
248
 
250
249
  # Convert to consistency score (inverse of variation)
251
- consistency = max(0.0, 1.0 - min(cv, 1.0))
250
+ consistency: float = max(0.0, 1.0 - min(cv, 1.0))
252
251
  return consistency
253
252
 
254
253
  def _analyze_communication_patterns(
255
- self, interactions: list[dict[str, Any]]
254
+ self,
255
+ interactions: list[dict[str, Any]],
256
256
  ) -> dict[str, dict[str, Any]]:
257
- """
258
- Analyze communication patterns in interactions
257
+ """Analyze communication patterns in interactions
259
258
 
260
259
  Returns dict of pattern_name -> {frequency, examples}
261
260
  """
@@ -288,14 +287,14 @@ class EmergenceDetector:
288
287
  return patterns
289
288
 
290
289
  def get_detected_properties(self, property_type: str | None = None) -> list[EmergentProperty]:
291
- """
292
- Get all detected emergent properties, optionally filtered by type
290
+ """Get all detected emergent properties, optionally filtered by type
293
291
 
294
292
  Args:
295
293
  property_type: Optional filter ("norm", "pattern", "behavior", "capability")
296
294
 
297
295
  Returns:
298
296
  List of emergent properties
297
+
299
298
  """
300
299
  if property_type:
301
300
  return [p for p in self.detected_properties if p.property_type == property_type]
empathy_os/exceptions.py CHANGED
@@ -1,5 +1,4 @@
1
- """
2
- Custom exceptions for the Empathy Framework
1
+ """Custom exceptions for the Empathy Framework
3
2
 
4
3
  Provides domain-specific exceptions for better error handling and debugging.
5
4
 
@@ -9,36 +8,31 @@ Licensed under Fair Source 0.9
9
8
 
10
9
 
11
10
  class EmpathyFrameworkError(Exception):
12
- """
13
- Base exception for all Empathy Framework errors
11
+ """Base exception for all Empathy Framework errors
14
12
 
15
13
  All custom exceptions in the framework inherit from this class,
16
14
  making it easy to catch any framework-specific error.
17
15
  """
18
16
 
19
- pass
20
-
21
17
 
22
18
  class ValidationError(EmpathyFrameworkError):
23
- """
24
- Raised when input validation fails
19
+ """Raised when input validation fails
25
20
 
26
21
  Examples:
27
22
  - Empty strings when non-empty required
28
23
  - Wrong type provided
29
24
  - Invalid value ranges
30
- """
31
25
 
32
- pass
26
+ """
33
27
 
34
28
 
35
29
  class PatternNotFoundError(EmpathyFrameworkError):
36
- """
37
- Raised when a pattern lookup fails
30
+ """Raised when a pattern lookup fails
38
31
 
39
32
  Examples:
40
33
  - Pattern ID doesn't exist in library
41
34
  - No patterns match query criteria
35
+
42
36
  """
43
37
 
44
38
  def __init__(self, pattern_id: str, message: str | None = None):
@@ -49,12 +43,12 @@ class PatternNotFoundError(EmpathyFrameworkError):
49
43
 
50
44
 
51
45
  class TrustThresholdError(EmpathyFrameworkError):
52
- """
53
- Raised when trust level is insufficient for an operation
46
+ """Raised when trust level is insufficient for an operation
54
47
 
55
48
  Examples:
56
49
  - Trust too low for proactive actions
57
50
  - Erosion loop detected
51
+
58
52
  """
59
53
 
60
54
  def __init__(self, current_trust: float, required_trust: float, message: str | None = None):
@@ -66,12 +60,12 @@ class TrustThresholdError(EmpathyFrameworkError):
66
60
 
67
61
 
68
62
  class ConfidenceThresholdError(EmpathyFrameworkError):
69
- """
70
- Raised when confidence is too low for proactive action
63
+ """Raised when confidence is too low for proactive action
71
64
 
72
65
  Examples:
73
66
  - Pattern confidence below threshold
74
67
  - Prediction uncertainty too high
68
+
75
69
  """
76
70
 
77
71
  def __init__(self, confidence: float, threshold: float, message: str | None = None):
@@ -83,13 +77,13 @@ class ConfidenceThresholdError(EmpathyFrameworkError):
83
77
 
84
78
 
85
79
  class EmpathyLevelError(EmpathyFrameworkError):
86
- """
87
- Raised when empathy level operations fail
80
+ """Raised when empathy level operations fail
88
81
 
89
82
  Examples:
90
83
  - Invalid level number
91
84
  - Level not yet achieved
92
85
  - Cannot regress to lower level
86
+
93
87
  """
94
88
 
95
89
  def __init__(self, level: int, message: str | None = None):
@@ -100,36 +94,30 @@ class EmpathyLevelError(EmpathyFrameworkError):
100
94
 
101
95
 
102
96
  class LeveragePointError(EmpathyFrameworkError):
103
- """
104
- Raised when leverage point analysis fails
97
+ """Raised when leverage point analysis fails
105
98
 
106
99
  Examples:
107
100
  - No leverage points found
108
101
  - Intervention feasibility too low
109
- """
110
102
 
111
- pass
103
+ """
112
104
 
113
105
 
114
106
  class FeedbackLoopError(EmpathyFrameworkError):
115
- """
116
- Raised when feedback loop detection or management fails
107
+ """Raised when feedback loop detection or management fails
117
108
 
118
109
  Examples:
119
110
  - Vicious cycle detected but cannot break
120
111
  - Insufficient history for loop detection
121
- """
122
112
 
123
- pass
113
+ """
124
114
 
125
115
 
126
116
  class CollaborationStateError(EmpathyFrameworkError):
127
- """
128
- Raised when collaboration state operations fail
117
+ """Raised when collaboration state operations fail
129
118
 
130
119
  Examples:
131
120
  - Invalid state transition
132
121
  - State corruption detected
133
- """
134
122
 
135
- pass
123
+ """
@@ -1,5 +1,4 @@
1
- """
2
- Feedback Loop Detection for AI-Human Collaboration
1
+ """Feedback Loop Detection for AI-Human Collaboration
3
2
 
4
3
  Detects and analyzes reinforcing and balancing feedback loops in AI-human
5
4
  collaboration based on systems thinking (Meadows, Senge).
@@ -34,8 +33,7 @@ class LoopPolarity(Enum):
34
33
 
35
34
  @dataclass
36
35
  class FeedbackLoop:
37
- """
38
- A detected feedback loop in the system
36
+ """A detected feedback loop in the system
39
37
 
40
38
  Feedback loops are circular causal chains where:
41
39
  A -> B -> C -> A (with delays and polarities)
@@ -53,8 +51,7 @@ class FeedbackLoop:
53
51
 
54
52
 
55
53
  class FeedbackLoopDetector:
56
- """
57
- Detects reinforcing and balancing feedback loops in AI-human collaboration
54
+ """Detects reinforcing and balancing feedback loops in AI-human collaboration
58
55
 
59
56
  Based on systems thinking (Meadows, Senge):
60
57
 
@@ -85,6 +82,7 @@ class FeedbackLoopDetector:
85
82
  ... ]
86
83
  >>> loops = detector.detect_active_loop(history)
87
84
  >>> print(loops["dominant_loop"])
85
+
88
86
  """
89
87
 
90
88
  def __init__(self):
@@ -99,7 +97,7 @@ class FeedbackLoopDetector:
99
97
  loop_id="R1_trust_building",
100
98
  loop_type=LoopType.REINFORCING,
101
99
  polarity=LoopPolarity.VIRTUOUS,
102
- description="Trust building virtuous cycle: Success → Trust ↑ → Delegation ↑ → More Success",
100
+ description="Trust building cycle: Success → Trust ↑ → Delegation ↑ → More Success",
103
101
  components=["trust", "success_rate", "delegation_level"],
104
102
  intervention_points=["celebrate_wins", "increase_transparency"],
105
103
  )
@@ -109,7 +107,7 @@ class FeedbackLoopDetector:
109
107
  loop_id="R2_trust_erosion",
110
108
  loop_type=LoopType.REINFORCING,
111
109
  polarity=LoopPolarity.VICIOUS,
112
- description="Trust erosion vicious cycle: Failure → Trust ↓ → Micromanagement ↑ → More Failures",
110
+ description="Trust erosion: Failure → Trust ↓ → Micromanagement ↑ → More Failures",
113
111
  components=["trust", "failure_rate", "oversight_level"],
114
112
  intervention_points=["break_cycle", "rebuild_confidence", "adjust_scope"],
115
113
  )
@@ -128,8 +126,7 @@ class FeedbackLoopDetector:
128
126
  self.detected_loops.extend([trust_building, trust_erosion, quality_control])
129
127
 
130
128
  def detect_active_loop(self, session_history: list[dict[str, Any]]) -> dict[str, Any]:
131
- """
132
- Analyze session history for active feedback loops
129
+ """Analyze session history for active feedback loops
133
130
 
134
131
  Examines trends in trust, success rate, and collaboration metrics
135
132
  to determine which feedback loop is currently dominant.
@@ -151,6 +148,7 @@ class FeedbackLoopDetector:
151
148
  ... {"trust": 0.7, "success_rate": 0.8}
152
149
  ... ]
153
150
  >>> result = detector.detect_active_loop(history)
151
+
154
152
  """
155
153
  if len(session_history) < 2:
156
154
  return {
@@ -183,7 +181,7 @@ class FeedbackLoopDetector:
183
181
  "details": dominant_loop,
184
182
  }
185
183
 
186
- elif trust_trend < -0.1 and success_rate < 0.4:
184
+ if trust_trend < -0.1 and success_rate < 0.4:
187
185
  # Trust erosion vicious cycle active
188
186
  dominant_loop = self._get_loop_by_id("R2_trust_erosion")
189
187
  return {
@@ -191,25 +189,23 @@ class FeedbackLoopDetector:
191
189
  "loop_type": "reinforcing_vicious",
192
190
  "loop_strength": min(abs(trust_trend) * (1 - success_rate), 1.0),
193
191
  "trend": "amplifying_negative",
194
- "recommendation": "INTERVENTION NEEDED: Break the cycle. Reduce scope, rebuild confidence.",
192
+ "recommendation": "INTERVENTION NEEDED: Break cycle. Reduce scope, rebuild confidence.",
195
193
  "details": dominant_loop,
196
194
  }
197
195
 
198
- else:
199
- # Quality control balancing loop active
200
- dominant_loop = self._get_loop_by_id("B1_quality_control")
201
- return {
202
- "dominant_loop": "B1_quality_control",
203
- "loop_type": "balancing",
204
- "loop_strength": 0.5,
205
- "trend": "stabilizing",
206
- "recommendation": "System stable. Monitor for reinforcing loop activation.",
207
- "details": dominant_loop,
208
- }
196
+ # Quality control balancing loop active
197
+ dominant_loop = self._get_loop_by_id("B1_quality_control")
198
+ return {
199
+ "dominant_loop": "B1_quality_control",
200
+ "loop_type": "balancing",
201
+ "loop_strength": 0.5,
202
+ "trend": "stabilizing",
203
+ "recommendation": "System stable. Monitor for reinforcing loop activation.",
204
+ "details": dominant_loop,
205
+ }
209
206
 
210
207
  def detect_virtuous_cycle(self, history: list[dict[str, Any]]) -> bool:
211
- """
212
- Detect reinforcing positive feedback (virtuous cycle)
208
+ """Detect reinforcing positive feedback (virtuous cycle)
213
209
 
214
210
  A virtuous cycle is present when:
215
211
  1. Trust is increasing
@@ -230,6 +226,7 @@ class FeedbackLoopDetector:
230
226
  ... ]
231
227
  >>> detector.detect_virtuous_cycle(history)
232
228
  True
229
+
233
230
  """
234
231
  if len(history) < 3:
235
232
  return False
@@ -256,8 +253,7 @@ class FeedbackLoopDetector:
256
253
  return is_accelerating
257
254
 
258
255
  def detect_vicious_cycle(self, history: list[dict[str, Any]]) -> bool:
259
- """
260
- Detect reinforcing negative feedback (vicious cycle)
256
+ """Detect reinforcing negative feedback (vicious cycle)
261
257
 
262
258
  A vicious cycle is present when:
263
259
  1. Trust is decreasing
@@ -278,6 +274,7 @@ class FeedbackLoopDetector:
278
274
  ... ]
279
275
  >>> detector.detect_vicious_cycle(history)
280
276
  True
277
+
281
278
  """
282
279
  if len(history) < 3:
283
280
  return False
@@ -304,8 +301,7 @@ class FeedbackLoopDetector:
304
301
  return is_accelerating_down
305
302
 
306
303
  def get_intervention_recommendations(self, loop_id: str) -> list[str]:
307
- """
308
- Get recommended interventions for a specific loop
304
+ """Get recommended interventions for a specific loop
309
305
 
310
306
  Args:
311
307
  loop_id: ID of the loop (e.g., "R1_trust_building")
@@ -317,6 +313,7 @@ class FeedbackLoopDetector:
317
313
  >>> recommendations = detector.get_intervention_recommendations("R2_trust_erosion")
318
314
  >>> print(recommendations)
319
315
  ['break_cycle', 'rebuild_confidence', 'adjust_scope']
316
+
320
317
  """
321
318
  loop = self._get_loop_by_id(loop_id)
322
319
  if loop:
@@ -324,8 +321,7 @@ class FeedbackLoopDetector:
324
321
  return []
325
322
 
326
323
  def _calculate_trend(self, values: list[float]) -> float:
327
- """
328
- Calculate trend direction and magnitude
324
+ """Calculate trend direction and magnitude
329
325
 
330
326
  Uses simple linear regression slope as trend indicator.
331
327
 
@@ -333,6 +329,7 @@ class FeedbackLoopDetector:
333
329
  Positive value: increasing trend
334
330
  Negative value: decreasing trend
335
331
  Near zero: stable
332
+
336
333
  """
337
334
  if len(values) < 2:
338
335
  return 0.0
@@ -359,11 +356,11 @@ class FeedbackLoopDetector:
359
356
  return None
360
357
 
361
358
  def register_custom_loop(self, loop: FeedbackLoop):
362
- """
363
- Register a custom feedback loop for detection
359
+ """Register a custom feedback loop for detection
364
360
 
365
361
  Args:
366
362
  loop: FeedbackLoop instance to register
363
+
367
364
  """
368
365
  self.detected_loops.append(loop)
369
366