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
@@ -1,8 +1,7 @@
1
- """
2
- Redis Configuration for Empathy Framework
1
+ """Redis Configuration for Empathy Framework
3
2
 
4
3
  Handles connection to Redis from environment variables.
5
- Supports Railway, redis.com, local Docker, or mock mode.
4
+ Supports Railway, redis.com, local Docker, managed Redis, or mock mode.
6
5
 
7
6
  Environment Variables:
8
7
  REDIS_URL: Full Redis URL (redis://user:pass@host:port)
@@ -12,8 +11,29 @@ Environment Variables:
12
11
  REDIS_DB: Redis database number (default: 0)
13
12
  EMPATHY_REDIS_MOCK: Set to "true" to use mock mode
14
13
 
14
+ # SSL/TLS (for managed Redis services)
15
+ REDIS_SSL: Set to "true" to enable SSL
16
+ REDIS_SSL_CERT_REQS: Certificate requirement ("required", "optional", "none")
17
+ REDIS_SSL_CA_CERTS: Path to CA certificate file
18
+ REDIS_SSL_CERTFILE: Path to client certificate
19
+ REDIS_SSL_KEYFILE: Path to client key
20
+
21
+ # Connection settings
22
+ REDIS_SOCKET_TIMEOUT: Socket timeout in seconds (default: 5.0)
23
+ REDIS_MAX_CONNECTIONS: Connection pool size (default: 10)
24
+
25
+ # Retry settings
26
+ REDIS_RETRY_MAX_ATTEMPTS: Max retry attempts (default: 3)
27
+ REDIS_RETRY_BASE_DELAY: Base retry delay in seconds (default: 0.1)
28
+ REDIS_RETRY_MAX_DELAY: Max retry delay in seconds (default: 2.0)
29
+
30
+ # Sentinel (for high availability)
31
+ REDIS_SENTINEL_HOSTS: Comma-separated host:port pairs
32
+ REDIS_SENTINEL_MASTER: Sentinel master name
33
+
15
34
  Railway Auto-Detection:
16
35
  When deployed on Railway, REDIS_URL is automatically set.
36
+ For Railway Redis with SSL, the URL starts with "rediss://"
17
37
 
18
38
  Usage:
19
39
  from empathy_os.redis_config import get_redis_memory
@@ -21,8 +41,13 @@ Usage:
21
41
  # Automatically uses environment variables
22
42
  memory = get_redis_memory()
23
43
 
24
- # Or with explicit URL
25
- memory = get_redis_memory(url="redis://localhost:6379")
44
+ # Or with explicit URL (SSL auto-detected from rediss://)
45
+ memory = get_redis_memory(url="rediss://user:pass@managed-redis.com:6379")
46
+
47
+ # Or with explicit config
48
+ from empathy_os.memory.short_term import RedisConfig
49
+ config = RedisConfig(host="localhost", ssl=True)
50
+ memory = get_redis_memory(config=config)
26
51
 
27
52
  Copyright 2025 Smart AI Memory, LLC
28
53
  Licensed under Fair Source 0.9
@@ -31,72 +56,126 @@ Licensed under Fair Source 0.9
31
56
  import os
32
57
  from urllib.parse import urlparse
33
58
 
34
- from .redis_memory import RedisShortTermMemory
59
+ from .memory.short_term import RedisConfig, RedisShortTermMemory
35
60
 
36
61
 
37
62
  def parse_redis_url(url: str) -> dict:
38
- """
39
- Parse Redis URL into connection parameters.
63
+ """Parse Redis URL into connection parameters.
64
+
65
+ Supports:
66
+ - redis://user:pass@host:port/db (standard)
67
+ - rediss://user:pass@host:port/db (SSL enabled)
40
68
 
41
69
  Args:
42
- url: Redis URL (redis://user:pass@host:port/db)
70
+ url: Redis URL (redis:// or rediss://)
43
71
 
44
72
  Returns:
45
- Dict with host, port, password, db
73
+ Dict with host, port, password, db, ssl
74
+
46
75
  """
47
76
  parsed = urlparse(url)
48
77
 
78
+ # Detect SSL from scheme
79
+ ssl = parsed.scheme == "rediss"
80
+
49
81
  return {
50
82
  "host": parsed.hostname or "localhost",
51
83
  "port": parsed.port or 6379,
52
84
  "password": parsed.password,
53
85
  "db": int(parsed.path.lstrip("/") or 0) if parsed.path else 0,
86
+ "ssl": ssl,
54
87
  }
55
88
 
56
89
 
57
- def get_redis_config() -> dict:
58
- """
59
- Get Redis configuration from environment variables.
90
+ def get_redis_config() -> RedisConfig:
91
+ """Get Redis configuration from environment variables.
60
92
 
61
93
  Priority:
62
- 1. REDIS_URL (full URL, used by Railway)
94
+ 1. REDIS_URL (full URL, used by Railway/Heroku/managed services)
63
95
  2. Individual env vars (REDIS_HOST, REDIS_PORT, etc.)
64
96
  3. Defaults (localhost:6379)
65
97
 
66
98
  Returns:
67
- Dict with connection parameters or {"use_mock": True}
99
+ RedisConfig with all connection parameters
100
+
68
101
  """
69
102
  # Check for mock mode
70
103
  if os.getenv("EMPATHY_REDIS_MOCK", "").lower() == "true":
71
- return {"use_mock": True}
104
+ return RedisConfig(use_mock=True)
72
105
 
73
- # Check for full URL (Railway, Heroku, etc.)
106
+ # Check for full URL (Railway, Heroku, managed services)
74
107
  redis_url = os.getenv("REDIS_URL") or os.getenv("REDIS_PRIVATE_URL")
75
108
  if redis_url:
76
- config = parse_redis_url(redis_url)
77
- config["use_mock"] = False
78
- return config
109
+ url_config = parse_redis_url(redis_url)
110
+ return RedisConfig(
111
+ host=url_config["host"],
112
+ port=url_config["port"],
113
+ password=url_config["password"],
114
+ db=url_config["db"],
115
+ ssl=url_config.get("ssl", False),
116
+ use_mock=False,
117
+ # Apply additional env var overrides
118
+ socket_timeout=float(os.getenv("REDIS_SOCKET_TIMEOUT", "5.0")),
119
+ max_connections=int(os.getenv("REDIS_MAX_CONNECTIONS", "10")),
120
+ retry_max_attempts=int(os.getenv("REDIS_RETRY_MAX_ATTEMPTS", "3")),
121
+ retry_base_delay=float(os.getenv("REDIS_RETRY_BASE_DELAY", "0.1")),
122
+ retry_max_delay=float(os.getenv("REDIS_RETRY_MAX_DELAY", "2.0")),
123
+ )
124
+
125
+ # Build config from individual env vars
126
+ return RedisConfig(
127
+ host=os.getenv("REDIS_HOST", "localhost"),
128
+ port=int(os.getenv("REDIS_PORT", "6379")),
129
+ password=os.getenv("REDIS_PASSWORD"),
130
+ db=int(os.getenv("REDIS_DB", "0")),
131
+ use_mock=False,
132
+ # SSL settings
133
+ ssl=os.getenv("REDIS_SSL", "").lower() == "true",
134
+ ssl_cert_reqs=os.getenv("REDIS_SSL_CERT_REQS"),
135
+ ssl_ca_certs=os.getenv("REDIS_SSL_CA_CERTS"),
136
+ ssl_certfile=os.getenv("REDIS_SSL_CERTFILE"),
137
+ ssl_keyfile=os.getenv("REDIS_SSL_KEYFILE"),
138
+ # Connection settings
139
+ socket_timeout=float(os.getenv("REDIS_SOCKET_TIMEOUT", "5.0")),
140
+ socket_connect_timeout=float(os.getenv("REDIS_SOCKET_CONNECT_TIMEOUT", "5.0")),
141
+ max_connections=int(os.getenv("REDIS_MAX_CONNECTIONS", "10")),
142
+ # Retry settings
143
+ retry_on_timeout=os.getenv("REDIS_RETRY_ON_TIMEOUT", "true").lower() == "true",
144
+ retry_max_attempts=int(os.getenv("REDIS_RETRY_MAX_ATTEMPTS", "3")),
145
+ retry_base_delay=float(os.getenv("REDIS_RETRY_BASE_DELAY", "0.1")),
146
+ retry_max_delay=float(os.getenv("REDIS_RETRY_MAX_DELAY", "2.0")),
147
+ )
148
+
149
+
150
+ def get_redis_config_dict() -> dict:
151
+ """Get Redis configuration as a dictionary (legacy compatibility).
79
152
 
80
- # Fall back to individual env vars
153
+ Returns:
154
+ Dict with connection parameters
155
+
156
+ """
157
+ config = get_redis_config()
81
158
  return {
82
- "host": os.getenv("REDIS_HOST", "localhost"),
83
- "port": int(os.getenv("REDIS_PORT", "6379")),
84
- "password": os.getenv("REDIS_PASSWORD"),
85
- "db": int(os.getenv("REDIS_DB", "0")),
86
- "use_mock": False,
159
+ "host": config.host,
160
+ "port": config.port,
161
+ "password": config.password,
162
+ "db": config.db,
163
+ "use_mock": config.use_mock,
164
+ "ssl": config.ssl,
87
165
  }
88
166
 
89
167
 
90
168
  def get_redis_memory(
91
169
  url: str | None = None,
92
170
  use_mock: bool | None = None,
171
+ config: RedisConfig | None = None,
93
172
  ) -> RedisShortTermMemory:
94
- """
95
- Create a RedisShortTermMemory instance with environment-based config.
173
+ """Create a RedisShortTermMemory instance with environment-based config.
96
174
 
97
175
  Args:
98
176
  url: Optional explicit Redis URL (overrides env vars)
99
177
  use_mock: Optional explicit mock mode (overrides env vars)
178
+ config: Optional explicit RedisConfig (overrides all other options)
100
179
 
101
180
  Returns:
102
181
  Configured RedisShortTermMemory instance
@@ -105,45 +184,51 @@ def get_redis_memory(
105
184
  # Auto-configure from environment
106
185
  memory = get_redis_memory()
107
186
 
108
- # Explicit URL
109
- memory = get_redis_memory(url="redis://localhost:6379")
187
+ # Explicit URL (SSL auto-detected from rediss://)
188
+ memory = get_redis_memory(url="rediss://user:pass@managed-redis.com:6379")
110
189
 
111
190
  # Force mock mode
112
191
  memory = get_redis_memory(use_mock=True)
192
+
193
+ # Explicit config with all options
194
+ from empathy_os.memory.short_term import RedisConfig
195
+ config = RedisConfig(
196
+ host="redis.example.com",
197
+ port=6379,
198
+ ssl=True,
199
+ retry_max_attempts=5,
200
+ )
201
+ memory = get_redis_memory(config=config)
202
+
113
203
  """
204
+ # Explicit config takes highest priority
205
+ if config is not None:
206
+ return RedisShortTermMemory(config=config)
207
+
114
208
  # Explicit mock mode
115
209
  if use_mock is True:
116
210
  return RedisShortTermMemory(use_mock=True)
117
211
 
118
212
  # Explicit URL
119
213
  if url:
120
- config = parse_redis_url(url)
121
- return RedisShortTermMemory(
122
- host=config["host"],
123
- port=config["port"],
124
- password=config["password"],
125
- db=config["db"],
214
+ url_config = parse_redis_url(url)
215
+ redis_config = RedisConfig(
216
+ host=url_config["host"],
217
+ port=url_config["port"],
218
+ password=url_config["password"],
219
+ db=url_config["db"],
220
+ ssl=url_config.get("ssl", False),
126
221
  use_mock=False,
127
222
  )
223
+ return RedisShortTermMemory(config=redis_config)
128
224
 
129
225
  # Environment-based config
130
- config = get_redis_config()
131
-
132
- if config.get("use_mock"):
133
- return RedisShortTermMemory(use_mock=True)
134
-
135
- return RedisShortTermMemory(
136
- host=config["host"],
137
- port=config["port"],
138
- password=config.get("password"),
139
- db=config.get("db", 0),
140
- use_mock=False,
141
- )
226
+ env_config = get_redis_config()
227
+ return RedisShortTermMemory(config=env_config)
142
228
 
143
229
 
144
230
  def check_redis_connection() -> dict:
145
- """
146
- Check Redis connection and return status.
231
+ """Check Redis connection and return status.
147
232
 
148
233
  Returns:
149
234
  Dict with connection status and info
@@ -152,16 +237,17 @@ def check_redis_connection() -> dict:
152
237
  >>> status = check_redis_connection()
153
238
  >>> if status["connected"]:
154
239
  ... print(f"Connected to {status['host']}:{status['port']}")
240
+
155
241
  """
156
242
  config = get_redis_config()
157
243
 
158
244
  result = {
159
245
  "config_source": "environment",
160
- "use_mock": config.get("use_mock", False),
161
- "host": config.get("host"),
162
- "port": config.get("port"),
163
- "has_password": bool(config.get("password")),
164
- "db": config.get("db", 0),
246
+ "use_mock": config.use_mock,
247
+ "host": config.host,
248
+ "port": config.port,
249
+ "has_password": bool(config.password),
250
+ "db": config.db,
165
251
  "connected": False,
166
252
  "error": None,
167
253
  }
@@ -194,8 +280,7 @@ def check_redis_connection() -> dict:
194
280
 
195
281
  # Convenience function for Railway deployments
196
282
  def get_railway_redis() -> RedisShortTermMemory:
197
- """
198
- Get Redis configured for Railway deployment.
283
+ """Get Redis configured for Railway deployment.
199
284
 
200
285
  Railway automatically sets REDIS_URL when you add a Redis service.
201
286
 
@@ -204,13 +289,14 @@ def get_railway_redis() -> RedisShortTermMemory:
204
289
 
205
290
  Raises:
206
291
  EnvironmentError: If REDIS_URL is not set
292
+
207
293
  """
208
294
  redis_url = os.getenv("REDIS_URL") or os.getenv("REDIS_PRIVATE_URL")
209
295
 
210
296
  if not redis_url:
211
297
  raise OSError(
212
298
  "REDIS_URL not found. Make sure Redis is added to your Railway project.\n"
213
- "Run: railway add --database redis"
299
+ "Run: railway add --database redis",
214
300
  )
215
301
 
216
302
  return get_redis_memory(url=redis_url)