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
- Redis Short-Term Memory for Empathy Framework
1
+ """Redis Short-Term Memory for Empathy Framework
3
2
 
4
3
  Per EMPATHY_PHILOSOPHY.md v1.1.0:
5
4
  - Implements fast, TTL-based working memory for agent coordination
@@ -30,8 +29,7 @@ from .memory.short_term import AccessTier
30
29
 
31
30
 
32
31
  class TTLStrategy(Enum):
33
- """
34
- TTL strategies for different memory types
32
+ """TTL strategies for different memory types
35
33
 
36
34
  Per EMPATHY_PHILOSOPHY.md Section 9.3:
37
35
  - Working results: 1 hour
@@ -120,8 +118,7 @@ class StagedPattern:
120
118
 
121
119
  @dataclass
122
120
  class ConflictContext:
123
- """
124
- Context for principled negotiation
121
+ """Context for principled negotiation
125
122
 
126
123
  Per Getting to Yes framework:
127
124
  - Positions: What each party says they want
@@ -162,8 +159,7 @@ class ConflictContext:
162
159
 
163
160
 
164
161
  class RedisShortTermMemory:
165
- """
166
- Redis-backed short-term memory for agent coordination
162
+ """Redis-backed short-term memory for agent coordination
167
163
 
168
164
  Features:
169
165
  - Fast read/write with automatic TTL expiration
@@ -177,6 +173,7 @@ class RedisShortTermMemory:
177
173
  >>> creds = AgentCredentials("agent_1", AccessTier.CONTRIBUTOR)
178
174
  >>> memory.stash("analysis_results", {"issues": 3}, creds)
179
175
  >>> data = memory.retrieve("analysis_results", creds)
176
+
180
177
  """
181
178
 
182
179
  # Key prefixes for namespacing
@@ -194,8 +191,7 @@ class RedisShortTermMemory:
194
191
  password: str | None = None,
195
192
  use_mock: bool = False,
196
193
  ):
197
- """
198
- Initialize Redis connection
194
+ """Initialize Redis connection
199
195
 
200
196
  Args:
201
197
  host: Redis host
@@ -203,6 +199,7 @@ class RedisShortTermMemory:
203
199
  db: Redis database number
204
200
  password: Redis password (optional)
205
201
  use_mock: Use in-memory mock for testing
202
+
206
203
  """
207
204
  self.use_mock = use_mock or not REDIS_AVAILABLE
208
205
 
@@ -277,8 +274,7 @@ class RedisShortTermMemory:
277
274
  credentials: AgentCredentials,
278
275
  ttl: TTLStrategy = TTLStrategy.WORKING_RESULTS,
279
276
  ) -> bool:
280
- """
281
- Stash data in short-term memory
277
+ """Stash data in short-term memory
282
278
 
283
279
  Args:
284
280
  key: Unique key for the data
@@ -291,11 +287,12 @@ class RedisShortTermMemory:
291
287
 
292
288
  Example:
293
289
  >>> memory.stash("analysis_v1", {"findings": [...]}, creds)
290
+
294
291
  """
295
292
  if not credentials.can_stage():
296
293
  raise PermissionError(
297
294
  f"Agent {credentials.agent_id} (Tier {credentials.tier.name}) "
298
- "cannot write to memory. Requires CONTRIBUTOR or higher."
295
+ "cannot write to memory. Requires CONTRIBUTOR or higher.",
299
296
  )
300
297
 
301
298
  full_key = f"{self.PREFIX_WORKING}{credentials.agent_id}:{key}"
@@ -312,8 +309,7 @@ class RedisShortTermMemory:
312
309
  credentials: AgentCredentials,
313
310
  agent_id: str | None = None,
314
311
  ) -> Any | None:
315
- """
316
- Retrieve data from short-term memory
312
+ """Retrieve data from short-term memory
317
313
 
318
314
  Args:
319
315
  key: Key to retrieve
@@ -325,6 +321,7 @@ class RedisShortTermMemory:
325
321
 
326
322
  Example:
327
323
  >>> data = memory.retrieve("analysis_v1", creds)
324
+
328
325
  """
329
326
  owner = agent_id or credentials.agent_id
330
327
  full_key = f"{self.PREFIX_WORKING}{owner}:{key}"
@@ -337,14 +334,14 @@ class RedisShortTermMemory:
337
334
  return payload.get("data")
338
335
 
339
336
  def clear_working_memory(self, credentials: AgentCredentials) -> int:
340
- """
341
- Clear all working memory for an agent
337
+ """Clear all working memory for an agent
342
338
 
343
339
  Args:
344
340
  credentials: Agent credentials (must own the memory or be Steward)
345
341
 
346
342
  Returns:
347
343
  Number of keys deleted
344
+
348
345
  """
