empathy-framework 3.2.3__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 (328) hide show
  1. coach_wizards/__init__.py +11 -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 +22 -25
  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.2.3.dist-info → empathy_framework-3.8.2.dist-info}/METADATA +513 -58
  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-3.2.3.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 +177 -22
  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 +51 -49
  64. empathy_llm_toolkit/git_pattern_extractor.py +16 -12
  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 +13 -11
  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 +18 -20
  86. empathy_llm_toolkit/state.py +20 -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 +76 -77
  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} +27 -27
  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 +515 -109
  105. empathy_os/cli_unified.py +189 -42
  106. empathy_os/config/__init__.py +63 -0
  107. empathy_os/config/xml_config.py +239 -0
  108. empathy_os/config.py +87 -36
  109. empathy_os/coordination.py +48 -54
  110. empathy_os/core.py +90 -99
  111. empathy_os/cost_tracker.py +20 -23
  112. empathy_os/dashboard/__init__.py +15 -0
  113. empathy_os/dashboard/server.py +743 -0
  114. empathy_os/discovery.py +9 -11
  115. empathy_os/emergence.py +20 -21
  116. empathy_os/exceptions.py +18 -30
  117. empathy_os/feedback_loops.py +27 -30
  118. empathy_os/levels.py +31 -34
  119. empathy_os/leverage_points.py +27 -28
  120. empathy_os/logging_config.py +11 -12
  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 +29 -28
  160. empathy_os/persistence.py +30 -34
  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 +53 -56
  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 +12 -11
  192. empathy_os/trust/__init__.py +28 -0
  193. empathy_os/trust/circuit_breaker.py +579 -0
  194. empathy_os/trust_building.py +44 -36
  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} +123 -31
  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 +35 -26
  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-3.2.3.dist-info/RECORD +0 -104
  324. empathy_framework-3.2.3.dist-info/entry_points.txt +0 -7
  325. empathy_llm_toolkit/htmlcov/status.json +0 -1
  326. empathy_llm_toolkit/security/htmlcov/status.json +0 -1
  327. {empathy_framework-3.2.3.dist-info → empathy_framework-3.8.2.dist-info}/WHEEL +0 -0
  328. {empathy_framework-3.2.3.dist-info → empathy_framework-3.8.2.dist-info}/licenses/LICENSE +0 -0
@@ -1,5 +1,4 @@
1
- """
2
- Pattern Library for Multi-Agent Collaboration
1
+ """Pattern Library for Multi-Agent Collaboration
3
2
 
4
3
  Enables AI agents to share discovered patterns with each other, accelerating
5
4
  learning across the agent collective (Level 5: Systems Empathy).
@@ -17,8 +16,7 @@ from typing import Any
17
16
 
18
17
  @dataclass
19
18
  class Pattern:
20
- """
21
- A discovered pattern that can be shared across AI agents
19
+ """A discovered pattern that can be shared across AI agents
22
20
 
23
21
  Patterns represent reusable solutions, common behaviors, or
24
22
  learned heuristics that one agent discovered and others can benefit from.
@@ -27,6 +25,7 @@ class Pattern:
27
25
  - Sequential patterns: "After action X, users typically need Y"
28
26
  - Temporal patterns: "On Mondays, prioritize Z"
29
27
  - Conditional patterns: "If context A, then approach B works best"
28
+
30
29
  """
31
30
 
32
31
  id: str
@@ -76,8 +75,7 @@ class PatternMatch:
76
75
 
77
76
 
78
77
  class PatternLibrary:
79
- """
80
- Shared library for multi-agent pattern discovery and sharing
78
+ """Shared library for multi-agent pattern discovery and sharing
81
79
 
82
80
  Enables Level 5 Systems Empathy: AI-AI cooperation where one agent's
83
81
  discovery benefits all agents in the collective.
@@ -112,6 +110,7 @@ class PatternLibrary:
112
110
  >>> context = {"recent_event": "system_update", "user_confusion": True}
113
111
  >>> matches = library.query_patterns("documentation_agent", context)
114
112
  >>> print(f"Found {len(matches)} relevant patterns")
113
+
115
114
  """
