empathy-framework 3.7.0__py3-none-any.whl → 3.8.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.
Files changed (274) hide show
  1. coach_wizards/code_reviewer_README.md +60 -0
  2. coach_wizards/code_reviewer_wizard.py +180 -0
  3. {empathy_framework-3.7.0.dist-info → empathy_framework-3.8.0.dist-info}/METADATA +148 -11
  4. empathy_framework-3.8.0.dist-info/RECORD +333 -0
  5. {empathy_framework-3.7.0.dist-info → empathy_framework-3.8.0.dist-info}/top_level.txt +5 -1
  6. empathy_healthcare_plugin/monitors/__init__.py +9 -0
  7. empathy_healthcare_plugin/monitors/clinical_protocol_monitor.py +315 -0
  8. empathy_healthcare_plugin/monitors/monitoring/__init__.py +44 -0
  9. empathy_healthcare_plugin/monitors/monitoring/protocol_checker.py +300 -0
  10. empathy_healthcare_plugin/monitors/monitoring/protocol_loader.py +214 -0
  11. empathy_healthcare_plugin/monitors/monitoring/sensor_parsers.py +306 -0
  12. empathy_healthcare_plugin/monitors/monitoring/trajectory_analyzer.py +389 -0
  13. empathy_llm_toolkit/agent_factory/__init__.py +53 -0
  14. empathy_llm_toolkit/agent_factory/adapters/__init__.py +85 -0
  15. empathy_llm_toolkit/agent_factory/adapters/autogen_adapter.py +312 -0
  16. empathy_llm_toolkit/agent_factory/adapters/crewai_adapter.py +454 -0
  17. empathy_llm_toolkit/agent_factory/adapters/haystack_adapter.py +298 -0
  18. empathy_llm_toolkit/agent_factory/adapters/langchain_adapter.py +362 -0
  19. empathy_llm_toolkit/agent_factory/adapters/langgraph_adapter.py +333 -0
  20. empathy_llm_toolkit/agent_factory/adapters/native.py +228 -0
  21. empathy_llm_toolkit/agent_factory/adapters/wizard_adapter.py +426 -0
  22. empathy_llm_toolkit/agent_factory/base.py +305 -0
  23. empathy_llm_toolkit/agent_factory/crews/__init__.py +67 -0
  24. empathy_llm_toolkit/agent_factory/crews/code_review.py +1113 -0
  25. empathy_llm_toolkit/agent_factory/crews/health_check.py +1246 -0
  26. empathy_llm_toolkit/agent_factory/crews/refactoring.py +1128 -0
  27. empathy_llm_toolkit/agent_factory/crews/security_audit.py +1018 -0
  28. empathy_llm_toolkit/agent_factory/decorators.py +286 -0
  29. empathy_llm_toolkit/agent_factory/factory.py +558 -0
  30. empathy_llm_toolkit/agent_factory/framework.py +192 -0
  31. empathy_llm_toolkit/agent_factory/memory_integration.py +324 -0
  32. empathy_llm_toolkit/agent_factory/resilient.py +320 -0
  33. empathy_llm_toolkit/cli/__init__.py +8 -0
  34. empathy_llm_toolkit/cli/sync_claude.py +487 -0
  35. empathy_llm_toolkit/code_health.py +150 -3
  36. empathy_llm_toolkit/config/__init__.py +29 -0
  37. empathy_llm_toolkit/config/unified.py +295 -0
  38. empathy_llm_toolkit/routing/__init__.py +32 -0
  39. empathy_llm_toolkit/routing/model_router.py +362 -0
  40. empathy_llm_toolkit/security/IMPLEMENTATION_SUMMARY.md +413 -0
  41. empathy_llm_toolkit/security/PHASE2_COMPLETE.md +384 -0
  42. empathy_llm_toolkit/security/PHASE2_SECRETS_DETECTOR_COMPLETE.md +271 -0
  43. empathy_llm_toolkit/security/QUICK_REFERENCE.md +316 -0
  44. empathy_llm_toolkit/security/README.md +262 -0
  45. empathy_llm_toolkit/security/__init__.py +62 -0
  46. empathy_llm_toolkit/security/audit_logger.py +929 -0
  47. empathy_llm_toolkit/security/audit_logger_example.py +152 -0
  48. empathy_llm_toolkit/security/pii_scrubber.py +640 -0
  49. empathy_llm_toolkit/security/secrets_detector.py +678 -0
  50. empathy_llm_toolkit/security/secrets_detector_example.py +304 -0
  51. empathy_llm_toolkit/security/secure_memdocs.py +1192 -0
  52. empathy_llm_toolkit/security/secure_memdocs_example.py +278 -0
  53. empathy_llm_toolkit/wizards/__init__.py +38 -0
  54. empathy_llm_toolkit/wizards/base_wizard.py +364 -0
  55. empathy_llm_toolkit/wizards/customer_support_wizard.py +190 -0
  56. empathy_llm_toolkit/wizards/healthcare_wizard.py +362 -0
  57. empathy_llm_toolkit/wizards/patient_assessment_README.md +64 -0
  58. empathy_llm_toolkit/wizards/patient_assessment_wizard.py +193 -0
  59. empathy_llm_toolkit/wizards/technology_wizard.py +194 -0
  60. empathy_os/__init__.py +52 -52
  61. empathy_os/adaptive/__init__.py +13 -0
  62. empathy_os/adaptive/task_complexity.py +127 -0
  63. empathy_os/cache/__init__.py +117 -0
  64. empathy_os/cache/base.py +166 -0
  65. empathy_os/cache/dependency_manager.py +253 -0
  66. empathy_os/cache/hash_only.py +248 -0
  67. empathy_os/cache/hybrid.py +390 -0
  68. empathy_os/cache/storage.py +282 -0
  69. empathy_os/cli.py +118 -8
  70. empathy_os/cli_unified.py +121 -1
  71. empathy_os/config/__init__.py +63 -0
  72. empathy_os/config/xml_config.py +239 -0
  73. empathy_os/config.py +2 -1
  74. empathy_os/dashboard/__init__.py +15 -0
  75. empathy_os/dashboard/server.py +743 -0
  76. empathy_os/memory/__init__.py +195 -0
  77. empathy_os/memory/claude_memory.py +466 -0
  78. empathy_os/memory/config.py +224 -0
  79. empathy_os/memory/control_panel.py +1298 -0
  80. empathy_os/memory/edges.py +179 -0
  81. empathy_os/memory/graph.py +567 -0
  82. empathy_os/memory/long_term.py +1194 -0
  83. empathy_os/memory/nodes.py +179 -0
  84. empathy_os/memory/redis_bootstrap.py +540 -0
  85. empathy_os/memory/security/__init__.py +31 -0
  86. empathy_os/memory/security/audit_logger.py +930 -0
  87. empathy_os/memory/security/pii_scrubber.py +640 -0
  88. empathy_os/memory/security/secrets_detector.py +678 -0
  89. empathy_os/memory/short_term.py +2119 -0
  90. empathy_os/memory/storage/__init__.py +15 -0
  91. empathy_os/memory/summary_index.py +583 -0
  92. empathy_os/memory/unified.py +619 -0
  93. empathy_os/metrics/__init__.py +12 -0
  94. empathy_os/metrics/prompt_metrics.py +190 -0
  95. empathy_os/models/__init__.py +136 -0
  96. empathy_os/models/__main__.py +13 -0
  97. empathy_os/models/cli.py +655 -0
  98. empathy_os/models/empathy_executor.py +354 -0
  99. empathy_os/models/executor.py +252 -0
  100. empathy_os/models/fallback.py +671 -0
  101. empathy_os/models/provider_config.py +563 -0
  102. empathy_os/models/registry.py +382 -0
  103. empathy_os/models/tasks.py +302 -0
  104. empathy_os/models/telemetry.py +548 -0
  105. empathy_os/models/token_estimator.py +378 -0
  106. empathy_os/models/validation.py +274 -0
  107. empathy_os/monitoring/__init__.py +52 -0
  108. empathy_os/monitoring/alerts.py +23 -0
  109. empathy_os/monitoring/alerts_cli.py +268 -0
  110. empathy_os/monitoring/multi_backend.py +271 -0
  111. empathy_os/monitoring/otel_backend.py +363 -0
  112. empathy_os/optimization/__init__.py +19 -0
  113. empathy_os/optimization/context_optimizer.py +272 -0
  114. empathy_os/plugins/__init__.py +28 -0
  115. empathy_os/plugins/base.py +361 -0
  116. empathy_os/plugins/registry.py +268 -0
  117. empathy_os/project_index/__init__.py +30 -0
  118. empathy_os/project_index/cli.py +335 -0
  119. empathy_os/project_index/crew_integration.py +430 -0
  120. empathy_os/project_index/index.py +425 -0
  121. empathy_os/project_index/models.py +501 -0
  122. empathy_os/project_index/reports.py +473 -0
  123. empathy_os/project_index/scanner.py +538 -0
  124. empathy_os/prompts/__init__.py +61 -0
  125. empathy_os/prompts/config.py +77 -0
  126. empathy_os/prompts/context.py +177 -0
  127. empathy_os/prompts/parser.py +285 -0
  128. empathy_os/prompts/registry.py +313 -0
  129. empathy_os/prompts/templates.py +208 -0
  130. empathy_os/resilience/__init__.py +56 -0
  131. empathy_os/resilience/circuit_breaker.py +256 -0
  132. empathy_os/resilience/fallback.py +179 -0
  133. empathy_os/resilience/health.py +300 -0
  134. empathy_os/resilience/retry.py +209 -0
  135. empathy_os/resilience/timeout.py +135 -0
  136. empathy_os/routing/__init__.py +43 -0
  137. empathy_os/routing/chain_executor.py +433 -0
  138. empathy_os/routing/classifier.py +217 -0
  139. empathy_os/routing/smart_router.py +234 -0
  140. empathy_os/routing/wizard_registry.py +307 -0
  141. empathy_os/trust/__init__.py +28 -0
  142. empathy_os/trust/circuit_breaker.py +579 -0
  143. empathy_os/validation/__init__.py +19 -0
  144. empathy_os/validation/xml_validator.py +281 -0
  145. empathy_os/wizard_factory_cli.py +170 -0
  146. empathy_os/workflows/__init__.py +360 -0
  147. empathy_os/workflows/base.py +1660 -0
  148. empathy_os/workflows/bug_predict.py +962 -0
  149. empathy_os/workflows/code_review.py +960 -0
  150. empathy_os/workflows/code_review_adapters.py +310 -0
  151. empathy_os/workflows/code_review_pipeline.py +720 -0
  152. empathy_os/workflows/config.py +600 -0
  153. empathy_os/workflows/dependency_check.py +648 -0
  154. empathy_os/workflows/document_gen.py +1069 -0
  155. empathy_os/workflows/documentation_orchestrator.py +1205 -0
  156. empathy_os/workflows/health_check.py +679 -0
  157. empathy_os/workflows/keyboard_shortcuts/__init__.py +39 -0
  158. empathy_os/workflows/keyboard_shortcuts/generators.py +386 -0
  159. empathy_os/workflows/keyboard_shortcuts/parsers.py +414 -0
  160. empathy_os/workflows/keyboard_shortcuts/prompts.py +295 -0
  161. empathy_os/workflows/keyboard_shortcuts/schema.py +193 -0
  162. empathy_os/workflows/keyboard_shortcuts/workflow.py +505 -0
  163. empathy_os/workflows/manage_documentation.py +804 -0
  164. empathy_os/workflows/new_sample_workflow1.py +146 -0
  165. empathy_os/workflows/new_sample_workflow1_README.md +150 -0
  166. empathy_os/workflows/perf_audit.py +687 -0
  167. empathy_os/workflows/pr_review.py +748 -0
  168. empathy_os/workflows/progress.py +445 -0
  169. empathy_os/workflows/progress_server.py +322 -0
  170. empathy_os/workflows/refactor_plan.py +693 -0
  171. empathy_os/workflows/release_prep.py +808 -0
  172. empathy_os/workflows/research_synthesis.py +404 -0
  173. empathy_os/workflows/secure_release.py +585 -0
  174. empathy_os/workflows/security_adapters.py +297 -0
  175. empathy_os/workflows/security_audit.py +1046 -0
  176. empathy_os/workflows/step_config.py +234 -0
  177. empathy_os/workflows/test5.py +125 -0
  178. empathy_os/workflows/test5_README.md +158 -0
  179. empathy_os/workflows/test_gen.py +1855 -0
  180. empathy_os/workflows/test_lifecycle.py +526 -0
  181. empathy_os/workflows/test_maintenance.py +626 -0
  182. empathy_os/workflows/test_maintenance_cli.py +590 -0
  183. empathy_os/workflows/test_maintenance_crew.py +821 -0
  184. empathy_os/workflows/xml_enhanced_crew.py +285 -0
  185. empathy_software_plugin/cli/__init__.py +120 -0
  186. empathy_software_plugin/cli/inspect.py +362 -0
  187. empathy_software_plugin/cli.py +3 -1
  188. empathy_software_plugin/wizards/__init__.py +42 -0
  189. empathy_software_plugin/wizards/advanced_debugging_wizard.py +392 -0
  190. empathy_software_plugin/wizards/agent_orchestration_wizard.py +511 -0
  191. empathy_software_plugin/wizards/ai_collaboration_wizard.py +503 -0
  192. empathy_software_plugin/wizards/ai_context_wizard.py +441 -0
  193. empathy_software_plugin/wizards/ai_documentation_wizard.py +503 -0
  194. empathy_software_plugin/wizards/base_wizard.py +288 -0
  195. empathy_software_plugin/wizards/book_chapter_wizard.py +519 -0
  196. empathy_software_plugin/wizards/code_review_wizard.py +606 -0
  197. empathy_software_plugin/wizards/debugging/__init__.py +50 -0
  198. empathy_software_plugin/wizards/debugging/bug_risk_analyzer.py +414 -0
  199. empathy_software_plugin/wizards/debugging/config_loaders.py +442 -0
  200. empathy_software_plugin/wizards/debugging/fix_applier.py +469 -0
  201. empathy_software_plugin/wizards/debugging/language_patterns.py +383 -0
  202. empathy_software_plugin/wizards/debugging/linter_parsers.py +470 -0
  203. empathy_software_plugin/wizards/debugging/verification.py +369 -0
  204. empathy_software_plugin/wizards/enhanced_testing_wizard.py +537 -0
  205. empathy_software_plugin/wizards/memory_enhanced_debugging_wizard.py +816 -0
  206. empathy_software_plugin/wizards/multi_model_wizard.py +501 -0
  207. empathy_software_plugin/wizards/pattern_extraction_wizard.py +422 -0
  208. empathy_software_plugin/wizards/pattern_retriever_wizard.py +400 -0
  209. empathy_software_plugin/wizards/performance/__init__.py +9 -0
  210. empathy_software_plugin/wizards/performance/bottleneck_detector.py +221 -0
  211. empathy_software_plugin/wizards/performance/profiler_parsers.py +278 -0
  212. empathy_software_plugin/wizards/performance/trajectory_analyzer.py +429 -0
  213. empathy_software_plugin/wizards/performance_profiling_wizard.py +305 -0
  214. empathy_software_plugin/wizards/prompt_engineering_wizard.py +425 -0
  215. empathy_software_plugin/wizards/rag_pattern_wizard.py +461 -0
  216. empathy_software_plugin/wizards/security/__init__.py +32 -0
  217. empathy_software_plugin/wizards/security/exploit_analyzer.py +290 -0
  218. empathy_software_plugin/wizards/security/owasp_patterns.py +241 -0
  219. empathy_software_plugin/wizards/security/vulnerability_scanner.py +604 -0
  220. empathy_software_plugin/wizards/security_analysis_wizard.py +322 -0
  221. empathy_software_plugin/wizards/security_learning_wizard.py +740 -0
  222. empathy_software_plugin/wizards/tech_debt_wizard.py +726 -0
  223. empathy_software_plugin/wizards/testing/__init__.py +27 -0
  224. empathy_software_plugin/wizards/testing/coverage_analyzer.py +459 -0
  225. empathy_software_plugin/wizards/testing/quality_analyzer.py +531 -0
  226. empathy_software_plugin/wizards/testing/test_suggester.py +533 -0
  227. empathy_software_plugin/wizards/testing_wizard.py +274 -0
  228. hot_reload/README.md +473 -0
  229. hot_reload/__init__.py +62 -0
  230. hot_reload/config.py +84 -0
  231. hot_reload/integration.py +228 -0
  232. hot_reload/reloader.py +298 -0
  233. hot_reload/watcher.py +179 -0
  234. hot_reload/websocket.py +176 -0
  235. scaffolding/README.md +589 -0
  236. scaffolding/__init__.py +35 -0
  237. scaffolding/__main__.py +14 -0
  238. scaffolding/cli.py +240 -0
  239. test_generator/__init__.py +38 -0
  240. test_generator/__main__.py +14 -0
  241. test_generator/cli.py +226 -0
  242. test_generator/generator.py +325 -0
  243. test_generator/risk_analyzer.py +216 -0
  244. workflow_patterns/__init__.py +33 -0
  245. workflow_patterns/behavior.py +249 -0
  246. workflow_patterns/core.py +76 -0
  247. workflow_patterns/output.py +99 -0
  248. workflow_patterns/registry.py +255 -0
  249. workflow_patterns/structural.py +288 -0
  250. workflow_scaffolding/__init__.py +11 -0
  251. workflow_scaffolding/__main__.py +12 -0
  252. workflow_scaffolding/cli.py +206 -0
  253. workflow_scaffolding/generator.py +265 -0
  254. agents/code_inspection/patterns/inspection/recurring_B112.json +0 -18
  255. agents/code_inspection/patterns/inspection/recurring_F541.json +0 -16
  256. agents/code_inspection/patterns/inspection/recurring_FORMAT.json +0 -25
  257. agents/code_inspection/patterns/inspection/recurring_bug_20250822_def456.json +0 -16
  258. agents/code_inspection/patterns/inspection/recurring_bug_20250915_abc123.json +0 -16
  259. agents/code_inspection/patterns/inspection/recurring_bug_20251212_3c5b9951.json +0 -16
  260. agents/code_inspection/patterns/inspection/recurring_bug_20251212_97c0f72f.json +0 -16
  261. agents/code_inspection/patterns/inspection/recurring_bug_20251212_a0871d53.json +0 -16
  262. agents/code_inspection/patterns/inspection/recurring_bug_20251212_a9b6ec41.json +0 -16
  263. agents/code_inspection/patterns/inspection/recurring_bug_null_001.json +0 -16
  264. agents/code_inspection/patterns/inspection/recurring_builtin.json +0 -16
  265. agents/compliance_anticipation_agent.py +0 -1422
  266. agents/compliance_db.py +0 -339
  267. agents/epic_integration_wizard.py +0 -530
  268. agents/notifications.py +0 -291
  269. agents/trust_building_behaviors.py +0 -872
  270. empathy_framework-3.7.0.dist-info/RECORD +0 -105
  271. {empathy_framework-3.7.0.dist-info → empathy_framework-3.8.0.dist-info}/WHEEL +0 -0
  272. {empathy_framework-3.7.0.dist-info → empathy_framework-3.8.0.dist-info}/entry_points.txt +0 -0
  273. {empathy_framework-3.7.0.dist-info → empathy_framework-3.8.0.dist-info}/licenses/LICENSE +0 -0
  274. /empathy_os/{monitoring.py → agent_monitoring.py} +0 -0
