empathy-framework 3.7.0__py3-none-any.whl → 3.8.0__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.
- coach_wizards/code_reviewer_README.md +60 -0
- coach_wizards/code_reviewer_wizard.py +180 -0
- {empathy_framework-3.7.0.dist-info → empathy_framework-3.8.0.dist-info}/METADATA +148 -11
- empathy_framework-3.8.0.dist-info/RECORD +333 -0
- {empathy_framework-3.7.0.dist-info → empathy_framework-3.8.0.dist-info}/top_level.txt +5 -1
- empathy_healthcare_plugin/monitors/__init__.py +9 -0
- empathy_healthcare_plugin/monitors/clinical_protocol_monitor.py +315 -0
- empathy_healthcare_plugin/monitors/monitoring/__init__.py +44 -0
- empathy_healthcare_plugin/monitors/monitoring/protocol_checker.py +300 -0
- empathy_healthcare_plugin/monitors/monitoring/protocol_loader.py +214 -0
- empathy_healthcare_plugin/monitors/monitoring/sensor_parsers.py +306 -0
- empathy_healthcare_plugin/monitors/monitoring/trajectory_analyzer.py +389 -0
- empathy_llm_toolkit/agent_factory/__init__.py +53 -0
- empathy_llm_toolkit/agent_factory/adapters/__init__.py +85 -0
- empathy_llm_toolkit/agent_factory/adapters/autogen_adapter.py +312 -0
- empathy_llm_toolkit/agent_factory/adapters/crewai_adapter.py +454 -0
- empathy_llm_toolkit/agent_factory/adapters/haystack_adapter.py +298 -0
- empathy_llm_toolkit/agent_factory/adapters/langchain_adapter.py +362 -0
- empathy_llm_toolkit/agent_factory/adapters/langgraph_adapter.py +333 -0
- empathy_llm_toolkit/agent_factory/adapters/native.py +228 -0
- empathy_llm_toolkit/agent_factory/adapters/wizard_adapter.py +426 -0
- empathy_llm_toolkit/agent_factory/base.py +305 -0
- empathy_llm_toolkit/agent_factory/crews/__init__.py +67 -0
- empathy_llm_toolkit/agent_factory/crews/code_review.py +1113 -0
- empathy_llm_toolkit/agent_factory/crews/health_check.py +1246 -0
- empathy_llm_toolkit/agent_factory/crews/refactoring.py +1128 -0
- empathy_llm_toolkit/agent_factory/crews/security_audit.py +1018 -0
- empathy_llm_toolkit/agent_factory/decorators.py +286 -0
- empathy_llm_toolkit/agent_factory/factory.py +558 -0
- empathy_llm_toolkit/agent_factory/framework.py +192 -0
- empathy_llm_toolkit/agent_factory/memory_integration.py +324 -0
- empathy_llm_toolkit/agent_factory/resilient.py +320 -0
- empathy_llm_toolkit/cli/__init__.py +8 -0
- empathy_llm_toolkit/cli/sync_claude.py +487 -0
- empathy_llm_toolkit/code_health.py +150 -3
- empathy_llm_toolkit/config/__init__.py +29 -0
- empathy_llm_toolkit/config/unified.py +295 -0
- empathy_llm_toolkit/routing/__init__.py +32 -0
- empathy_llm_toolkit/routing/model_router.py +362 -0
- empathy_llm_toolkit/security/IMPLEMENTATION_SUMMARY.md +413 -0
- empathy_llm_toolkit/security/PHASE2_COMPLETE.md +384 -0
- empathy_llm_toolkit/security/PHASE2_SECRETS_DETECTOR_COMPLETE.md +271 -0
- empathy_llm_toolkit/security/QUICK_REFERENCE.md +316 -0
- empathy_llm_toolkit/security/README.md +262 -0
- empathy_llm_toolkit/security/__init__.py +62 -0
- empathy_llm_toolkit/security/audit_logger.py +929 -0
- empathy_llm_toolkit/security/audit_logger_example.py +152 -0
- empathy_llm_toolkit/security/pii_scrubber.py +640 -0
- empathy_llm_toolkit/security/secrets_detector.py +678 -0
- empathy_llm_toolkit/security/secrets_detector_example.py +304 -0
- empathy_llm_toolkit/security/secure_memdocs.py +1192 -0
- empathy_llm_toolkit/security/secure_memdocs_example.py +278 -0
- empathy_llm_toolkit/wizards/__init__.py +38 -0
- empathy_llm_toolkit/wizards/base_wizard.py +364 -0
- empathy_llm_toolkit/wizards/customer_support_wizard.py +190 -0
- empathy_llm_toolkit/wizards/healthcare_wizard.py +362 -0
- empathy_llm_toolkit/wizards/patient_assessment_README.md +64 -0
- empathy_llm_toolkit/wizards/patient_assessment_wizard.py +193 -0
- empathy_llm_toolkit/wizards/technology_wizard.py +194 -0
- empathy_os/__init__.py +52 -52
- empathy_os/adaptive/__init__.py +13 -0
- empathy_os/adaptive/task_complexity.py +127 -0
- empathy_os/cache/__init__.py +117 -0
- empathy_os/cache/base.py +166 -0
- empathy_os/cache/dependency_manager.py +253 -0
- empathy_os/cache/hash_only.py +248 -0
- empathy_os/cache/hybrid.py +390 -0
- empathy_os/cache/storage.py +282 -0
- empathy_os/cli.py +118 -8
- empathy_os/cli_unified.py +121 -1
- empathy_os/config/__init__.py +63 -0
- empathy_os/config/xml_config.py +239 -0
- empathy_os/config.py +2 -1
- empathy_os/dashboard/__init__.py +15 -0
- empathy_os/dashboard/server.py +743 -0
- empathy_os/memory/__init__.py +195 -0
- empathy_os/memory/claude_memory.py +466 -0
- empathy_os/memory/config.py +224 -0
- empathy_os/memory/control_panel.py +1298 -0
- empathy_os/memory/edges.py +179 -0
- empathy_os/memory/graph.py +567 -0
- empathy_os/memory/long_term.py +1194 -0
- empathy_os/memory/nodes.py +179 -0
- empathy_os/memory/redis_bootstrap.py +540 -0
- empathy_os/memory/security/__init__.py +31 -0
- empathy_os/memory/security/audit_logger.py +930 -0
- empathy_os/memory/security/pii_scrubber.py +640 -0
- empathy_os/memory/security/secrets_detector.py +678 -0
- empathy_os/memory/short_term.py +2119 -0
- empathy_os/memory/storage/__init__.py +15 -0
- empathy_os/memory/summary_index.py +583 -0
- empathy_os/memory/unified.py +619 -0
- empathy_os/metrics/__init__.py +12 -0
- empathy_os/metrics/prompt_metrics.py +190 -0
- empathy_os/models/__init__.py +136 -0
- empathy_os/models/__main__.py +13 -0
- empathy_os/models/cli.py +655 -0
- empathy_os/models/empathy_executor.py +354 -0
- empathy_os/models/executor.py +252 -0
- empathy_os/models/fallback.py +671 -0
- empathy_os/models/provider_config.py +563 -0
- empathy_os/models/registry.py +382 -0
- empathy_os/models/tasks.py +302 -0
- empathy_os/models/telemetry.py +548 -0
- empathy_os/models/token_estimator.py +378 -0
- empathy_os/models/validation.py +274 -0
- empathy_os/monitoring/__init__.py +52 -0
- empathy_os/monitoring/alerts.py +23 -0
- empathy_os/monitoring/alerts_cli.py +268 -0
- empathy_os/monitoring/multi_backend.py +271 -0
- empathy_os/monitoring/otel_backend.py +363 -0
- empathy_os/optimization/__init__.py +19 -0
- empathy_os/optimization/context_optimizer.py +272 -0
- empathy_os/plugins/__init__.py +28 -0
- empathy_os/plugins/base.py +361 -0
- empathy_os/plugins/registry.py +268 -0
- empathy_os/project_index/__init__.py +30 -0
- empathy_os/project_index/cli.py +335 -0
- empathy_os/project_index/crew_integration.py +430 -0
- empathy_os/project_index/index.py +425 -0
- empathy_os/project_index/models.py +501 -0
- empathy_os/project_index/reports.py +473 -0
- empathy_os/project_index/scanner.py +538 -0
- empathy_os/prompts/__init__.py +61 -0
- empathy_os/prompts/config.py +77 -0
- empathy_os/prompts/context.py +177 -0
- empathy_os/prompts/parser.py +285 -0
- empathy_os/prompts/registry.py +313 -0
- empathy_os/prompts/templates.py +208 -0
- empathy_os/resilience/__init__.py +56 -0
- empathy_os/resilience/circuit_breaker.py +256 -0
- empathy_os/resilience/fallback.py +179 -0
- empathy_os/resilience/health.py +300 -0
- empathy_os/resilience/retry.py +209 -0
- empathy_os/resilience/timeout.py +135 -0
- empathy_os/routing/__init__.py +43 -0
- empathy_os/routing/chain_executor.py +433 -0
- empathy_os/routing/classifier.py +217 -0
- empathy_os/routing/smart_router.py +234 -0
- empathy_os/routing/wizard_registry.py +307 -0
- empathy_os/trust/__init__.py +28 -0
- empathy_os/trust/circuit_breaker.py +579 -0
- empathy_os/validation/__init__.py +19 -0
- empathy_os/validation/xml_validator.py +281 -0
- empathy_os/wizard_factory_cli.py +170 -0
- empathy_os/workflows/__init__.py +360 -0
- empathy_os/workflows/base.py +1660 -0
- empathy_os/workflows/bug_predict.py +962 -0
- empathy_os/workflows/code_review.py +960 -0
- empathy_os/workflows/code_review_adapters.py +310 -0
- empathy_os/workflows/code_review_pipeline.py +720 -0
- empathy_os/workflows/config.py +600 -0
- empathy_os/workflows/dependency_check.py +648 -0
- empathy_os/workflows/document_gen.py +1069 -0
- empathy_os/workflows/documentation_orchestrator.py +1205 -0
- empathy_os/workflows/health_check.py +679 -0
- empathy_os/workflows/keyboard_shortcuts/__init__.py +39 -0
- empathy_os/workflows/keyboard_shortcuts/generators.py +386 -0
- empathy_os/workflows/keyboard_shortcuts/parsers.py +414 -0
- empathy_os/workflows/keyboard_shortcuts/prompts.py +295 -0
- empathy_os/workflows/keyboard_shortcuts/schema.py +193 -0
- empathy_os/workflows/keyboard_shortcuts/workflow.py +505 -0
- empathy_os/workflows/manage_documentation.py +804 -0
- empathy_os/workflows/new_sample_workflow1.py +146 -0
- empathy_os/workflows/new_sample_workflow1_README.md +150 -0
- empathy_os/workflows/perf_audit.py +687 -0
- empathy_os/workflows/pr_review.py +748 -0
- empathy_os/workflows/progress.py +445 -0
- empathy_os/workflows/progress_server.py +322 -0
- empathy_os/workflows/refactor_plan.py +693 -0
- empathy_os/workflows/release_prep.py +808 -0
- empathy_os/workflows/research_synthesis.py +404 -0
- empathy_os/workflows/secure_release.py +585 -0
- empathy_os/workflows/security_adapters.py +297 -0
- empathy_os/workflows/security_audit.py +1046 -0
- empathy_os/workflows/step_config.py +234 -0
- empathy_os/workflows/test5.py +125 -0
- empathy_os/workflows/test5_README.md +158 -0
- empathy_os/workflows/test_gen.py +1855 -0
- empathy_os/workflows/test_lifecycle.py +526 -0
- empathy_os/workflows/test_maintenance.py +626 -0
- empathy_os/workflows/test_maintenance_cli.py +590 -0
- empathy_os/workflows/test_maintenance_crew.py +821 -0
- empathy_os/workflows/xml_enhanced_crew.py +285 -0
- empathy_software_plugin/cli/__init__.py +120 -0
- empathy_software_plugin/cli/inspect.py +362 -0
- empathy_software_plugin/cli.py +3 -1
- empathy_software_plugin/wizards/__init__.py +42 -0
- empathy_software_plugin/wizards/advanced_debugging_wizard.py +392 -0
- empathy_software_plugin/wizards/agent_orchestration_wizard.py +511 -0
- empathy_software_plugin/wizards/ai_collaboration_wizard.py +503 -0
- empathy_software_plugin/wizards/ai_context_wizard.py +441 -0
- empathy_software_plugin/wizards/ai_documentation_wizard.py +503 -0
- empathy_software_plugin/wizards/base_wizard.py +288 -0
- empathy_software_plugin/wizards/book_chapter_wizard.py +519 -0
- empathy_software_plugin/wizards/code_review_wizard.py +606 -0
- empathy_software_plugin/wizards/debugging/__init__.py +50 -0
- empathy_software_plugin/wizards/debugging/bug_risk_analyzer.py +414 -0
- empathy_software_plugin/wizards/debugging/config_loaders.py +442 -0
- empathy_software_plugin/wizards/debugging/fix_applier.py +469 -0
- empathy_software_plugin/wizards/debugging/language_patterns.py +383 -0
- empathy_software_plugin/wizards/debugging/linter_parsers.py +470 -0
- empathy_software_plugin/wizards/debugging/verification.py +369 -0
- empathy_software_plugin/wizards/enhanced_testing_wizard.py +537 -0
- empathy_software_plugin/wizards/memory_enhanced_debugging_wizard.py +816 -0
- empathy_software_plugin/wizards/multi_model_wizard.py +501 -0
- empathy_software_plugin/wizards/pattern_extraction_wizard.py +422 -0
- empathy_software_plugin/wizards/pattern_retriever_wizard.py +400 -0
- empathy_software_plugin/wizards/performance/__init__.py +9 -0
- empathy_software_plugin/wizards/performance/bottleneck_detector.py +221 -0
- empathy_software_plugin/wizards/performance/profiler_parsers.py +278 -0
- empathy_software_plugin/wizards/performance/trajectory_analyzer.py +429 -0
- empathy_software_plugin/wizards/performance_profiling_wizard.py +305 -0
- empathy_software_plugin/wizards/prompt_engineering_wizard.py +425 -0
- empathy_software_plugin/wizards/rag_pattern_wizard.py +461 -0
- empathy_software_plugin/wizards/security/__init__.py +32 -0
- empathy_software_plugin/wizards/security/exploit_analyzer.py +290 -0
- empathy_software_plugin/wizards/security/owasp_patterns.py +241 -0
- empathy_software_plugin/wizards/security/vulnerability_scanner.py +604 -0
- empathy_software_plugin/wizards/security_analysis_wizard.py +322 -0
- empathy_software_plugin/wizards/security_learning_wizard.py +740 -0
- empathy_software_plugin/wizards/tech_debt_wizard.py +726 -0
- empathy_software_plugin/wizards/testing/__init__.py +27 -0
- empathy_software_plugin/wizards/testing/coverage_analyzer.py +459 -0
- empathy_software_plugin/wizards/testing/quality_analyzer.py +531 -0
- empathy_software_plugin/wizards/testing/test_suggester.py +533 -0
- empathy_software_plugin/wizards/testing_wizard.py +274 -0
- hot_reload/README.md +473 -0
- hot_reload/__init__.py +62 -0
- hot_reload/config.py +84 -0
- hot_reload/integration.py +228 -0
- hot_reload/reloader.py +298 -0
- hot_reload/watcher.py +179 -0
- hot_reload/websocket.py +176 -0
- scaffolding/README.md +589 -0
- scaffolding/__init__.py +35 -0
- scaffolding/__main__.py +14 -0
- scaffolding/cli.py +240 -0
- test_generator/__init__.py +38 -0
- test_generator/__main__.py +14 -0
- test_generator/cli.py +226 -0
- test_generator/generator.py +325 -0
- test_generator/risk_analyzer.py +216 -0
- workflow_patterns/__init__.py +33 -0
- workflow_patterns/behavior.py +249 -0
- workflow_patterns/core.py +76 -0
- workflow_patterns/output.py +99 -0
- workflow_patterns/registry.py +255 -0
- workflow_patterns/structural.py +288 -0
- workflow_scaffolding/__init__.py +11 -0
- workflow_scaffolding/__main__.py +12 -0
- workflow_scaffolding/cli.py +206 -0
- workflow_scaffolding/generator.py +265 -0
- agents/code_inspection/patterns/inspection/recurring_B112.json +0 -18
- agents/code_inspection/patterns/inspection/recurring_F541.json +0 -16
- agents/code_inspection/patterns/inspection/recurring_FORMAT.json +0 -25
- agents/code_inspection/patterns/inspection/recurring_bug_20250822_def456.json +0 -16
- agents/code_inspection/patterns/inspection/recurring_bug_20250915_abc123.json +0 -16
- agents/code_inspection/patterns/inspection/recurring_bug_20251212_3c5b9951.json +0 -16
- agents/code_inspection/patterns/inspection/recurring_bug_20251212_97c0f72f.json +0 -16
- agents/code_inspection/patterns/inspection/recurring_bug_20251212_a0871d53.json +0 -16
- agents/code_inspection/patterns/inspection/recurring_bug_20251212_a9b6ec41.json +0 -16
- agents/code_inspection/patterns/inspection/recurring_bug_null_001.json +0 -16
- agents/code_inspection/patterns/inspection/recurring_builtin.json +0 -16
- agents/compliance_anticipation_agent.py +0 -1422
- agents/compliance_db.py +0 -339
- agents/epic_integration_wizard.py +0 -530
- agents/notifications.py +0 -291
- agents/trust_building_behaviors.py +0 -872
- empathy_framework-3.7.0.dist-info/RECORD +0 -105
- {empathy_framework-3.7.0.dist-info → empathy_framework-3.8.0.dist-info}/WHEEL +0 -0
- {empathy_framework-3.7.0.dist-info → empathy_framework-3.8.0.dist-info}/entry_points.txt +0 -0
- {empathy_framework-3.7.0.dist-info → empathy_framework-3.8.0.dist-info}/licenses/LICENSE +0 -0
- /empathy_os/{monitoring.py → agent_monitoring.py} +0 -0
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
"""Redis Configuration for Empathy Framework
|
|
2
|
+
|
|
3
|
+
Handles connection to Redis from environment variables.
|
|
4
|
+
Supports Railway, redis.com, local Docker, or mock mode.
|
|
5
|
+
|
|
6
|
+
Environment Variables:
|
|
7
|
+
REDIS_URL: Full Redis URL (redis://user:pass@host:port) # pragma: allowlist secret
|
|
8
|
+
REDIS_HOST: Redis host (default: localhost)
|
|
9
|
+
REDIS_PORT: Redis port (default: 6379)
|
|
10
|
+
REDIS_PASSWORD: Redis password (optional)
|
|
11
|
+
REDIS_DB: Redis database number (default: 0)
|
|
12
|
+
EMPATHY_REDIS_MOCK: Set to "true" to use mock mode
|
|
13
|
+
|
|
14
|
+
Railway Auto-Detection:
|
|
15
|
+
When deployed on Railway, REDIS_URL is automatically set.
|
|
16
|
+
|
|
17
|
+
Usage:
|
|
18
|
+
from empathy_os.redis_config import get_redis_memory
|
|
19
|
+
|
|
20
|
+
# Automatically uses environment variables
|
|
21
|
+
memory = get_redis_memory()
|
|
22
|
+
|
|
23
|
+
# Or with explicit URL
|
|
24
|
+
memory = get_redis_memory(url="redis://localhost:6379")
|
|
25
|
+
|
|
26
|
+
Copyright 2025 Smart AI Memory, LLC
|
|
27
|
+
Licensed under Fair Source 0.9
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
import os
|
|
31
|
+
from urllib.parse import urlparse
|
|
32
|
+
|
|
33
|
+
from .short_term import RedisShortTermMemory
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def parse_redis_url(url: str) -> dict:
|
|
37
|
+
"""Parse Redis URL into connection parameters.
|
|
38
|
+
|
|
39
|
+
Args:
|
|
40
|
+
url: Redis URL (redis://user:pass@host:port/db) # pragma: allowlist secret
|
|
41
|
+
|
|
42
|
+
Returns:
|
|
43
|
+
Dict with host, port, password, db
|
|
44
|
+
|
|
45
|
+
"""
|
|
46
|
+
parsed = urlparse(url)
|
|
47
|
+
|
|
48
|
+
return {
|
|
49
|
+
"host": parsed.hostname or "localhost",
|
|
50
|
+
"port": parsed.port or 6379,
|
|
51
|
+
"password": parsed.password,
|
|
52
|
+
"db": int(parsed.path.lstrip("/") or 0) if parsed.path else 0,
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def get_redis_config() -> dict:
|
|
57
|
+
"""Get Redis configuration from environment variables.
|
|
58
|
+
|
|
59
|
+
Priority:
|
|
60
|
+
1. REDIS_URL (full URL, used by Railway)
|
|
61
|
+
2. Individual env vars (REDIS_HOST, REDIS_PORT, etc.)
|
|
62
|
+
3. Defaults (localhost:6379)
|
|
63
|
+
|
|
64
|
+
Returns:
|
|
65
|
+
Dict with connection parameters or {"use_mock": True}
|
|
66
|
+
|
|
67
|
+
"""
|
|
68
|
+
# Check for mock mode
|
|
69
|
+
if os.getenv("EMPATHY_REDIS_MOCK", "").lower() == "true":
|
|
70
|
+
return {"use_mock": True}
|
|
71
|
+
|
|
72
|
+
# Check for full URL (Railway, Heroku, etc.)
|
|
73
|
+
# Priority: REDIS_URL > REDIS_PUBLIC_URL > REDIS_PRIVATE_URL
|
|
74
|
+
redis_url = (
|
|
75
|
+
os.getenv("REDIS_URL") or os.getenv("REDIS_PUBLIC_URL") or os.getenv("REDIS_PRIVATE_URL")
|
|
76
|
+
)
|
|
77
|
+
if redis_url:
|
|
78
|
+
config = parse_redis_url(redis_url)
|
|
79
|
+
config["use_mock"] = False
|
|
80
|
+
return config
|
|
81
|
+
|
|
82
|
+
# Fall back to individual env vars
|
|
83
|
+
return {
|
|
84
|
+
"host": os.getenv("REDIS_HOST", "localhost"),
|
|
85
|
+
"port": int(os.getenv("REDIS_PORT", "6379")),
|
|
86
|
+
"password": os.getenv("REDIS_PASSWORD"),
|
|
87
|
+
"db": int(os.getenv("REDIS_DB", "0")),
|
|
88
|
+
"use_mock": False,
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
def get_redis_memory(
|
|
93
|
+
url: str | None = None,
|
|
94
|
+
use_mock: bool | None = None,
|
|
95
|
+
) -> RedisShortTermMemory:
|
|
96
|
+
"""Create a RedisShortTermMemory instance with environment-based config.
|
|
97
|
+
|
|
98
|
+
Args:
|
|
99
|
+
url: Optional explicit Redis URL (overrides env vars)
|
|
100
|
+
use_mock: Optional explicit mock mode (overrides env vars)
|
|
101
|
+
|
|
102
|
+
Returns:
|
|
103
|
+
Configured RedisShortTermMemory instance
|
|
104
|
+
|
|
105
|
+
Examples:
|
|
106
|
+
# Auto-configure from environment
|
|
107
|
+
memory = get_redis_memory()
|
|
108
|
+
|
|
109
|
+
# Explicit URL
|
|
110
|
+
memory = get_redis_memory(url="redis://localhost:6379")
|
|
111
|
+
|
|
112
|
+
# Force mock mode
|
|
113
|
+
memory = get_redis_memory(use_mock=True)
|
|
114
|
+
|
|
115
|
+
"""
|
|
116
|
+
# Explicit mock mode
|
|
117
|
+
if use_mock is True:
|
|
118
|
+
return RedisShortTermMemory(use_mock=True)
|
|
119
|
+
|
|
120
|
+
# Explicit URL
|
|
121
|
+
if url:
|
|
122
|
+
config = parse_redis_url(url)
|
|
123
|
+
return RedisShortTermMemory(
|
|
124
|
+
host=config["host"],
|
|
125
|
+
port=config["port"],
|
|
126
|
+
password=config["password"],
|
|
127
|
+
db=config["db"],
|
|
128
|
+
use_mock=False,
|
|
129
|
+
)
|
|
130
|
+
|
|
131
|
+
# Environment-based config
|
|
132
|
+
config = get_redis_config()
|
|
133
|
+
|
|
134
|
+
if config.get("use_mock"):
|
|
135
|
+
return RedisShortTermMemory(use_mock=True)
|
|
136
|
+
|
|
137
|
+
return RedisShortTermMemory(
|
|
138
|
+
host=config["host"],
|
|
139
|
+
port=config["port"],
|
|
140
|
+
password=config.get("password"),
|
|
141
|
+
db=config.get("db", 0),
|
|
142
|
+
use_mock=False,
|
|
143
|
+
)
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
def check_redis_connection() -> dict:
|
|
147
|
+
"""Check Redis connection and return status.
|
|
148
|
+
|
|
149
|
+
Returns:
|
|
150
|
+
Dict with connection status and info
|
|
151
|
+
|
|
152
|
+
Example:
|
|
153
|
+
>>> status = check_redis_connection()
|
|
154
|
+
>>> if status["connected"]:
|
|
155
|
+
... print(f"Connected to {status['host']}:{status['port']}")
|
|
156
|
+
|
|
157
|
+
"""
|
|
158
|
+
config = get_redis_config()
|
|
159
|
+
|
|
160
|
+
result = {
|
|
161
|
+
"config_source": "environment",
|
|
162
|
+
"use_mock": config.get("use_mock", False),
|
|
163
|
+
"host": config.get("host"),
|
|
164
|
+
"port": config.get("port"),
|
|
165
|
+
"has_password": bool(config.get("password")),
|
|
166
|
+
"db": config.get("db", 0),
|
|
167
|
+
"connected": False,
|
|
168
|
+
"error": None,
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
# Determine config source
|
|
172
|
+
if os.getenv("REDIS_URL"):
|
|
173
|
+
result["config_source"] = "REDIS_URL"
|
|
174
|
+
elif os.getenv("REDIS_PUBLIC_URL"):
|
|
175
|
+
result["config_source"] = "REDIS_PUBLIC_URL (Railway)"
|
|
176
|
+
elif os.getenv("REDIS_PRIVATE_URL"):
|
|
177
|
+
result["config_source"] = "REDIS_PRIVATE_URL"
|
|
178
|
+
elif os.getenv("REDIS_HOST"):
|
|
179
|
+
result["config_source"] = "REDIS_HOST"
|
|
180
|
+
|
|
181
|
+
if result["use_mock"]:
|
|
182
|
+
result["connected"] = True
|
|
183
|
+
result["config_source"] = "mock_mode"
|
|
184
|
+
return result
|
|
185
|
+
|
|
186
|
+
try:
|
|
187
|
+
memory = get_redis_memory()
|
|
188
|
+
result["connected"] = memory.ping()
|
|
189
|
+
if result["connected"]:
|
|
190
|
+
stats = memory.get_stats()
|
|
191
|
+
result["memory_used"] = stats.get("used_memory")
|
|
192
|
+
result["total_keys"] = stats.get("total_keys")
|
|
193
|
+
except Exception as e:
|
|
194
|
+
result["error"] = str(e)
|
|
195
|
+
|
|
196
|
+
return result
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
# Convenience function for Railway deployments
|
|
200
|
+
def get_railway_redis() -> RedisShortTermMemory:
|
|
201
|
+
"""Get Redis configured for Railway deployment.
|
|
202
|
+
|
|
203
|
+
Railway automatically sets REDIS_URL when you add a Redis service.
|
|
204
|
+
For external access (like from VSCode extension), use REDIS_PUBLIC_URL.
|
|
205
|
+
|
|
206
|
+
Returns:
|
|
207
|
+
RedisShortTermMemory configured for Railway
|
|
208
|
+
|
|
209
|
+
Raises:
|
|
210
|
+
EnvironmentError: If no Redis URL is set
|
|
211
|
+
|
|
212
|
+
"""
|
|
213
|
+
redis_url = (
|
|
214
|
+
os.getenv("REDIS_URL") or os.getenv("REDIS_PUBLIC_URL") or os.getenv("REDIS_PRIVATE_URL")
|
|
215
|
+
)
|
|
216
|
+
|
|
217
|
+
if not redis_url:
|
|
218
|
+
raise OSError(
|
|
219
|
+
"REDIS_URL not found. Make sure Redis is added to your Railway project.\n"
|
|
220
|
+
"Run: railway add --database redis\n"
|
|
221
|
+
"For external access, use REDIS_PUBLIC_URL",
|
|
222
|
+
)
|
|
223
|
+
|
|
224
|
+
return get_redis_memory(url=redis_url)
|