empathy-framework 4.6.6__py3-none-any.whl → 4.7.1__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.
- empathy_framework-4.7.1.dist-info/METADATA +690 -0
- empathy_framework-4.7.1.dist-info/RECORD +379 -0
- {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.1.dist-info}/top_level.txt +1 -2
- empathy_healthcare_plugin/monitors/monitoring/__init__.py +9 -9
- empathy_llm_toolkit/agent_factory/__init__.py +6 -6
- empathy_llm_toolkit/agent_factory/adapters/wizard_adapter.py +7 -10
- empathy_llm_toolkit/agents_md/__init__.py +22 -0
- empathy_llm_toolkit/agents_md/loader.py +218 -0
- empathy_llm_toolkit/agents_md/parser.py +271 -0
- empathy_llm_toolkit/agents_md/registry.py +307 -0
- empathy_llm_toolkit/commands/__init__.py +51 -0
- empathy_llm_toolkit/commands/context.py +375 -0
- empathy_llm_toolkit/commands/loader.py +301 -0
- empathy_llm_toolkit/commands/models.py +231 -0
- empathy_llm_toolkit/commands/parser.py +371 -0
- empathy_llm_toolkit/commands/registry.py +429 -0
- empathy_llm_toolkit/config/__init__.py +8 -8
- empathy_llm_toolkit/config/unified.py +3 -7
- empathy_llm_toolkit/context/__init__.py +22 -0
- empathy_llm_toolkit/context/compaction.py +455 -0
- empathy_llm_toolkit/context/manager.py +434 -0
- empathy_llm_toolkit/hooks/__init__.py +24 -0
- empathy_llm_toolkit/hooks/config.py +306 -0
- empathy_llm_toolkit/hooks/executor.py +289 -0
- empathy_llm_toolkit/hooks/registry.py +302 -0
- empathy_llm_toolkit/hooks/scripts/__init__.py +39 -0
- empathy_llm_toolkit/hooks/scripts/evaluate_session.py +201 -0
- empathy_llm_toolkit/hooks/scripts/first_time_init.py +285 -0
- empathy_llm_toolkit/hooks/scripts/pre_compact.py +207 -0
- empathy_llm_toolkit/hooks/scripts/session_end.py +183 -0
- empathy_llm_toolkit/hooks/scripts/session_start.py +163 -0
- empathy_llm_toolkit/hooks/scripts/suggest_compact.py +225 -0
- empathy_llm_toolkit/learning/__init__.py +30 -0
- empathy_llm_toolkit/learning/evaluator.py +438 -0
- empathy_llm_toolkit/learning/extractor.py +514 -0
- empathy_llm_toolkit/learning/storage.py +560 -0
- empathy_llm_toolkit/providers.py +4 -11
- empathy_llm_toolkit/security/__init__.py +17 -17
- empathy_llm_toolkit/utils/tokens.py +2 -5
- empathy_os/__init__.py +202 -70
- empathy_os/cache_monitor.py +5 -3
- empathy_os/cli/__init__.py +11 -55
- empathy_os/cli/__main__.py +29 -15
- empathy_os/cli/commands/inspection.py +21 -12
- empathy_os/cli/commands/memory.py +4 -12
- empathy_os/cli/commands/profiling.py +198 -0
- empathy_os/cli/commands/utilities.py +27 -7
- empathy_os/cli.py +28 -57
- empathy_os/cli_unified.py +525 -1164
- empathy_os/cost_tracker.py +9 -3
- empathy_os/dashboard/server.py +200 -2
- empathy_os/hot_reload/__init__.py +7 -7
- empathy_os/hot_reload/config.py +6 -7
- empathy_os/hot_reload/integration.py +35 -35
- empathy_os/hot_reload/reloader.py +57 -57
- empathy_os/hot_reload/watcher.py +28 -28
- empathy_os/hot_reload/websocket.py +2 -2
- empathy_os/memory/__init__.py +11 -4
- empathy_os/memory/claude_memory.py +1 -1
- empathy_os/memory/cross_session.py +8 -12
- empathy_os/memory/edges.py +6 -6
- empathy_os/memory/file_session.py +770 -0
- empathy_os/memory/graph.py +30 -30
- empathy_os/memory/nodes.py +6 -6
- empathy_os/memory/short_term.py +15 -9
- empathy_os/memory/unified.py +606 -140
- empathy_os/meta_workflows/agent_creator.py +3 -9
- empathy_os/meta_workflows/cli_meta_workflows.py +113 -53
- empathy_os/meta_workflows/form_engine.py +6 -18
- empathy_os/meta_workflows/intent_detector.py +64 -24
- empathy_os/meta_workflows/models.py +3 -1
- empathy_os/meta_workflows/pattern_learner.py +13 -31
- empathy_os/meta_workflows/plan_generator.py +55 -47
- empathy_os/meta_workflows/session_context.py +2 -3
- empathy_os/meta_workflows/workflow.py +20 -51
- empathy_os/models/cli.py +2 -2
- empathy_os/models/tasks.py +1 -2
- empathy_os/models/telemetry.py +4 -1
- empathy_os/models/token_estimator.py +3 -1
- empathy_os/monitoring/alerts.py +938 -9
- empathy_os/monitoring/alerts_cli.py +346 -183
- empathy_os/orchestration/execution_strategies.py +12 -29
- empathy_os/orchestration/pattern_learner.py +20 -26
- empathy_os/orchestration/real_tools.py +6 -15
- empathy_os/platform_utils.py +2 -1
- empathy_os/plugins/__init__.py +2 -2
- empathy_os/plugins/base.py +64 -64
- empathy_os/plugins/registry.py +32 -32
- empathy_os/project_index/index.py +49 -15
- empathy_os/project_index/models.py +1 -2
- empathy_os/project_index/reports.py +1 -1
- empathy_os/project_index/scanner.py +1 -0
- empathy_os/redis_memory.py +10 -7
- empathy_os/resilience/__init__.py +1 -1
- empathy_os/resilience/health.py +10 -10
- empathy_os/routing/__init__.py +7 -7
- empathy_os/routing/chain_executor.py +37 -37
- empathy_os/routing/classifier.py +36 -36
- empathy_os/routing/smart_router.py +40 -40
- empathy_os/routing/{wizard_registry.py → workflow_registry.py} +47 -47
- empathy_os/scaffolding/__init__.py +8 -8
- empathy_os/scaffolding/__main__.py +1 -1
- empathy_os/scaffolding/cli.py +28 -28
- empathy_os/socratic/__init__.py +3 -19
- empathy_os/socratic/ab_testing.py +25 -36
- empathy_os/socratic/blueprint.py +38 -38
- empathy_os/socratic/cli.py +34 -20
- empathy_os/socratic/collaboration.py +30 -28
- empathy_os/socratic/domain_templates.py +9 -1
- empathy_os/socratic/embeddings.py +17 -13
- empathy_os/socratic/engine.py +135 -70
- empathy_os/socratic/explainer.py +70 -60
- empathy_os/socratic/feedback.py +24 -19
- empathy_os/socratic/forms.py +15 -10
- empathy_os/socratic/generator.py +51 -35
- empathy_os/socratic/llm_analyzer.py +25 -23
- empathy_os/socratic/mcp_server.py +99 -159
- empathy_os/socratic/session.py +19 -13
- empathy_os/socratic/storage.py +98 -67
- empathy_os/socratic/success.py +38 -27
- empathy_os/socratic/visual_editor.py +51 -39
- empathy_os/socratic/web_ui.py +99 -66
- empathy_os/telemetry/cli.py +3 -1
- empathy_os/telemetry/usage_tracker.py +1 -3
- empathy_os/test_generator/__init__.py +3 -3
- empathy_os/test_generator/cli.py +28 -28
- empathy_os/test_generator/generator.py +64 -66
- empathy_os/test_generator/risk_analyzer.py +11 -11
- empathy_os/vscode_bridge 2.py +173 -0
- empathy_os/vscode_bridge.py +173 -0
- empathy_os/workflows/__init__.py +212 -120
- empathy_os/workflows/batch_processing.py +8 -24
- empathy_os/workflows/bug_predict.py +1 -1
- empathy_os/workflows/code_review.py +20 -5
- empathy_os/workflows/code_review_pipeline.py +13 -8
- empathy_os/workflows/keyboard_shortcuts/workflow.py +6 -2
- empathy_os/workflows/manage_documentation.py +1 -0
- empathy_os/workflows/orchestrated_health_check.py +6 -11
- empathy_os/workflows/orchestrated_release_prep.py +3 -3
- empathy_os/workflows/pr_review.py +18 -10
- empathy_os/workflows/progressive/README 2.md +454 -0
- empathy_os/workflows/progressive/__init__ 2.py +92 -0
- empathy_os/workflows/progressive/__init__.py +2 -12
- empathy_os/workflows/progressive/cli 2.py +242 -0
- empathy_os/workflows/progressive/cli.py +14 -37
- empathy_os/workflows/progressive/core 2.py +488 -0
- empathy_os/workflows/progressive/core.py +12 -12
- empathy_os/workflows/progressive/orchestrator 2.py +701 -0
- empathy_os/workflows/progressive/orchestrator.py +166 -144
- empathy_os/workflows/progressive/reports 2.py +528 -0
- empathy_os/workflows/progressive/reports.py +22 -31
- empathy_os/workflows/progressive/telemetry 2.py +280 -0
- empathy_os/workflows/progressive/telemetry.py +8 -14
- empathy_os/workflows/progressive/test_gen 2.py +514 -0
- empathy_os/workflows/progressive/test_gen.py +29 -48
- empathy_os/workflows/progressive/workflow 2.py +628 -0
- empathy_os/workflows/progressive/workflow.py +31 -70
- empathy_os/workflows/release_prep.py +21 -6
- empathy_os/workflows/release_prep_crew.py +1 -0
- empathy_os/workflows/secure_release.py +13 -6
- empathy_os/workflows/security_audit.py +8 -3
- empathy_os/workflows/test_coverage_boost_crew.py +3 -2
- empathy_os/workflows/test_maintenance_crew.py +1 -0
- empathy_os/workflows/test_runner.py +16 -12
- empathy_software_plugin/SOFTWARE_PLUGIN_README.md +25 -703
- empathy_software_plugin/cli.py +0 -122
- patterns/README.md +119 -0
- patterns/__init__.py +95 -0
- patterns/behavior.py +298 -0
- patterns/code_review_memory.json +441 -0
- patterns/core.py +97 -0
- patterns/debugging.json +3763 -0
- patterns/empathy.py +268 -0
- patterns/health_check_memory.json +505 -0
- patterns/input.py +161 -0
- patterns/memory_graph.json +8 -0
- patterns/refactoring_memory.json +1113 -0
- patterns/registry.py +663 -0
- patterns/security_memory.json +8 -0
- patterns/structural.py +415 -0
- patterns/validation.py +194 -0
- coach_wizards/__init__.py +0 -45
- coach_wizards/accessibility_wizard.py +0 -91
- coach_wizards/api_wizard.py +0 -91
- coach_wizards/base_wizard.py +0 -209
- coach_wizards/cicd_wizard.py +0 -91
- coach_wizards/code_reviewer_README.md +0 -60
- coach_wizards/code_reviewer_wizard.py +0 -180
- coach_wizards/compliance_wizard.py +0 -91
- coach_wizards/database_wizard.py +0 -91
- coach_wizards/debugging_wizard.py +0 -91
- coach_wizards/documentation_wizard.py +0 -91
- coach_wizards/generate_wizards.py +0 -347
- coach_wizards/localization_wizard.py +0 -173
- coach_wizards/migration_wizard.py +0 -91
- coach_wizards/monitoring_wizard.py +0 -91
- coach_wizards/observability_wizard.py +0 -91
- coach_wizards/performance_wizard.py +0 -91
- coach_wizards/prompt_engineering_wizard.py +0 -661
- coach_wizards/refactoring_wizard.py +0 -91
- coach_wizards/scaling_wizard.py +0 -90
- coach_wizards/security_wizard.py +0 -92
- coach_wizards/testing_wizard.py +0 -91
- empathy_framework-4.6.6.dist-info/METADATA +0 -1597
- empathy_framework-4.6.6.dist-info/RECORD +0 -410
- empathy_llm_toolkit/wizards/__init__.py +0 -43
- empathy_llm_toolkit/wizards/base_wizard.py +0 -364
- empathy_llm_toolkit/wizards/customer_support_wizard.py +0 -190
- empathy_llm_toolkit/wizards/healthcare_wizard.py +0 -378
- empathy_llm_toolkit/wizards/patient_assessment_README.md +0 -64
- empathy_llm_toolkit/wizards/patient_assessment_wizard.py +0 -193
- empathy_llm_toolkit/wizards/technology_wizard.py +0 -209
- empathy_os/wizard_factory_cli.py +0 -170
- empathy_software_plugin/wizards/__init__.py +0 -42
- empathy_software_plugin/wizards/advanced_debugging_wizard.py +0 -395
- empathy_software_plugin/wizards/agent_orchestration_wizard.py +0 -511
- empathy_software_plugin/wizards/ai_collaboration_wizard.py +0 -503
- empathy_software_plugin/wizards/ai_context_wizard.py +0 -441
- empathy_software_plugin/wizards/ai_documentation_wizard.py +0 -503
- empathy_software_plugin/wizards/base_wizard.py +0 -288
- empathy_software_plugin/wizards/book_chapter_wizard.py +0 -519
- empathy_software_plugin/wizards/code_review_wizard.py +0 -604
- empathy_software_plugin/wizards/debugging/__init__.py +0 -50
- empathy_software_plugin/wizards/debugging/bug_risk_analyzer.py +0 -414
- empathy_software_plugin/wizards/debugging/config_loaders.py +0 -446
- empathy_software_plugin/wizards/debugging/fix_applier.py +0 -469
- empathy_software_plugin/wizards/debugging/language_patterns.py +0 -385
- empathy_software_plugin/wizards/debugging/linter_parsers.py +0 -470
- empathy_software_plugin/wizards/debugging/verification.py +0 -369
- empathy_software_plugin/wizards/enhanced_testing_wizard.py +0 -537
- empathy_software_plugin/wizards/memory_enhanced_debugging_wizard.py +0 -816
- empathy_software_plugin/wizards/multi_model_wizard.py +0 -501
- empathy_software_plugin/wizards/pattern_extraction_wizard.py +0 -422
- empathy_software_plugin/wizards/pattern_retriever_wizard.py +0 -400
- empathy_software_plugin/wizards/performance/__init__.py +0 -9
- empathy_software_plugin/wizards/performance/bottleneck_detector.py +0 -221
- empathy_software_plugin/wizards/performance/profiler_parsers.py +0 -278
- empathy_software_plugin/wizards/performance/trajectory_analyzer.py +0 -429
- empathy_software_plugin/wizards/performance_profiling_wizard.py +0 -305
- empathy_software_plugin/wizards/prompt_engineering_wizard.py +0 -425
- empathy_software_plugin/wizards/rag_pattern_wizard.py +0 -461
- empathy_software_plugin/wizards/security/__init__.py +0 -32
- empathy_software_plugin/wizards/security/exploit_analyzer.py +0 -290
- empathy_software_plugin/wizards/security/owasp_patterns.py +0 -241
- empathy_software_plugin/wizards/security/vulnerability_scanner.py +0 -604
- empathy_software_plugin/wizards/security_analysis_wizard.py +0 -322
- empathy_software_plugin/wizards/security_learning_wizard.py +0 -740
- empathy_software_plugin/wizards/tech_debt_wizard.py +0 -726
- empathy_software_plugin/wizards/testing/__init__.py +0 -27
- empathy_software_plugin/wizards/testing/coverage_analyzer.py +0 -459
- empathy_software_plugin/wizards/testing/quality_analyzer.py +0 -525
- empathy_software_plugin/wizards/testing/test_suggester.py +0 -533
- empathy_software_plugin/wizards/testing_wizard.py +0 -274
- wizards/__init__.py +0 -82
- wizards/admission_assessment_wizard.py +0 -644
- wizards/care_plan.py +0 -321
- wizards/clinical_assessment.py +0 -769
- wizards/discharge_planning.py +0 -77
- wizards/discharge_summary_wizard.py +0 -468
- wizards/dosage_calculation.py +0 -497
- wizards/incident_report_wizard.py +0 -454
- wizards/medication_reconciliation.py +0 -85
- wizards/nursing_assessment.py +0 -171
- wizards/patient_education.py +0 -654
- wizards/quality_improvement.py +0 -705
- wizards/sbar_report.py +0 -324
- wizards/sbar_wizard.py +0 -608
- wizards/shift_handoff_wizard.py +0 -535
- wizards/soap_note_wizard.py +0 -679
- wizards/treatment_plan.py +0 -15
- {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.1.dist-info}/WHEEL +0 -0
- {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.1.dist-info}/entry_points.txt +0 -0
- {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.1.dist-info}/licenses/LICENSE +0 -0
empathy_os/__init__.py
CHANGED
|
@@ -59,76 +59,208 @@ __version__ = "4.6.5"
|
|
|
59
59
|
__author__ = "Patrick Roebuck"
|
|
60
60
|
__email__ = "hello@deepstudy.ai"
|
|
61
61
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
)
|
|
73
|
-
from .
|
|
74
|
-
from .
|
|
75
|
-
from .
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
from .
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
62
|
+
# =============================================================================
|
|
63
|
+
# LAZY IMPORTS - Deferred loading for faster startup
|
|
64
|
+
# =============================================================================
|
|
65
|
+
# Instead of importing everything at module load, we use __getattr__ to load
|
|
66
|
+
# modules only when they're actually accessed. This reduces import time from
|
|
67
|
+
# ~1s to ~0.05s for simple use cases.
|
|
68
|
+
|
|
69
|
+
from typing import TYPE_CHECKING
|
|
70
|
+
|
|
71
|
+
if TYPE_CHECKING:
|
|
72
|
+
# Type hints for IDE support (not evaluated at runtime)
|
|
73
|
+
from .agent_monitoring import AgentMetrics, AgentMonitor, TeamMetrics
|
|
74
|
+
from .config import EmpathyConfig, load_config
|
|
75
|
+
from .coordination import (
|
|
76
|
+
AgentCoordinator,
|
|
77
|
+
AgentTask,
|
|
78
|
+
ConflictResolver,
|
|
79
|
+
ResolutionResult,
|
|
80
|
+
ResolutionStrategy,
|
|
81
|
+
TeamPriorities,
|
|
82
|
+
TeamSession,
|
|
83
|
+
)
|
|
84
|
+
from .core import EmpathyOS
|
|
85
|
+
from .emergence import EmergenceDetector
|
|
86
|
+
from .exceptions import (
|
|
87
|
+
CollaborationStateError,
|
|
88
|
+
ConfidenceThresholdError,
|
|
89
|
+
EmpathyFrameworkError,
|
|
90
|
+
EmpathyLevelError,
|
|
91
|
+
FeedbackLoopError,
|
|
92
|
+
LeveragePointError,
|
|
93
|
+
PatternNotFoundError,
|
|
94
|
+
TrustThresholdError,
|
|
95
|
+
ValidationError,
|
|
96
|
+
)
|
|
97
|
+
from .feedback_loops import FeedbackLoopDetector
|
|
98
|
+
from .levels import (
|
|
99
|
+
Level1Reactive,
|
|
100
|
+
Level2Guided,
|
|
101
|
+
Level3Proactive,
|
|
102
|
+
Level4Anticipatory,
|
|
103
|
+
Level5Systems,
|
|
104
|
+
)
|
|
105
|
+
from .leverage_points import LeveragePointAnalyzer
|
|
106
|
+
from .logging_config import LoggingConfig, get_logger
|
|
107
|
+
from .memory import (
|
|
108
|
+
AccessTier,
|
|
109
|
+
AgentCredentials,
|
|
110
|
+
AuditEvent,
|
|
111
|
+
AuditLogger,
|
|
112
|
+
Classification,
|
|
113
|
+
ClassificationRules,
|
|
114
|
+
ClaudeMemoryConfig,
|
|
115
|
+
ClaudeMemoryLoader,
|
|
116
|
+
ConflictContext,
|
|
117
|
+
EncryptionManager,
|
|
118
|
+
Environment,
|
|
119
|
+
MemDocsStorage,
|
|
120
|
+
MemoryConfig,
|
|
121
|
+
MemoryPermissionError,
|
|
122
|
+
PatternMetadata,
|
|
123
|
+
PIIDetection,
|
|
124
|
+
PIIPattern,
|
|
125
|
+
PIIScrubber,
|
|
126
|
+
RedisShortTermMemory,
|
|
127
|
+
SecretDetection,
|
|
128
|
+
SecretsDetector,
|
|
129
|
+
SecretType,
|
|
130
|
+
SecureMemDocsIntegration,
|
|
131
|
+
SecurePattern,
|
|
132
|
+
SecurityError,
|
|
133
|
+
SecurityViolation,
|
|
134
|
+
Severity,
|
|
135
|
+
StagedPattern,
|
|
136
|
+
TTLStrategy,
|
|
137
|
+
UnifiedMemory,
|
|
138
|
+
check_redis_connection,
|
|
139
|
+
detect_secrets,
|
|
140
|
+
get_railway_redis,
|
|
141
|
+
get_redis_config,
|
|
142
|
+
get_redis_memory,
|
|
143
|
+
)
|
|
144
|
+
from .pattern_library import Pattern, PatternLibrary, PatternMatch
|
|
145
|
+
from .persistence import MetricsCollector, PatternPersistence, StateManager
|
|
146
|
+
from .trust_building import TrustBuildingBehaviors
|
|
147
|
+
|
|
148
|
+
# Mapping of attribute names to their module paths
|
|
149
|
+
_LAZY_IMPORTS: dict[str, tuple[str, str]] = {
|
|
150
|
+
# agent_monitoring
|
|
151
|
+
"AgentMetrics": (".agent_monitoring", "AgentMetrics"),
|
|
152
|
+
"AgentMonitor": (".agent_monitoring", "AgentMonitor"),
|
|
153
|
+
"TeamMetrics": (".agent_monitoring", "TeamMetrics"),
|
|
154
|
+
# config
|
|
155
|
+
"EmpathyConfig": (".config", "EmpathyConfig"),
|
|
156
|
+
"load_config": (".config", "load_config"),
|
|
157
|
+
# coordination
|
|
158
|
+
"AgentCoordinator": (".coordination", "AgentCoordinator"),
|
|
159
|
+
"AgentTask": (".coordination", "AgentTask"),
|
|
160
|
+
"ConflictResolver": (".coordination", "ConflictResolver"),
|
|
161
|
+
"ResolutionResult": (".coordination", "ResolutionResult"),
|
|
162
|
+
"ResolutionStrategy": (".coordination", "ResolutionStrategy"),
|
|
163
|
+
"TeamPriorities": (".coordination", "TeamPriorities"),
|
|
164
|
+
"TeamSession": (".coordination", "TeamSession"),
|
|
165
|
+
# core
|
|
166
|
+
"EmpathyOS": (".core", "EmpathyOS"),
|
|
167
|
+
# emergence
|
|
168
|
+
"EmergenceDetector": (".emergence", "EmergenceDetector"),
|
|
169
|
+
# exceptions
|
|
170
|
+
"CollaborationStateError": (".exceptions", "CollaborationStateError"),
|
|
171
|
+
"ConfidenceThresholdError": (".exceptions", "ConfidenceThresholdError"),
|
|
172
|
+
"EmpathyFrameworkError": (".exceptions", "EmpathyFrameworkError"),
|
|
173
|
+
"EmpathyLevelError": (".exceptions", "EmpathyLevelError"),
|
|
174
|
+
"FeedbackLoopError": (".exceptions", "FeedbackLoopError"),
|
|
175
|
+
"LeveragePointError": (".exceptions", "LeveragePointError"),
|
|
176
|
+
"PatternNotFoundError": (".exceptions", "PatternNotFoundError"),
|
|
177
|
+
"TrustThresholdError": (".exceptions", "TrustThresholdError"),
|
|
178
|
+
"ValidationError": (".exceptions", "ValidationError"),
|
|
179
|
+
# feedback_loops
|
|
180
|
+
"FeedbackLoopDetector": (".feedback_loops", "FeedbackLoopDetector"),
|
|
181
|
+
# levels
|
|
182
|
+
"Level1Reactive": (".levels", "Level1Reactive"),
|
|
183
|
+
"Level2Guided": (".levels", "Level2Guided"),
|
|
184
|
+
"Level3Proactive": (".levels", "Level3Proactive"),
|
|
185
|
+
"Level4Anticipatory": (".levels", "Level4Anticipatory"),
|
|
186
|
+
"Level5Systems": (".levels", "Level5Systems"),
|
|
187
|
+
# leverage_points
|
|
188
|
+
"LeveragePointAnalyzer": (".leverage_points", "LeveragePointAnalyzer"),
|
|
189
|
+
# logging_config
|
|
190
|
+
"LoggingConfig": (".logging_config", "LoggingConfig"),
|
|
191
|
+
"get_logger": (".logging_config", "get_logger"),
|
|
192
|
+
# memory module
|
|
193
|
+
"AccessTier": (".memory", "AccessTier"),
|
|
194
|
+
"AgentCredentials": (".memory", "AgentCredentials"),
|
|
195
|
+
"AuditEvent": (".memory", "AuditEvent"),
|
|
196
|
+
"AuditLogger": (".memory", "AuditLogger"),
|
|
197
|
+
"Classification": (".memory", "Classification"),
|
|
198
|
+
"ClassificationRules": (".memory", "ClassificationRules"),
|
|
199
|
+
"ClaudeMemoryConfig": (".memory", "ClaudeMemoryConfig"),
|
|
200
|
+
"ClaudeMemoryLoader": (".memory", "ClaudeMemoryLoader"),
|
|
201
|
+
"ConflictContext": (".memory", "ConflictContext"),
|
|
202
|
+
"EncryptionManager": (".memory", "EncryptionManager"),
|
|
203
|
+
"Environment": (".memory", "Environment"),
|
|
204
|
+
"MemDocsStorage": (".memory", "MemDocsStorage"),
|
|
205
|
+
"MemoryConfig": (".memory", "MemoryConfig"),
|
|
206
|
+
"MemoryPermissionError": (".memory", "MemoryPermissionError"),
|
|
207
|
+
"PatternMetadata": (".memory", "PatternMetadata"),
|
|
208
|
+
"PIIDetection": (".memory", "PIIDetection"),
|
|
209
|
+
"PIIPattern": (".memory", "PIIPattern"),
|
|
210
|
+
"PIIScrubber": (".memory", "PIIScrubber"),
|
|
211
|
+
"RedisShortTermMemory": (".memory", "RedisShortTermMemory"),
|
|
212
|
+
"SecretDetection": (".memory", "SecretDetection"),
|
|
213
|
+
"SecretsDetector": (".memory", "SecretsDetector"),
|
|
214
|
+
"SecretType": (".memory", "SecretType"),
|
|
215
|
+
"SecureMemDocsIntegration": (".memory", "SecureMemDocsIntegration"),
|
|
216
|
+
"SecurePattern": (".memory", "SecurePattern"),
|
|
217
|
+
"SecurityError": (".memory", "SecurityError"),
|
|
218
|
+
"SecurityViolation": (".memory", "SecurityViolation"),
|
|
219
|
+
"Severity": (".memory", "Severity"),
|
|
220
|
+
"StagedPattern": (".memory", "StagedPattern"),
|
|
221
|
+
"TTLStrategy": (".memory", "TTLStrategy"),
|
|
222
|
+
"UnifiedMemory": (".memory", "UnifiedMemory"),
|
|
223
|
+
"check_redis_connection": (".memory", "check_redis_connection"),
|
|
224
|
+
"detect_secrets": (".memory", "detect_secrets"),
|
|
225
|
+
"get_railway_redis": (".memory", "get_railway_redis"),
|
|
226
|
+
"get_redis_config": (".memory", "get_redis_config"),
|
|
227
|
+
"get_redis_memory": (".memory", "get_redis_memory"),
|
|
228
|
+
# pattern_library
|
|
229
|
+
"Pattern": (".pattern_library", "Pattern"),
|
|
230
|
+
"PatternLibrary": (".pattern_library", "PatternLibrary"),
|
|
231
|
+
"PatternMatch": (".pattern_library", "PatternMatch"),
|
|
232
|
+
# persistence
|
|
233
|
+
"MetricsCollector": (".persistence", "MetricsCollector"),
|
|
234
|
+
"PatternPersistence": (".persistence", "PatternPersistence"),
|
|
235
|
+
"StateManager": (".persistence", "StateManager"),
|
|
236
|
+
# trust_building
|
|
237
|
+
"TrustBuildingBehaviors": (".trust_building", "TrustBuildingBehaviors"),
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
# Cache for loaded modules
|
|
241
|
+
_loaded_modules: dict[str, object] = {}
|
|
242
|
+
|
|
243
|
+
|
|
244
|
+
def __getattr__(name: str) -> object:
|
|
245
|
+
"""Lazy import handler - loads modules only when accessed."""
|
|
246
|
+
if name in _LAZY_IMPORTS:
|
|
247
|
+
module_path, attr_name = _LAZY_IMPORTS[name]
|
|
248
|
+
|
|
249
|
+
# Check cache first
|
|
250
|
+
cache_key = f"{module_path}.{attr_name}"
|
|
251
|
+
if cache_key in _loaded_modules:
|
|
252
|
+
return _loaded_modules[cache_key]
|
|
253
|
+
|
|
254
|
+
# Import the module and get the attribute
|
|
255
|
+
import importlib
|
|
256
|
+
module = importlib.import_module(module_path, package="empathy_os")
|
|
257
|
+
attr = getattr(module, attr_name)
|
|
258
|
+
|
|
259
|
+
# Cache and return
|
|
260
|
+
_loaded_modules[cache_key] = attr
|
|
261
|
+
return attr
|
|
262
|
+
|
|
263
|
+
raise AttributeError(f"module 'empathy_os' has no attribute '{name}'")
|
|
132
264
|
|
|
133
265
|
__all__ = [
|
|
134
266
|
"AccessTier",
|
empathy_os/cache_monitor.py
CHANGED
|
@@ -303,8 +303,9 @@ class CacheMonitor:
|
|
|
303
303
|
Returns:
|
|
304
304
|
List of CacheStats with hit rate >= threshold, sorted by hit rate
|
|
305
305
|
"""
|
|
306
|
+
# Use generator expression for memory efficiency
|
|
306
307
|
return sorted(
|
|
307
|
-
|
|
308
|
+
(s for s in self._caches.values() if s.hit_rate >= threshold),
|
|
308
309
|
key=lambda s: s.hit_rate,
|
|
309
310
|
reverse=True,
|
|
310
311
|
)
|
|
@@ -318,8 +319,9 @@ class CacheMonitor:
|
|
|
318
319
|
Returns:
|
|
319
320
|
List of CacheStats with hit rate <= threshold, sorted by hit rate
|
|
320
321
|
"""
|
|
322
|
+
# Use generator expression for memory efficiency
|
|
321
323
|
return sorted(
|
|
322
|
-
|
|
324
|
+
(s for s in self._caches.values() if s.hit_rate <= threshold),
|
|
323
325
|
key=lambda s: s.hit_rate,
|
|
324
326
|
)
|
|
325
327
|
|
|
@@ -345,7 +347,7 @@ class CacheMonitor:
|
|
|
345
347
|
lines.append("=" * 70)
|
|
346
348
|
if total_capacity > 0:
|
|
347
349
|
lines.append(
|
|
348
|
-
f"{'TOTAL':<30} {total_used:>8,} / {total_capacity:>8,} ({total_used/total_capacity*100:>5.1f}%)"
|
|
350
|
+
f"{'TOTAL':<30} {total_used:>8,} / {total_capacity:>8,} ({total_used / total_capacity * 100:>5.1f}%)"
|
|
349
351
|
)
|
|
350
352
|
else:
|
|
351
353
|
lines.append(f"{'TOTAL':<30} {total_used:>8,} / unlimited")
|
empathy_os/cli/__init__.py
CHANGED
|
@@ -47,7 +47,7 @@ try:
|
|
|
47
47
|
cmd_inspect = _cli_legacy.cmd_inspect
|
|
48
48
|
cmd_export = _cli_legacy.cmd_export
|
|
49
49
|
cmd_import = _cli_legacy.cmd_import
|
|
50
|
-
|
|
50
|
+
cmd_workflow = _cli_legacy.cmd_workflow
|
|
51
51
|
cmd_cheatsheet = _cli_legacy.cmd_cheatsheet
|
|
52
52
|
cmd_frameworks = _cli_legacy.cmd_frameworks
|
|
53
53
|
main_legacy = _cli_legacy.main
|
|
@@ -68,18 +68,20 @@ try:
|
|
|
68
68
|
"cmd_inspect",
|
|
69
69
|
"cmd_export",
|
|
70
70
|
"cmd_import",
|
|
71
|
-
"
|
|
71
|
+
"cmd_workflow",
|
|
72
72
|
"cmd_cheatsheet",
|
|
73
73
|
"cmd_frameworks",
|
|
74
74
|
]
|
|
75
|
-
except Exception:
|
|
76
|
-
# If legacy import fails, functions won't be available
|
|
77
|
-
#
|
|
75
|
+
except Exception: # noqa: BLE001
|
|
76
|
+
# INTENTIONAL: If legacy import fails, functions won't be available.
|
|
77
|
+
# New CLI still works; legacy re-exports are for backward compatibility only.
|
|
78
78
|
pass
|
|
79
79
|
|
|
80
|
-
from empathy_os.cli.commands import inspection
|
|
80
|
+
from empathy_os.cli.commands import inspection
|
|
81
81
|
from empathy_os.cli.commands.memory import memory_app
|
|
82
|
+
from empathy_os.cli.commands.profiling import profile_app
|
|
82
83
|
from empathy_os.cli.commands.provider import provider_app
|
|
84
|
+
from empathy_os.cli.commands.utilities import utilities_app
|
|
83
85
|
from empathy_os.cli.core import console, get_empathy_version, version_callback
|
|
84
86
|
|
|
85
87
|
# Create the main Typer app
|
|
@@ -92,7 +94,10 @@ app = typer.Typer(
|
|
|
92
94
|
|
|
93
95
|
# Register command group apps
|
|
94
96
|
app.add_typer(memory_app, name="memory")
|
|
97
|
+
app.add_typer(profile_app, name="profile")
|
|
95
98
|
app.add_typer(provider_app, name="provider")
|
|
99
|
+
app.add_typer(utilities_app, name="utilities")
|
|
100
|
+
app.add_typer(utilities_app, name="utility", hidden=True) # Alias for common typo
|
|
96
101
|
|
|
97
102
|
|
|
98
103
|
@app.callback()
|
|
@@ -154,59 +159,12 @@ def inspect_cmd(
|
|
|
154
159
|
inspection.inspect_cmd(path, format_out)
|
|
155
160
|
|
|
156
161
|
|
|
157
|
-
# =============================================================================
|
|
158
|
-
# UTILITY COMMANDS (top-level)
|
|
159
|
-
# =============================================================================
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
@app.command("sync-claude")
|
|
163
|
-
def sync_claude(source: str = "patterns") -> None:
|
|
164
|
-
"""Sync patterns to Claude Code memory."""
|
|
165
|
-
utilities.sync_claude(source)
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
@app.command("cheatsheet")
|
|
169
|
-
def cheatsheet() -> None:
|
|
170
|
-
"""Show quick reference for all commands."""
|
|
171
|
-
utilities.cheatsheet()
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
@app.command("dashboard")
|
|
175
|
-
def dashboard() -> None:
|
|
176
|
-
"""Launch visual dashboard."""
|
|
177
|
-
utilities.dashboard()
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
@app.command("costs")
|
|
181
|
-
def costs() -> None:
|
|
182
|
-
"""View API cost tracking."""
|
|
183
|
-
utilities.costs()
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
@app.command("init")
|
|
187
|
-
def init() -> None:
|
|
188
|
-
"""Create a new configuration file."""
|
|
189
|
-
utilities.init()
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
@app.command("status")
|
|
193
|
-
def status() -> None:
|
|
194
|
-
"""What needs attention now."""
|
|
195
|
-
utilities.status()
|
|
196
|
-
|
|
197
|
-
|
|
198
162
|
# =============================================================================
|
|
199
163
|
# WORKFLOW COMMANDS (delegate to legacy CLI for now)
|
|
200
164
|
# These will be extracted in Phase 2b
|
|
201
165
|
# =============================================================================
|
|
202
166
|
|
|
203
167
|
|
|
204
|
-
@app.command("morning")
|
|
205
|
-
def morning() -> None:
|
|
206
|
-
"""Start-of-day briefing with patterns, git context, and priorities."""
|
|
207
|
-
subprocess.run([sys.executable, "-m", "empathy_os.cli", "morning"], check=False)
|
|
208
|
-
|
|
209
|
-
|
|
210
168
|
@app.command("ship")
|
|
211
169
|
def ship(
|
|
212
170
|
tests_only: bool = False,
|
|
@@ -273,11 +231,9 @@ try:
|
|
|
273
231
|
service_app,
|
|
274
232
|
telemetry_app,
|
|
275
233
|
tier_app,
|
|
276
|
-
wizard_app,
|
|
277
234
|
workflow_app,
|
|
278
235
|
)
|
|
279
236
|
|
|
280
|
-
app.add_typer(wizard_app, name="wizard")
|
|
281
237
|
app.add_typer(workflow_app, name="workflow")
|
|
282
238
|
app.add_typer(orchestrate_app, name="orchestrate")
|
|
283
239
|
app.add_typer(telemetry_app, name="telemetry")
|
empathy_os/cli/__main__.py
CHANGED
|
@@ -1,26 +1,40 @@
|
|
|
1
1
|
"""Entry point for python -m empathy_os.cli.
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
Supports both the new Typer-based CLI and legacy CLI.
|
|
4
|
+
New commands (profile, etc.) are in the Typer CLI.
|
|
5
|
+
Legacy commands fall back to cli.py for compatibility.
|
|
5
6
|
"""
|
|
6
7
|
|
|
7
8
|
import sys
|
|
8
9
|
from pathlib import Path
|
|
9
10
|
|
|
10
|
-
#
|
|
11
|
-
|
|
12
|
-
if str(parent) not in sys.path:
|
|
13
|
-
sys.path.insert(0, str(parent))
|
|
11
|
+
# Commands that are only in the new Typer CLI
|
|
12
|
+
NEW_CLI_COMMANDS = {"profile", "memory", "provider"}
|
|
14
13
|
|
|
15
|
-
# Import and run the legacy CLI
|
|
16
|
-
# We can't import cli directly because of the package name conflict
|
|
17
|
-
# So we use importlib to load cli.py as a module
|
|
18
|
-
import importlib.util
|
|
19
14
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
15
|
+
def main() -> None:
|
|
16
|
+
"""Route to appropriate CLI based on command."""
|
|
17
|
+
# Check if we should use the new Typer CLI
|
|
18
|
+
if len(sys.argv) > 1 and sys.argv[1] in NEW_CLI_COMMANDS:
|
|
19
|
+
# Use the new Typer-based CLI
|
|
20
|
+
from empathy_os.cli import app
|
|
24
21
|
|
|
25
|
-
|
|
22
|
+
app()
|
|
23
|
+
return
|
|
24
|
+
|
|
25
|
+
# Fall back to legacy CLI for backward compatibility
|
|
26
|
+
parent = Path(__file__).parent.parent
|
|
27
|
+
if str(parent) not in sys.path:
|
|
28
|
+
sys.path.insert(0, str(parent))
|
|
29
|
+
|
|
30
|
+
import importlib.util
|
|
31
|
+
|
|
32
|
+
cli_py_path = parent / "cli.py"
|
|
33
|
+
spec = importlib.util.spec_from_file_location("cli_legacy", cli_py_path)
|
|
34
|
+
cli_module = importlib.util.module_from_spec(spec)
|
|
35
|
+
spec.loader.exec_module(cli_module)
|
|
26
36
|
cli_module.main()
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
if __name__ == "__main__":
|
|
40
|
+
main()
|
|
@@ -18,19 +18,28 @@ def scan(
|
|
|
18
18
|
fix: bool = False,
|
|
19
19
|
staged: bool = False,
|
|
20
20
|
) -> None:
|
|
21
|
-
"""Scan codebase for issues."""
|
|
22
|
-
|
|
23
|
-
if format_out != "text":
|
|
24
|
-
args.extend(["--format", format_out])
|
|
25
|
-
if fix:
|
|
26
|
-
args.append("--fix")
|
|
27
|
-
if staged:
|
|
28
|
-
args.append("--staged")
|
|
21
|
+
"""Scan codebase for issues using ruff and bandit."""
|
|
22
|
+
console.print(f"[bold blue]Scanning {path}...[/bold blue]\n")
|
|
29
23
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
24
|
+
# Run ruff for linting
|
|
25
|
+
console.print("[bold]Running ruff (linting)...[/bold]")
|
|
26
|
+
ruff_args = ["ruff", "check", str(path)]
|
|
27
|
+
if fix:
|
|
28
|
+
ruff_args.append("--fix")
|
|
29
|
+
subprocess.run(ruff_args, check=False)
|
|
30
|
+
|
|
31
|
+
# Run bandit for security (if available)
|
|
32
|
+
console.print("\n[bold]Running bandit (security)...[/bold]")
|
|
33
|
+
bandit_args = ["bandit", "-r", str(path), "-q"]
|
|
34
|
+
if format_out == "json":
|
|
35
|
+
bandit_args.extend(["-f", "json"])
|
|
36
|
+
result = subprocess.run(bandit_args, check=False, capture_output=True)
|
|
37
|
+
if result.returncode == 0:
|
|
38
|
+
console.print("[green]No security issues found[/green]")
|
|
39
|
+
elif result.stdout:
|
|
40
|
+
console.print(result.stdout.decode())
|
|
41
|
+
|
|
42
|
+
console.print("\n[bold green]Scan complete![/bold green]")
|
|
34
43
|
|
|
35
44
|
|
|
36
45
|
def inspect_cmd(
|
|
@@ -18,33 +18,25 @@ memory_app = typer.Typer(help="Memory system control panel")
|
|
|
18
18
|
@memory_app.command("status")
|
|
19
19
|
def memory_status() -> None:
|
|
20
20
|
"""Check memory system status (Redis, patterns, stats)."""
|
|
21
|
-
subprocess.run(
|
|
22
|
-
[sys.executable, "-m", "empathy_os.memory.control_panel", "status"], check=False
|
|
23
|
-
)
|
|
21
|
+
subprocess.run([sys.executable, "-m", "empathy_os.memory.control_panel", "status"], check=False)
|
|
24
22
|
|
|
25
23
|
|
|
26
24
|
@memory_app.command("start")
|
|
27
25
|
def memory_start() -> None:
|
|
28
26
|
"""Start Redis server for short-term memory."""
|
|
29
|
-
subprocess.run(
|
|
30
|
-
[sys.executable, "-m", "empathy_os.memory.control_panel", "start"], check=False
|
|
31
|
-
)
|
|
27
|
+
subprocess.run([sys.executable, "-m", "empathy_os.memory.control_panel", "start"], check=False)
|
|
32
28
|
|
|
33
29
|
|
|
34
30
|
@memory_app.command("stop")
|
|
35
31
|
def memory_stop() -> None:
|
|
36
32
|
"""Stop Redis server."""
|
|
37
|
-
subprocess.run(
|
|
38
|
-
[sys.executable, "-m", "empathy_os.memory.control_panel", "stop"], check=False
|
|
39
|
-
)
|
|
33
|
+
subprocess.run([sys.executable, "-m", "empathy_os.memory.control_panel", "stop"], check=False)
|
|
40
34
|
|
|
41
35
|
|
|
42
36
|
@memory_app.command("stats")
|
|
43
37
|
def memory_stats() -> None:
|
|
44
38
|
"""Show memory statistics."""
|
|
45
|
-
subprocess.run(
|
|
46
|
-
[sys.executable, "-m", "empathy_os.memory.control_panel", "stats"], check=False
|
|
47
|
-
)
|
|
39
|
+
subprocess.run([sys.executable, "-m", "empathy_os.memory.control_panel", "stats"], check=False)
|
|
48
40
|
|
|
49
41
|
|
|
50
42
|
@memory_app.command("patterns")
|