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.
Files changed (273) hide show
  1. empathy_framework-4.7.1.dist-info/METADATA +690 -0
  2. empathy_framework-4.7.1.dist-info/RECORD +379 -0
  3. {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.1.dist-info}/top_level.txt +1 -2
  4. empathy_healthcare_plugin/monitors/monitoring/__init__.py +9 -9
  5. empathy_llm_toolkit/agent_factory/__init__.py +6 -6
  6. empathy_llm_toolkit/agent_factory/adapters/wizard_adapter.py +7 -10
  7. empathy_llm_toolkit/agents_md/__init__.py +22 -0
  8. empathy_llm_toolkit/agents_md/loader.py +218 -0
  9. empathy_llm_toolkit/agents_md/parser.py +271 -0
  10. empathy_llm_toolkit/agents_md/registry.py +307 -0
  11. empathy_llm_toolkit/commands/__init__.py +51 -0
  12. empathy_llm_toolkit/commands/context.py +375 -0
  13. empathy_llm_toolkit/commands/loader.py +301 -0
  14. empathy_llm_toolkit/commands/models.py +231 -0
  15. empathy_llm_toolkit/commands/parser.py +371 -0
  16. empathy_llm_toolkit/commands/registry.py +429 -0
  17. empathy_llm_toolkit/config/__init__.py +8 -8
  18. empathy_llm_toolkit/config/unified.py +3 -7
  19. empathy_llm_toolkit/context/__init__.py +22 -0
  20. empathy_llm_toolkit/context/compaction.py +455 -0
  21. empathy_llm_toolkit/context/manager.py +434 -0
  22. empathy_llm_toolkit/hooks/__init__.py +24 -0
  23. empathy_llm_toolkit/hooks/config.py +306 -0
  24. empathy_llm_toolkit/hooks/executor.py +289 -0
  25. empathy_llm_toolkit/hooks/registry.py +302 -0
  26. empathy_llm_toolkit/hooks/scripts/__init__.py +39 -0
  27. empathy_llm_toolkit/hooks/scripts/evaluate_session.py +201 -0
  28. empathy_llm_toolkit/hooks/scripts/first_time_init.py +285 -0
  29. empathy_llm_toolkit/hooks/scripts/pre_compact.py +207 -0
  30. empathy_llm_toolkit/hooks/scripts/session_end.py +183 -0
  31. empathy_llm_toolkit/hooks/scripts/session_start.py +163 -0
  32. empathy_llm_toolkit/hooks/scripts/suggest_compact.py +225 -0
  33. empathy_llm_toolkit/learning/__init__.py +30 -0
  34. empathy_llm_toolkit/learning/evaluator.py +438 -0
  35. empathy_llm_toolkit/learning/extractor.py +514 -0
  36. empathy_llm_toolkit/learning/storage.py +560 -0
  37. empathy_llm_toolkit/providers.py +4 -11
  38. empathy_llm_toolkit/security/__init__.py +17 -17
  39. empathy_llm_toolkit/utils/tokens.py +2 -5
  40. empathy_os/__init__.py +202 -70
  41. empathy_os/cache_monitor.py +5 -3
  42. empathy_os/cli/__init__.py +11 -55
  43. empathy_os/cli/__main__.py +29 -15
  44. empathy_os/cli/commands/inspection.py +21 -12
  45. empathy_os/cli/commands/memory.py +4 -12
  46. empathy_os/cli/commands/profiling.py +198 -0
  47. empathy_os/cli/commands/utilities.py +27 -7
  48. empathy_os/cli.py +28 -57
  49. empathy_os/cli_unified.py +525 -1164
  50. empathy_os/cost_tracker.py +9 -3
  51. empathy_os/dashboard/server.py +200 -2
  52. empathy_os/hot_reload/__init__.py +7 -7
  53. empathy_os/hot_reload/config.py +6 -7
  54. empathy_os/hot_reload/integration.py +35 -35
  55. empathy_os/hot_reload/reloader.py +57 -57
  56. empathy_os/hot_reload/watcher.py +28 -28
  57. empathy_os/hot_reload/websocket.py +2 -2
  58. empathy_os/memory/__init__.py +11 -4
  59. empathy_os/memory/claude_memory.py +1 -1
  60. empathy_os/memory/cross_session.py +8 -12
  61. empathy_os/memory/edges.py +6 -6
  62. empathy_os/memory/file_session.py +770 -0
  63. empathy_os/memory/graph.py +30 -30
  64. empathy_os/memory/nodes.py +6 -6
  65. empathy_os/memory/short_term.py +15 -9
  66. empathy_os/memory/unified.py +606 -140
  67. empathy_os/meta_workflows/agent_creator.py +3 -9
  68. empathy_os/meta_workflows/cli_meta_workflows.py +113 -53
  69. empathy_os/meta_workflows/form_engine.py +6 -18
  70. empathy_os/meta_workflows/intent_detector.py +64 -24
  71. empathy_os/meta_workflows/models.py +3 -1
  72. empathy_os/meta_workflows/pattern_learner.py +13 -31
  73. empathy_os/meta_workflows/plan_generator.py +55 -47
  74. empathy_os/meta_workflows/session_context.py +2 -3
  75. empathy_os/meta_workflows/workflow.py +20 -51
  76. empathy_os/models/cli.py +2 -2
  77. empathy_os/models/tasks.py +1 -2
  78. empathy_os/models/telemetry.py +4 -1
  79. empathy_os/models/token_estimator.py +3 -1
  80. empathy_os/monitoring/alerts.py +938 -9
  81. empathy_os/monitoring/alerts_cli.py +346 -183
  82. empathy_os/orchestration/execution_strategies.py +12 -29
  83. empathy_os/orchestration/pattern_learner.py +20 -26
  84. empathy_os/orchestration/real_tools.py +6 -15
  85. empathy_os/platform_utils.py +2 -1
  86. empathy_os/plugins/__init__.py +2 -2
  87. empathy_os/plugins/base.py +64 -64
  88. empathy_os/plugins/registry.py +32 -32
  89. empathy_os/project_index/index.py +49 -15
  90. empathy_os/project_index/models.py +1 -2
  91. empathy_os/project_index/reports.py +1 -1
  92. empathy_os/project_index/scanner.py +1 -0
  93. empathy_os/redis_memory.py +10 -7
  94. empathy_os/resilience/__init__.py +1 -1
  95. empathy_os/resilience/health.py +10 -10
  96. empathy_os/routing/__init__.py +7 -7
  97. empathy_os/routing/chain_executor.py +37 -37
  98. empathy_os/routing/classifier.py +36 -36
  99. empathy_os/routing/smart_router.py +40 -40
  100. empathy_os/routing/{wizard_registry.py → workflow_registry.py} +47 -47
  101. empathy_os/scaffolding/__init__.py +8 -8
  102. empathy_os/scaffolding/__main__.py +1 -1
  103. empathy_os/scaffolding/cli.py +28 -28
  104. empathy_os/socratic/__init__.py +3 -19
  105. empathy_os/socratic/ab_testing.py +25 -36
  106. empathy_os/socratic/blueprint.py +38 -38
  107. empathy_os/socratic/cli.py +34 -20
  108. empathy_os/socratic/collaboration.py +30 -28
  109. empathy_os/socratic/domain_templates.py +9 -1
  110. empathy_os/socratic/embeddings.py +17 -13
  111. empathy_os/socratic/engine.py +135 -70
  112. empathy_os/socratic/explainer.py +70 -60
  113. empathy_os/socratic/feedback.py +24 -19
  114. empathy_os/socratic/forms.py +15 -10
  115. empathy_os/socratic/generator.py +51 -35
  116. empathy_os/socratic/llm_analyzer.py +25 -23
  117. empathy_os/socratic/mcp_server.py +99 -159
  118. empathy_os/socratic/session.py +19 -13
  119. empathy_os/socratic/storage.py +98 -67
  120. empathy_os/socratic/success.py +38 -27
  121. empathy_os/socratic/visual_editor.py +51 -39
  122. empathy_os/socratic/web_ui.py +99 -66
  123. empathy_os/telemetry/cli.py +3 -1
  124. empathy_os/telemetry/usage_tracker.py +1 -3
  125. empathy_os/test_generator/__init__.py +3 -3
  126. empathy_os/test_generator/cli.py +28 -28
  127. empathy_os/test_generator/generator.py +64 -66
  128. empathy_os/test_generator/risk_analyzer.py +11 -11
  129. empathy_os/vscode_bridge 2.py +173 -0
  130. empathy_os/vscode_bridge.py +173 -0
  131. empathy_os/workflows/__init__.py +212 -120
  132. empathy_os/workflows/batch_processing.py +8 -24
  133. empathy_os/workflows/bug_predict.py +1 -1
  134. empathy_os/workflows/code_review.py +20 -5
  135. empathy_os/workflows/code_review_pipeline.py +13 -8
  136. empathy_os/workflows/keyboard_shortcuts/workflow.py +6 -2
  137. empathy_os/workflows/manage_documentation.py +1 -0
  138. empathy_os/workflows/orchestrated_health_check.py +6 -11
  139. empathy_os/workflows/orchestrated_release_prep.py +3 -3
  140. empathy_os/workflows/pr_review.py +18 -10
  141. empathy_os/workflows/progressive/README 2.md +454 -0
  142. empathy_os/workflows/progressive/__init__ 2.py +92 -0
  143. empathy_os/workflows/progressive/__init__.py +2 -12
  144. empathy_os/workflows/progressive/cli 2.py +242 -0
  145. empathy_os/workflows/progressive/cli.py +14 -37
  146. empathy_os/workflows/progressive/core 2.py +488 -0
  147. empathy_os/workflows/progressive/core.py +12 -12
  148. empathy_os/workflows/progressive/orchestrator 2.py +701 -0
  149. empathy_os/workflows/progressive/orchestrator.py +166 -144
  150. empathy_os/workflows/progressive/reports 2.py +528 -0
  151. empathy_os/workflows/progressive/reports.py +22 -31
  152. empathy_os/workflows/progressive/telemetry 2.py +280 -0
  153. empathy_os/workflows/progressive/telemetry.py +8 -14
  154. empathy_os/workflows/progressive/test_gen 2.py +514 -0
  155. empathy_os/workflows/progressive/test_gen.py +29 -48
  156. empathy_os/workflows/progressive/workflow 2.py +628 -0
  157. empathy_os/workflows/progressive/workflow.py +31 -70
  158. empathy_os/workflows/release_prep.py +21 -6
  159. empathy_os/workflows/release_prep_crew.py +1 -0
  160. empathy_os/workflows/secure_release.py +13 -6
  161. empathy_os/workflows/security_audit.py +8 -3
  162. empathy_os/workflows/test_coverage_boost_crew.py +3 -2
  163. empathy_os/workflows/test_maintenance_crew.py +1 -0
  164. empathy_os/workflows/test_runner.py +16 -12
  165. empathy_software_plugin/SOFTWARE_PLUGIN_README.md +25 -703
  166. empathy_software_plugin/cli.py +0 -122
  167. patterns/README.md +119 -0
  168. patterns/__init__.py +95 -0
  169. patterns/behavior.py +298 -0
  170. patterns/code_review_memory.json +441 -0
  171. patterns/core.py +97 -0
  172. patterns/debugging.json +3763 -0
  173. patterns/empathy.py +268 -0
  174. patterns/health_check_memory.json +505 -0
  175. patterns/input.py +161 -0
  176. patterns/memory_graph.json +8 -0
  177. patterns/refactoring_memory.json +1113 -0
  178. patterns/registry.py +663 -0
  179. patterns/security_memory.json +8 -0
  180. patterns/structural.py +415 -0
  181. patterns/validation.py +194 -0
  182. coach_wizards/__init__.py +0 -45
  183. coach_wizards/accessibility_wizard.py +0 -91
  184. coach_wizards/api_wizard.py +0 -91
  185. coach_wizards/base_wizard.py +0 -209
  186. coach_wizards/cicd_wizard.py +0 -91
  187. coach_wizards/code_reviewer_README.md +0 -60
  188. coach_wizards/code_reviewer_wizard.py +0 -180
  189. coach_wizards/compliance_wizard.py +0 -91
  190. coach_wizards/database_wizard.py +0 -91
  191. coach_wizards/debugging_wizard.py +0 -91
  192. coach_wizards/documentation_wizard.py +0 -91
  193. coach_wizards/generate_wizards.py +0 -347
  194. coach_wizards/localization_wizard.py +0 -173
  195. coach_wizards/migration_wizard.py +0 -91
  196. coach_wizards/monitoring_wizard.py +0 -91
  197. coach_wizards/observability_wizard.py +0 -91
  198. coach_wizards/performance_wizard.py +0 -91
  199. coach_wizards/prompt_engineering_wizard.py +0 -661
  200. coach_wizards/refactoring_wizard.py +0 -91
  201. coach_wizards/scaling_wizard.py +0 -90
  202. coach_wizards/security_wizard.py +0 -92
  203. coach_wizards/testing_wizard.py +0 -91
  204. empathy_framework-4.6.6.dist-info/METADATA +0 -1597
  205. empathy_framework-4.6.6.dist-info/RECORD +0 -410
  206. empathy_llm_toolkit/wizards/__init__.py +0 -43
  207. empathy_llm_toolkit/wizards/base_wizard.py +0 -364
  208. empathy_llm_toolkit/wizards/customer_support_wizard.py +0 -190
  209. empathy_llm_toolkit/wizards/healthcare_wizard.py +0 -378
  210. empathy_llm_toolkit/wizards/patient_assessment_README.md +0 -64
  211. empathy_llm_toolkit/wizards/patient_assessment_wizard.py +0 -193
  212. empathy_llm_toolkit/wizards/technology_wizard.py +0 -209
  213. empathy_os/wizard_factory_cli.py +0 -170
  214. empathy_software_plugin/wizards/__init__.py +0 -42
  215. empathy_software_plugin/wizards/advanced_debugging_wizard.py +0 -395
  216. empathy_software_plugin/wizards/agent_orchestration_wizard.py +0 -511
  217. empathy_software_plugin/wizards/ai_collaboration_wizard.py +0 -503
  218. empathy_software_plugin/wizards/ai_context_wizard.py +0 -441
  219. empathy_software_plugin/wizards/ai_documentation_wizard.py +0 -503
  220. empathy_software_plugin/wizards/base_wizard.py +0 -288
  221. empathy_software_plugin/wizards/book_chapter_wizard.py +0 -519
  222. empathy_software_plugin/wizards/code_review_wizard.py +0 -604
  223. empathy_software_plugin/wizards/debugging/__init__.py +0 -50
  224. empathy_software_plugin/wizards/debugging/bug_risk_analyzer.py +0 -414
  225. empathy_software_plugin/wizards/debugging/config_loaders.py +0 -446
  226. empathy_software_plugin/wizards/debugging/fix_applier.py +0 -469
  227. empathy_software_plugin/wizards/debugging/language_patterns.py +0 -385
  228. empathy_software_plugin/wizards/debugging/linter_parsers.py +0 -470
  229. empathy_software_plugin/wizards/debugging/verification.py +0 -369
  230. empathy_software_plugin/wizards/enhanced_testing_wizard.py +0 -537
  231. empathy_software_plugin/wizards/memory_enhanced_debugging_wizard.py +0 -816
  232. empathy_software_plugin/wizards/multi_model_wizard.py +0 -501
  233. empathy_software_plugin/wizards/pattern_extraction_wizard.py +0 -422
  234. empathy_software_plugin/wizards/pattern_retriever_wizard.py +0 -400
  235. empathy_software_plugin/wizards/performance/__init__.py +0 -9
  236. empathy_software_plugin/wizards/performance/bottleneck_detector.py +0 -221
  237. empathy_software_plugin/wizards/performance/profiler_parsers.py +0 -278
  238. empathy_software_plugin/wizards/performance/trajectory_analyzer.py +0 -429
  239. empathy_software_plugin/wizards/performance_profiling_wizard.py +0 -305
  240. empathy_software_plugin/wizards/prompt_engineering_wizard.py +0 -425
  241. empathy_software_plugin/wizards/rag_pattern_wizard.py +0 -461
  242. empathy_software_plugin/wizards/security/__init__.py +0 -32
  243. empathy_software_plugin/wizards/security/exploit_analyzer.py +0 -290
  244. empathy_software_plugin/wizards/security/owasp_patterns.py +0 -241
  245. empathy_software_plugin/wizards/security/vulnerability_scanner.py +0 -604
  246. empathy_software_plugin/wizards/security_analysis_wizard.py +0 -322
  247. empathy_software_plugin/wizards/security_learning_wizard.py +0 -740
  248. empathy_software_plugin/wizards/tech_debt_wizard.py +0 -726
  249. empathy_software_plugin/wizards/testing/__init__.py +0 -27
  250. empathy_software_plugin/wizards/testing/coverage_analyzer.py +0 -459
  251. empathy_software_plugin/wizards/testing/quality_analyzer.py +0 -525
  252. empathy_software_plugin/wizards/testing/test_suggester.py +0 -533
  253. empathy_software_plugin/wizards/testing_wizard.py +0 -274
  254. wizards/__init__.py +0 -82
  255. wizards/admission_assessment_wizard.py +0 -644
  256. wizards/care_plan.py +0 -321
  257. wizards/clinical_assessment.py +0 -769
  258. wizards/discharge_planning.py +0 -77
  259. wizards/discharge_summary_wizard.py +0 -468
  260. wizards/dosage_calculation.py +0 -497
  261. wizards/incident_report_wizard.py +0 -454
  262. wizards/medication_reconciliation.py +0 -85
  263. wizards/nursing_assessment.py +0 -171
  264. wizards/patient_education.py +0 -654
  265. wizards/quality_improvement.py +0 -705
  266. wizards/sbar_report.py +0 -324
  267. wizards/sbar_wizard.py +0 -608
  268. wizards/shift_handoff_wizard.py +0 -535
  269. wizards/soap_note_wizard.py +0 -679
  270. wizards/treatment_plan.py +0 -15
  271. {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.1.dist-info}/WHEEL +0 -0
  272. {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.1.dist-info}/entry_points.txt +0 -0
  273. {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
- from .agent_monitoring import AgentMetrics, AgentMonitor, TeamMetrics
63
- from .config import EmpathyConfig, load_config
64
- from .coordination import (
65
- AgentCoordinator,
66
- AgentTask,
67
- ConflictResolver,
68
- ResolutionResult,
69
- ResolutionStrategy,
70
- TeamPriorities,
71
- TeamSession,
72
- )
73
- from .core import EmpathyOS
74
- from .emergence import EmergenceDetector
75
- from .exceptions import (
76
- CollaborationStateError,
77
- ConfidenceThresholdError,
78
- EmpathyFrameworkError,
79
- EmpathyLevelError,
80
- FeedbackLoopError,
81
- LeveragePointError,
82
- PatternNotFoundError,
83
- TrustThresholdError,
84
- ValidationError,
85
- )
86
- from .feedback_loops import FeedbackLoopDetector
87
- from .levels import Level1Reactive, Level2Guided, Level3Proactive, Level4Anticipatory, Level5Systems
88
- from .leverage_points import LeveragePointAnalyzer
89
- from .logging_config import LoggingConfig, get_logger
90
-
91
- # Memory module (unified short-term + long-term + security)
92
- from .memory import (
93
- AccessTier,
94
- AgentCredentials, # Memory module imports
95
- AuditEvent,
96
- AuditLogger,
97
- Classification,
98
- ClassificationRules,
99
- ClaudeMemoryConfig,
100
- ClaudeMemoryLoader,
101
- ConflictContext,
102
- EncryptionManager,
103
- Environment,
104
- MemDocsStorage,
105
- MemoryConfig,
106
- MemoryPermissionError,
107
- PatternMetadata,
108
- PIIDetection,
109
- PIIPattern,
110
- PIIScrubber,
111
- RedisShortTermMemory,
112
- SecretDetection,
113
- SecretsDetector,
114
- SecretType,
115
- SecureMemDocsIntegration,
116
- SecurePattern,
117
- SecurityError,
118
- SecurityViolation,
119
- Severity,
120
- StagedPattern,
121
- TTLStrategy,
122
- UnifiedMemory,
123
- check_redis_connection,
124
- detect_secrets,
125
- get_railway_redis,
126
- get_redis_config,
127
- get_redis_memory,
128
- )
129
- from .pattern_library import Pattern, PatternLibrary, PatternMatch
130
- from .persistence import MetricsCollector, PatternPersistence, StateManager
131
- from .trust_building import TrustBuildingBehaviors
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",
@@ -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
- [s for s in self._caches.values() if s.hit_rate >= threshold],
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
- [s for s in self._caches.values() if s.hit_rate <= threshold],
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")
@@ -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
- cmd_wizard = _cli_legacy.cmd_wizard
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
- "cmd_wizard",
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
- # Tests will fail but the new CLI will still work
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, utilities
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")
@@ -1,26 +1,40 @@
1
1
  """Entry point for python -m empathy_os.cli.
2
2
 
3
- This redirects to the legacy cli.py module for backward compatibility.
4
- The cli/ package coexists with cli.py, but Python finds packages first.
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
- # Add the parent directory to find the cli.py module
11
- parent = Path(__file__).parent.parent
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
- cli_py_path = parent / "cli.py"
21
- spec = importlib.util.spec_from_file_location("cli_legacy", cli_py_path)
22
- cli_module = importlib.util.module_from_spec(spec)
23
- spec.loader.exec_module(cli_module)
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
- if __name__ == "__main__":
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
- args = ["empathy-scan", str(path)]
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
- result = subprocess.run(args, check=False, capture_output=False)
31
- if result.returncode != 0:
32
- console.print("[yellow]Note: empathy-scan may not be installed[/yellow]")
33
- console.print("Install with: pip install empathy-framework[software]")
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")