@@ -0,0 +1,392 @@
1
+ """Advanced Debugging Wizard (Level 4)
2
+
3
+ Protocol-based debugging using linting configuration pattern.
4
+
5
+ Uses the same systematic approach as linting:
6
+ 1. Load config (understand the rules)
7
+ 2. Run linter (get complete issue list)
8
+ 3. Systematically fix (work through the list)
9
+ 4. Verify (re-run to confirm)
10
+
11
+ This implements Level 4 Anticipatory Empathy by:
12
+ - Predicting which violations will cause bugs
13
+ - Alerting to trajectory concerns
14
+ - Recommending prevention steps
15
+
16
+ Copyright 2025 Smart AI Memory, LLC
17
+ Licensed under Fair Source 0.9
18
+ """
19
+
20
+ import logging
21
+ from pathlib import Path
22
+ from typing import Any
23
+
24
+ from .base_wizard import BaseWizard
25
+ from .debugging.bug_risk_analyzer import BugRiskAnalyzer
26
+ from .debugging.config_loaders import load_config
27
+ from .debugging.fix_applier import apply_fixes, group_issues_by_fixability
28
+ from .debugging.language_patterns import get_pattern_library
29
+ from .debugging.linter_parsers import LintIssue, parse_linter_output
30
+ from .debugging.verification import verify_fixes
31
+
32
+ logger = logging.getLogger(__name__)
33
+
34
+
35
+ class AdvancedDebuggingWizard(BaseWizard):
36
+ """Advanced Debugging Wizard - Level 4 Anticipatory
37
+
38
+ Systematically debugs code using linting configuration pattern:
39
+ - Parses linter output
40
+ - Analyzes bug risk (Level 4)
41
+ - Applies fixes systematically
42
+ - Verifies fixes work
43
+ - Learns cross-language patterns (Level 5)
44
+ """
45
+
46
+ def __init__(self):
47
+ super().__init__()
48
+ self.bug_analyzer = BugRiskAnalyzer()
49
+ self.pattern_library = get_pattern_library()
50
+ self._name = "Advanced Debugging Wizard"
51
+ self._level = 4
52
+
53
+ @property
54
+ def name(self) -> str:
55
+ """Wizard name"""
56
+ return self._name
57
+
58
+ @property
59
+ def level(self) -> int:
60
+ """Empathy level"""
61
+ return self._level
62
+
63
+ async def analyze(self, context: dict[str, Any]) -> dict[str, Any]:
64
+ """Analyze code using linting protocols.
65
+
66
+ Context expects:
67
+ - project_path: Path to project
68
+ - linters: Dict of {linter_name: output_file_or_string}
69
+ - configs: Dict of {linter_name: config_file} (optional)
70
+ - auto_fix: bool (whether to apply auto-fixes)
71
+ - verify: bool (whether to re-run linters)
72
+
73
+ Returns:
74
+ Analysis with issues, risk assessment, fixes, and verification
75
+
76
+ """
77
+ project_path = context.get("project_path", ".")
78
+ linters = context.get("linters", {})
79
+ configs = context.get("configs", {})
80
+ auto_fix = context.get("auto_fix", False)
81
+ verify = context.get("verify", False)
82
+
83
+ if not linters:
84
+ return {
85
+ "error": "No linter outputs provided",
86
+ "help": "Provide linters dict: {'eslint': 'output.json', ...}",
87
+ }
88
+
89
+ # Phase 1: Parse linter outputs
90
+ all_issues = []
91
+ linter_results = {}
92
+
93
+ for linter_name, output_source in linters.items():
94
+ logger.info(f"Parsing {linter_name} output...")
95
+
96
+ # Check if output_source is a file or string
97
+ if Path(output_source).exists():
98
+ with open(output_source) as f:
99
+ output = f.read()
100
+ else:
101
+ output = output_source
102
+
103
+ issues = parse_linter_output(linter_name, output)
104
+ all_issues.extend(issues)
105
+
106
+ linter_results[linter_name] = {"total_issues": len(issues), "issues": issues}
107
+
108
+ # Phase 2: Load configs (understand the rules)
109
+ configs_loaded = {}
110
+ for linter_name in linters.keys():
111
+ config_file = configs.get(linter_name)
112
+ config = load_config(linter_name, config_path=config_file, start_dir=project_path)
113
+
114
+ if config:
115
+ configs_loaded[linter_name] = {
116
+ "file": config.config_file,
117
+ "rules_count": len(config.rules),
118
+ "extends": config.extends,
119
+ }
120
+
121
+ # Phase 3: Risk analysis (Level 4 - Anticipatory)
122
+ logger.info("Analyzing bug risks...")
123
+ risk_assessments = self.bug_analyzer.analyze(all_issues)
124
+ risk_summary = self.bug_analyzer.generate_summary(risk_assessments)
125
+
126
+ # Phase 4: Group by fixability
127
+ fixability_by_linter = {}
128
+ for linter_name, result in linter_results.items():
129
+ fixability = group_issues_by_fixability(linter_name, result["issues"])
130
+ fixability_by_linter[linter_name] = {
131
+ "auto_fixable": len(fixability["auto_fixable"]),
132
+ "manual": len(fixability["manual"]),
133
+ }
134
+
135
+ # Phase 5: Apply fixes (if requested)
136
+ fix_results = {}
137
+ if auto_fix:
138
+ logger.info("Applying auto-fixes...")
139
+
140
+ for linter_name, result in linter_results.items():
141
+ fixes = apply_fixes(linter_name, result["issues"], dry_run=False, auto_only=True)
142
+
143
+ successful = [f for f in fixes if f.success]
144
+ failed = [f for f in fixes if not f.success]
145
+
146
+ fix_results[linter_name] = {
147
+ "attempted": len(fixes),
148
+ "successful": len(successful),
149
+ "failed": len(failed),
150
+ }
151
+
152
+ # Phase 6: Verification (if requested)
153
+ verification_results = {}
154
+ if verify:
155
+ logger.info("Verifying fixes...")
156
+
157
+ for linter_name, result in linter_results.items():
158
+ verification = verify_fixes(linter_name, project_path, result["issues"])
159
+
160
+ verification_results[linter_name] = verification.to_dict()
161
+
162
+ # Phase 7: Cross-language insights (Level 5)
163
+ cross_language_insights = self._generate_cross_language_insights(all_issues)
164
+
165
+ # Phase 8: Trajectory analysis (Level 4)
166
+ trajectory = self._analyze_trajectory(all_issues, risk_summary)
167
+
168
+ # Build final result
169
+ return {
170
+ "issues_found": len(all_issues),
171
+ "linters": linter_results,
172
+ "configs": configs_loaded,
173
+ # Level 4: Risk analysis
174
+ "risk_assessment": risk_summary,
175
+ # Fixability
176
+ "fixability": fixability_by_linter,
177
+ # Fixes applied (if auto_fix=True)
178
+ "fixes": fix_results if auto_fix else None,
179
+ # Verification (if verify=True)
180
+ "verification": verification_results if verify else None,
181
+ # Level 5: Cross-language patterns
182
+ "cross_language_insights": cross_language_insights,
183
+ # Level 4: Trajectory prediction
184
+ "trajectory": trajectory,
185
+ # Standard wizard outputs
186
+ "predictions": self._generate_predictions(trajectory, risk_summary),
187
+ "recommendations": self._generate_recommendations(
188
+ risk_summary,
189
+ fixability_by_linter,
190
+ trajectory,
191
+ ),
192
+ "patterns": cross_language_insights,
193
+ "confidence": 0.9,
194
+ }
195
+
196
+ def _generate_cross_language_insights(self, issues: list[LintIssue]) -> list[dict[str, Any]]:
197
+ """Generate Level 5 cross-language insights.
198
+
199
+ Find patterns that exist across multiple languages in this project.
200
+ """
201
+ insights = []
202
+
203
+ # Group issues by language
204
+ by_language = {}
205
+ for issue in issues:
206
+ lang = issue.linter
207
+ if lang not in by_language:
208
+ by_language[lang] = []
209
+ by_language[lang].append(issue)
210
+
211
+ # Find common patterns
212
+ if len(by_language) >= 2:
213
+ # Look for same pattern in different languages
214
+ for issue in issues[:5]: # Check top 5
215
+ pattern = self.pattern_library.find_pattern_for_rule(issue.linter, issue.rule)
216
+
217
+ if pattern:
218
+ # Check if this pattern appears in other languages
219
+ other_langs = [lang for lang in by_language if lang != issue.linter]
220
+
221
+ if other_langs:
222
+ insight = {
223
+ "pattern_name": pattern.name,
224
+ "found_in": issue.linter,
225
+ "also_applies_to": other_langs,
226
+ "description": pattern.description,
227
+ "universal_strategy": pattern.universal_fix_strategy,
228
+ }
229
+ insights.append(insight)
230
+
231
+ return insights[:3] # Top 3 insights
232
+
233
+ def _analyze_trajectory(
234
+ self,
235
+ issues: list[LintIssue],
236
+ risk_summary: dict[str, Any],
237
+ ) -> dict[str, Any]:
238
+ """Analyze issue trajectory (Level 4).
239
+
240
+ Predict where code quality is headed.
241
+ """
242
+ total_issues = len(issues)
243
+ critical = risk_summary["by_risk_level"]["critical"]
244
+ high = risk_summary["by_risk_level"]["high"]
245
+ _ = risk_summary["by_risk_level"]["medium"]
246
+
247
+ # Simple trajectory analysis
248
+ # In real implementation, would compare with historical data
249
+ trajectory_state = "stable"
250
+ trajectory_concern = None
251
+
252
+ if critical > 0:
253
+ trajectory_state = "critical"
254
+ trajectory_concern = (
255
+ f"{critical} critical issues will cause production failures. "
256
+ "Immediate action required."
257
+ )
258
+ elif high > 5:
259
+ trajectory_state = "degrading"
260
+ trajectory_concern = (
261
+ f"{high} high-risk issues accumulating. "
262
+ "In our experience, this volume leads to production bugs."
263
+ )
264
+ elif total_issues > 50:
265
+ trajectory_state = "concerning"
266
+ trajectory_concern = (
267
+ f"{total_issues} total issues. "
268
+ "Code quality trajectory suggests tech debt accumulation."
269
+ )
270
+
271
+ return {
272
+ "state": trajectory_state,
273
+ "total_issues": total_issues,
274
+ "critical_issues": critical,
275
+ "high_risk_issues": high,
276
+ "concern": trajectory_concern,
277
+ "recommendation": self._get_trajectory_recommendation(trajectory_state),
278
+ }
279
+
280
+ def _get_trajectory_recommendation(self, state: str) -> str:
281
+ """Get recommendation based on trajectory state"""
282
+ recommendations = {
283
+ "critical": "Fix critical issues before deployment. Production failure likely.",
284
+ "degrading": "Address high-risk issues soon. Trajectory suggests increasing bug density.",
285
+ "concerning": "Consider code quality review. Volume of issues may indicate systemic issues.",
286
+ "stable": "Code quality trajectory looks good. Continue current practices.",
287
+ }
288
+ return recommendations.get(state, "")
289
+
290
+ def _generate_predictions(
291
+ self,
292
+ trajectory: dict[str, Any],
293
+ risk_summary: dict[str, Any],
294
+ ) -> list[dict[str, Any]]:
295
+ """Generate Level 4 predictions"""
296
+ predictions = []
297
+
298
+ # Predict based on critical issues
299
+ if risk_summary["by_risk_level"]["critical"] > 0:
300
+ predictions.append(
301
+ {
302
+ "type": "production_failure_risk",
303
+ "severity": "critical",
304
+ "description": (
305
+ "Critical linting violations detected. "
306
+ "In our experience, these cause runtime errors."
307
+ ),
308
+ "prevention_steps": [
309
+ "Fix all critical issues before deployment",
310
+ "Add pre-commit hooks to catch these",
311
+ "Review why these weren't caught earlier",
312
+ ],
313
+ },
314
+ )
315
+
316
+ # Predict based on high-risk accumulation
317
+ high_risk = risk_summary["by_risk_level"]["high"]
318
+ if high_risk > 5:
319
+ predictions.append(
320
+ {
321
+ "type": "bug_density_increase",
322
+ "severity": "high",
323
+ "description": (
324
+ f"{high_risk} high-risk issues found. "
325
+ "In our experience, this volume correlates with production bugs."
326
+ ),
327
+ "prevention_steps": [
328
+ "Prioritize high-risk fixes",
329
+ "Add linting to CI/CD",
330
+ "Consider pair programming for complex areas",
331
+ ],
332
+ },
333
+ )
334
+
335
+ # Predict based on trajectory
336
+ if trajectory["state"] in ["degrading", "concerning"]:
337
+ predictions.append(
338
+ {
339
+ "type": "technical_debt_accumulation",
340
+ "severity": "medium",
341
+ "description": trajectory["concern"],
342
+ "prevention_steps": [
343
+ "Schedule code quality review",
344
+ "Allocate time for systematic cleanup",
345
+ "Update coding standards documentation",
346
+ ],
347
+ },
348
+ )
349
+
350
+ return predictions
351
+
352
+ def _generate_recommendations(
353
+ self,
354
+ risk_summary: dict[str, Any],
355
+ fixability: dict[str, dict],
356
+ trajectory: dict[str, Any],
357
+ ) -> list[str]:
358
+ """Generate actionable recommendations"""
359
+ recommendations = []
360
+
361
+ # Based on alert level
362
+ alert_level = risk_summary["alert_level"]
363
+
364
+ if alert_level == "CRITICAL":
365
+ recommendations.append(
366
+ f"🚨 CRITICAL: Fix {risk_summary['by_risk_level']['critical']} "
367
+ "critical issues immediately",
368
+ )
369
+
370
+ if alert_level in ["CRITICAL", "HIGH"]:
371
+ recommendations.append(
372
+ f"⚠️ Address {risk_summary['by_risk_level']['high']} high-risk issues before merge",
373
+ )
374
+
375
+ # Based on fixability
376
+ total_auto_fixable = sum(f["auto_fixable"] for f in fixability.values())
377
+
378
+ if total_auto_fixable > 0:
379
+ recommendations.append(
380
+ f"✅ {total_auto_fixable} issues can be auto-fixed. Run with auto_fix=True",
381
+ )
382
+
383
+ # Based on trajectory
384
+ if trajectory["state"] != "stable":
385
+ recommendations.append(f"📊 Trajectory: {trajectory['recommendation']}")
386
+
387
+ # General recommendations
388
+ recommendations.append("🔧 Add pre-commit hooks to prevent future issues")
389
+
390
+ recommendations.append("📝 Document common patterns in team style guide")
391
+
392
+ return recommendations