116
115
 
117
116
  def __init__(self):
@@ -121,8 +120,7 @@ class PatternLibrary:
121
120
  self.pattern_graph: dict[str, list[str]] = {} # pattern_id -> related_pattern_ids
122
121
 
123
122
  def contribute_pattern(self, agent_id: str, pattern: Pattern) -> None:
124
- """
125
- Agent contributes a discovered pattern to the library
123
+ """Agent contributes a discovered pattern to the library
126
124
 
127
125
  Args:
128
126
  agent_id: ID of contributing agent
@@ -138,6 +136,7 @@ class PatternLibrary:
138
136
  ... confidence=0.9
139
137
  ... )
140
138
  >>> library.contribute_pattern("agent_1", pattern)
139
+
141
140
  """
142
141
  # Store pattern
143
142
  self.patterns[pattern.id] = pattern
@@ -159,8 +158,7 @@ class PatternLibrary:
159
158
  min_confidence: float = 0.5,
160
159
  limit: int = 10,
161
160
  ) -> list[PatternMatch]:
162
- """
163
- Query relevant patterns for current context
161
+ """Query relevant patterns for current context
164
162
 
165
163
  Args:
166
164
  agent_id: ID of querying agent
@@ -179,6 +177,7 @@ class PatternLibrary:
179
177
  ... "time_of_day": "morning"
180
178
  ... }
181
179
  >>> matches = library.query_patterns("debug_agent", context, min_confidence=0.7)
180
+
182
181
  """
183
182
  matches: list[PatternMatch] = []
184
183
 
@@ -199,7 +198,7 @@ class PatternLibrary:
199
198
  pattern=pattern,
200
199
  relevance_score=relevance_score,
201
200
  matching_factors=matching_factors,
202
- )
201
+ ),
203
202
  )
204
203
 
205
204
  # Sort by relevance and limit
@@ -207,40 +206,40 @@ class PatternLibrary:
207
206
  return matches[:limit]
208
207
 
209
208
  def get_pattern(self, pattern_id: str) -> Pattern | None:
210
- """
211
- Get a specific pattern by ID
209
+ """Get a specific pattern by ID
212
210
 
213
211
  Args:
214
212
  pattern_id: Pattern identifier
215
213
 
216
214
  Returns:
217
215
  Pattern if found, None otherwise
216
+
218
217
  """
219
218
  return self.patterns.get(pattern_id)
220
219
 
221
220
  def record_pattern_outcome(self, pattern_id: str, success: bool):
222
- """
223
- Record outcome of using a pattern
221
+ """Record outcome of using a pattern
224
222
 
225
223
  Updates pattern statistics to improve future recommendations.
226
224
 
227
225
  Args:
228
226
  pattern_id: ID of pattern that was used
229
227
  success: Whether using the pattern was successful
228
+
230
229
  """
231
230
  pattern = self.patterns.get(pattern_id)
232
231
  if pattern:
233
232
  pattern.record_usage(success)
234
233
 
235
234
  def link_patterns(self, pattern_id_1: str, pattern_id_2: str):
236
- """
237
- Create a link between related patterns
235
+ """Create a link between related patterns
238
236
 
239
237
  Helps agents discover complementary patterns.
240
238
 
241
239
  Args:
242
240
  pattern_id_1: First pattern ID
243
241
  pattern_id_2: Second pattern ID
242
+
244
243
  """
245
244
  if pattern_id_1 in self.pattern_graph:
246
245
  if pattern_id_2 not in self.pattern_graph[pattern_id_1]:
@@ -251,8 +250,7 @@ class PatternLibrary:
251
250
  self.pattern_graph[pattern_id_2].append(pattern_id_1)
252
251
 
253
252
  def get_related_patterns(self, pattern_id: str, depth: int = 1) -> list[Pattern]:
254
- """
255
- Get patterns related to a given pattern
253
+ """Get patterns related to a given pattern
256
254
 
257
255
  Args:
258
256
  pattern_id: Source pattern ID
@@ -260,6 +258,7 @@ class PatternLibrary:
260
258
 
261
259
  Returns:
262
260
  List of related patterns
261
+
263
262
  """
