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
|
@@ -0,0 +1,362 @@
|
|
|
1
|
+
"""Code Inspection CLI
|
|
2
|
+
|
|
3
|
+
Command-line interface for the Code Inspection Agent Pipeline.
|
|
4
|
+
|
|
5
|
+
Usage:
|
|
6
|
+
empathy-inspect [path] [options]
|
|
7
|
+
|
|
8
|
+
Examples:
|
|
9
|
+
empathy-inspect . # Inspect current directory
|
|
10
|
+
empathy-inspect ./src --parallel # Parallel mode
|
|
11
|
+
empathy-inspect . --format json # JSON output
|
|
12
|
+
empathy-inspect . --staged # Only staged changes
|
|
13
|
+
empathy-inspect . --fix # Auto-fix safe issues
|
|
14
|
+
|
|
15
|
+
Copyright 2025 Smart AI Memory, LLC
|
|
16
|
+
Licensed under Fair Source 0.9
|
|
17
|
+
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
import argparse
|
|
21
|
+
import asyncio
|
|
22
|
+
import sys
|
|
23
|
+
from pathlib import Path
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
async def run_auto_fix(project_path: str, verbose: bool = False) -> int:
|
|
27
|
+
"""Run auto-fix using ruff.
|
|
28
|
+
|
|
29
|
+
Args:
|
|
30
|
+
project_path: Path to project to fix
|
|
31
|
+
verbose: Whether to show verbose output
|
|
32
|
+
|
|
33
|
+
Returns:
|
|
34
|
+
Number of issues fixed
|
|
35
|
+
|
|
36
|
+
"""
|
|
37
|
+
import subprocess
|
|
38
|
+
|
|
39
|
+
fixed_count = 0
|
|
40
|
+
|
|
41
|
+
# Run ruff check with --fix
|
|
42
|
+
try:
|
|
43
|
+
print("\nRunning ruff --fix...")
|
|
44
|
+
result = subprocess.run(
|
|
45
|
+
["ruff", "check", project_path, "--fix", "--exit-zero"],
|
|
46
|
+
check=False,
|
|
47
|
+
capture_output=True,
|
|
48
|
+
text=True,
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
if verbose and result.stdout:
|
|
52
|
+
print(result.stdout)
|
|
53
|
+
|
|
54
|
+
# Count fixes from output
|
|
55
|
+
if "Fixed" in result.stdout:
|
|
56
|
+
# Parse "Fixed X errors" or similar
|
|
57
|
+
import re
|
|
58
|
+
|
|
59
|
+
match = re.search(r"Fixed (\d+)", result.stdout)
|
|
60
|
+
if match:
|
|
61
|
+
fixed_count += int(match.group(1))
|
|
62
|
+
|
|
63
|
+
except FileNotFoundError:
|
|
64
|
+
print("Warning: ruff not found. Install with: pip install ruff")
|
|
65
|
+
except Exception as e:
|
|
66
|
+
print(f"Warning: ruff fix failed: {e}")
|
|
67
|
+
|
|
68
|
+
# Run ruff format for formatting fixes
|
|
69
|
+
try:
|
|
70
|
+
print("Running ruff format...")
|
|
71
|
+
result = subprocess.run(
|
|
72
|
+
["ruff", "format", project_path],
|
|
73
|
+
check=False,
|
|
74
|
+
capture_output=True,
|
|
75
|
+
text=True,
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
if verbose and result.stdout:
|
|
79
|
+
print(result.stdout)
|
|
80
|
+
|
|
81
|
+
# Count formatted files
|
|
82
|
+
if "file" in result.stderr.lower():
|
|
83
|
+
import re
|
|
84
|
+
|
|
85
|
+
match = re.search(r"(\d+) file", result.stderr)
|
|
86
|
+
if match:
|
|
87
|
+
fixed_count += int(match.group(1))
|
|
88
|
+
|
|
89
|
+
except FileNotFoundError:
|
|
90
|
+
pass # Already warned above
|
|
91
|
+
except Exception as e:
|
|
92
|
+
if verbose:
|
|
93
|
+
print(f"Warning: ruff format failed: {e}")
|
|
94
|
+
|
|
95
|
+
# Run isort for import sorting
|
|
96
|
+
try:
|
|
97
|
+
print("Running isort...")
|
|
98
|
+
result = subprocess.run(
|
|
99
|
+
["isort", project_path, "--profile", "black"],
|
|
100
|
+
check=False,
|
|
101
|
+
capture_output=True,
|
|
102
|
+
text=True,
|
|
103
|
+
)
|
|
104
|
+
|
|
105
|
+
if verbose and result.stdout:
|
|
106
|
+
print(result.stdout)
|
|
107
|
+
|
|
108
|
+
# isort shows "Fixing" for each file
|
|
109
|
+
if "Fixing" in result.stdout:
|
|
110
|
+
fixed_count += result.stdout.count("Fixing")
|
|
111
|
+
|
|
112
|
+
except FileNotFoundError:
|
|
113
|
+
if verbose:
|
|
114
|
+
print("Note: isort not found. Install with: pip install isort")
|
|
115
|
+
except Exception as e:
|
|
116
|
+
if verbose:
|
|
117
|
+
print(f"Warning: isort failed: {e}")
|
|
118
|
+
|
|
119
|
+
return fixed_count
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
def parse_args() -> argparse.Namespace:
|
|
123
|
+
"""Parse command-line arguments."""
|
|
124
|
+
parser = argparse.ArgumentParser(
|
|
125
|
+
prog="empathy-inspect",
|
|
126
|
+
description="Code Inspection Agent Pipeline",
|
|
127
|
+
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
128
|
+
epilog="""
|
|
129
|
+
Examples:
|
|
130
|
+
empathy-inspect . Inspect current directory
|
|
131
|
+
empathy-inspect ./src --parallel Run static checks in parallel
|
|
132
|
+
empathy-inspect . --format json Output as JSON
|
|
133
|
+
empathy-inspect . --staged Inspect staged git changes only
|
|
134
|
+
empathy-inspect . --quick Quick mode (skip slow checks)
|
|
135
|
+
""",
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
parser.add_argument(
|
|
139
|
+
"path",
|
|
140
|
+
nargs="?",
|
|
141
|
+
default=".",
|
|
142
|
+
help="Path to inspect (default: current directory)",
|
|
143
|
+
)
|
|
144
|
+
|
|
145
|
+
parser.add_argument(
|
|
146
|
+
"--parallel",
|
|
147
|
+
action="store_true",
|
|
148
|
+
default=True,
|
|
149
|
+
help="Run Phase 1 tools in parallel (default: True)",
|
|
150
|
+
)
|
|
151
|
+
|
|
152
|
+
parser.add_argument(
|
|
153
|
+
"--no-parallel",
|
|
154
|
+
action="store_true",
|
|
155
|
+
help="Disable parallel execution",
|
|
156
|
+
)
|
|
157
|
+
|
|
158
|
+
parser.add_argument(
|
|
159
|
+
"--learning",
|
|
160
|
+
action="store_true",
|
|
161
|
+
default=True,
|
|
162
|
+
help="Enable pattern learning (default: True)",
|
|
163
|
+
)
|
|
164
|
+
|
|
165
|
+
parser.add_argument(
|
|
166
|
+
"--no-learning",
|
|
167
|
+
action="store_true",
|
|
168
|
+
help="Disable pattern learning",
|
|
169
|
+
)
|
|
170
|
+
|
|
171
|
+
parser.add_argument(
|
|
172
|
+
"--format",
|
|
173
|
+
"-f",
|
|
174
|
+
choices=["terminal", "json", "markdown", "sarif", "html"],
|
|
175
|
+
default="terminal",
|
|
176
|
+
help="Output format (default: terminal). Use 'sarif' for GitHub Actions.",
|
|
177
|
+
)
|
|
178
|
+
|
|
179
|
+
parser.add_argument(
|
|
180
|
+
"--staged",
|
|
181
|
+
action="store_true",
|
|
182
|
+
help="Only inspect staged git changes",
|
|
183
|
+
)
|
|
184
|
+
|
|
185
|
+
parser.add_argument(
|
|
186
|
+
"--changed",
|
|
187
|
+
action="store_true",
|
|
188
|
+
help="Only inspect changed files (vs HEAD)",
|
|
189
|
+
)
|
|
190
|
+
|
|
191
|
+
parser.add_argument(
|
|
192
|
+
"--quick",
|
|
193
|
+
"-q",
|
|
194
|
+
action="store_true",
|
|
195
|
+
help="Quick mode (skip slow checks like deep debugging)",
|
|
196
|
+
)
|
|
197
|
+
|
|
198
|
+
parser.add_argument(
|
|
199
|
+
"--fix",
|
|
200
|
+
action="store_true",
|
|
201
|
+
help="Auto-fix safe issues (formatting, imports)",
|
|
202
|
+
)
|
|
203
|
+
|
|
204
|
+
parser.add_argument(
|
|
205
|
+
"--verbose",
|
|
206
|
+
"-v",
|
|
207
|
+
action="store_true",
|
|
208
|
+
help="Verbose output",
|
|
209
|
+
)
|
|
210
|
+
|
|
211
|
+
parser.add_argument(
|
|
212
|
+
"--output",
|
|
213
|
+
"-o",
|
|
214
|
+
type=str,
|
|
215
|
+
help="Write report to file",
|
|
216
|
+
)
|
|
217
|
+
|
|
218
|
+
parser.add_argument(
|
|
219
|
+
"--exclude",
|
|
220
|
+
"-e",
|
|
221
|
+
type=str,
|
|
222
|
+
action="append",
|
|
223
|
+
default=[],
|
|
224
|
+
help="Glob patterns to exclude (can be used multiple times)",
|
|
225
|
+
)
|
|
226
|
+
|
|
227
|
+
# Baseline/suppression options
|
|
228
|
+
parser.add_argument(
|
|
229
|
+
"--no-baseline",
|
|
230
|
+
action="store_true",
|
|
231
|
+
help="Disable baseline filtering (show all findings)",
|
|
232
|
+
)
|
|
233
|
+
|
|
234
|
+
parser.add_argument(
|
|
235
|
+
"--baseline-init",
|
|
236
|
+
action="store_true",
|
|
237
|
+
help="Create an empty .empathy-baseline.json file",
|
|
238
|
+
)
|
|
239
|
+
|
|
240
|
+
parser.add_argument(
|
|
241
|
+
"--baseline-cleanup",
|
|
242
|
+
action="store_true",
|
|
243
|
+
help="Remove expired suppressions from baseline",
|
|
244
|
+
)
|
|
245
|
+
|
|
246
|
+
return parser.parse_args()
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
async def run_inspection(args: argparse.Namespace) -> int:
|
|
250
|
+
"""Run the inspection and return exit code."""
|
|
251
|
+
# Import here to avoid slow startup
|
|
252
|
+
from agents.code_inspection import CodeInspectionAgent
|
|
253
|
+
|
|
254
|
+
# Resolve path
|
|
255
|
+
project_path = str(Path(args.path).resolve())
|
|
256
|
+
|
|
257
|
+
# Determine target mode
|
|
258
|
+
if args.staged:
|
|
259
|
+
target_mode = "staged"
|
|
260
|
+
elif args.changed:
|
|
261
|
+
target_mode = "changed"
|
|
262
|
+
else:
|
|
263
|
+
target_mode = "all"
|
|
264
|
+
|
|
265
|
+
# Create agent
|
|
266
|
+
agent = CodeInspectionAgent(
|
|
267
|
+
parallel_mode=args.parallel and not args.no_parallel,
|
|
268
|
+
learning_enabled=args.learning and not args.no_learning,
|
|
269
|
+
baseline_enabled=not args.no_baseline,
|
|
270
|
+
)
|
|
271
|
+
|
|
272
|
+
# Configure verbose logging
|
|
273
|
+
if args.verbose:
|
|
274
|
+
import logging
|
|
275
|
+
|
|
276
|
+
logging.basicConfig(level=logging.DEBUG)
|
|
277
|
+
|
|
278
|
+
# Run inspection
|
|
279
|
+
state = await agent.inspect(
|
|
280
|
+
project_path=project_path,
|
|
281
|
+
target_mode=target_mode,
|
|
282
|
+
exclude_patterns=args.exclude if args.exclude else None,
|
|
283
|
+
)
|
|
284
|
+
|
|
285
|
+
# Format report
|
|
286
|
+
report = agent.format_report(state, args.format)
|
|
287
|
+
|
|
288
|
+
# Output
|
|
289
|
+
if args.output:
|
|
290
|
+
output_path = Path(args.output)
|
|
291
|
+
output_path.write_text(report)
|
|
292
|
+
print(f"Report written to {output_path}")
|
|
293
|
+
else:
|
|
294
|
+
print(report)
|
|
295
|
+
|
|
296
|
+
# Auto-fix if requested
|
|
297
|
+
if args.fix:
|
|
298
|
+
fixed_count = await run_auto_fix(project_path, args.verbose)
|
|
299
|
+
if fixed_count > 0:
|
|
300
|
+
print(f"\nAuto-fixed {fixed_count} issues. Run inspection again to verify.")
|
|
301
|
+
|
|
302
|
+
# Return exit code based on health status
|
|
303
|
+
if state["health_status"] == "fail":
|
|
304
|
+
return 1
|
|
305
|
+
if state["health_status"] == "warn":
|
|
306
|
+
return 0 # Warn but don't fail
|
|
307
|
+
return 0
|
|
308
|
+
|
|
309
|
+
|
|
310
|
+
def handle_baseline_commands(args: argparse.Namespace) -> bool:
|
|
311
|
+
"""Handle baseline-specific commands.
|
|
312
|
+
|
|
313
|
+
Returns:
|
|
314
|
+
True if a baseline command was handled (and should exit)
|
|
315
|
+
|
|
316
|
+
"""
|
|
317
|
+
from agents.code_inspection.baseline import BaselineManager, create_baseline_file
|
|
318
|
+
|
|
319
|
+
project_path = str(Path(args.path).resolve())
|
|
320
|
+
|
|
321
|
+
if args.baseline_init:
|
|
322
|
+
baseline_path = create_baseline_file(project_path)
|
|
323
|
+
print(f"Created baseline file: {baseline_path}")
|
|
324
|
+
return True
|
|
325
|
+
|
|
326
|
+
if args.baseline_cleanup:
|
|
327
|
+
manager = BaselineManager(project_path)
|
|
328
|
+
if manager.load():
|
|
329
|
+
removed = manager.cleanup_expired()
|
|
330
|
+
print(f"Removed {removed} expired suppressions")
|
|
331
|
+
else:
|
|
332
|
+
print("No baseline file found")
|
|
333
|
+
return True
|
|
334
|
+
|
|
335
|
+
return False
|
|
336
|
+
|
|
337
|
+
|
|
338
|
+
def main():
|
|
339
|
+
"""Main entry point for CLI."""
|
|
340
|
+
args = parse_args()
|
|
341
|
+
|
|
342
|
+
try:
|
|
343
|
+
# Handle baseline commands first
|
|
344
|
+
if handle_baseline_commands(args):
|
|
345
|
+
sys.exit(0)
|
|
346
|
+
|
|
347
|
+
exit_code = asyncio.run(run_inspection(args))
|
|
348
|
+
sys.exit(exit_code)
|
|
349
|
+
except KeyboardInterrupt:
|
|
350
|
+
print("\nInspection cancelled.")
|
|
351
|
+
sys.exit(130)
|
|
352
|
+
except Exception as e:
|
|
353
|
+
print(f"Error: {e}", file=sys.stderr)
|
|
354
|
+
if args.verbose:
|
|
355
|
+
import traceback
|
|
356
|
+
|
|
357
|
+
traceback.print_exc()
|
|
358
|
+
sys.exit(1)
|
|
359
|
+
|
|
360
|
+
|
|
361
|
+
if __name__ == "__main__":
|
|
362
|
+
main()
|
empathy_software_plugin/cli.py
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Empathy Framework - Software Development CLI
|
|
1
|
+
"""Empathy Framework - Software Development CLI
|
|
3
2
|
|
|
4
3
|
Command-line interface for running AI development wizards on your codebase.
|
|
5
4
|
|
|
@@ -98,14 +97,14 @@ async def analyze_project(
|
|
|
98
97
|
output_format: str = "text",
|
|
99
98
|
verbose: bool = False,
|
|
100
99
|
):
|
|
101
|
-
"""
|
|
102
|
-
Analyze a project with AI development wizards.
|
|
100
|
+
"""Analyze a project with AI development wizards.
|
|
103
101
|
|
|
104
102
|
Args:
|
|
105
103
|
project_path: Path to project root
|
|
106
104
|
wizard_names: List of wizard names to run (or None for all)
|
|
107
105
|
output_format: 'text' or 'json'
|
|
108
106
|
verbose: Show detailed output
|
|
107
|
+
|
|
109
108
|
"""
|
|
110
109
|
logger.info(f"Starting project analysis for: {project_path} (format: {output_format})")
|
|
111
110
|
print_header("Empathy Framework - AI Development Analysis")
|
|
@@ -192,8 +191,7 @@ async def analyze_project(
|
|
|
192
191
|
|
|
193
192
|
|
|
194
193
|
async def gather_project_context(project_path: str) -> dict[str, Any]:
|
|
195
|
-
"""
|
|
196
|
-
Gather context about the project.
|
|
194
|
+
"""Gather context about the project.
|
|
197
195
|
|
|
198
196
|
Returns dictionary with all context needed by wizards.
|
|
199
197
|
"""
|
|
@@ -234,8 +232,10 @@ async def gather_project_context(project_path: str) -> dict[str, Any]:
|
|
|
234
232
|
|
|
235
233
|
# Parse AI calls
|
|
236
234
|
context["ai_calls"].extend(parse_ai_calls(str(file_path), content))
|
|
237
|
-
except Exception:
|
|
238
|
-
|
|
235
|
+
except Exception as e:
|
|
236
|
+
# Best effort: Skip files that can't be parsed (corrupted, binary, etc.)
|
|
237
|
+
logger.debug(f"Could not parse {file_path}: {e}")
|
|
238
|
+
pass
|
|
239
239
|
|
|
240
240
|
# All Python/JS/TS files are code files
|
|
241
241
|
context["code_files"].append(str(file_path))
|
|
@@ -264,6 +264,7 @@ async def gather_project_context(project_path: str) -> dict[str, Any]:
|
|
|
264
264
|
|
|
265
265
|
result = subprocess.run(
|
|
266
266
|
["git", "log", "--oneline", "--name-only", "-50"],
|
|
267
|
+
check=False,
|
|
267
268
|
cwd=project_path,
|
|
268
269
|
capture_output=True,
|
|
269
270
|
text=True,
|
|
@@ -271,8 +272,10 @@ async def gather_project_context(project_path: str) -> dict[str, Any]:
|
|
|
271
272
|
)
|
|
272
273
|
if result.returncode == 0:
|
|
273
274
|
context["version_history"] = parse_git_history(result.stdout)
|
|
274
|
-
except Exception:
|
|
275
|
-
|
|
275
|
+
except Exception as e:
|
|
276
|
+
# Optional: Git history unavailable (not a git repo or git not installed)
|
|
277
|
+
logger.debug(f"Could not fetch git history: {e}")
|
|
278
|
+
pass
|
|
276
279
|
|
|
277
280
|
return context
|
|
278
281
|
|
|
@@ -291,7 +294,7 @@ def parse_ai_calls(file_path: str, content: str) -> list[dict[str, Any]]:
|
|
|
291
294
|
"code_snippet": content[:500], # First 500 chars as sample
|
|
292
295
|
"prompt_size": len(content),
|
|
293
296
|
"conversation_id": None, # Could detect from context
|
|
294
|
-
}
|
|
297
|
+
},
|
|
295
298
|
)
|
|
296
299
|
|
|
297
300
|
return calls
|
|
@@ -320,7 +323,6 @@ def parse_git_history(git_output: str) -> list[dict[str, Any]]:
|
|
|
320
323
|
|
|
321
324
|
def prepare_wizard_context(wizard_name: str, full_context: dict[str, Any]) -> dict[str, Any]:
|
|
322
325
|
"""Prepare context specific to a wizard's requirements"""
|
|
323
|
-
|
|
324
326
|
base_context = {
|
|
325
327
|
"project_path": full_context["project_path"],
|
|
326
328
|
"version_history": full_context.get("version_history", []),
|
|
@@ -332,7 +334,7 @@ def prepare_wizard_context(wizard_name: str, full_context: dict[str, Any]) -> di
|
|
|
332
334
|
"prompt_files": full_context.get("prompt_files", []),
|
|
333
335
|
}
|
|
334
336
|
|
|
335
|
-
|
|
337
|
+
if wizard_name == "context_window":
|
|
336
338
|
return {
|
|
337
339
|
**base_context,
|
|
338
340
|
"ai_calls": full_context.get("ai_calls", []),
|
|
@@ -341,14 +343,14 @@ def prepare_wizard_context(wizard_name: str, full_context: dict[str, Any]) -> di
|
|
|
341
343
|
"model_name": "claude-3-sonnet",
|
|
342
344
|
}
|
|
343
345
|
|
|
344
|
-
|
|
346
|
+
if wizard_name == "collaboration_pattern":
|
|
345
347
|
return {
|
|
346
348
|
**base_context,
|
|
347
349
|
"ai_integration_files": full_context.get("ai_integration_files", []),
|
|
348
350
|
"ai_usage_patterns": full_context.get("ai_usage_patterns", []),
|
|
349
351
|
}
|
|
350
352
|
|
|
351
|
-
|
|
353
|
+
if wizard_name == "ai_documentation":
|
|
352
354
|
return {
|
|
353
355
|
**base_context,
|
|
354
356
|
"documentation_files": full_context.get("documentation_files", []),
|
|
@@ -360,7 +362,6 @@ def prepare_wizard_context(wizard_name: str, full_context: dict[str, Any]) -> di
|
|
|
360
362
|
|
|
361
363
|
def display_wizard_results(wizard, result: dict[str, Any], verbose: bool):
|
|
362
364
|
"""Display wizard results in human-readable format"""
|
|
363
|
-
|
|
364
365
|
# Issues
|
|
365
366
|
issues = result.get("issues", [])
|
|
366
367
|
if issues:
|
|
@@ -461,7 +462,7 @@ def list_wizards():
|
|
|
461
462
|
print(f"\n{Colors.BOLD}{wizard_id}{Colors.END}")
|
|
462
463
|
print(f" Name: {info['name']}")
|
|
463
464
|
print(
|
|
464
|
-
f" Level: {info['empathy_level']} ({'Anticipatory' if info['empathy_level'] == 4 else 'Other'})"
|
|
465
|
+
f" Level: {info['empathy_level']} ({'Anticipatory' if info['empathy_level'] == 4 else 'Other'})",
|
|
465
466
|
)
|
|
466
467
|
print(f" Category: {info.get('category', 'N/A')}")
|
|
467
468
|
|
|
@@ -520,10 +521,15 @@ Examples:
|
|
|
520
521
|
analyze_parser = subparsers.add_parser("analyze", help="Analyze a project")
|
|
521
522
|
analyze_parser.add_argument("path", help="Path to project")
|
|
522
523
|
analyze_parser.add_argument(
|
|
523
|
-
"--wizards",
|
|
524
|
+
"--wizards",
|
|
525
|
+
help="Comma-separated list of wizards to run",
|
|
526
|
+
default=None,
|
|
524
527
|
)
|
|
525
528
|
analyze_parser.add_argument(
|
|
526
|
-
"--output",
|
|
529
|
+
"--output",
|
|
530
|
+
choices=["text", "json"],
|
|
531
|
+
default="text",
|
|
532
|
+
help="Output format",
|
|
527
533
|
)
|
|
528
534
|
analyze_parser.add_argument("--verbose", action="store_true", help="Show detailed output")
|
|
529
535
|
|
|
@@ -552,21 +558,20 @@ Examples:
|
|
|
552
558
|
wizard_names=wizard_names,
|
|
553
559
|
output_format=args.output,
|
|
554
560
|
verbose=args.verbose,
|
|
555
|
-
)
|
|
561
|
+
),
|
|
556
562
|
)
|
|
557
563
|
|
|
558
|
-
|
|
564
|
+
if args.command == "list-wizards":
|
|
559
565
|
return list_wizards()
|
|
560
566
|
|
|
561
|
-
|
|
567
|
+
if args.command == "wizard-info":
|
|
562
568
|
return wizard_info(args.wizard_id)
|
|
563
569
|
|
|
564
570
|
return 0
|
|
565
571
|
|
|
566
572
|
|
|
567
573
|
def scan_command():
|
|
568
|
-
"""
|
|
569
|
-
Entry point for empathy-scan command (converted from bin/empathy-scan).
|
|
574
|
+
"""Entry point for empathy-scan command (converted from bin/empathy-scan).
|
|
570
575
|
One-click security & performance scanner.
|
|
571
576
|
"""
|
|
572
577
|
logger.info("Empathy Framework security and performance scanner started")
|
|
@@ -646,7 +651,9 @@ def scan_command():
|
|
|
646
651
|
|
|
647
652
|
for wizard_name, wizard in wizards:
|
|
648
653
|
result = wizard.run_full_analysis(
|
|
649
|
-
code=code,
|
|
654
|
+
code=code,
|
|
655
|
+
file_path=str(file_path),
|
|
656
|
+
language="python",
|
|
650
657
|
)
|
|
651
658
|
|
|
652
659
|
if result.issues:
|
|
@@ -655,7 +662,9 @@ def scan_command():
|
|
|
655
662
|
severity_icon = (
|
|
656
663
|
"🔴"
|
|
657
664
|
if issue.severity == "high"
|
|
658
|
-
else "🟡"
|
|
665
|
+
else "🟡"
|
|
666
|
+
if issue.severity == "medium"
|
|
667
|
+
else "🔵"
|
|
659
668
|
)
|
|
660
669
|
print(f" {severity_icon} Line {issue.line_number}: {issue.message}")
|
|
661
670
|
if len(result.issues) > 3:
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Software Development Plugin for Empathy Framework
|
|
1
|
+
"""Software Development Plugin for Empathy Framework
|
|
3
2
|
|
|
4
3
|
This plugin provides 16+ Coach wizards for code analysis,
|
|
5
4
|
demonstrating Level 4 Anticipatory Empathy in software development.
|
|
@@ -25,8 +24,7 @@ logger = logging.getLogger(__name__)
|
|
|
25
24
|
|
|
26
25
|
|
|
27
26
|
class SoftwarePlugin(BasePlugin):
|
|
28
|
-
"""
|
|
29
|
-
Software Development Domain Plugin
|
|
27
|
+
"""Software Development Domain Plugin
|
|
30
28
|
|
|
31
29
|
Provides wizards for:
|
|
32
30
|
- Security analysis
|
|
@@ -59,8 +57,7 @@ class SoftwarePlugin(BasePlugin):
|
|
|
59
57
|
)
|
|
60
58
|
|
|
61
59
|
def register_wizards(self) -> dict[str, type[BaseWizard]]:
|
|
62
|
-
"""
|
|
63
|
-
Register all software development wizards.
|
|
60
|
+
"""Register all software development wizards.
|
|
64
61
|
|
|
65
62
|
In our experience building these wizards, we found that the framework
|
|
66
63
|
enables a fundamental shift: instead of reactive debugging, the system
|
|
@@ -157,8 +154,7 @@ class SoftwarePlugin(BasePlugin):
|
|
|
157
154
|
return wizards
|
|
158
155
|
|
|
159
156
|
def register_patterns(self) -> dict:
|
|
160
|
-
"""
|
|
161
|
-
Register software development patterns.
|
|
157
|
+
"""Register software development patterns.
|
|
162
158
|
|
|
163
159
|
These patterns were learned from real-world usage and enable
|
|
164
160
|
cross-domain learning (Level 5 Systems Empathy).
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"""Software Development Wizards
|
|
2
|
+
|
|
3
|
+
Production-ready wizards for software development with memory enhancement.
|
|
4
|
+
|
|
5
|
+
Memory-Enhanced Wizards (Level 4+):
|
|
6
|
+
- MemoryEnhancedDebuggingWizard: Bug correlation with historical patterns
|
|
7
|
+
- TechDebtWizard: Tech debt trajectory tracking and prediction
|
|
8
|
+
- SecurityLearningWizard: Security scanning with false positive learning
|
|
9
|
+
|
|
10
|
+
Utility Wizards:
|
|
11
|
+
- PatternRetrieverWizard: Pattern search and retrieval (Level 3)
|
|
12
|
+
- PatternExtractionWizard: Auto-detect fixes and suggest patterns (Level 3)
|
|
13
|
+
- CodeReviewWizard: Pattern-based code review (Level 4)
|
|
14
|
+
|
|
15
|
+
Core Wizards:
|
|
16
|
+
- SecurityAnalysisWizard: OWASP vulnerability detection
|
|
17
|
+
- AdvancedDebuggingWizard: Protocol-based debugging
|
|
18
|
+
- PerformanceProfilingWizard: Performance analysis
|
|
19
|
+
- TestingWizard: Test coverage and quality
|
|
20
|
+
- AIDocumentationWizard: Documentation generation
|
|
21
|
+
|
|
22
|
+
Copyright 2025 Smart AI Memory, LLC
|
|
23
|
+
Licensed under Fair Source 0.9
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
from .base_wizard import BaseWizard
|
|
27
|
+
from .code_review_wizard import CodeReviewWizard
|
|
28
|
+
from .memory_enhanced_debugging_wizard import MemoryEnhancedDebuggingWizard
|
|
29
|
+
from .pattern_extraction_wizard import PatternExtractionWizard
|
|
30
|
+
from .pattern_retriever_wizard import PatternRetrieverWizard
|
|
31
|
+
from .security_learning_wizard import SecurityLearningWizard
|
|
32
|
+
from .tech_debt_wizard import TechDebtWizard
|
|
33
|
+
|
|
34
|
+
__all__ = [
|
|
35
|
+
"BaseWizard",
|
|
36
|
+
"CodeReviewWizard",
|
|
37
|
+
"MemoryEnhancedDebuggingWizard",
|
|
38
|
+
"PatternExtractionWizard",
|
|
39
|
+
"PatternRetrieverWizard",
|
|
40
|
+
"SecurityLearningWizard",
|
|
41
|
+
"TechDebtWizard",
|
|
42
|
+
]
|