empathy-framework 4.6.6__py3-none-any.whl → 4.7.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (273) hide show
  1. empathy_framework-4.7.1.dist-info/METADATA +690 -0
  2. empathy_framework-4.7.1.dist-info/RECORD +379 -0
  3. {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.1.dist-info}/top_level.txt +1 -2
  4. empathy_healthcare_plugin/monitors/monitoring/__init__.py +9 -9
  5. empathy_llm_toolkit/agent_factory/__init__.py +6 -6
  6. empathy_llm_toolkit/agent_factory/adapters/wizard_adapter.py +7 -10
  7. empathy_llm_toolkit/agents_md/__init__.py +22 -0
  8. empathy_llm_toolkit/agents_md/loader.py +218 -0
  9. empathy_llm_toolkit/agents_md/parser.py +271 -0
  10. empathy_llm_toolkit/agents_md/registry.py +307 -0
  11. empathy_llm_toolkit/commands/__init__.py +51 -0
  12. empathy_llm_toolkit/commands/context.py +375 -0
  13. empathy_llm_toolkit/commands/loader.py +301 -0
  14. empathy_llm_toolkit/commands/models.py +231 -0
  15. empathy_llm_toolkit/commands/parser.py +371 -0
  16. empathy_llm_toolkit/commands/registry.py +429 -0
  17. empathy_llm_toolkit/config/__init__.py +8 -8
  18. empathy_llm_toolkit/config/unified.py +3 -7
  19. empathy_llm_toolkit/context/__init__.py +22 -0
  20. empathy_llm_toolkit/context/compaction.py +455 -0
  21. empathy_llm_toolkit/context/manager.py +434 -0
  22. empathy_llm_toolkit/hooks/__init__.py +24 -0
  23. empathy_llm_toolkit/hooks/config.py +306 -0
  24. empathy_llm_toolkit/hooks/executor.py +289 -0
  25. empathy_llm_toolkit/hooks/registry.py +302 -0
  26. empathy_llm_toolkit/hooks/scripts/__init__.py +39 -0
  27. empathy_llm_toolkit/hooks/scripts/evaluate_session.py +201 -0
  28. empathy_llm_toolkit/hooks/scripts/first_time_init.py +285 -0
  29. empathy_llm_toolkit/hooks/scripts/pre_compact.py +207 -0
  30. empathy_llm_toolkit/hooks/scripts/session_end.py +183 -0
  31. empathy_llm_toolkit/hooks/scripts/session_start.py +163 -0
  32. empathy_llm_toolkit/hooks/scripts/suggest_compact.py +225 -0
  33. empathy_llm_toolkit/learning/__init__.py +30 -0
  34. empathy_llm_toolkit/learning/evaluator.py +438 -0
  35. empathy_llm_toolkit/learning/extractor.py +514 -0
  36. empathy_llm_toolkit/learning/storage.py +560 -0
  37. empathy_llm_toolkit/providers.py +4 -11
  38. empathy_llm_toolkit/security/__init__.py +17 -17
  39. empathy_llm_toolkit/utils/tokens.py +2 -5
  40. empathy_os/__init__.py +202 -70
  41. empathy_os/cache_monitor.py +5 -3
  42. empathy_os/cli/__init__.py +11 -55
  43. empathy_os/cli/__main__.py +29 -15
  44. empathy_os/cli/commands/inspection.py +21 -12
  45. empathy_os/cli/commands/memory.py +4 -12
  46. empathy_os/cli/commands/profiling.py +198 -0
  47. empathy_os/cli/commands/utilities.py +27 -7
  48. empathy_os/cli.py +28 -57
  49. empathy_os/cli_unified.py +525 -1164
  50. empathy_os/cost_tracker.py +9 -3
  51. empathy_os/dashboard/server.py +200 -2
  52. empathy_os/hot_reload/__init__.py +7 -7
  53. empathy_os/hot_reload/config.py +6 -7
  54. empathy_os/hot_reload/integration.py +35 -35
  55. empathy_os/hot_reload/reloader.py +57 -57
  56. empathy_os/hot_reload/watcher.py +28 -28
  57. empathy_os/hot_reload/websocket.py +2 -2
  58. empathy_os/memory/__init__.py +11 -4
  59. empathy_os/memory/claude_memory.py +1 -1
  60. empathy_os/memory/cross_session.py +8 -12
  61. empathy_os/memory/edges.py +6 -6
  62. empathy_os/memory/file_session.py +770 -0
  63. empathy_os/memory/graph.py +30 -30
  64. empathy_os/memory/nodes.py +6 -6
  65. empathy_os/memory/short_term.py +15 -9
  66. empathy_os/memory/unified.py +606 -140
  67. empathy_os/meta_workflows/agent_creator.py +3 -9
  68. empathy_os/meta_workflows/cli_meta_workflows.py +113 -53
  69. empathy_os/meta_workflows/form_engine.py +6 -18
  70. empathy_os/meta_workflows/intent_detector.py +64 -24
  71. empathy_os/meta_workflows/models.py +3 -1
  72. empathy_os/meta_workflows/pattern_learner.py +13 -31
  73. empathy_os/meta_workflows/plan_generator.py +55 -47
  74. empathy_os/meta_workflows/session_context.py +2 -3
  75. empathy_os/meta_workflows/workflow.py +20 -51
  76. empathy_os/models/cli.py +2 -2
  77. empathy_os/models/tasks.py +1 -2
  78. empathy_os/models/telemetry.py +4 -1
  79. empathy_os/models/token_estimator.py +3 -1
  80. empathy_os/monitoring/alerts.py +938 -9
  81. empathy_os/monitoring/alerts_cli.py +346 -183
  82. empathy_os/orchestration/execution_strategies.py +12 -29
  83. empathy_os/orchestration/pattern_learner.py +20 -26
  84. empathy_os/orchestration/real_tools.py +6 -15
  85. empathy_os/platform_utils.py +2 -1
  86. empathy_os/plugins/__init__.py +2 -2
  87. empathy_os/plugins/base.py +64 -64
  88. empathy_os/plugins/registry.py +32 -32
  89. empathy_os/project_index/index.py +49 -15
  90. empathy_os/project_index/models.py +1 -2
  91. empathy_os/project_index/reports.py +1 -1
  92. empathy_os/project_index/scanner.py +1 -0
  93. empathy_os/redis_memory.py +10 -7
  94. empathy_os/resilience/__init__.py +1 -1
  95. empathy_os/resilience/health.py +10 -10
  96. empathy_os/routing/__init__.py +7 -7
  97. empathy_os/routing/chain_executor.py +37 -37
  98. empathy_os/routing/classifier.py +36 -36
  99. empathy_os/routing/smart_router.py +40 -40
  100. empathy_os/routing/{wizard_registry.py → workflow_registry.py} +47 -47
  101. empathy_os/scaffolding/__init__.py +8 -8
  102. empathy_os/scaffolding/__main__.py +1 -1
  103. empathy_os/scaffolding/cli.py +28 -28
  104. empathy_os/socratic/__init__.py +3 -19
  105. empathy_os/socratic/ab_testing.py +25 -36
  106. empathy_os/socratic/blueprint.py +38 -38
  107. empathy_os/socratic/cli.py +34 -20
  108. empathy_os/socratic/collaboration.py +30 -28
  109. empathy_os/socratic/domain_templates.py +9 -1
  110. empathy_os/socratic/embeddings.py +17 -13
  111. empathy_os/socratic/engine.py +135 -70
  112. empathy_os/socratic/explainer.py +70 -60
  113. empathy_os/socratic/feedback.py +24 -19
  114. empathy_os/socratic/forms.py +15 -10
  115. empathy_os/socratic/generator.py +51 -35
  116. empathy_os/socratic/llm_analyzer.py +25 -23
  117. empathy_os/socratic/mcp_server.py +99 -159
  118. empathy_os/socratic/session.py +19 -13
  119. empathy_os/socratic/storage.py +98 -67
  120. empathy_os/socratic/success.py +38 -27
  121. empathy_os/socratic/visual_editor.py +51 -39
  122. empathy_os/socratic/web_ui.py +99 -66
  123. empathy_os/telemetry/cli.py +3 -1
  124. empathy_os/telemetry/usage_tracker.py +1 -3
  125. empathy_os/test_generator/__init__.py +3 -3
  126. empathy_os/test_generator/cli.py +28 -28
  127. empathy_os/test_generator/generator.py +64 -66
  128. empathy_os/test_generator/risk_analyzer.py +11 -11
  129. empathy_os/vscode_bridge 2.py +173 -0
  130. empathy_os/vscode_bridge.py +173 -0
  131. empathy_os/workflows/__init__.py +212 -120
  132. empathy_os/workflows/batch_processing.py +8 -24
  133. empathy_os/workflows/bug_predict.py +1 -1
  134. empathy_os/workflows/code_review.py +20 -5
  135. empathy_os/workflows/code_review_pipeline.py +13 -8
  136. empathy_os/workflows/keyboard_shortcuts/workflow.py +6 -2
  137. empathy_os/workflows/manage_documentation.py +1 -0
  138. empathy_os/workflows/orchestrated_health_check.py +6 -11
  139. empathy_os/workflows/orchestrated_release_prep.py +3 -3
  140. empathy_os/workflows/pr_review.py +18 -10
  141. empathy_os/workflows/progressive/README 2.md +454 -0
  142. empathy_os/workflows/progressive/__init__ 2.py +92 -0
  143. empathy_os/workflows/progressive/__init__.py +2 -12
  144. empathy_os/workflows/progressive/cli 2.py +242 -0
  145. empathy_os/workflows/progressive/cli.py +14 -37
  146. empathy_os/workflows/progressive/core 2.py +488 -0
  147. empathy_os/workflows/progressive/core.py +12 -12
  148. empathy_os/workflows/progressive/orchestrator 2.py +701 -0
  149. empathy_os/workflows/progressive/orchestrator.py +166 -144
  150. empathy_os/workflows/progressive/reports 2.py +528 -0
  151. empathy_os/workflows/progressive/reports.py +22 -31
  152. empathy_os/workflows/progressive/telemetry 2.py +280 -0
  153. empathy_os/workflows/progressive/telemetry.py +8 -14
  154. empathy_os/workflows/progressive/test_gen 2.py +514 -0
  155. empathy_os/workflows/progressive/test_gen.py +29 -48
  156. empathy_os/workflows/progressive/workflow 2.py +628 -0
  157. empathy_os/workflows/progressive/workflow.py +31 -70
  158. empathy_os/workflows/release_prep.py +21 -6
  159. empathy_os/workflows/release_prep_crew.py +1 -0
  160. empathy_os/workflows/secure_release.py +13 -6
  161. empathy_os/workflows/security_audit.py +8 -3
  162. empathy_os/workflows/test_coverage_boost_crew.py +3 -2
  163. empathy_os/workflows/test_maintenance_crew.py +1 -0
  164. empathy_os/workflows/test_runner.py +16 -12
  165. empathy_software_plugin/SOFTWARE_PLUGIN_README.md +25 -703
  166. empathy_software_plugin/cli.py +0 -122
  167. patterns/README.md +119 -0
  168. patterns/__init__.py +95 -0
  169. patterns/behavior.py +298 -0
  170. patterns/code_review_memory.json +441 -0
  171. patterns/core.py +97 -0
  172. patterns/debugging.json +3763 -0
  173. patterns/empathy.py +268 -0
  174. patterns/health_check_memory.json +505 -0
  175. patterns/input.py +161 -0
  176. patterns/memory_graph.json +8 -0
  177. patterns/refactoring_memory.json +1113 -0
  178. patterns/registry.py +663 -0
  179. patterns/security_memory.json +8 -0
  180. patterns/structural.py +415 -0
  181. patterns/validation.py +194 -0
  182. coach_wizards/__init__.py +0 -45
  183. coach_wizards/accessibility_wizard.py +0 -91
  184. coach_wizards/api_wizard.py +0 -91
  185. coach_wizards/base_wizard.py +0 -209
  186. coach_wizards/cicd_wizard.py +0 -91
  187. coach_wizards/code_reviewer_README.md +0 -60
  188. coach_wizards/code_reviewer_wizard.py +0 -180
  189. coach_wizards/compliance_wizard.py +0 -91
  190. coach_wizards/database_wizard.py +0 -91
  191. coach_wizards/debugging_wizard.py +0 -91
  192. coach_wizards/documentation_wizard.py +0 -91
  193. coach_wizards/generate_wizards.py +0 -347
  194. coach_wizards/localization_wizard.py +0 -173
  195. coach_wizards/migration_wizard.py +0 -91
  196. coach_wizards/monitoring_wizard.py +0 -91
  197. coach_wizards/observability_wizard.py +0 -91
  198. coach_wizards/performance_wizard.py +0 -91
  199. coach_wizards/prompt_engineering_wizard.py +0 -661
  200. coach_wizards/refactoring_wizard.py +0 -91
  201. coach_wizards/scaling_wizard.py +0 -90
  202. coach_wizards/security_wizard.py +0 -92
  203. coach_wizards/testing_wizard.py +0 -91
  204. empathy_framework-4.6.6.dist-info/METADATA +0 -1597
  205. empathy_framework-4.6.6.dist-info/RECORD +0 -410
  206. empathy_llm_toolkit/wizards/__init__.py +0 -43
  207. empathy_llm_toolkit/wizards/base_wizard.py +0 -364
  208. empathy_llm_toolkit/wizards/customer_support_wizard.py +0 -190
  209. empathy_llm_toolkit/wizards/healthcare_wizard.py +0 -378
  210. empathy_llm_toolkit/wizards/patient_assessment_README.md +0 -64
  211. empathy_llm_toolkit/wizards/patient_assessment_wizard.py +0 -193
  212. empathy_llm_toolkit/wizards/technology_wizard.py +0 -209
  213. empathy_os/wizard_factory_cli.py +0 -170
  214. empathy_software_plugin/wizards/__init__.py +0 -42
  215. empathy_software_plugin/wizards/advanced_debugging_wizard.py +0 -395
  216. empathy_software_plugin/wizards/agent_orchestration_wizard.py +0 -511
  217. empathy_software_plugin/wizards/ai_collaboration_wizard.py +0 -503
  218. empathy_software_plugin/wizards/ai_context_wizard.py +0 -441
  219. empathy_software_plugin/wizards/ai_documentation_wizard.py +0 -503
  220. empathy_software_plugin/wizards/base_wizard.py +0 -288
  221. empathy_software_plugin/wizards/book_chapter_wizard.py +0 -519
  222. empathy_software_plugin/wizards/code_review_wizard.py +0 -604
  223. empathy_software_plugin/wizards/debugging/__init__.py +0 -50
  224. empathy_software_plugin/wizards/debugging/bug_risk_analyzer.py +0 -414
  225. empathy_software_plugin/wizards/debugging/config_loaders.py +0 -446
  226. empathy_software_plugin/wizards/debugging/fix_applier.py +0 -469
  227. empathy_software_plugin/wizards/debugging/language_patterns.py +0 -385
  228. empathy_software_plugin/wizards/debugging/linter_parsers.py +0 -470
  229. empathy_software_plugin/wizards/debugging/verification.py +0 -369
  230. empathy_software_plugin/wizards/enhanced_testing_wizard.py +0 -537
  231. empathy_software_plugin/wizards/memory_enhanced_debugging_wizard.py +0 -816
  232. empathy_software_plugin/wizards/multi_model_wizard.py +0 -501
  233. empathy_software_plugin/wizards/pattern_extraction_wizard.py +0 -422
  234. empathy_software_plugin/wizards/pattern_retriever_wizard.py +0 -400
  235. empathy_software_plugin/wizards/performance/__init__.py +0 -9
  236. empathy_software_plugin/wizards/performance/bottleneck_detector.py +0 -221
  237. empathy_software_plugin/wizards/performance/profiler_parsers.py +0 -278
  238. empathy_software_plugin/wizards/performance/trajectory_analyzer.py +0 -429
  239. empathy_software_plugin/wizards/performance_profiling_wizard.py +0 -305
  240. empathy_software_plugin/wizards/prompt_engineering_wizard.py +0 -425
  241. empathy_software_plugin/wizards/rag_pattern_wizard.py +0 -461
  242. empathy_software_plugin/wizards/security/__init__.py +0 -32
  243. empathy_software_plugin/wizards/security/exploit_analyzer.py +0 -290
  244. empathy_software_plugin/wizards/security/owasp_patterns.py +0 -241
  245. empathy_software_plugin/wizards/security/vulnerability_scanner.py +0 -604
  246. empathy_software_plugin/wizards/security_analysis_wizard.py +0 -322
  247. empathy_software_plugin/wizards/security_learning_wizard.py +0 -740
  248. empathy_software_plugin/wizards/tech_debt_wizard.py +0 -726
  249. empathy_software_plugin/wizards/testing/__init__.py +0 -27
  250. empathy_software_plugin/wizards/testing/coverage_analyzer.py +0 -459
  251. empathy_software_plugin/wizards/testing/quality_analyzer.py +0 -525
  252. empathy_software_plugin/wizards/testing/test_suggester.py +0 -533
  253. empathy_software_plugin/wizards/testing_wizard.py +0 -274
  254. wizards/__init__.py +0 -82
  255. wizards/admission_assessment_wizard.py +0 -644
  256. wizards/care_plan.py +0 -321
  257. wizards/clinical_assessment.py +0 -769
  258. wizards/discharge_planning.py +0 -77
  259. wizards/discharge_summary_wizard.py +0 -468
  260. wizards/dosage_calculation.py +0 -497
  261. wizards/incident_report_wizard.py +0 -454
  262. wizards/medication_reconciliation.py +0 -85
  263. wizards/nursing_assessment.py +0 -171
  264. wizards/patient_education.py +0 -654
  265. wizards/quality_improvement.py +0 -705
  266. wizards/sbar_report.py +0 -324
  267. wizards/sbar_wizard.py +0 -608
  268. wizards/shift_handoff_wizard.py +0 -535
  269. wizards/soap_note_wizard.py +0 -679
  270. wizards/treatment_plan.py +0 -15
  271. {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.1.dist-info}/WHEEL +0 -0
  272. {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.1.dist-info}/entry_points.txt +0 -0
  273. {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.1.dist-info}/licenses/LICENSE +0 -0