264
263
  if depth <= 0 or pattern_id not in self.pattern_graph:
265
264
  return []
@@ -278,21 +277,20 @@ class PatternLibrary:
278
277
  return [self.patterns[pid] for pid in related_ids if pid in self.patterns]
279
278
 
280
279
  def get_agent_patterns(self, agent_id: str) -> list[Pattern]:
281
- """
282
- Get all patterns contributed by a specific agent
280
+ """Get all patterns contributed by a specific agent
283
281
 
284
282
  Args:
285
283
  agent_id: Agent identifier
286
284
 
287
285
  Returns:
288
286
  List of patterns from this agent
287
+
289
288
  """
290
289
  pattern_ids = self.agent_contributions.get(agent_id, [])
291
290
  return [self.patterns[pid] for pid in pattern_ids if pid in self.patterns]
292
291
 
293
292
  def get_top_patterns(self, n: int = 10, sort_by: str = "success_rate") -> list[Pattern]:
294
- """
295
- Get top N patterns by specified metric
293
+ """Get top N patterns by specified metric
296
294
 
297
295
  Args:
298
296
  n: Number of patterns to return
@@ -300,6 +298,7 @@ class PatternLibrary:
300
298
 
301
299
  Returns:
302
300
  Top N patterns
301
+
303
302
  """
304
303
  patterns = list(self.patterns.values())
305
304
 
@@ -313,11 +312,11 @@ class PatternLibrary:
313
312
  return patterns[:n]
314
313
 
315
314
  def get_library_stats(self) -> dict[str, Any]:
316
- """
317
- Get statistics about the pattern library
315
+ """Get statistics about the pattern library
318
316
 
319
317
  Returns:
320
318
  Dict with library statistics
319
+
321
320
  """
322
321
  if not self.patterns:
323
322
  return {
@@ -350,13 +349,15 @@ class PatternLibrary:
350
349
  }
351
350
 
352
351
  def _calculate_relevance(
353
- self, pattern: Pattern, context: dict[str, Any]
352
+ self,
353
+ pattern: Pattern,
354
+ context: dict[str, Any],
354
355
  ) -> tuple[float, list[str]]:
355
- """
356
- Calculate how relevant a pattern is to current context
356
+ """Calculate how relevant a pattern is to current context
357
357
 
358
358
  Returns:
359
359
  (relevance_score, matching_factors)
360
+
360
361
  """
361
362
  relevance = 0.0
362
363
  matching_factors = []
empathy_os/persistence.py CHANGED
@@ -1,5 +1,4 @@
1
- """
2
- Persistence Layer for Empathy Framework
1
+ """Persistence Layer for Empathy Framework
3
2
 
4
3
  Provides:
5
4
  - Pattern library save/load (JSON, SQLite)
@@ -21,8 +20,7 @@ from .pattern_library import Pattern, PatternLibrary
21
20
 
22
21
 
23
22
  class PatternPersistence:
24
- """
25
- Save and load PatternLibrary to/from files
23
+ """Save and load PatternLibrary to/from files
26
24
 
27
25
  Supports:
28
26
  - JSON format (human-readable, good for backups)
@@ -31,8 +29,7 @@ class PatternPersistence:
31
29
 
32
30
  @staticmethod
33
31
  def save_to_json(library: PatternLibrary, filepath: str):
34
- """
35
- Save pattern library to JSON file
32
+ """Save pattern library to JSON file
36
33
 
37
34
  Args:
38
35
  library: PatternLibrary instance to save
@@ -41,6 +38,7 @@ class PatternPersistence:
41
38
  Example:
42
39
  >>> library = PatternLibrary()
43
40
  >>> PatternPersistence.save_to_json(library, "patterns.json")