349
346
  pattern = f"{self.PREFIX_WORKING}{credentials.agent_id}:*"
350
347
  keys = self._keys(pattern)
@@ -361,8 +358,7 @@ class RedisShortTermMemory:
361
358
  pattern: StagedPattern,
362
359
  credentials: AgentCredentials,
363
360
  ) -> bool:
364
- """
365
- Stage a pattern for validation
361
+ """Stage a pattern for validation
366
362
 
367
363
  Per EMPATHY_PHILOSOPHY.md: Patterns must be staged before
368
364
  being promoted to the active library.
@@ -373,11 +369,12 @@ class RedisShortTermMemory:
373
369
 
374
370
  Returns:
375
371
  True if staged successfully
372
+
376
373
  """
377
374
  if not credentials.can_stage():
378
375
  raise PermissionError(
379
376
  f"Agent {credentials.agent_id} cannot stage patterns. "
380
- "Requires CONTRIBUTOR tier or higher."
377
+ "Requires CONTRIBUTOR tier or higher.",
381
378
  )
382
379
 
383
380
  key = f"{self.PREFIX_STAGED}{pattern.pattern_id}"
@@ -392,8 +389,7 @@ class RedisShortTermMemory:
392
389
  pattern_id: str,
393
390
  credentials: AgentCredentials,
394
391
  ) -> StagedPattern | None:
395
- """
396
- Retrieve a staged pattern
392
+ """Retrieve a staged pattern
397
393
 
398
394
  Args:
399
395
  pattern_id: Pattern ID
@@ -401,6 +397,7 @@ class RedisShortTermMemory:
401
397
 
402
398
  Returns:
403
399
  StagedPattern or None
400
+
404
401
  """
405
402
  key = f"{self.PREFIX_STAGED}{pattern_id}"
406
403
  raw = self._get(key)
@@ -414,14 +411,14 @@ class RedisShortTermMemory:
414
411
  self,
415
412
  credentials: AgentCredentials,
416
413
  ) -> list[StagedPattern]:
417
- """
418
- List all staged patterns awaiting validation
414
+ """List all staged patterns awaiting validation
419
415
 
420
416
  Args:
421
417
  credentials: Any tier can read
422
418
 
423
419
  Returns:
424
420
  List of staged patterns
421
+
425
422
  """
426
423
  pattern = f"{self.PREFIX_STAGED}*"
427
424
  keys = self._keys(pattern)
@@ -439,8 +436,7 @@ class RedisShortTermMemory:
439
436
  pattern_id: str,
440
437
  credentials: AgentCredentials,
441
438
  ) -> StagedPattern | None:
442
- """
443
- Promote staged pattern (remove from staging for library add)
439
+ """Promote staged pattern (remove from staging for library add)
444
440
 
445
441
  Args:
446
442
  pattern_id: Pattern to promote
@@ -448,11 +444,12 @@ class RedisShortTermMemory:
448
444
 
449
445
  Returns:
450
446
  The promoted pattern (for adding to PatternLibrary)
447
+
451
448
  """
452
449
  if not credentials.can_validate():
453
450
  raise PermissionError(
454
451
  f"Agent {credentials.agent_id} cannot promote patterns. "
455
- "Requires VALIDATOR tier or higher."
452
+ "Requires VALIDATOR tier or higher.",
456
453
  )
457
454
 
458
455
  pattern = self.get_staged_pattern(pattern_id, credentials)
@@ -467,8 +464,7 @@ class RedisShortTermMemory:
467
464
  credentials: AgentCredentials,
468
465
  reason: str = "",
469
466
  ) -> bool:
470
- """
471
- Reject a staged pattern
467
+ """Reject a staged pattern
472
468
 
473
469
  Args:
474
470
  pattern_id: Pattern to reject
@@ -477,11 +473,12 @@ class RedisShortTermMemory:
477
473
 
478
474
  Returns:
479
475
  True if rejected
476
+
480
477
  """
481
478
  if not credentials.can_validate():
482
479
  raise PermissionError(
483
480
  f"Agent {credentials.agent_id} cannot reject patterns. "
484
- "Requires VALIDATOR tier or higher."
481
+ "Requires VALIDATOR tier or higher.",
485
482
  )
486
483
 
487
484
  key = f"{self.PREFIX_STAGED}{pattern_id}"
@@ -497,8 +494,7 @@ class RedisShortTermMemory:
497
494
  credentials: AgentCredentials,
498
495
  batna: str | None = None,
499
496
  ) -> ConflictContext:
500
- """
501
- Create context for principled negotiation
497
+ """Create context for principled negotiation
502
498
 
503
499
  Per Getting to Yes framework:
504
500
  - Separate positions from interests
@@ -513,11 +509,12 @@ class RedisShortTermMemory:
513
509
 
514
510
  Returns:
515
511
  ConflictContext for resolution
512
+
516
513
  """
