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
@@ -0,0 +1,307 @@
1
+ """Agent Registry
2
+
3
+ Central registry for managing available agents.
4
+
5
+ Copyright 2025 Smart-AI-Memory
6
+ Licensed under Fair Source License 0.9
7
+ """
8
+
9
+ import logging
10
+ from collections.abc import Iterator
11
+ from pathlib import Path
12
+ from typing import Any
13
+
14
+ from empathy_llm_toolkit.agents_md.loader import AgentLoader
15
+ from empathy_llm_toolkit.config.unified import UnifiedAgentConfig
16
+
17
+ logger = logging.getLogger(__name__)
18
+
19
+
20
+ class AgentRegistry:
21
+ """Central registry for agent configurations.
22
+
23
+ Provides a single point of access for all available agents,
24
+ supporting both programmatic registration and directory loading.
25
+
26
+ Example:
27
+ # Create registry and load agents
28
+ registry = AgentRegistry()
29
+ registry.load_from_directory("agents/")
30
+
31
+ # Get an agent by name
32
+ architect = registry.get("architect")
33
+
34
+ # Register a custom agent
35
+ registry.register(my_custom_config)
36
+
37
+ # List all available agents
38
+ for name in registry.list_agents():
39
+ print(name)
40
+ """
41
+
42
+ _instance: "AgentRegistry | None" = None
43
+
44
+ def __init__(self):
45
+ """Initialize the registry."""
46
+ self._agents: dict[str, UnifiedAgentConfig] = {}
47
+ self._loader = AgentLoader()
48
+ self._load_paths: list[Path] = []
49
+
50
+ @classmethod
51
+ def get_instance(cls) -> "AgentRegistry":
52
+ """Get the singleton registry instance.
53
+
54
+ Returns:
55
+ The global AgentRegistry instance
56
+
57
+ """
58
+ if cls._instance is None:
59
+ cls._instance = cls()
60
+ return cls._instance
61
+
62
+ @classmethod
63
+ def reset_instance(cls) -> None:
64
+ """Reset the singleton instance (mainly for testing)."""
65
+ cls._instance = None
66
+
67
+ def register(
68
+ self,
69
+ config: UnifiedAgentConfig,
70
+ overwrite: bool = False,
71
+ ) -> None:
72
+ """Register an agent configuration.
73
+
74
+ Args:
75
+ config: Agent configuration to register
76
+ overwrite: If True, overwrite existing agent with same name
77
+
78
+ Raises:
79
+ ValueError: If agent name already exists and overwrite=False
80
+
81
+ """
82
+ if config.name in self._agents and not overwrite:
83
+ raise ValueError(
84
+ f"Agent '{config.name}' already registered. Use overwrite=True to replace."
85
+ )
86
+
87
+ self._agents[config.name] = config
88
+ logger.debug("Registered agent: %s", config.name)
89
+
90
+ def unregister(self, name: str) -> bool:
91
+ """Unregister an agent by name.
92
+
93
+ Args:
94
+ name: Agent name to remove
95
+
96
+ Returns:
97
+ True if agent was found and removed
98
+
99
+ """
100
+ if name in self._agents:
101
+ del self._agents[name]
102
+ logger.debug("Unregistered agent: %s", name)
103
+ return True
104
+ return False
105
+
106
+ def get(self, name: str) -> UnifiedAgentConfig | None:
107
+ """Get an agent configuration by name.
108
+
109
+ Args:
110
+ name: Agent name
111
+
112
+ Returns:
113
+ Agent config or None if not found
114
+
115
+ """
116
+ return self._agents.get(name)
117
+
118
+ def get_required(self, name: str) -> UnifiedAgentConfig:
119
+ """Get an agent configuration, raising if not found.
120
+
121
+ Args:
122
+ name: Agent name
123
+
124
+ Returns:
125
+ Agent configuration
126
+
127
+ Raises:
128
+ KeyError: If agent not found
129
+
130
+ """
131
+ config = self.get(name)
132
+ if config is None:
133
+ available = ", ".join(sorted(self._agents.keys()))
134
+ raise KeyError(f"Agent '{name}' not found. Available agents: {available}")
135
+ return config
136
+
137
+ def has(self, name: str) -> bool:
138
+ """Check if an agent is registered.
139
+
140
+ Args:
141
+ name: Agent name
142
+
143
+ Returns:
144
+ True if agent exists
145
+
146
+ """
147
+ return name in self._agents
148
+
149
+ def list_agents(self) -> list[str]:
150
+ """Get list of all registered agent names.
151
+
152
+ Returns:
153
+ Sorted list of agent names
154
+
155
+ """
156
+ return sorted(self._agents.keys())
157
+
158
+ def iter_agents(self) -> Iterator[UnifiedAgentConfig]:
159
+ """Iterate over all registered agents.
160
+
161
+ Yields:
162
+ Agent configurations
163
+
164
+ """
165
+ for name in sorted(self._agents.keys()):
166
+ yield self._agents[name]
167
+
168
+ def load_from_directory(
169
+ self,
170
+ directory: str | Path,
171
+ recursive: bool = False,
172
+ overwrite: bool = False,
173
+ ) -> int:
174
+ """Load agents from a directory.
175
+
176
+ Args:
177
+ directory: Directory containing .md agent files
178
+ recursive: If True, scan subdirectories
179
+ overwrite: If True, overwrite existing agents
180
+
181
+ Returns:
182
+ Number of agents loaded
183
+
184
+ """
185
+ directory = Path(directory)
186
+ self._load_paths.append(directory)
187
+
188
+ agents = self._loader.load_directory(directory, recursive=recursive)
189
+
190
+ loaded = 0
191
+ for _name, config in agents.items():
192
+ try:
193
+ self.register(config, overwrite=overwrite)
194
+ loaded += 1
195
+ except ValueError as e:
196
+ logger.warning("Skipping agent: %s", e)
197
+
198
+ logger.info("Loaded %d agent(s) from %s", loaded, directory)
199
+ return loaded
200
+
201
+ def load_from_file(
202
+ self,
203
+ file_path: str | Path,
204
+ overwrite: bool = False,
205
+ ) -> UnifiedAgentConfig:
206
+ """Load a single agent from a file.
207
+
208
+ Args:
209
+ file_path: Path to agent markdown file
210
+ overwrite: If True, overwrite existing agent
211
+
212
+ Returns:
213
+ Loaded agent configuration
214
+
215
+ """
216
+ config = self._loader.load(file_path)
217
+ self.register(config, overwrite=overwrite)
218
+ return config
219
+
220
+ def reload(self) -> int:
221
+ """Reload all agents from previously loaded directories.
222
+
223
+ Returns:
224
+ Total number of agents after reload
225
+
226
+ """
227
+ self._agents.clear()
228
+
229
+ for directory in self._load_paths:
230
+ if directory.exists():
231
+ self.load_from_directory(directory, overwrite=True)
232
+
233
+ return len(self._agents)
234
+
235
+ def get_by_role(self, role: str) -> list[UnifiedAgentConfig]:
236
+ """Get all agents with a specific role.
237
+
238
+ Args:
239
+ role: Role to filter by
240
+
241
+ Returns:
242
+ List of matching agent configs
243
+
244
+ """
245
+ role = role.lower()
246
+ return [config for config in self._agents.values() if config.role.lower() == role]
247
+
248
+ def get_by_empathy_level(
249
+ self,
250
+ min_level: int = 1,
251
+ max_level: int = 5,
252
+ ) -> list[UnifiedAgentConfig]:
253
+ """Get agents within an empathy level range.
254
+
255
+ Args:
256
+ min_level: Minimum empathy level (inclusive)
257
+ max_level: Maximum empathy level (inclusive)
258
+
259
+ Returns:
260
+ List of matching agent configs
261
+
262
+ """
263
+ return [
264
+ config
265
+ for config in self._agents.values()
266
+ if min_level <= config.empathy_level <= max_level
267
+ ]
268
+
269
+ def get_summary(self) -> dict[str, Any]:
270
+ """Get a summary of registered agents.
271
+
272
+ Returns:
273
+ Summary dictionary
274
+
275
+ """
276
+ by_role = {}
277
+ by_level = {}
278
+ by_tier = {}
279
+
280
+ for config in self._agents.values():
281
+ role = config.role
282
+ by_role[role] = by_role.get(role, 0) + 1
283
+
284
+ level = config.empathy_level
285
+ by_level[level] = by_level.get(level, 0) + 1
286
+
287
+ tier = (
288
+ config.model_tier.value
289
+ if hasattr(config.model_tier, "value")
290
+ else str(config.model_tier)
291
+ )
292
+ by_tier[tier] = by_tier.get(tier, 0) + 1
293
+
294
+ return {
295
+ "total_agents": len(self._agents),
296
+ "agent_names": self.list_agents(),
297
+ "by_role": by_role,
298
+ "by_empathy_level": by_level,
299
+ "by_model_tier": by_tier,
300
+ "load_paths": [str(p) for p in self._load_paths],
301
+ }
302
+
303
+ def clear(self) -> None:
304
+ """Clear all registered agents."""
305
+ self._agents.clear()
306
+ self._load_paths.clear()
307
+ logger.debug("Cleared agent registry")
@@ -0,0 +1,51 @@
1
+ """Commands Module for Empathy Framework
2
+
3
+ Provides command loading, parsing, and execution with integration
4
+ to hooks, context management, and learning modules.
5
+
6
+ Architectural patterns inspired by everything-claude-code by Affaan Mustafa.
7
+ See: https://github.com/affaan-m/everything-claude-code (MIT License)
8
+ See: ACKNOWLEDGMENTS.md for full attribution.
9
+
10
+ Copyright 2025 Smart AI Memory, LLC
11
+ Licensed under Fair Source 0.9
12
+ """
13
+
14
+ from empathy_llm_toolkit.commands.context import (
15
+ CommandContext,
16
+ CommandExecutor,
17
+ create_command_context,
18
+ )
19
+ from empathy_llm_toolkit.commands.loader import (
20
+ CommandLoader,
21
+ get_default_commands_directory,
22
+ load_commands_from_paths,
23
+ )
24
+ from empathy_llm_toolkit.commands.models import (
25
+ CommandCategory,
26
+ CommandConfig,
27
+ CommandMetadata,
28
+ CommandResult,
29
+ )
30
+ from empathy_llm_toolkit.commands.parser import CommandParser
31
+ from empathy_llm_toolkit.commands.registry import CommandRegistry
32
+
33
+ __all__ = [
34
+ # Models
35
+ "CommandCategory",
36
+ "CommandConfig",
37
+ "CommandContext",
38
+ "CommandMetadata",
39
+ "CommandResult",
40
+ # Parser
41
+ "CommandParser",
42
+ # Loader
43
+ "CommandLoader",
44
+ "get_default_commands_directory",
45
+ "load_commands_from_paths",
46
+ # Registry
47
+ "CommandRegistry",
48
+ # Context & Executor
49
+ "CommandExecutor",
50
+ "create_command_context",
51
+ ]