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.
- coach_wizards/__init__.py +11 -12
- coach_wizards/accessibility_wizard.py +12 -12
- coach_wizards/api_wizard.py +12 -12
- coach_wizards/base_wizard.py +26 -20
- coach_wizards/cicd_wizard.py +15 -13
- coach_wizards/code_reviewer_README.md +60 -0
- coach_wizards/code_reviewer_wizard.py +180 -0
- coach_wizards/compliance_wizard.py +12 -12
- coach_wizards/database_wizard.py +12 -12
- coach_wizards/debugging_wizard.py +12 -12
- coach_wizards/documentation_wizard.py +12 -12
- coach_wizards/generate_wizards.py +1 -2
- coach_wizards/localization_wizard.py +101 -19
- coach_wizards/migration_wizard.py +12 -12
- coach_wizards/monitoring_wizard.py +12 -12
- coach_wizards/observability_wizard.py +12 -12
- coach_wizards/performance_wizard.py +12 -12
- coach_wizards/prompt_engineering_wizard.py +22 -25
- coach_wizards/refactoring_wizard.py +12 -12
- coach_wizards/scaling_wizard.py +12 -12
- coach_wizards/security_wizard.py +12 -12
- coach_wizards/testing_wizard.py +12 -12
- {empathy_framework-3.2.3.dist-info → empathy_framework-3.8.2.dist-info}/METADATA +513 -58
- empathy_framework-3.8.2.dist-info/RECORD +333 -0
- empathy_framework-3.8.2.dist-info/entry_points.txt +22 -0
- {empathy_framework-3.2.3.dist-info → empathy_framework-3.8.2.dist-info}/top_level.txt +5 -1
- empathy_healthcare_plugin/__init__.py +1 -2
- 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/__init__.py +7 -7
- 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/claude_memory.py +14 -15
- empathy_llm_toolkit/cli/__init__.py +8 -0
- empathy_llm_toolkit/cli/sync_claude.py +487 -0
- empathy_llm_toolkit/code_health.py +177 -22
- empathy_llm_toolkit/config/__init__.py +29 -0
- empathy_llm_toolkit/config/unified.py +295 -0
- empathy_llm_toolkit/contextual_patterns.py +11 -12
- empathy_llm_toolkit/core.py +51 -49
- empathy_llm_toolkit/git_pattern_extractor.py +16 -12
- empathy_llm_toolkit/levels.py +6 -13
- empathy_llm_toolkit/pattern_confidence.py +14 -18
- empathy_llm_toolkit/pattern_resolver.py +10 -12
- empathy_llm_toolkit/pattern_summary.py +13 -11
- empathy_llm_toolkit/providers.py +194 -28
- 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/session_status.py +18 -20
- empathy_llm_toolkit/state.py +20 -21
- 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 +76 -77
- empathy_os/adaptive/__init__.py +13 -0
- empathy_os/adaptive/task_complexity.py +127 -0
- empathy_os/{monitoring.py → agent_monitoring.py} +27 -27
- 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 +515 -109
- empathy_os/cli_unified.py +189 -42
- empathy_os/config/__init__.py +63 -0
- empathy_os/config/xml_config.py +239 -0
- empathy_os/config.py +87 -36
- empathy_os/coordination.py +48 -54
- empathy_os/core.py +90 -99
- empathy_os/cost_tracker.py +20 -23
- empathy_os/dashboard/__init__.py +15 -0
- empathy_os/dashboard/server.py +743 -0
- empathy_os/discovery.py +9 -11
- empathy_os/emergence.py +20 -21
- empathy_os/exceptions.py +18 -30
- empathy_os/feedback_loops.py +27 -30
- empathy_os/levels.py +31 -34
- empathy_os/leverage_points.py +27 -28
- empathy_os/logging_config.py +11 -12
- 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/pattern_library.py +29 -28
- empathy_os/persistence.py +30 -34
- empathy_os/platform_utils.py +261 -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/redis_config.py +144 -58
- empathy_os/redis_memory.py +53 -56
- 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/templates.py +12 -11
- empathy_os/trust/__init__.py +28 -0
- empathy_os/trust/circuit_breaker.py +579 -0
- empathy_os/trust_building.py +44 -36
- 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.py → workflow_commands.py} +123 -31
- 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/__init__.py +1 -2
- empathy_software_plugin/cli/__init__.py +120 -0
- empathy_software_plugin/cli/inspect.py +362 -0
- empathy_software_plugin/cli.py +35 -26
- empathy_software_plugin/plugin.py +4 -8
- 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 -1427
- agents/epic_integration_wizard.py +0 -541
- agents/trust_building_behaviors.py +0 -891
- empathy_framework-3.2.3.dist-info/RECORD +0 -104
- empathy_framework-3.2.3.dist-info/entry_points.txt +0 -7
- empathy_llm_toolkit/htmlcov/status.json +0 -1
- empathy_llm_toolkit/security/htmlcov/status.json +0 -1
- {empathy_framework-3.2.3.dist-info → empathy_framework-3.8.2.dist-info}/WHEEL +0 -0
- {empathy_framework-3.2.3.dist-info → empathy_framework-3.8.2.dist-info}/licenses/LICENSE +0 -0
empathy_os/redis_memory.py
CHANGED
|
@@ -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
|
+
]
|