517
514
  if not credentials.can_stage():
518
515
  raise PermissionError(
519
516
  f"Agent {credentials.agent_id} cannot create conflict context. "
520
- "Requires CONTRIBUTOR tier or higher."
517
+ "Requires CONTRIBUTOR tier or higher.",
521
518
  )
522
519
 
523
520
  context = ConflictContext(
@@ -541,8 +538,7 @@ class RedisShortTermMemory:
541
538
  conflict_id: str,
542
539
  credentials: AgentCredentials,
543
540
  ) -> ConflictContext | None:
544
- """
545
- Retrieve conflict context
541
+ """Retrieve conflict context
546
542
 
547
543
  Args:
548
544
  conflict_id: Conflict identifier
@@ -550,6 +546,7 @@ class RedisShortTermMemory:
550
546
 
551
547
  Returns:
552
548
  ConflictContext or None
549
+
553
550
  """
554
551
  key = f"{self.PREFIX_CONFLICT}{conflict_id}"
555
552
  raw = self._get(key)
@@ -565,8 +562,7 @@ class RedisShortTermMemory:
565
562
  resolution: str,
566
563
  credentials: AgentCredentials,
567
564
  ) -> bool:
568
- """
569
- Mark conflict as resolved
565
+ """Mark conflict as resolved
570
566
 
571
567
  Args:
572
568
  conflict_id: Conflict to resolve
@@ -575,11 +571,12 @@ class RedisShortTermMemory:
575
571
 
576
572
  Returns:
577
573
  True if resolved
574
+
578
575
  """
579
576
  if not credentials.can_validate():
580
577
  raise PermissionError(
581
578
  f"Agent {credentials.agent_id} cannot resolve conflicts. "
582
- "Requires VALIDATOR tier or higher."
579
+ "Requires VALIDATOR tier or higher.",
583
580
  )
584
581
 
585
582
  context = self.get_conflict_context(conflict_id, credentials)
@@ -603,8 +600,7 @@ class RedisShortTermMemory:
603
600
  credentials: AgentCredentials,
604
601
  target_agent: str | None = None,
605
602
  ) -> bool:
606
- """
607
- Send coordination signal to other agents
603
+ """Send coordination signal to other agents
608
604
 
609
605
  Args:
610
606
  signal_type: Type of signal (e.g., "ready", "blocking", "complete")
@@ -614,11 +610,12 @@ class RedisShortTermMemory:
614
610
 
615
611
  Returns:
616
612
  True if sent
613
+
617
614
  """
618
615
  if not credentials.can_stage():
619
616
  raise PermissionError(
620
617
  f"Agent {credentials.agent_id} cannot send signals. "
621
- "Requires CONTRIBUTOR tier or higher."
618
+ "Requires CONTRIBUTOR tier or higher.",
622
619
  )
623
620
 
624
621
  target = target_agent or "broadcast"
@@ -637,8 +634,7 @@ class RedisShortTermMemory:
637
634
  credentials: AgentCredentials,
638
635
  signal_type: str | None = None,
639
636
  ) -> list[dict]:
640
- """
641
- Receive coordination signals
637
+ """Receive coordination signals
642
638
 
643
639
  Args:
644
640
  credentials: Agent receiving signals
@@ -646,6 +642,7 @@ class RedisShortTermMemory:
646
642
 
647
643
  Returns:
648
644
  List of signals
645
+
649
646
  """
650
647
  if signal_type:
651
648
  pattern = f"{self.PREFIX_COORDINATION}{signal_type}:*:{credentials.agent_id}"
@@ -673,8 +670,7 @@ class RedisShortTermMemory:
673
670
  credentials: AgentCredentials,
674
671
  metadata: dict | None = None,
675
672
  ) -> bool:
676
- """
677
- Create a collaboration session
673
+ """Create a collaboration session
678
674
 
679
675
  Args:
680
676
  session_id: Unique session identifier
@@ -683,6 +679,7 @@ class RedisShortTermMemory:
683
679
 
684
680
  Returns:
685
681
  True if created
682
+
686
683
  """
687
684
  key = f"{self.PREFIX_SESSION}{session_id}"
688
685
  payload = {
@@ -699,8 +696,7 @@ class RedisShortTermMemory:
699
696
  session_id: str,
700
697
  credentials: AgentCredentials,
701
698
  ) -> bool:
702
- """
703
- Join an existing session
699
+ """Join an existing session
704
700
 
705
701
  Args:
706
702
  session_id: Session to join
@@ -708,6 +704,7 @@ class RedisShortTermMemory:
708
704
 
709
705
  Returns:
710
706
  True if joined
707
+
711
708
  """
