empathy-framework 3.2.3__py3-none-any.whl → 3.8.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- coach_wizards/__init__.py +11 -12
- coach_wizards/accessibility_wizard.py +12 -12
- coach_wizards/api_wizard.py +12 -12
- coach_wizards/base_wizard.py +26 -20
- coach_wizards/cicd_wizard.py +15 -13
- coach_wizards/code_reviewer_README.md +60 -0
- coach_wizards/code_reviewer_wizard.py +180 -0
- coach_wizards/compliance_wizard.py +12 -12
- coach_wizards/database_wizard.py +12 -12
- coach_wizards/debugging_wizard.py +12 -12
- coach_wizards/documentation_wizard.py +12 -12
- coach_wizards/generate_wizards.py +1 -2
- coach_wizards/localization_wizard.py +101 -19
- coach_wizards/migration_wizard.py +12 -12
- coach_wizards/monitoring_wizard.py +12 -12
- coach_wizards/observability_wizard.py +12 -12
- coach_wizards/performance_wizard.py +12 -12
- coach_wizards/prompt_engineering_wizard.py +22 -25
- coach_wizards/refactoring_wizard.py +12 -12
- coach_wizards/scaling_wizard.py +12 -12
- coach_wizards/security_wizard.py +12 -12
- coach_wizards/testing_wizard.py +12 -12
- {empathy_framework-3.2.3.dist-info → empathy_framework-3.8.2.dist-info}/METADATA +513 -58
- empathy_framework-3.8.2.dist-info/RECORD +333 -0
- empathy_framework-3.8.2.dist-info/entry_points.txt +22 -0
- {empathy_framework-3.2.3.dist-info → empathy_framework-3.8.2.dist-info}/top_level.txt +5 -1
- empathy_healthcare_plugin/__init__.py +1 -2
- empathy_healthcare_plugin/monitors/__init__.py +9 -0
- empathy_healthcare_plugin/monitors/clinical_protocol_monitor.py +315 -0
- empathy_healthcare_plugin/monitors/monitoring/__init__.py +44 -0
- empathy_healthcare_plugin/monitors/monitoring/protocol_checker.py +300 -0
- empathy_healthcare_plugin/monitors/monitoring/protocol_loader.py +214 -0
- empathy_healthcare_plugin/monitors/monitoring/sensor_parsers.py +306 -0
- empathy_healthcare_plugin/monitors/monitoring/trajectory_analyzer.py +389 -0
- empathy_llm_toolkit/__init__.py +7 -7
- empathy_llm_toolkit/agent_factory/__init__.py +53 -0
- empathy_llm_toolkit/agent_factory/adapters/__init__.py +85 -0
- empathy_llm_toolkit/agent_factory/adapters/autogen_adapter.py +312 -0
- empathy_llm_toolkit/agent_factory/adapters/crewai_adapter.py +454 -0
- empathy_llm_toolkit/agent_factory/adapters/haystack_adapter.py +298 -0
- empathy_llm_toolkit/agent_factory/adapters/langchain_adapter.py +362 -0
- empathy_llm_toolkit/agent_factory/adapters/langgraph_adapter.py +333 -0
- empathy_llm_toolkit/agent_factory/adapters/native.py +228 -0
- empathy_llm_toolkit/agent_factory/adapters/wizard_adapter.py +426 -0
- empathy_llm_toolkit/agent_factory/base.py +305 -0
- empathy_llm_toolkit/agent_factory/crews/__init__.py +67 -0
- empathy_llm_toolkit/agent_factory/crews/code_review.py +1113 -0
- empathy_llm_toolkit/agent_factory/crews/health_check.py +1246 -0
- empathy_llm_toolkit/agent_factory/crews/refactoring.py +1128 -0
- empathy_llm_toolkit/agent_factory/crews/security_audit.py +1018 -0
- empathy_llm_toolkit/agent_factory/decorators.py +286 -0
- empathy_llm_toolkit/agent_factory/factory.py +558 -0
- empathy_llm_toolkit/agent_factory/framework.py +192 -0
- empathy_llm_toolkit/agent_factory/memory_integration.py +324 -0
- empathy_llm_toolkit/agent_factory/resilient.py +320 -0
- empathy_llm_toolkit/claude_memory.py +14 -15
- empathy_llm_toolkit/cli/__init__.py +8 -0
- empathy_llm_toolkit/cli/sync_claude.py +487 -0
- empathy_llm_toolkit/code_health.py +177 -22
- empathy_llm_toolkit/config/__init__.py +29 -0
- empathy_llm_toolkit/config/unified.py +295 -0
- empathy_llm_toolkit/contextual_patterns.py +11 -12
- empathy_llm_toolkit/core.py +51 -49
- empathy_llm_toolkit/git_pattern_extractor.py +16 -12
- empathy_llm_toolkit/levels.py +6 -13
- empathy_llm_toolkit/pattern_confidence.py +14 -18
- empathy_llm_toolkit/pattern_resolver.py +10 -12
- empathy_llm_toolkit/pattern_summary.py +13 -11
- empathy_llm_toolkit/providers.py +194 -28
- empathy_llm_toolkit/routing/__init__.py +32 -0
- empathy_llm_toolkit/routing/model_router.py +362 -0
- empathy_llm_toolkit/security/IMPLEMENTATION_SUMMARY.md +413 -0
- empathy_llm_toolkit/security/PHASE2_COMPLETE.md +384 -0
- empathy_llm_toolkit/security/PHASE2_SECRETS_DETECTOR_COMPLETE.md +271 -0
- empathy_llm_toolkit/security/QUICK_REFERENCE.md +316 -0
- empathy_llm_toolkit/security/README.md +262 -0
- empathy_llm_toolkit/security/__init__.py +62 -0
- empathy_llm_toolkit/security/audit_logger.py +929 -0
- empathy_llm_toolkit/security/audit_logger_example.py +152 -0
- empathy_llm_toolkit/security/pii_scrubber.py +640 -0
- empathy_llm_toolkit/security/secrets_detector.py +678 -0
- empathy_llm_toolkit/security/secrets_detector_example.py +304 -0
- empathy_llm_toolkit/security/secure_memdocs.py +1192 -0
- empathy_llm_toolkit/security/secure_memdocs_example.py +278 -0
- empathy_llm_toolkit/session_status.py +18 -20
- empathy_llm_toolkit/state.py +20 -21
- empathy_llm_toolkit/wizards/__init__.py +38 -0
- empathy_llm_toolkit/wizards/base_wizard.py +364 -0
- empathy_llm_toolkit/wizards/customer_support_wizard.py +190 -0
- empathy_llm_toolkit/wizards/healthcare_wizard.py +362 -0
- empathy_llm_toolkit/wizards/patient_assessment_README.md +64 -0
- empathy_llm_toolkit/wizards/patient_assessment_wizard.py +193 -0
- empathy_llm_toolkit/wizards/technology_wizard.py +194 -0
- empathy_os/__init__.py +76 -77
- empathy_os/adaptive/__init__.py +13 -0
- empathy_os/adaptive/task_complexity.py +127 -0
- empathy_os/{monitoring.py → agent_monitoring.py} +27 -27
- empathy_os/cache/__init__.py +117 -0
- empathy_os/cache/base.py +166 -0
- empathy_os/cache/dependency_manager.py +253 -0
- empathy_os/cache/hash_only.py +248 -0
- empathy_os/cache/hybrid.py +390 -0
- empathy_os/cache/storage.py +282 -0
- empathy_os/cli.py +515 -109
- empathy_os/cli_unified.py +189 -42
- empathy_os/config/__init__.py +63 -0
- empathy_os/config/xml_config.py +239 -0
- empathy_os/config.py +87 -36
- empathy_os/coordination.py +48 -54
- empathy_os/core.py +90 -99
- empathy_os/cost_tracker.py +20 -23
- empathy_os/dashboard/__init__.py +15 -0
- empathy_os/dashboard/server.py +743 -0
- empathy_os/discovery.py +9 -11
- empathy_os/emergence.py +20 -21
- empathy_os/exceptions.py +18 -30
- empathy_os/feedback_loops.py +27 -30
- empathy_os/levels.py +31 -34
- empathy_os/leverage_points.py +27 -28
- empathy_os/logging_config.py +11 -12
- empathy_os/memory/__init__.py +195 -0
- empathy_os/memory/claude_memory.py +466 -0
- empathy_os/memory/config.py +224 -0
- empathy_os/memory/control_panel.py +1298 -0
- empathy_os/memory/edges.py +179 -0
- empathy_os/memory/graph.py +567 -0
- empathy_os/memory/long_term.py +1194 -0
- empathy_os/memory/nodes.py +179 -0
- empathy_os/memory/redis_bootstrap.py +540 -0
- empathy_os/memory/security/__init__.py +31 -0
- empathy_os/memory/security/audit_logger.py +930 -0
- empathy_os/memory/security/pii_scrubber.py +640 -0
- empathy_os/memory/security/secrets_detector.py +678 -0
- empathy_os/memory/short_term.py +2119 -0
- empathy_os/memory/storage/__init__.py +15 -0
- empathy_os/memory/summary_index.py +583 -0
- empathy_os/memory/unified.py +619 -0
- empathy_os/metrics/__init__.py +12 -0
- empathy_os/metrics/prompt_metrics.py +190 -0
- empathy_os/models/__init__.py +136 -0
- empathy_os/models/__main__.py +13 -0
- empathy_os/models/cli.py +655 -0
- empathy_os/models/empathy_executor.py +354 -0
- empathy_os/models/executor.py +252 -0
- empathy_os/models/fallback.py +671 -0
- empathy_os/models/provider_config.py +563 -0
- empathy_os/models/registry.py +382 -0
- empathy_os/models/tasks.py +302 -0
- empathy_os/models/telemetry.py +548 -0
- empathy_os/models/token_estimator.py +378 -0
- empathy_os/models/validation.py +274 -0
- empathy_os/monitoring/__init__.py +52 -0
- empathy_os/monitoring/alerts.py +23 -0
- empathy_os/monitoring/alerts_cli.py +268 -0
- empathy_os/monitoring/multi_backend.py +271 -0
- empathy_os/monitoring/otel_backend.py +363 -0
- empathy_os/optimization/__init__.py +19 -0
- empathy_os/optimization/context_optimizer.py +272 -0
- empathy_os/pattern_library.py +29 -28
- empathy_os/persistence.py +30 -34
- empathy_os/platform_utils.py +261 -0
- empathy_os/plugins/__init__.py +28 -0
- empathy_os/plugins/base.py +361 -0
- empathy_os/plugins/registry.py +268 -0
- empathy_os/project_index/__init__.py +30 -0
- empathy_os/project_index/cli.py +335 -0
- empathy_os/project_index/crew_integration.py +430 -0
- empathy_os/project_index/index.py +425 -0
- empathy_os/project_index/models.py +501 -0
- empathy_os/project_index/reports.py +473 -0
- empathy_os/project_index/scanner.py +538 -0
- empathy_os/prompts/__init__.py +61 -0
- empathy_os/prompts/config.py +77 -0
- empathy_os/prompts/context.py +177 -0
- empathy_os/prompts/parser.py +285 -0
- empathy_os/prompts/registry.py +313 -0
- empathy_os/prompts/templates.py +208 -0
- empathy_os/redis_config.py +144 -58
- empathy_os/redis_memory.py +53 -56
- empathy_os/resilience/__init__.py +56 -0
- empathy_os/resilience/circuit_breaker.py +256 -0
- empathy_os/resilience/fallback.py +179 -0
- empathy_os/resilience/health.py +300 -0
- empathy_os/resilience/retry.py +209 -0
- empathy_os/resilience/timeout.py +135 -0
- empathy_os/routing/__init__.py +43 -0
- empathy_os/routing/chain_executor.py +433 -0
- empathy_os/routing/classifier.py +217 -0
- empathy_os/routing/smart_router.py +234 -0
- empathy_os/routing/wizard_registry.py +307 -0
- empathy_os/templates.py +12 -11
- empathy_os/trust/__init__.py +28 -0
- empathy_os/trust/circuit_breaker.py +579 -0
- empathy_os/trust_building.py +44 -36
- empathy_os/validation/__init__.py +19 -0
- empathy_os/validation/xml_validator.py +281 -0
- empathy_os/wizard_factory_cli.py +170 -0
- empathy_os/{workflows.py → workflow_commands.py} +123 -31
- empathy_os/workflows/__init__.py +360 -0
- empathy_os/workflows/base.py +1660 -0
- empathy_os/workflows/bug_predict.py +962 -0
- empathy_os/workflows/code_review.py +960 -0
- empathy_os/workflows/code_review_adapters.py +310 -0
- empathy_os/workflows/code_review_pipeline.py +720 -0
- empathy_os/workflows/config.py +600 -0
- empathy_os/workflows/dependency_check.py +648 -0
- empathy_os/workflows/document_gen.py +1069 -0
- empathy_os/workflows/documentation_orchestrator.py +1205 -0
- empathy_os/workflows/health_check.py +679 -0
- empathy_os/workflows/keyboard_shortcuts/__init__.py +39 -0
- empathy_os/workflows/keyboard_shortcuts/generators.py +386 -0
- empathy_os/workflows/keyboard_shortcuts/parsers.py +414 -0
- empathy_os/workflows/keyboard_shortcuts/prompts.py +295 -0
- empathy_os/workflows/keyboard_shortcuts/schema.py +193 -0
- empathy_os/workflows/keyboard_shortcuts/workflow.py +505 -0
- empathy_os/workflows/manage_documentation.py +804 -0
- empathy_os/workflows/new_sample_workflow1.py +146 -0
- empathy_os/workflows/new_sample_workflow1_README.md +150 -0
- empathy_os/workflows/perf_audit.py +687 -0
- empathy_os/workflows/pr_review.py +748 -0
- empathy_os/workflows/progress.py +445 -0
- empathy_os/workflows/progress_server.py +322 -0
- empathy_os/workflows/refactor_plan.py +693 -0
- empathy_os/workflows/release_prep.py +808 -0
- empathy_os/workflows/research_synthesis.py +404 -0
- empathy_os/workflows/secure_release.py +585 -0
- empathy_os/workflows/security_adapters.py +297 -0
- empathy_os/workflows/security_audit.py +1046 -0
- empathy_os/workflows/step_config.py +234 -0
- empathy_os/workflows/test5.py +125 -0
- empathy_os/workflows/test5_README.md +158 -0
- empathy_os/workflows/test_gen.py +1855 -0
- empathy_os/workflows/test_lifecycle.py +526 -0
- empathy_os/workflows/test_maintenance.py +626 -0
- empathy_os/workflows/test_maintenance_cli.py +590 -0
- empathy_os/workflows/test_maintenance_crew.py +821 -0
- empathy_os/workflows/xml_enhanced_crew.py +285 -0
- empathy_software_plugin/__init__.py +1 -2
- empathy_software_plugin/cli/__init__.py +120 -0
- empathy_software_plugin/cli/inspect.py +362 -0
- empathy_software_plugin/cli.py +35 -26
- empathy_software_plugin/plugin.py +4 -8
- empathy_software_plugin/wizards/__init__.py +42 -0
- empathy_software_plugin/wizards/advanced_debugging_wizard.py +392 -0
- empathy_software_plugin/wizards/agent_orchestration_wizard.py +511 -0
- empathy_software_plugin/wizards/ai_collaboration_wizard.py +503 -0
- empathy_software_plugin/wizards/ai_context_wizard.py +441 -0
- empathy_software_plugin/wizards/ai_documentation_wizard.py +503 -0
- empathy_software_plugin/wizards/base_wizard.py +288 -0
- empathy_software_plugin/wizards/book_chapter_wizard.py +519 -0
- empathy_software_plugin/wizards/code_review_wizard.py +606 -0
- empathy_software_plugin/wizards/debugging/__init__.py +50 -0
- empathy_software_plugin/wizards/debugging/bug_risk_analyzer.py +414 -0
- empathy_software_plugin/wizards/debugging/config_loaders.py +442 -0
- empathy_software_plugin/wizards/debugging/fix_applier.py +469 -0
- empathy_software_plugin/wizards/debugging/language_patterns.py +383 -0
- empathy_software_plugin/wizards/debugging/linter_parsers.py +470 -0
- empathy_software_plugin/wizards/debugging/verification.py +369 -0
- empathy_software_plugin/wizards/enhanced_testing_wizard.py +537 -0
- empathy_software_plugin/wizards/memory_enhanced_debugging_wizard.py +816 -0
- empathy_software_plugin/wizards/multi_model_wizard.py +501 -0
- empathy_software_plugin/wizards/pattern_extraction_wizard.py +422 -0
- empathy_software_plugin/wizards/pattern_retriever_wizard.py +400 -0
- empathy_software_plugin/wizards/performance/__init__.py +9 -0
- empathy_software_plugin/wizards/performance/bottleneck_detector.py +221 -0
- empathy_software_plugin/wizards/performance/profiler_parsers.py +278 -0
- empathy_software_plugin/wizards/performance/trajectory_analyzer.py +429 -0
- empathy_software_plugin/wizards/performance_profiling_wizard.py +305 -0
- empathy_software_plugin/wizards/prompt_engineering_wizard.py +425 -0
- empathy_software_plugin/wizards/rag_pattern_wizard.py +461 -0
- empathy_software_plugin/wizards/security/__init__.py +32 -0
- empathy_software_plugin/wizards/security/exploit_analyzer.py +290 -0
- empathy_software_plugin/wizards/security/owasp_patterns.py +241 -0
- empathy_software_plugin/wizards/security/vulnerability_scanner.py +604 -0
- empathy_software_plugin/wizards/security_analysis_wizard.py +322 -0
- empathy_software_plugin/wizards/security_learning_wizard.py +740 -0
- empathy_software_plugin/wizards/tech_debt_wizard.py +726 -0
- empathy_software_plugin/wizards/testing/__init__.py +27 -0
- empathy_software_plugin/wizards/testing/coverage_analyzer.py +459 -0
- empathy_software_plugin/wizards/testing/quality_analyzer.py +531 -0
- empathy_software_plugin/wizards/testing/test_suggester.py +533 -0
- empathy_software_plugin/wizards/testing_wizard.py +274 -0
- hot_reload/README.md +473 -0
- hot_reload/__init__.py +62 -0
- hot_reload/config.py +84 -0
- hot_reload/integration.py +228 -0
- hot_reload/reloader.py +298 -0
- hot_reload/watcher.py +179 -0
- hot_reload/websocket.py +176 -0
- scaffolding/README.md +589 -0
- scaffolding/__init__.py +35 -0
- scaffolding/__main__.py +14 -0
- scaffolding/cli.py +240 -0
- test_generator/__init__.py +38 -0
- test_generator/__main__.py +14 -0
- test_generator/cli.py +226 -0
- test_generator/generator.py +325 -0
- test_generator/risk_analyzer.py +216 -0
- workflow_patterns/__init__.py +33 -0
- workflow_patterns/behavior.py +249 -0
- workflow_patterns/core.py +76 -0
- workflow_patterns/output.py +99 -0
- workflow_patterns/registry.py +255 -0
- workflow_patterns/structural.py +288 -0
- workflow_scaffolding/__init__.py +11 -0
- workflow_scaffolding/__main__.py +12 -0
- workflow_scaffolding/cli.py +206 -0
- workflow_scaffolding/generator.py +265 -0
- agents/code_inspection/patterns/inspection/recurring_B112.json +0 -18
- agents/code_inspection/patterns/inspection/recurring_F541.json +0 -16
- agents/code_inspection/patterns/inspection/recurring_FORMAT.json +0 -25
- agents/code_inspection/patterns/inspection/recurring_bug_20250822_def456.json +0 -16
- agents/code_inspection/patterns/inspection/recurring_bug_20250915_abc123.json +0 -16
- agents/code_inspection/patterns/inspection/recurring_bug_20251212_3c5b9951.json +0 -16
- agents/code_inspection/patterns/inspection/recurring_bug_20251212_97c0f72f.json +0 -16
- agents/code_inspection/patterns/inspection/recurring_bug_20251212_a0871d53.json +0 -16
- agents/code_inspection/patterns/inspection/recurring_bug_20251212_a9b6ec41.json +0 -16
- agents/code_inspection/patterns/inspection/recurring_bug_null_001.json +0 -16
- agents/code_inspection/patterns/inspection/recurring_builtin.json +0 -16
- agents/compliance_anticipation_agent.py +0 -1427
- agents/epic_integration_wizard.py +0 -541
- agents/trust_building_behaviors.py +0 -891
- empathy_framework-3.2.3.dist-info/RECORD +0 -104
- empathy_framework-3.2.3.dist-info/entry_points.txt +0 -7
- empathy_llm_toolkit/htmlcov/status.json +0 -1
- empathy_llm_toolkit/security/htmlcov/status.json +0 -1
- {empathy_framework-3.2.3.dist-info → empathy_framework-3.8.2.dist-info}/WHEEL +0 -0
- {empathy_framework-3.2.3.dist-info → empathy_framework-3.8.2.dist-info}/licenses/LICENSE +0 -0
empathy_os/cli_unified.py
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Unified CLI for Empathy Framework
|
|
1
|
+
"""Unified CLI for Empathy Framework
|
|
3
2
|
|
|
4
3
|
A single entry point for all Empathy Framework commands using Typer.
|
|
5
4
|
|
|
@@ -60,8 +59,7 @@ def callback(
|
|
|
60
59
|
help="Show version and exit",
|
|
61
60
|
),
|
|
62
61
|
):
|
|
63
|
-
"""
|
|
64
|
-
Empathy Framework - Predictive AI-Developer Collaboration
|
|
62
|
+
"""Empathy Framework - Predictive AI-Developer Collaboration
|
|
65
63
|
|
|
66
64
|
The AI collaboration framework that predicts problems before they happen.
|
|
67
65
|
|
|
@@ -82,7 +80,6 @@ def callback(
|
|
|
82
80
|
empathy scan . Scan codebase for issues
|
|
83
81
|
empathy inspect . Deep inspection with SARIF output
|
|
84
82
|
"""
|
|
85
|
-
pass
|
|
86
83
|
|
|
87
84
|
|
|
88
85
|
# =============================================================================
|
|
@@ -97,31 +94,33 @@ app.add_typer(memory_app, name="memory")
|
|
|
97
94
|
def memory_status():
|
|
98
95
|
"""Check memory system status (Redis, patterns, stats)."""
|
|
99
96
|
# Delegate to the existing CLI
|
|
100
|
-
subprocess.run([sys.executable, "-m", "empathy_os.memory.control_panel", "status"])
|
|
97
|
+
subprocess.run([sys.executable, "-m", "empathy_os.memory.control_panel", "status"], check=False)
|
|
101
98
|
|
|
102
99
|
|
|
103
100
|
@memory_app.command("start")
|
|
104
101
|
def memory_start():
|
|
105
102
|
"""Start Redis server for short-term memory."""
|
|
106
|
-
subprocess.run([sys.executable, "-m", "empathy_os.memory.control_panel", "start"])
|
|
103
|
+
subprocess.run([sys.executable, "-m", "empathy_os.memory.control_panel", "start"], check=False)
|
|
107
104
|
|
|
108
105
|
|
|
109
106
|
@memory_app.command("stop")
|
|
110
107
|
def memory_stop():
|
|
111
108
|
"""Stop Redis server."""
|
|
112
|
-
subprocess.run([sys.executable, "-m", "empathy_os.memory.control_panel", "stop"])
|
|
109
|
+
subprocess.run([sys.executable, "-m", "empathy_os.memory.control_panel", "stop"], check=False)
|
|
113
110
|
|
|
114
111
|
|
|
115
112
|
@memory_app.command("stats")
|
|
116
113
|
def memory_stats():
|
|
117
114
|
"""Show memory statistics."""
|
|
118
|
-
subprocess.run([sys.executable, "-m", "empathy_os.memory.control_panel", "stats"])
|
|
115
|
+
subprocess.run([sys.executable, "-m", "empathy_os.memory.control_panel", "stats"], check=False)
|
|
119
116
|
|
|
120
117
|
|
|
121
118
|
@memory_app.command("patterns")
|
|
122
119
|
def memory_patterns():
|
|
123
120
|
"""List stored patterns."""
|
|
124
|
-
subprocess.run(
|
|
121
|
+
subprocess.run(
|
|
122
|
+
[sys.executable, "-m", "empathy_os.memory.control_panel", "patterns", "--list"], check=False
|
|
123
|
+
)
|
|
125
124
|
|
|
126
125
|
|
|
127
126
|
# =============================================================================
|
|
@@ -136,7 +135,10 @@ app.add_typer(provider_app, name="provider")
|
|
|
136
135
|
def provider_show(
|
|
137
136
|
ctx: typer.Context,
|
|
138
137
|
set_provider: str | None = typer.Option(
|
|
139
|
-
None,
|
|
138
|
+
None,
|
|
139
|
+
"--set",
|
|
140
|
+
"-s",
|
|
141
|
+
help="Set provider (anthropic, openai, google, ollama, hybrid)",
|
|
140
142
|
),
|
|
141
143
|
interactive: bool = typer.Option(False, "--interactive", "-i", help="Interactive setup wizard"),
|
|
142
144
|
format_out: str = typer.Option("table", "--format", "-f", help="Output format (table, json)"),
|
|
@@ -153,7 +155,7 @@ def provider_show(
|
|
|
153
155
|
if format_out != "table":
|
|
154
156
|
args.extend(["-f", format_out])
|
|
155
157
|
|
|
156
|
-
subprocess.run(args)
|
|
158
|
+
subprocess.run(args, check=False)
|
|
157
159
|
|
|
158
160
|
|
|
159
161
|
@provider_app.command("registry")
|
|
@@ -164,7 +166,7 @@ def provider_registry(
|
|
|
164
166
|
args = [sys.executable, "-m", "empathy_os.models.cli", "registry"]
|
|
165
167
|
if provider_filter:
|
|
166
168
|
args.extend(["--provider", provider_filter])
|
|
167
|
-
subprocess.run(args)
|
|
169
|
+
subprocess.run(args, check=False)
|
|
168
170
|
|
|
169
171
|
|
|
170
172
|
@provider_app.command("costs")
|
|
@@ -183,7 +185,8 @@ def provider_costs(
|
|
|
183
185
|
str(input_tokens),
|
|
184
186
|
"--output-tokens",
|
|
185
187
|
str(output_tokens),
|
|
186
|
-
]
|
|
188
|
+
],
|
|
189
|
+
check=False,
|
|
187
190
|
)
|
|
188
191
|
|
|
189
192
|
|
|
@@ -201,7 +204,7 @@ def provider_telemetry(
|
|
|
201
204
|
args.append("--costs")
|
|
202
205
|
if providers:
|
|
203
206
|
args.append("--providers")
|
|
204
|
-
subprocess.run(args)
|
|
207
|
+
subprocess.run(args, check=False)
|
|
205
208
|
|
|
206
209
|
|
|
207
210
|
# =============================================================================
|
|
@@ -211,9 +214,12 @@ def provider_telemetry(
|
|
|
211
214
|
|
|
212
215
|
@app.command("scan")
|
|
213
216
|
def scan(
|
|
214
|
-
path: Path = typer.Argument(Path(
|
|
217
|
+
path: Path = typer.Argument(Path(), help="Path to scan"),
|
|
215
218
|
format_out: str = typer.Option(
|
|
216
|
-
"text",
|
|
219
|
+
"text",
|
|
220
|
+
"--format",
|
|
221
|
+
"-f",
|
|
222
|
+
help="Output format (text, json, sarif)",
|
|
217
223
|
),
|
|
218
224
|
fix: bool = typer.Option(False, "--fix", help="Auto-fix safe issues"),
|
|
219
225
|
staged: bool = typer.Option(False, "--staged", help="Only scan staged changes"),
|
|
@@ -227,7 +233,7 @@ def scan(
|
|
|
227
233
|
if staged:
|
|
228
234
|
args.append("--staged")
|
|
229
235
|
|
|
230
|
-
result = subprocess.run(args, capture_output=False)
|
|
236
|
+
result = subprocess.run(args, check=False, capture_output=False)
|
|
231
237
|
if result.returncode != 0:
|
|
232
238
|
console.print("[yellow]Note: empathy-scan may not be installed[/yellow]")
|
|
233
239
|
console.print("Install with: pip install empathy-framework[software]")
|
|
@@ -240,9 +246,12 @@ def scan(
|
|
|
240
246
|
|
|
241
247
|
@app.command("inspect")
|
|
242
248
|
def inspect_cmd(
|
|
243
|
-
path: Path = typer.Argument(Path(
|
|
249
|
+
path: Path = typer.Argument(Path(), help="Path to inspect"),
|
|
244
250
|
format_out: str = typer.Option(
|
|
245
|
-
"text",
|
|
251
|
+
"text",
|
|
252
|
+
"--format",
|
|
253
|
+
"-f",
|
|
254
|
+
help="Output format (text, json, sarif)",
|
|
246
255
|
),
|
|
247
256
|
):
|
|
248
257
|
"""Deep inspection with code analysis."""
|
|
@@ -250,7 +259,7 @@ def inspect_cmd(
|
|
|
250
259
|
if format_out != "text":
|
|
251
260
|
args.extend(["--format", format_out])
|
|
252
261
|
|
|
253
|
-
result = subprocess.run(args, capture_output=False)
|
|
262
|
+
result = subprocess.run(args, check=False, capture_output=False)
|
|
254
263
|
if result.returncode != 0:
|
|
255
264
|
console.print("[yellow]Note: empathy-inspect may not be installed[/yellow]")
|
|
256
265
|
console.print("Install with: pip install empathy-framework[software]")
|
|
@@ -264,11 +273,14 @@ def inspect_cmd(
|
|
|
264
273
|
@app.command("sync-claude")
|
|
265
274
|
def sync_claude(
|
|
266
275
|
source: str = typer.Option(
|
|
267
|
-
"patterns",
|
|
276
|
+
"patterns",
|
|
277
|
+
"--source",
|
|
278
|
+
"-s",
|
|
279
|
+
help="Source to sync (patterns, bugs)",
|
|
268
280
|
),
|
|
269
281
|
):
|
|
270
282
|
"""Sync patterns to Claude Code memory."""
|
|
271
|
-
subprocess.run(["empathy-sync-claude", "--source", source])
|
|
283
|
+
subprocess.run(["empathy-sync-claude", "--source", source], check=False)
|
|
272
284
|
|
|
273
285
|
|
|
274
286
|
# =============================================================================
|
|
@@ -279,13 +291,24 @@ def sync_claude(
|
|
|
279
291
|
@app.command("morning")
|
|
280
292
|
def morning():
|
|
281
293
|
"""Start-of-day briefing with patterns, git context, and priorities."""
|
|
282
|
-
subprocess.run([sys.executable, "-m", "empathy_os.cli", "morning"])
|
|
294
|
+
subprocess.run([sys.executable, "-m", "empathy_os.cli", "morning"], check=False)
|
|
283
295
|
|
|
284
296
|
|
|
285
297
|
@app.command("ship")
|
|
286
|
-
def ship(
|
|
298
|
+
def ship(
|
|
299
|
+
tests_only: bool = typer.Option(False, "--tests-only", help="Run tests only"),
|
|
300
|
+
security_only: bool = typer.Option(False, "--security-only", help="Run security checks only"),
|
|
301
|
+
skip_sync: bool = typer.Option(False, "--skip-sync", help="Skip Claude sync"),
|
|
302
|
+
):
|
|
287
303
|
"""Pre-commit validation (lint, format, tests, security)."""
|
|
288
|
-
|
|
304
|
+
args = [sys.executable, "-m", "empathy_os.cli", "ship"]
|
|
305
|
+
if tests_only:
|
|
306
|
+
args.append("--tests-only")
|
|
307
|
+
if security_only:
|
|
308
|
+
args.append("--security-only")
|
|
309
|
+
if skip_sync:
|
|
310
|
+
args.append("--skip-sync")
|
|
311
|
+
subprocess.run(args, check=False)
|
|
289
312
|
|
|
290
313
|
|
|
291
314
|
@app.command("health")
|
|
@@ -299,13 +322,13 @@ def health(
|
|
|
299
322
|
args.append("--deep")
|
|
300
323
|
if fix:
|
|
301
324
|
args.append("--fix")
|
|
302
|
-
subprocess.run(args)
|
|
325
|
+
subprocess.run(args, check=False)
|
|
303
326
|
|
|
304
327
|
|
|
305
328
|
@app.command("fix-all")
|
|
306
329
|
def fix_all():
|
|
307
330
|
"""Fix all lint and format issues."""
|
|
308
|
-
subprocess.run([sys.executable, "-m", "empathy_os.cli", "fix-all"])
|
|
331
|
+
subprocess.run([sys.executable, "-m", "empathy_os.cli", "fix-all"], check=False)
|
|
309
332
|
|
|
310
333
|
|
|
311
334
|
@app.command("learn")
|
|
@@ -313,13 +336,15 @@ def learn(
|
|
|
313
336
|
analyze: int = typer.Option(20, "--analyze", "-a", help="Number of commits to analyze"),
|
|
314
337
|
):
|
|
315
338
|
"""Learn patterns from commit history."""
|
|
316
|
-
subprocess.run(
|
|
339
|
+
subprocess.run(
|
|
340
|
+
[sys.executable, "-m", "empathy_os.cli", "learn", "--analyze", str(analyze)], check=False
|
|
341
|
+
)
|
|
317
342
|
|
|
318
343
|
|
|
319
344
|
@app.command("run")
|
|
320
345
|
def run_repl():
|
|
321
346
|
"""Start interactive REPL mode."""
|
|
322
|
-
subprocess.run([sys.executable, "-m", "empathy_os.cli", "run"])
|
|
347
|
+
subprocess.run([sys.executable, "-m", "empathy_os.cli", "run"], check=False)
|
|
323
348
|
|
|
324
349
|
|
|
325
350
|
# =============================================================================
|
|
@@ -333,18 +358,90 @@ app.add_typer(wizard_app, name="wizard")
|
|
|
333
358
|
@wizard_app.command("list")
|
|
334
359
|
def wizard_list():
|
|
335
360
|
"""List all available wizards."""
|
|
336
|
-
subprocess.run([sys.executable, "-m", "empathy_os.cli", "frameworks"])
|
|
361
|
+
subprocess.run([sys.executable, "-m", "empathy_os.cli", "frameworks"], check=False)
|
|
337
362
|
|
|
338
363
|
|
|
339
364
|
@wizard_app.command("run")
|
|
340
365
|
def wizard_run(
|
|
341
366
|
name: str = typer.Argument(..., help="Wizard name to run"),
|
|
342
|
-
path: Path = typer.Option(Path(
|
|
367
|
+
path: Path = typer.Option(Path(), "--path", "-p", help="Path to analyze"),
|
|
343
368
|
):
|
|
344
369
|
"""Run a specific wizard on your codebase."""
|
|
345
370
|
console.print(f"[yellow]Running wizard:[/yellow] {name} on {path}")
|
|
346
371
|
# Delegate to empathy-scan with wizard filter
|
|
347
|
-
subprocess.run(["empathy-scan", str(path), "--wizards", name])
|
|
372
|
+
subprocess.run(["empathy-scan", str(path), "--wizards", name], check=False)
|
|
373
|
+
|
|
374
|
+
|
|
375
|
+
@wizard_app.command("create")
|
|
376
|
+
def wizard_create(
|
|
377
|
+
name: str = typer.Argument(..., help="Wizard name (snake_case)"),
|
|
378
|
+
domain: str = typer.Option(
|
|
379
|
+
..., "--domain", "-d", help="Domain (healthcare, finance, software)"
|
|
380
|
+
),
|
|
381
|
+
wizard_type: str = typer.Option(
|
|
382
|
+
"domain", "--type", "-t", help="Wizard type (domain, coach, ai)"
|
|
383
|
+
),
|
|
384
|
+
methodology: str = typer.Option(
|
|
385
|
+
"pattern", "--methodology", "-m", help="Methodology (pattern, tdd)"
|
|
386
|
+
),
|
|
387
|
+
patterns: str | None = typer.Option(
|
|
388
|
+
None, "--patterns", "-p", help="Comma-separated pattern IDs"
|
|
389
|
+
),
|
|
390
|
+
interactive: bool = typer.Option(
|
|
391
|
+
False, "--interactive", "-i", help="Interactive pattern selection"
|
|
392
|
+
),
|
|
393
|
+
):
|
|
394
|
+
"""Create a new wizard using Wizard Factory (12x faster)."""
|
|
395
|
+
cmd = [
|
|
396
|
+
sys.executable,
|
|
397
|
+
"-m",
|
|
398
|
+
"scaffolding",
|
|
399
|
+
"create",
|
|
400
|
+
name,
|
|
401
|
+
"--domain",
|
|
402
|
+
domain,
|
|
403
|
+
"--type",
|
|
404
|
+
wizard_type,
|
|
405
|
+
"--methodology",
|
|
406
|
+
methodology,
|
|
407
|
+
]
|
|
408
|
+
if patterns:
|
|
409
|
+
cmd.extend(["--patterns", patterns])
|
|
410
|
+
if interactive:
|
|
411
|
+
cmd.append("--interactive")
|
|
412
|
+
subprocess.run(cmd, check=False)
|
|
413
|
+
|
|
414
|
+
|
|
415
|
+
@wizard_app.command("list-patterns")
|
|
416
|
+
def wizard_list_patterns():
|
|
417
|
+
"""List all available wizard patterns."""
|
|
418
|
+
subprocess.run([sys.executable, "-m", "scaffolding", "list-patterns"], check=False)
|
|
419
|
+
|
|
420
|
+
|
|
421
|
+
@wizard_app.command("generate-tests")
|
|
422
|
+
def wizard_generate_tests(
|
|
423
|
+
wizard_id: str = typer.Argument(..., help="Wizard ID"),
|
|
424
|
+
patterns: str = typer.Option(..., "--patterns", "-p", help="Comma-separated pattern IDs"),
|
|
425
|
+
output: Path | None = typer.Option(None, "--output", "-o", help="Output directory"),
|
|
426
|
+
):
|
|
427
|
+
"""Generate tests for a wizard."""
|
|
428
|
+
cmd = [sys.executable, "-m", "test_generator", "generate", wizard_id, "--patterns", patterns]
|
|
429
|
+
if output:
|
|
430
|
+
cmd.extend(["--output", str(output)])
|
|
431
|
+
subprocess.run(cmd, check=False)
|
|
432
|
+
|
|
433
|
+
|
|
434
|
+
@wizard_app.command("analyze")
|
|
435
|
+
def wizard_analyze(
|
|
436
|
+
wizard_id: str = typer.Argument(..., help="Wizard ID"),
|
|
437
|
+
patterns: str = typer.Option(..., "--patterns", "-p", help="Wizard ID"),
|
|
438
|
+
json_output: bool = typer.Option(False, "--json", help="Output JSON format"),
|
|
439
|
+
):
|
|
440
|
+
"""Analyze wizard risk and get coverage recommendations."""
|
|
441
|
+
cmd = [sys.executable, "-m", "test_generator", "analyze", wizard_id, "--patterns", patterns]
|
|
442
|
+
if json_output:
|
|
443
|
+
cmd.append("--json")
|
|
444
|
+
subprocess.run(cmd, check=False)
|
|
348
445
|
|
|
349
446
|
|
|
350
447
|
# =============================================================================
|
|
@@ -358,16 +455,62 @@ app.add_typer(workflow_app, name="workflow")
|
|
|
358
455
|
@workflow_app.command("list")
|
|
359
456
|
def workflow_list():
|
|
360
457
|
"""List available multi-model workflows."""
|
|
361
|
-
subprocess.run([sys.executable, "-m", "empathy_os.cli", "workflow", "list"])
|
|
458
|
+
subprocess.run([sys.executable, "-m", "empathy_os.cli", "workflow", "list"], check=False)
|
|
362
459
|
|
|
363
460
|
|
|
364
461
|
@workflow_app.command("run")
|
|
365
462
|
def workflow_run(
|
|
366
463
|
name: str = typer.Argument(..., help="Workflow name"),
|
|
367
|
-
path: Path = typer.Option(Path(
|
|
464
|
+
path: Path = typer.Option(Path(), "--path", "-p", help="Path to run on"),
|
|
368
465
|
):
|
|
369
466
|
"""Run a multi-model workflow."""
|
|
370
|
-
subprocess.run(
|
|
467
|
+
subprocess.run(
|
|
468
|
+
[sys.executable, "-m", "empathy_os.cli", "workflow", "run", name, str(path)], check=False
|
|
469
|
+
)
|
|
470
|
+
|
|
471
|
+
|
|
472
|
+
@workflow_app.command("create")
|
|
473
|
+
def workflow_create(
|
|
474
|
+
name: str = typer.Argument(..., help="Workflow name (kebab-case, e.g., bug-scanner)"),
|
|
475
|
+
description: str = typer.Option(None, "--description", "-d", help="Workflow description"),
|
|
476
|
+
patterns: str = typer.Option(None, "--patterns", "-p", help="Comma-separated pattern IDs"),
|
|
477
|
+
stages: str = typer.Option(None, "--stages", "-s", help="Comma-separated stage names"),
|
|
478
|
+
tier_map: str = typer.Option(
|
|
479
|
+
None, "--tier-map", "-t", help="Tier map (e.g., analyze:CHEAP,process:CAPABLE)"
|
|
480
|
+
),
|
|
481
|
+
output: Path = typer.Option(None, "--output", "-o", help="Output directory"),
|
|
482
|
+
):
|
|
483
|
+
"""Create a new workflow using Workflow Factory (12x faster)."""
|
|
484
|
+
cmd = [sys.executable, "-m", "workflow_scaffolding", "create", name]
|
|
485
|
+
if description:
|
|
486
|
+
cmd.extend(["--description", description])
|
|
487
|
+
if patterns:
|
|
488
|
+
cmd.extend(["--patterns", patterns])
|
|
489
|
+
if stages:
|
|
490
|
+
cmd.extend(["--stages", stages])
|
|
491
|
+
if tier_map:
|
|
492
|
+
cmd.extend(["--tier-map", tier_map])
|
|
493
|
+
if output:
|
|
494
|
+
cmd.extend(["--output", str(output)])
|
|
495
|
+
subprocess.run(cmd, check=False)
|
|
496
|
+
|
|
497
|
+
|
|
498
|
+
@workflow_app.command("list-patterns")
|
|
499
|
+
def workflow_list_patterns():
|
|
500
|
+
"""List available workflow patterns."""
|
|
501
|
+
subprocess.run([sys.executable, "-m", "workflow_scaffolding", "list-patterns"], check=False)
|
|
502
|
+
|
|
503
|
+
|
|
504
|
+
@workflow_app.command("recommend")
|
|
505
|
+
def workflow_recommend(
|
|
506
|
+
workflow_type: str = typer.Argument(
|
|
507
|
+
..., help="Workflow type (code-analysis, simple, multi-agent, etc.)"
|
|
508
|
+
),
|
|
509
|
+
):
|
|
510
|
+
"""Recommend patterns for a workflow type."""
|
|
511
|
+
subprocess.run(
|
|
512
|
+
[sys.executable, "-m", "workflow_scaffolding", "recommend", workflow_type], check=False
|
|
513
|
+
)
|
|
371
514
|
|
|
372
515
|
|
|
373
516
|
# =============================================================================
|
|
@@ -408,37 +551,41 @@ def cheatsheet():
|
|
|
408
551
|
[bold]Workflows[/bold]
|
|
409
552
|
empathy workflow list Show available workflows
|
|
410
553
|
empathy workflow run <name> Execute a workflow
|
|
554
|
+
empathy workflow create <name> -p <patterns> Create workflow (12x faster)
|
|
555
|
+
empathy workflow list-patterns List available patterns
|
|
411
556
|
|
|
412
557
|
[bold]Wizards[/bold]
|
|
413
558
|
empathy wizard list Show available wizards
|
|
414
|
-
empathy wizard run <name> Execute a wizard
|
|
559
|
+
empathy wizard run <name> Execute a wizard
|
|
560
|
+
empathy wizard create <name> -d <domain> Create wizard (12x faster)
|
|
561
|
+
empathy wizard list-patterns List available patterns""",
|
|
415
562
|
title="[bold blue]Empathy Framework Cheatsheet[/bold blue]",
|
|
416
|
-
)
|
|
563
|
+
),
|
|
417
564
|
)
|
|
418
565
|
|
|
419
566
|
|
|
420
567
|
@app.command("dashboard")
|
|
421
568
|
def dashboard():
|
|
422
569
|
"""Launch visual dashboard."""
|
|
423
|
-
subprocess.run([sys.executable, "-m", "empathy_os.cli", "dashboard"])
|
|
570
|
+
subprocess.run([sys.executable, "-m", "empathy_os.cli", "dashboard"], check=False)
|
|
424
571
|
|
|
425
572
|
|
|
426
573
|
@app.command("costs")
|
|
427
574
|
def costs():
|
|
428
575
|
"""View API cost tracking."""
|
|
429
|
-
subprocess.run([sys.executable, "-m", "empathy_os.cli", "costs"])
|
|
576
|
+
subprocess.run([sys.executable, "-m", "empathy_os.cli", "costs"], check=False)
|
|
430
577
|
|
|
431
578
|
|
|
432
579
|
@app.command("init")
|
|
433
580
|
def init():
|
|
434
581
|
"""Create a new configuration file."""
|
|
435
|
-
subprocess.run([sys.executable, "-m", "empathy_os.cli", "init"])
|
|
582
|
+
subprocess.run([sys.executable, "-m", "empathy_os.cli", "init"], check=False)
|
|
436
583
|
|
|
437
584
|
|
|
438
585
|
@app.command("status")
|
|
439
586
|
def status():
|
|
440
587
|
"""What needs attention now."""
|
|
441
|
-
subprocess.run([sys.executable, "-m", "empathy_os.cli", "status"])
|
|
588
|
+
subprocess.run([sys.executable, "-m", "empathy_os.cli", "status"], check=False)
|
|
442
589
|
|
|
443
590
|
|
|
444
591
|
def main():
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"""Configuration management for Empathy Framework.
|
|
2
|
+
|
|
3
|
+
This package provides:
|
|
4
|
+
1. Original EmpathyConfig (backward compatible)
|
|
5
|
+
2. XML enhancement configurations (new)
|
|
6
|
+
|
|
7
|
+
Copyright 2026 Smart-AI-Memory
|
|
8
|
+
Licensed under Fair Source License 0.9
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
# Import original config from parent module's config.py for backward compatibility
|
|
12
|
+
import importlib.util
|
|
13
|
+
import sys
|
|
14
|
+
from pathlib import Path
|
|
15
|
+
|
|
16
|
+
# Check if PyYAML is available
|
|
17
|
+
try:
|
|
18
|
+
import yaml # noqa: F401
|
|
19
|
+
|
|
20
|
+
YAML_AVAILABLE = True
|
|
21
|
+
except ImportError:
|
|
22
|
+
YAML_AVAILABLE = False
|
|
23
|
+
|
|
24
|
+
# Load the original config.py module directly
|
|
25
|
+
config_py_path = Path(__file__).parent.parent / "config.py"
|
|
26
|
+
spec = importlib.util.spec_from_file_location("empathy_os_config_legacy", config_py_path)
|
|
27
|
+
if spec and spec.loader:
|
|
28
|
+
legacy_config = importlib.util.module_from_spec(spec)
|
|
29
|
+
spec.loader.exec_module(legacy_config)
|
|
30
|
+
EmpathyConfig = legacy_config.EmpathyConfig
|
|
31
|
+
load_config = legacy_config.load_config
|
|
32
|
+
else:
|
|
33
|
+
# Fallback if import fails
|
|
34
|
+
EmpathyConfig = None
|
|
35
|
+
load_config = None
|
|
36
|
+
|
|
37
|
+
# Import XML enhancement configs
|
|
38
|
+
from empathy_os.config.xml_config import ( # noqa: E402
|
|
39
|
+
AdaptiveConfig,
|
|
40
|
+
EmpathyXMLConfig,
|
|
41
|
+
I18nConfig,
|
|
42
|
+
MetricsConfig,
|
|
43
|
+
OptimizationConfig,
|
|
44
|
+
XMLConfig,
|
|
45
|
+
get_config,
|
|
46
|
+
set_config,
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
__all__ = [
|
|
50
|
+
# Original config (backward compatible)
|
|
51
|
+
"EmpathyConfig",
|
|
52
|
+
"load_config",
|
|
53
|
+
"YAML_AVAILABLE",
|
|
54
|
+
# XML enhancement configs
|
|
55
|
+
"XMLConfig",
|
|
56
|
+
"OptimizationConfig",
|
|
57
|
+
"AdaptiveConfig",
|
|
58
|
+
"I18nConfig",
|
|
59
|
+
"MetricsConfig",
|
|
60
|
+
"EmpathyXMLConfig",
|
|
61
|
+
"get_config",
|
|
62
|
+
"set_config",
|
|
63
|
+
]
|