41
+
44
42
  """
45
43
  patterns_list: list[dict[str, Any]] = []
46
44
  data: dict[str, Any] = {
@@ -71,7 +69,7 @@ class PatternPersistence:
71
69
  "tags": pattern.tags,
72
70
  "discovered_at": pattern.discovered_at.isoformat(),
73
71
  "last_used": pattern.last_used.isoformat() if pattern.last_used else None,
74
- }
72
+ },
75
73
  )
76
74
 
77
75
  # Write to file
@@ -80,8 +78,7 @@ class PatternPersistence:
80
78
 
81
79
  @staticmethod
82
80
  def load_from_json(filepath: str) -> PatternLibrary:
83
- """
84
- Load pattern library from JSON file
81
+ """Load pattern library from JSON file
85
82
 
86
83
  Args:
87
84
  filepath: Path to JSON file
@@ -95,6 +92,7 @@ class PatternPersistence:
95
92
 
96
93
  Example:
97
94
  >>> library = PatternPersistence.load_from_json("patterns.json")
95
+
98
96
  """
99
97
  with open(filepath) as f:
100
98
  data = json.load(f)
@@ -132,8 +130,7 @@ class PatternPersistence:
132
130
 
133
131
  @staticmethod
134
132
  def save_to_sqlite(library: PatternLibrary, db_path: str):
135
- """
136
- Save pattern library to SQLite database
133
+ """Save pattern library to SQLite database
137
134
 
138
135
  Args:
139
136
  library: PatternLibrary instance to save
@@ -146,6 +143,7 @@ class PatternPersistence:
146
143
  Example:
147
144
  >>> library = PatternLibrary()
148
145
  >>> PatternPersistence.save_to_sqlite(library, "patterns.db")
146
+
149
147
  """
150
148
  conn = sqlite3.connect(db_path)
151
149
  cursor = conn.cursor()
@@ -170,7 +168,7 @@ class PatternPersistence:
170
168
  last_used TIMESTAMP,
171
169
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
172
170
  )
173
- """
171
+ """,
174
172
  )
175
173
 
176
174
  cursor.execute(
@@ -183,7 +181,7 @@ class PatternPersistence:
183
181
  used_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
184
182
  FOREIGN KEY (pattern_id) REFERENCES patterns(id)
185
183
  )
186
- """
184
+ """,
187
185
  )
188
186
 
189
187
  # Insert or update patterns
@@ -219,8 +217,7 @@ class PatternPersistence:
219
217
 
220
218
  @staticmethod
221
219
  def load_from_sqlite(db_path: str) -> PatternLibrary:
222
- """
223
- Load pattern library from SQLite database
220
+ """Load pattern library from SQLite database
224
221
 
225
222
  Args:
226
223
  db_path: Path to SQLite database file
@@ -230,6 +227,7 @@ class PatternPersistence:
230
227
 
231
228
  Example:
232
229
  >>> library = PatternPersistence.load_from_sqlite("patterns.db")
230
+
233
231
  """
234
232
  conn = sqlite3.connect(db_path)
235
233
  conn.row_factory = sqlite3.Row # Access columns by name
@@ -265,8 +263,7 @@ class PatternPersistence:
265
263
 
266
264
 
267
265
  class StateManager:
268
- """
269
- Persist collaboration state across sessions
266
+ """Persist collaboration state across sessions
270
267
 
271
268
  Enables:
272
269
  - Long-term trust tracking
@@ -279,8 +276,7 @@ class StateManager:
279
276
  self.storage_path.mkdir(exist_ok=True, parents=True)
280
277
 
281
278
  def save_state(self, user_id: str, state: CollaborationState):
282
- """
283
- Save user's collaboration state to JSON
279
+ """Save user's collaboration state to JSON
284
280
 
285
281
  Args:
286
282
  user_id: User identifier
@@ -289,6 +285,7 @@ class StateManager:
289
285
  Example:
290
286
  >>> manager = StateManager()
291
287
  >>> manager.save_state("user123", empathy.collaboration_state)