712
709
  key = f"{self.PREFIX_SESSION}{session_id}"
713
710
  raw = self._get(key)
@@ -726,8 +723,7 @@ class RedisShortTermMemory:
726
723
  session_id: str,
727
724
  credentials: AgentCredentials,
728
725
  ) -> dict | None:
729
- """
730
- Get session information
726
+ """Get session information
731
727
 
732
728
  Args:
733
729
  session_id: Session identifier
@@ -735,6 +731,7 @@ class RedisShortTermMemory:
735
731
 
736
732
  Returns:
737
733
  Session data or None
734
+
738
735
  """
739
736
  key = f"{self.PREFIX_SESSION}{session_id}"
740
737
  raw = self._get(key)
@@ -748,11 +745,11 @@ class RedisShortTermMemory:
748
745
  # === Health Check ===
749
746
 
750
747
  def ping(self) -> bool:
751
- """
752
- Check Redis connection health
748
+ """Check Redis connection health
753
749
 
754
750
  Returns:
755
751
  True if connected and responsive
752
+
756
753
  """
757
754
  if self.use_mock:
758
755
  return True
@@ -764,24 +761,24 @@ class RedisShortTermMemory:
764
761
  return False
765
762
 
766
763
  def get_stats(self) -> dict:
767
- """
768
- Get memory statistics
764
+ """Get memory statistics
769
765
 
770
766
  Returns:
771
767
  Dict with memory stats
768
+
772
769
  """
773
770
  if self.use_mock:
774
771
  return {
775
772
  "mode": "mock",
776
773
  "total_keys": len(self._mock_storage),
777
774
  "working_keys": len(
778
- [k for k in self._mock_storage if k.startswith(self.PREFIX_WORKING)]
775
+ [k for k in self._mock_storage if k.startswith(self.PREFIX_WORKING)],
779
776
  ),
780
777
  "staged_keys": len(
781
- [k for k in self._mock_storage if k.startswith(self.PREFIX_STAGED)]
778
+ [k for k in self._mock_storage if k.startswith(self.PREFIX_STAGED)],
782
779
  ),
783
780
  "conflict_keys": len(
784
- [k for k in self._mock_storage if k.startswith(self.PREFIX_CONFLICT)]
781
+ [k for k in self._mock_storage if k.startswith(self.PREFIX_CONFLICT)],
785
782
  ),
786
783
  }
787
784
 
@@ -0,0 +1,56 @@
1
+ """Empathy Framework Resilience Module
2
+
3
+ Provides reliability patterns for fault-tolerant wizard operations.
4
+
5
+ Usage:
6
+ from empathy_os.resilience import retry, circuit_breaker, timeout, fallback
7
+
8
+ @retry(max_attempts=3, backoff_factor=2.0)
9
+ async def call_llm(prompt: str) -> str:
10
+ ...
11
+
12
+ @circuit_breaker(failure_threshold=5, reset_timeout=60)
13
+ async def external_api_call():
14
+ ...
15
+
16
+ Copyright 2025 Smart AI Memory, LLC
17
+ Licensed under Fair Source 0.9
18
+ """
19
+
20
+ from .circuit_breaker import (
21
+ CircuitBreaker,
22
+ CircuitOpenError,
23
+ CircuitState,
24
+ circuit_breaker,
25
+ get_circuit_breaker,
26
+ )
27
+ from .fallback import Fallback, fallback, with_fallback
28
+ from .health import HealthCheck, HealthStatus, SystemHealth
29
+ from .retry import RetryConfig, retry, retry_with_backoff
30
+ from .timeout import TimeoutError as ResilienceTimeoutError
31
+ from .timeout import timeout, with_timeout
32
+
33
+ __all__ = [
34
+ "CircuitBreaker",
35
+ "CircuitOpenError",
36
+ "CircuitState",
37
+ "Fallback",
38
+ # Health
39
+ "HealthCheck",
40
+ "HealthStatus",
41
+ "ResilienceTimeoutError",
42
+ "RetryConfig",
43
+ "SystemHealth",
44
+ # Circuit Breaker
45
+ "circuit_breaker",
46
+ # Fallback
47
+ "fallback",
48
+ "get_circuit_breaker",
49
+ # Retry
50
+ "retry",
51
+ "retry_with_backoff",
52
+ # Timeout
53
+ "timeout",
54
+ "with_fallback",
55
+ "with_timeout",
56
+ ]