empathy-framework 4.6.6__py3-none-any.whl → 4.7.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.0.dist-info}/METADATA +7 -6
- empathy_framework-4.7.0.dist-info/RECORD +354 -0
- {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.0.dist-info}/top_level.txt +0 -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.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/__init__.py +2 -12
- empathy_os/workflows/progressive/cli.py +14 -37
- empathy_os/workflows/progressive/core.py +12 -12
- empathy_os/workflows/progressive/orchestrator.py +166 -144
- empathy_os/workflows/progressive/reports.py +22 -31
- empathy_os/workflows/progressive/telemetry.py +8 -14
- empathy_os/workflows/progressive/test_gen.py +29 -48
- 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
- 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/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.0.dist-info}/WHEEL +0 -0
- {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.0.dist-info}/entry_points.txt +0 -0
- {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.0.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
|
+
]
|