288
+
292
289
  """
293
290
  filepath = self.storage_path / f"{user_id}.json"
294
291
 
@@ -308,8 +305,7 @@ class StateManager:
308
305
  json.dump(data, f, indent=2)
309
306
 
310
307
  def load_state(self, user_id: str) -> CollaborationState | None:
311
- """
312
- Load user's previous state
308
+ """Load user's previous state
313
309
 
314
310
  Args:
315
311
  user_id: User identifier
@@ -323,6 +319,7 @@ class StateManager:
323
319
  >>> if state:
324
320
  ... empathy = EmpathyOS(user_id="user123", target_level=4)
325
321
  ... empathy.collaboration_state = state
322
+
326
323
  """
327
324
  filepath = self.storage_path / f"{user_id}.json"
328
325
 
@@ -349,8 +346,7 @@ class StateManager:
349
346
  return None
350
347
 
351
348
  def list_users(self) -> list[str]:
352
- """
353
- List all users with saved state
349
+ """List all users with saved state
354
350
 
355
351
  Returns:
356
352
  List of user IDs
@@ -359,12 +355,12 @@ class StateManager:
359
355
  >>> manager = StateManager()
360
356
  >>> users = manager.list_users()
361
357
  >>> print(f"Found {len(users)} users")
358
+
362
359
  """
363
360
  return [p.stem for p in self.storage_path.glob("*.json")]
364
361
 
365
362
  def delete_state(self, user_id: str) -> bool:
366
- """
367
- Delete user's saved state
363
+ """Delete user's saved state
368
364
 
369
365
  Args:
370
366
  user_id: User identifier
@@ -375,6 +371,7 @@ class StateManager:
375
371
  Example:
376
372
  >>> manager = StateManager()
377
373
  >>> deleted = manager.delete_state("user123")
374
+
378
375
  """
379
376
  filepath = self.storage_path / f"{user_id}.json"
380
377
 
@@ -385,8 +382,7 @@ class StateManager:
385
382
 
386
383
 
387
384
  class MetricsCollector:
388
- """
389
- Collect and persist empathy framework metrics
385
+ """Collect and persist empathy framework metrics
390
386
 
391
387
  Tracks:
392
388
  - Empathy level usage
@@ -415,21 +411,21 @@ class MetricsCollector:
415
411
  timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
416
412
  metadata TEXT
417
413
  )
418
- """
414
+ """,
419
415
  )
420
416
 
421
417
  cursor.execute(
422
418
  """
423
419
  CREATE INDEX IF NOT EXISTS idx_user_level
424
420
  ON metrics(user_id, empathy_level)
425
- """
421
+ """,
426
422
  )
427
423
 
428
424
  cursor.execute(
429
425
  """
430
426
  CREATE INDEX IF NOT EXISTS idx_timestamp
431
427
  ON metrics(timestamp)
432
- """
428
+ """,
433
429
  )
434
430
 
435
431
  conn.commit()
@@ -443,8 +439,7 @@ class MetricsCollector:
443
439
  response_time_ms: float,
444
440
  metadata: dict | None = None,
445
441
  ):
446
- """
447
- Record a single metric event
442
+ """Record a single metric event
448
443
 
449
444
  Args:
450
445
  user_id: User identifier
@@ -462,6 +457,7 @@ class MetricsCollector:
462
457
  ... response_time_ms=250.5,
463
458
  ... metadata={"bottlenecks_predicted": 3}
464
459
  ... )
460
+
465
461
  """
466
462
  conn = sqlite3.connect(self.db_path)
467
463
  cursor = conn.cursor()
@@ -485,8 +481,7 @@ class MetricsCollector:
485
481
  conn.close()
486
482
 
487
483
  def get_user_stats(self, user_id: str) -> dict:
488
- """
489
- Get aggregated statistics for a user
484
+ """Get aggregated statistics for a user
490
485
 
491
486
  Args:
492
487
  user_id: User identifier
@@ -498,6 +493,7 @@ class MetricsCollector:
498
493
  >>> collector = MetricsCollector()
499
494
  >>> stats = collector.get_user_stats("user123")
500
495
  >>> print(f"Success rate: {stats['success_rate']:.1%}")
496
+
501
497
  """
502
498
  conn = sqlite3.connect(self.db_path)
503
499
  conn.row_factory = sqlite3.Row