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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (247) hide show
  1. {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.0.dist-info}/METADATA +7 -6
  2. empathy_framework-4.7.0.dist-info/RECORD +354 -0
  3. {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.0.dist-info}/top_level.txt +0 -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.py +173 -0
  130. empathy_os/workflows/__init__.py +212 -120
  131. empathy_os/workflows/batch_processing.py +8 -24
  132. empathy_os/workflows/bug_predict.py +1 -1
  133. empathy_os/workflows/code_review.py +20 -5
  134. empathy_os/workflows/code_review_pipeline.py +13 -8
  135. empathy_os/workflows/keyboard_shortcuts/workflow.py +6 -2
  136. empathy_os/workflows/manage_documentation.py +1 -0
  137. empathy_os/workflows/orchestrated_health_check.py +6 -11
  138. empathy_os/workflows/orchestrated_release_prep.py +3 -3
  139. empathy_os/workflows/pr_review.py +18 -10
  140. empathy_os/workflows/progressive/__init__.py +2 -12
  141. empathy_os/workflows/progressive/cli.py +14 -37
  142. empathy_os/workflows/progressive/core.py +12 -12
  143. empathy_os/workflows/progressive/orchestrator.py +166 -144
  144. empathy_os/workflows/progressive/reports.py +22 -31
  145. empathy_os/workflows/progressive/telemetry.py +8 -14
  146. empathy_os/workflows/progressive/test_gen.py +29 -48
  147. empathy_os/workflows/progressive/workflow.py +31 -70
  148. empathy_os/workflows/release_prep.py +21 -6
  149. empathy_os/workflows/release_prep_crew.py +1 -0
  150. empathy_os/workflows/secure_release.py +13 -6
  151. empathy_os/workflows/security_audit.py +8 -3
  152. empathy_os/workflows/test_coverage_boost_crew.py +3 -2
  153. empathy_os/workflows/test_maintenance_crew.py +1 -0
  154. empathy_os/workflows/test_runner.py +16 -12
  155. empathy_software_plugin/SOFTWARE_PLUGIN_README.md +25 -703
  156. empathy_software_plugin/cli.py +0 -122
  157. coach_wizards/__init__.py +0 -45
  158. coach_wizards/accessibility_wizard.py +0 -91
  159. coach_wizards/api_wizard.py +0 -91
  160. coach_wizards/base_wizard.py +0 -209
  161. coach_wizards/cicd_wizard.py +0 -91
  162. coach_wizards/code_reviewer_README.md +0 -60
  163. coach_wizards/code_reviewer_wizard.py +0 -180
  164. coach_wizards/compliance_wizard.py +0 -91
  165. coach_wizards/database_wizard.py +0 -91
  166. coach_wizards/debugging_wizard.py +0 -91
  167. coach_wizards/documentation_wizard.py +0 -91
  168. coach_wizards/generate_wizards.py +0 -347
  169. coach_wizards/localization_wizard.py +0 -173
  170. coach_wizards/migration_wizard.py +0 -91
  171. coach_wizards/monitoring_wizard.py +0 -91
  172. coach_wizards/observability_wizard.py +0 -91
  173. coach_wizards/performance_wizard.py +0 -91
  174. coach_wizards/prompt_engineering_wizard.py +0 -661
  175. coach_wizards/refactoring_wizard.py +0 -91
  176. coach_wizards/scaling_wizard.py +0 -90
  177. coach_wizards/security_wizard.py +0 -92
  178. coach_wizards/testing_wizard.py +0 -91
  179. empathy_framework-4.6.6.dist-info/RECORD +0 -410
  180. empathy_llm_toolkit/wizards/__init__.py +0 -43
  181. empathy_llm_toolkit/wizards/base_wizard.py +0 -364
  182. empathy_llm_toolkit/wizards/customer_support_wizard.py +0 -190
  183. empathy_llm_toolkit/wizards/healthcare_wizard.py +0 -378
  184. empathy_llm_toolkit/wizards/patient_assessment_README.md +0 -64
  185. empathy_llm_toolkit/wizards/patient_assessment_wizard.py +0 -193
  186. empathy_llm_toolkit/wizards/technology_wizard.py +0 -209
  187. empathy_os/wizard_factory_cli.py +0 -170
  188. empathy_software_plugin/wizards/__init__.py +0 -42
  189. empathy_software_plugin/wizards/advanced_debugging_wizard.py +0 -395
  190. empathy_software_plugin/wizards/agent_orchestration_wizard.py +0 -511
  191. empathy_software_plugin/wizards/ai_collaboration_wizard.py +0 -503
  192. empathy_software_plugin/wizards/ai_context_wizard.py +0 -441
  193. empathy_software_plugin/wizards/ai_documentation_wizard.py +0 -503
  194. empathy_software_plugin/wizards/base_wizard.py +0 -288
  195. empathy_software_plugin/wizards/book_chapter_wizard.py +0 -519
  196. empathy_software_plugin/wizards/code_review_wizard.py +0 -604
  197. empathy_software_plugin/wizards/debugging/__init__.py +0 -50
  198. empathy_software_plugin/wizards/debugging/bug_risk_analyzer.py +0 -414
  199. empathy_software_plugin/wizards/debugging/config_loaders.py +0 -446
  200. empathy_software_plugin/wizards/debugging/fix_applier.py +0 -469
  201. empathy_software_plugin/wizards/debugging/language_patterns.py +0 -385
  202. empathy_software_plugin/wizards/debugging/linter_parsers.py +0 -470
  203. empathy_software_plugin/wizards/debugging/verification.py +0 -369
  204. empathy_software_plugin/wizards/enhanced_testing_wizard.py +0 -537
  205. empathy_software_plugin/wizards/memory_enhanced_debugging_wizard.py +0 -816
  206. empathy_software_plugin/wizards/multi_model_wizard.py +0 -501
  207. empathy_software_plugin/wizards/pattern_extraction_wizard.py +0 -422
  208. empathy_software_plugin/wizards/pattern_retriever_wizard.py +0 -400
  209. empathy_software_plugin/wizards/performance/__init__.py +0 -9
  210. empathy_software_plugin/wizards/performance/bottleneck_detector.py +0 -221
  211. empathy_software_plugin/wizards/performance/profiler_parsers.py +0 -278
  212. empathy_software_plugin/wizards/performance/trajectory_analyzer.py +0 -429
  213. empathy_software_plugin/wizards/performance_profiling_wizard.py +0 -305
  214. empathy_software_plugin/wizards/prompt_engineering_wizard.py +0 -425
  215. empathy_software_plugin/wizards/rag_pattern_wizard.py +0 -461
  216. empathy_software_plugin/wizards/security/__init__.py +0 -32
  217. empathy_software_plugin/wizards/security/exploit_analyzer.py +0 -290
  218. empathy_software_plugin/wizards/security/owasp_patterns.py +0 -241
  219. empathy_software_plugin/wizards/security/vulnerability_scanner.py +0 -604
  220. empathy_software_plugin/wizards/security_analysis_wizard.py +0 -322
  221. empathy_software_plugin/wizards/security_learning_wizard.py +0 -740
  222. empathy_software_plugin/wizards/tech_debt_wizard.py +0 -726
  223. empathy_software_plugin/wizards/testing/__init__.py +0 -27
  224. empathy_software_plugin/wizards/testing/coverage_analyzer.py +0 -459
  225. empathy_software_plugin/wizards/testing/quality_analyzer.py +0 -525
  226. empathy_software_plugin/wizards/testing/test_suggester.py +0 -533
  227. empathy_software_plugin/wizards/testing_wizard.py +0 -274
  228. wizards/__init__.py +0 -82
  229. wizards/admission_assessment_wizard.py +0 -644
  230. wizards/care_plan.py +0 -321
  231. wizards/clinical_assessment.py +0 -769
  232. wizards/discharge_planning.py +0 -77
  233. wizards/discharge_summary_wizard.py +0 -468
  234. wizards/dosage_calculation.py +0 -497
  235. wizards/incident_report_wizard.py +0 -454
  236. wizards/medication_reconciliation.py +0 -85
  237. wizards/nursing_assessment.py +0 -171
  238. wizards/patient_education.py +0 -654
  239. wizards/quality_improvement.py +0 -705
  240. wizards/sbar_report.py +0 -324
  241. wizards/sbar_wizard.py +0 -608
  242. wizards/shift_handoff_wizard.py +0 -535
  243. wizards/soap_note_wizard.py +0 -679
  244. wizards/treatment_plan.py +0 -15
  245. {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.0.dist-info}/WHEEL +0 -0
  246. {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.0.dist-info}/entry_points.txt +0 -0
  247. {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.0.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