@@ -1,395 +0,0 @@
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: str = "Advanced Debugging Wizard"
51
- self._level: int = 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
- issues_for_fixability: list[LintIssue] = result["issues"] # type: ignore[assignment]
130
- fixability = group_issues_by_fixability(linter_name, issues_for_fixability)
131
- fixability_by_linter[linter_name] = {
132
- "auto_fixable": len(fixability["auto_fixable"]),
133
- "manual": len(fixability["manual"]),
134
- }
135
-
136
- # Phase 5: Apply fixes (if requested)
137
- fix_results = {}
138
- if auto_fix:
139
- logger.info("Applying auto-fixes...")
140
-
141
- for linter_name, result in linter_results.items():
142
- issues_for_fixing: list[LintIssue] = result["issues"] # type: ignore[assignment]
143
- fixes = apply_fixes(linter_name, issues_for_fixing, dry_run=False, auto_only=True)
144
-
145
- successful = [f for f in fixes if f.success]
146
- failed = [f for f in fixes if not f.success]
147
-
148
- fix_results[linter_name] = {
149
- "attempted": len(fixes),
150
- "successful": len(successful),
151
- "failed": len(failed),
152
- }
153
-
154
- # Phase 6: Verification (if requested)
155
- verification_results = {}
156
- if verify:
157
- logger.info("Verifying fixes...")
158
-
159
- for linter_name, result in linter_results.items():
160
- issues_for_verification: list[LintIssue] = result["issues"] # type: ignore[assignment]
161
- verification = verify_fixes(linter_name, project_path, issues_for_verification)
162
-
163
- verification_results[linter_name] = verification.to_dict()
164
-
165
- # Phase 7: Cross-language insights (Level 5)
166
- cross_language_insights = self._generate_cross_language_insights(all_issues)
167
-
168
- # Phase 8: Trajectory analysis (Level 4)
169
- trajectory = self._analyze_trajectory(all_issues, risk_summary)
170
-
171
- # Build final result
172
- return {
173
- "issues_found": len(all_issues),
174
- "linters": linter_results,
175
- "configs": configs_loaded,
176
- # Level 4: Risk analysis
177
- "risk_assessment": risk_summary,
178
- # Fixability
179
- "fixability": fixability_by_linter,
180
- # Fixes applied (if auto_fix=True)
181
- "fixes": fix_results if auto_fix else None,
182
- # Verification (if verify=True)
183
- "verification": verification_results if verify else None,
184
- # Level 5: Cross-language patterns
185
- "cross_language_insights": cross_language_insights,
186
- # Level 4: Trajectory prediction
187
- "trajectory": trajectory,
188
- # Standard wizard outputs
189
- "predictions": self._generate_predictions(trajectory, risk_summary),
190
- "recommendations": self._generate_recommendations(
191
- risk_summary,
192
- fixability_by_linter,
193
- trajectory,
194
- ),
195
- "patterns": cross_language_insights,
196
- "confidence": 0.9,
197
- }
198
-
199
- def _generate_cross_language_insights(self, issues: list[LintIssue]) -> list[dict[str, Any]]:
200
- """Generate Level 5 cross-language insights.
201
-
202
- Find patterns that exist across multiple languages in this project.
203
- """
204
- insights = []
205
-
206
- # Group issues by language
207
- by_language: dict[str, list[LintIssue]] = {}
208
- for issue in issues:
209
- lang = issue.linter
210
- if lang not in by_language:
211
- by_language[lang] = []
212
- by_language[lang].append(issue)
213
-
214
- # Find common patterns
215
- if len(by_language) >= 2:
216
- # Look for same pattern in different languages
217
- for issue in issues[:5]: # Check top 5
218
- pattern = self.pattern_library.find_pattern_for_rule(issue.linter, issue.rule)
219
-
220
- if pattern:
221
- # Check if this pattern appears in other languages
222
- other_langs = [lang for lang in by_language if lang != issue.linter]
223
-
224
- if other_langs:
225
- insight = {
226
- "pattern_name": pattern.name,
227
- "found_in": issue.linter,
228
- "also_applies_to": other_langs,
229
- "description": pattern.description,
230
- "universal_strategy": pattern.universal_fix_strategy,
231
- }
232
- insights.append(insight)
233
-
234
- return insights[:3] # Top 3 insights
235
-
236
- def _analyze_trajectory(
237
- self,
238
- issues: list[LintIssue],
239
- risk_summary: dict[str, Any],
240
- ) -> dict[str, Any]:
241
- """Analyze issue trajectory (Level 4).
242
-
243
- Predict where code quality is headed.
244
- """
245
- total_issues = len(issues)
246
- critical = risk_summary["by_risk_level"]["critical"]
247
- high = risk_summary["by_risk_level"]["high"]
248
- _ = risk_summary["by_risk_level"]["medium"]
249
-
250
- # Simple trajectory analysis
251
- # In real implementation, would compare with historical data
252
- trajectory_state = "stable"
253
- trajectory_concern = None
254
-
255
- if critical > 0:
256
- trajectory_state = "critical"
257
- trajectory_concern = (
258
- f"{critical} critical issues will cause production failures. "
259
- "Immediate action required."
260
- )
261
- elif high > 5:
262
- trajectory_state = "degrading"
263
- trajectory_concern = (
264
- f"{high} high-risk issues accumulating. "
265
- "In our experience, this volume leads to production bugs."
266
- )
267
- elif total_issues > 50:
268
- trajectory_state = "concerning"
269
- trajectory_concern = (
270
- f"{total_issues} total issues. "
271
- "Code quality trajectory suggests tech debt accumulation."
272
- )
273
-
274
- return {
275
- "state": trajectory_state,
276
- "total_issues": total_issues,
277
- "critical_issues": critical,
278
- "high_risk_issues": high,
279
- "concern": trajectory_concern,
280
- "recommendation": self._get_trajectory_recommendation(trajectory_state),
281
- }
282
-
283
- def _get_trajectory_recommendation(self, state: str) -> str:
284
- """Get recommendation based on trajectory state"""
285
- recommendations = {
286
- "critical": "Fix critical issues before deployment. Production failure likely.",
287
- "degrading": "Address high-risk issues soon. Trajectory suggests increasing bug density.",
288
- "concerning": "Consider code quality review. Volume of issues may indicate systemic issues.",
289
- "stable": "Code quality trajectory looks good. Continue current practices.",
290
- }
291
- return recommendations.get(state, "")
292
-
293
- def _generate_predictions(
294
- self,
295
- trajectory: dict[str, Any],
296
- risk_summary: dict[str, Any],
297
- ) -> list[dict[str, Any]]:
298
- """Generate Level 4 predictions"""
299
- predictions = []
300
-
301
- # Predict based on critical issues
302
- if risk_summary["by_risk_level"]["critical"] > 0:
303
- predictions.append(
304
- {
305
- "type": "production_failure_risk",
306
- "severity": "critical",
307
- "description": (
308
- "Critical linting violations detected. "
309
- "In our experience, these cause runtime errors."
310
- ),
311
- "prevention_steps": [
312
- "Fix all critical issues before deployment",
313
- "Add pre-commit hooks to catch these",
314
- "Review why these weren't caught earlier",
315
- ],
316
- },
317
- )
318
-
319
- # Predict based on high-risk accumulation
320
- high_risk = risk_summary["by_risk_level"]["high"]
321
- if high_risk > 5:
322
- predictions.append(
323
- {
324
- "type": "bug_density_increase",
325
- "severity": "high",
326
- "description": (
327
- f"{high_risk} high-risk issues found. "
328
- "In our experience, this volume correlates with production bugs."
329
- ),
330
- "prevention_steps": [
331
- "Prioritize high-risk fixes",
332
- "Add linting to CI/CD",
333
- "Consider pair programming for complex areas",
334
- ],
335
- },
336
- )
337
-
338
- # Predict based on trajectory
339
- if trajectory["state"] in ["degrading", "concerning"]:
340
- predictions.append(
341
- {
342
- "type": "technical_debt_accumulation",
343
- "severity": "medium",
344
- "description": trajectory["concern"],
345
- "prevention_steps": [
346
- "Schedule code quality review",
347
- "Allocate time for systematic cleanup",
348
- "Update coding standards documentation",
349
- ],
350
- },
351
- )
352
-
353
- return predictions
354
-
355
- def _generate_recommendations(
356
- self,
357
- risk_summary: dict[str, Any],
358
- fixability: dict[str, dict],
359
- trajectory: dict[str, Any],
360
- ) -> list[str]:
361
- """Generate actionable recommendations"""
362
- recommendations = []
363
-
364
- # Based on alert level
365
- alert_level = risk_summary["alert_level"]
366
-
367
- if alert_level == "CRITICAL":
368
- recommendations.append(
369
- f"🚨 CRITICAL: Fix {risk_summary['by_risk_level']['critical']} "
370
- "critical issues immediately",
371
- )
372
-
373
- if alert_level in ["CRITICAL", "HIGH"]:
374
- recommendations.append(
375
- f"⚠️ Address {risk_summary['by_risk_level']['high']} high-risk issues before merge",
376
- )
377
-
378
- # Based on fixability
379
- total_auto_fixable = sum(f["auto_fixable"] for f in fixability.values())
380
-
381
- if total_auto_fixable > 0:
382
- recommendations.append(
383
- f"✅ {total_auto_fixable} issues can be auto-fixed. Run with auto_fix=True",
384
- )
385
-
386
- # Based on trajectory
387
- if trajectory["state"] != "stable":
388
- recommendations.append(f"📊 Trajectory: {trajectory['recommendation']}")
389
-
390
- # General recommendations
391
- recommendations.append("🔧 Add pre-commit hooks to prevent future issues")
392
-
393
- recommendations.append("📝 Document common patterns in team style guide")
394
-
395
- return recommendations