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.
- {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.0.dist-info}/METADATA +7 -6
- empathy_framework-4.7.0.dist-info/RECORD +354 -0
- {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.0.dist-info}/top_level.txt +0 -2
- empathy_healthcare_plugin/monitors/monitoring/__init__.py +9 -9
- empathy_llm_toolkit/agent_factory/__init__.py +6 -6
- empathy_llm_toolkit/agent_factory/adapters/wizard_adapter.py +7 -10
- empathy_llm_toolkit/agents_md/__init__.py +22 -0
- empathy_llm_toolkit/agents_md/loader.py +218 -0
- empathy_llm_toolkit/agents_md/parser.py +271 -0
- empathy_llm_toolkit/agents_md/registry.py +307 -0
- empathy_llm_toolkit/commands/__init__.py +51 -0
- empathy_llm_toolkit/commands/context.py +375 -0
- empathy_llm_toolkit/commands/loader.py +301 -0
- empathy_llm_toolkit/commands/models.py +231 -0
- empathy_llm_toolkit/commands/parser.py +371 -0
- empathy_llm_toolkit/commands/registry.py +429 -0
- empathy_llm_toolkit/config/__init__.py +8 -8
- empathy_llm_toolkit/config/unified.py +3 -7
- empathy_llm_toolkit/context/__init__.py +22 -0
- empathy_llm_toolkit/context/compaction.py +455 -0
- empathy_llm_toolkit/context/manager.py +434 -0
- empathy_llm_toolkit/hooks/__init__.py +24 -0
- empathy_llm_toolkit/hooks/config.py +306 -0
- empathy_llm_toolkit/hooks/executor.py +289 -0
- empathy_llm_toolkit/hooks/registry.py +302 -0
- empathy_llm_toolkit/hooks/scripts/__init__.py +39 -0
- empathy_llm_toolkit/hooks/scripts/evaluate_session.py +201 -0
- empathy_llm_toolkit/hooks/scripts/first_time_init.py +285 -0
- empathy_llm_toolkit/hooks/scripts/pre_compact.py +207 -0
- empathy_llm_toolkit/hooks/scripts/session_end.py +183 -0
- empathy_llm_toolkit/hooks/scripts/session_start.py +163 -0
- empathy_llm_toolkit/hooks/scripts/suggest_compact.py +225 -0
- empathy_llm_toolkit/learning/__init__.py +30 -0
- empathy_llm_toolkit/learning/evaluator.py +438 -0
- empathy_llm_toolkit/learning/extractor.py +514 -0
- empathy_llm_toolkit/learning/storage.py +560 -0
- empathy_llm_toolkit/providers.py +4 -11
- empathy_llm_toolkit/security/__init__.py +17 -17
- empathy_llm_toolkit/utils/tokens.py +2 -5
- empathy_os/__init__.py +202 -70
- empathy_os/cache_monitor.py +5 -3
- empathy_os/cli/__init__.py +11 -55
- empathy_os/cli/__main__.py +29 -15
- empathy_os/cli/commands/inspection.py +21 -12
- empathy_os/cli/commands/memory.py +4 -12
- empathy_os/cli/commands/profiling.py +198 -0
- empathy_os/cli/commands/utilities.py +27 -7
- empathy_os/cli.py +28 -57
- empathy_os/cli_unified.py +525 -1164
- empathy_os/cost_tracker.py +9 -3
- empathy_os/dashboard/server.py +200 -2
- empathy_os/hot_reload/__init__.py +7 -7
- empathy_os/hot_reload/config.py +6 -7
- empathy_os/hot_reload/integration.py +35 -35
- empathy_os/hot_reload/reloader.py +57 -57
- empathy_os/hot_reload/watcher.py +28 -28
- empathy_os/hot_reload/websocket.py +2 -2
- empathy_os/memory/__init__.py +11 -4
- empathy_os/memory/claude_memory.py +1 -1
- empathy_os/memory/cross_session.py +8 -12
- empathy_os/memory/edges.py +6 -6
- empathy_os/memory/file_session.py +770 -0
- empathy_os/memory/graph.py +30 -30
- empathy_os/memory/nodes.py +6 -6
- empathy_os/memory/short_term.py +15 -9
- empathy_os/memory/unified.py +606 -140
- empathy_os/meta_workflows/agent_creator.py +3 -9
- empathy_os/meta_workflows/cli_meta_workflows.py +113 -53
- empathy_os/meta_workflows/form_engine.py +6 -18
- empathy_os/meta_workflows/intent_detector.py +64 -24
- empathy_os/meta_workflows/models.py +3 -1
- empathy_os/meta_workflows/pattern_learner.py +13 -31
- empathy_os/meta_workflows/plan_generator.py +55 -47
- empathy_os/meta_workflows/session_context.py +2 -3
- empathy_os/meta_workflows/workflow.py +20 -51
- empathy_os/models/cli.py +2 -2
- empathy_os/models/tasks.py +1 -2
- empathy_os/models/telemetry.py +4 -1
- empathy_os/models/token_estimator.py +3 -1
- empathy_os/monitoring/alerts.py +938 -9
- empathy_os/monitoring/alerts_cli.py +346 -183
- empathy_os/orchestration/execution_strategies.py +12 -29
- empathy_os/orchestration/pattern_learner.py +20 -26
- empathy_os/orchestration/real_tools.py +6 -15
- empathy_os/platform_utils.py +2 -1
- empathy_os/plugins/__init__.py +2 -2
- empathy_os/plugins/base.py +64 -64
- empathy_os/plugins/registry.py +32 -32
- empathy_os/project_index/index.py +49 -15
- empathy_os/project_index/models.py +1 -2
- empathy_os/project_index/reports.py +1 -1
- empathy_os/project_index/scanner.py +1 -0
- empathy_os/redis_memory.py +10 -7
- empathy_os/resilience/__init__.py +1 -1
- empathy_os/resilience/health.py +10 -10
- empathy_os/routing/__init__.py +7 -7
- empathy_os/routing/chain_executor.py +37 -37
- empathy_os/routing/classifier.py +36 -36
- empathy_os/routing/smart_router.py +40 -40
- empathy_os/routing/{wizard_registry.py → workflow_registry.py} +47 -47
- empathy_os/scaffolding/__init__.py +8 -8
- empathy_os/scaffolding/__main__.py +1 -1
- empathy_os/scaffolding/cli.py +28 -28
- empathy_os/socratic/__init__.py +3 -19
- empathy_os/socratic/ab_testing.py +25 -36
- empathy_os/socratic/blueprint.py +38 -38
- empathy_os/socratic/cli.py +34 -20
- empathy_os/socratic/collaboration.py +30 -28
- empathy_os/socratic/domain_templates.py +9 -1
- empathy_os/socratic/embeddings.py +17 -13
- empathy_os/socratic/engine.py +135 -70
- empathy_os/socratic/explainer.py +70 -60
- empathy_os/socratic/feedback.py +24 -19
- empathy_os/socratic/forms.py +15 -10
- empathy_os/socratic/generator.py +51 -35
- empathy_os/socratic/llm_analyzer.py +25 -23
- empathy_os/socratic/mcp_server.py +99 -159
- empathy_os/socratic/session.py +19 -13
- empathy_os/socratic/storage.py +98 -67
- empathy_os/socratic/success.py +38 -27
- empathy_os/socratic/visual_editor.py +51 -39
- empathy_os/socratic/web_ui.py +99 -66
- empathy_os/telemetry/cli.py +3 -1
- empathy_os/telemetry/usage_tracker.py +1 -3
- empathy_os/test_generator/__init__.py +3 -3
- empathy_os/test_generator/cli.py +28 -28
- empathy_os/test_generator/generator.py +64 -66
- empathy_os/test_generator/risk_analyzer.py +11 -11
- empathy_os/vscode_bridge.py +173 -0
- empathy_os/workflows/__init__.py +212 -120
- empathy_os/workflows/batch_processing.py +8 -24
- empathy_os/workflows/bug_predict.py +1 -1
- empathy_os/workflows/code_review.py +20 -5
- empathy_os/workflows/code_review_pipeline.py +13 -8
- empathy_os/workflows/keyboard_shortcuts/workflow.py +6 -2
- empathy_os/workflows/manage_documentation.py +1 -0
- empathy_os/workflows/orchestrated_health_check.py +6 -11
- empathy_os/workflows/orchestrated_release_prep.py +3 -3
- empathy_os/workflows/pr_review.py +18 -10
- empathy_os/workflows/progressive/__init__.py +2 -12
- empathy_os/workflows/progressive/cli.py +14 -37
- empathy_os/workflows/progressive/core.py +12 -12
- empathy_os/workflows/progressive/orchestrator.py +166 -144
- empathy_os/workflows/progressive/reports.py +22 -31
- empathy_os/workflows/progressive/telemetry.py +8 -14
- empathy_os/workflows/progressive/test_gen.py +29 -48
- empathy_os/workflows/progressive/workflow.py +31 -70
- empathy_os/workflows/release_prep.py +21 -6
- empathy_os/workflows/release_prep_crew.py +1 -0
- empathy_os/workflows/secure_release.py +13 -6
- empathy_os/workflows/security_audit.py +8 -3
- empathy_os/workflows/test_coverage_boost_crew.py +3 -2
- empathy_os/workflows/test_maintenance_crew.py +1 -0
- empathy_os/workflows/test_runner.py +16 -12
- empathy_software_plugin/SOFTWARE_PLUGIN_README.md +25 -703
- empathy_software_plugin/cli.py +0 -122
- coach_wizards/__init__.py +0 -45
- coach_wizards/accessibility_wizard.py +0 -91
- coach_wizards/api_wizard.py +0 -91
- coach_wizards/base_wizard.py +0 -209
- coach_wizards/cicd_wizard.py +0 -91
- coach_wizards/code_reviewer_README.md +0 -60
- coach_wizards/code_reviewer_wizard.py +0 -180
- coach_wizards/compliance_wizard.py +0 -91
- coach_wizards/database_wizard.py +0 -91
- coach_wizards/debugging_wizard.py +0 -91
- coach_wizards/documentation_wizard.py +0 -91
- coach_wizards/generate_wizards.py +0 -347
- coach_wizards/localization_wizard.py +0 -173
- coach_wizards/migration_wizard.py +0 -91
- coach_wizards/monitoring_wizard.py +0 -91
- coach_wizards/observability_wizard.py +0 -91
- coach_wizards/performance_wizard.py +0 -91
- coach_wizards/prompt_engineering_wizard.py +0 -661
- coach_wizards/refactoring_wizard.py +0 -91
- coach_wizards/scaling_wizard.py +0 -90
- coach_wizards/security_wizard.py +0 -92
- coach_wizards/testing_wizard.py +0 -91
- empathy_framework-4.6.6.dist-info/RECORD +0 -410
- empathy_llm_toolkit/wizards/__init__.py +0 -43
- empathy_llm_toolkit/wizards/base_wizard.py +0 -364
- empathy_llm_toolkit/wizards/customer_support_wizard.py +0 -190
- empathy_llm_toolkit/wizards/healthcare_wizard.py +0 -378
- empathy_llm_toolkit/wizards/patient_assessment_README.md +0 -64
- empathy_llm_toolkit/wizards/patient_assessment_wizard.py +0 -193
- empathy_llm_toolkit/wizards/technology_wizard.py +0 -209
- empathy_os/wizard_factory_cli.py +0 -170
- empathy_software_plugin/wizards/__init__.py +0 -42
- empathy_software_plugin/wizards/advanced_debugging_wizard.py +0 -395
- empathy_software_plugin/wizards/agent_orchestration_wizard.py +0 -511
- empathy_software_plugin/wizards/ai_collaboration_wizard.py +0 -503
- empathy_software_plugin/wizards/ai_context_wizard.py +0 -441
- empathy_software_plugin/wizards/ai_documentation_wizard.py +0 -503
- empathy_software_plugin/wizards/base_wizard.py +0 -288
- empathy_software_plugin/wizards/book_chapter_wizard.py +0 -519
- empathy_software_plugin/wizards/code_review_wizard.py +0 -604
- empathy_software_plugin/wizards/debugging/__init__.py +0 -50
- empathy_software_plugin/wizards/debugging/bug_risk_analyzer.py +0 -414
- empathy_software_plugin/wizards/debugging/config_loaders.py +0 -446
- empathy_software_plugin/wizards/debugging/fix_applier.py +0 -469
- empathy_software_plugin/wizards/debugging/language_patterns.py +0 -385
- empathy_software_plugin/wizards/debugging/linter_parsers.py +0 -470
- empathy_software_plugin/wizards/debugging/verification.py +0 -369
- empathy_software_plugin/wizards/enhanced_testing_wizard.py +0 -537
- empathy_software_plugin/wizards/memory_enhanced_debugging_wizard.py +0 -816
- empathy_software_plugin/wizards/multi_model_wizard.py +0 -501
- empathy_software_plugin/wizards/pattern_extraction_wizard.py +0 -422
- empathy_software_plugin/wizards/pattern_retriever_wizard.py +0 -400
- empathy_software_plugin/wizards/performance/__init__.py +0 -9
- empathy_software_plugin/wizards/performance/bottleneck_detector.py +0 -221
- empathy_software_plugin/wizards/performance/profiler_parsers.py +0 -278
- empathy_software_plugin/wizards/performance/trajectory_analyzer.py +0 -429
- empathy_software_plugin/wizards/performance_profiling_wizard.py +0 -305
- empathy_software_plugin/wizards/prompt_engineering_wizard.py +0 -425
- empathy_software_plugin/wizards/rag_pattern_wizard.py +0 -461
- empathy_software_plugin/wizards/security/__init__.py +0 -32
- empathy_software_plugin/wizards/security/exploit_analyzer.py +0 -290
- empathy_software_plugin/wizards/security/owasp_patterns.py +0 -241
- empathy_software_plugin/wizards/security/vulnerability_scanner.py +0 -604
- empathy_software_plugin/wizards/security_analysis_wizard.py +0 -322
- empathy_software_plugin/wizards/security_learning_wizard.py +0 -740
- empathy_software_plugin/wizards/tech_debt_wizard.py +0 -726
- empathy_software_plugin/wizards/testing/__init__.py +0 -27
- empathy_software_plugin/wizards/testing/coverage_analyzer.py +0 -459
- empathy_software_plugin/wizards/testing/quality_analyzer.py +0 -525
- empathy_software_plugin/wizards/testing/test_suggester.py +0 -533
- empathy_software_plugin/wizards/testing_wizard.py +0 -274
- wizards/__init__.py +0 -82
- wizards/admission_assessment_wizard.py +0 -644
- wizards/care_plan.py +0 -321
- wizards/clinical_assessment.py +0 -769
- wizards/discharge_planning.py +0 -77
- wizards/discharge_summary_wizard.py +0 -468
- wizards/dosage_calculation.py +0 -497
- wizards/incident_report_wizard.py +0 -454
- wizards/medication_reconciliation.py +0 -85
- wizards/nursing_assessment.py +0 -171
- wizards/patient_education.py +0 -654
- wizards/quality_improvement.py +0 -705
- wizards/sbar_report.py +0 -324
- wizards/sbar_wizard.py +0 -608
- wizards/shift_handoff_wizard.py +0 -535
- wizards/soap_note_wizard.py +0 -679
- wizards/treatment_plan.py +0 -15
- {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.0.dist-info}/WHEEL +0 -0
- {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.0.dist-info}/entry_points.txt +0 -0
- {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,385 +0,0 @@
|
|
|
1
|
-
"""Cross-Language Pattern Library (Level 5)
|
|
2
|
-
|
|
3
|
-
Universal debugging patterns that apply across programming languages.
|
|
4
|
-
|
|
5
|
-
This is Level 5 Systems Empathy - recognizing that the same fundamental
|
|
6
|
-
patterns appear across different domains (languages).
|
|
7
|
-
|
|
8
|
-
Copyright 2025 Smart AI Memory, LLC
|
|
9
|
-
Licensed under Fair Source 0.9
|
|
10
|
-
"""
|
|
11
|
-
|
|
12
|
-
from dataclasses import dataclass
|
|
13
|
-
from enum import Enum
|
|
14
|
-
from typing import Any
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
class PatternCategory(Enum):
|
|
18
|
-
"""Categories of universal patterns"""
|
|
19
|
-
|
|
20
|
-
UNDEFINED_REFERENCE = "undefined_reference"
|
|
21
|
-
TYPE_MISMATCH = "type_mismatch"
|
|
22
|
-
NULL_SAFETY = "null_safety"
|
|
23
|
-
UNUSED_CODE = "unused_code"
|
|
24
|
-
NAMING_CONVENTION = "naming_convention"
|
|
25
|
-
CODE_COMPLEXITY = "code_complexity"
|
|
26
|
-
RESOURCE_MANAGEMENT = "resource_management"
|
|
27
|
-
SECURITY = "security"
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
@dataclass
|
|
31
|
-
class UniversalPattern:
|
|
32
|
-
"""A pattern that exists across languages.
|
|
33
|
-
|
|
34
|
-
Example: "Undefined variable" exists in JavaScript, Python, Rust, Go, etc.
|
|
35
|
-
The fix strategy is similar across all languages.
|
|
36
|
-
"""
|
|
37
|
-
|
|
38
|
-
name: str
|
|
39
|
-
category: PatternCategory
|
|
40
|
-
description: str
|
|
41
|
-
why_it_matters: str
|
|
42
|
-
language_manifestations: dict[str, str] # language -> rule name
|
|
43
|
-
universal_fix_strategy: str
|
|
44
|
-
language_specific_fixes: dict[str, list[str]]
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
class CrossLanguagePatternLibrary:
|
|
48
|
-
"""Library of patterns that exist across languages.
|
|
49
|
-
|
|
50
|
-
This enables Level 5 Systems Empathy - learning from one language
|
|
51
|
-
can inform debugging in another language.
|
|
52
|
-
"""
|
|
53
|
-
|
|
54
|
-
def __init__(self):
|
|
55
|
-
self.patterns = self._build_pattern_library()
|
|
56
|
-
|
|
57
|
-
def _build_pattern_library(self) -> dict[str, UniversalPattern]:
|
|
58
|
-
"""Build the universal pattern library"""
|
|
59
|
-
return {
|
|
60
|
-
"undefined_reference": UniversalPattern(
|
|
61
|
-
name="Undefined Reference",
|
|
62
|
-
category=PatternCategory.UNDEFINED_REFERENCE,
|
|
63
|
-
description="Attempting to use a variable/function/type that doesn't exist",
|
|
64
|
-
why_it_matters="Guaranteed runtime error in all languages. Most critical issue.",
|
|
65
|
-
language_manifestations={
|
|
66
|
-
"javascript": "no-undef",
|
|
67
|
-
"python": "undefined-variable",
|
|
68
|
-
"typescript": "TS2304",
|
|
69
|
-
"rust": "cannot_find_value",
|
|
70
|
-
"go": "undefined",
|
|
71
|
-
"java": "cannot_find_symbol",
|
|
72
|
-
},
|
|
73
|
-
universal_fix_strategy=(
|
|
74
|
-
"1. Import/require the missing identifier\n"
|
|
75
|
-
"2. Define it before use\n"
|
|
76
|
-
"3. Check for typos in name"
|
|
77
|
-
),
|
|
78
|
-
language_specific_fixes={
|
|
79
|
-
"javascript": [
|
|
80
|
-
"Add: import { foo } from './module'",
|
|
81
|
-
"Add: const foo = require('./module')",
|
|
82
|
-
"Define: const foo = ...",
|
|
83
|
-
],
|
|
84
|
-
"python": [
|
|
85
|
-
"Add: from module import foo",
|
|
86
|
-
"Add: import module",
|
|
87
|
-
"Define: foo = ...",
|
|
88
|
-
],
|
|
89
|
-
"typescript": [
|
|
90
|
-
"Add: import { Foo } from './types'",
|
|
91
|
-
"Define: type Foo = ...",
|
|
92
|
-
"Define: const foo = ...",
|
|
93
|
-
],
|
|
94
|
-
},
|
|
95
|
-
),
|
|
96
|
-
"type_mismatch": UniversalPattern(
|
|
97
|
-
name="Type Mismatch",
|
|
98
|
-
category=PatternCategory.TYPE_MISMATCH,
|
|
99
|
-
description="Value of wrong type assigned or passed",
|
|
100
|
-
why_it_matters="Causes runtime errors or incorrect behavior",
|
|
101
|
-
language_manifestations={
|
|
102
|
-
"typescript": "TS2322",
|
|
103
|
-
"python": "mypy: Incompatible types",
|
|
104
|
-
"rust": "mismatched_types",
|
|
105
|
-
"go": "cannot_use",
|
|
106
|
-
"java": "incompatible_types",
|
|
107
|
-
},
|
|
108
|
-
universal_fix_strategy=(
|
|
109
|
-
"1. Convert value to expected type\n"
|
|
110
|
-
"2. Change variable type to match value\n"
|
|
111
|
-
"3. Review logic - may indicate design issue"
|
|
112
|
-
),
|
|
113
|
-
language_specific_fixes={
|
|
114
|
-
"typescript": [
|
|
115
|
-
"Add type conversion: String(value)",
|
|
116
|
-
"Fix type annotation: foo: ExpectedType",
|
|
117
|
-
"Use type assertion: value as ExpectedType",
|
|
118
|
-
],
|
|
119
|
-
"python": [
|
|
120
|
-
"Convert: str(value), int(value)",
|
|
121
|
-
"Fix type hint: foo: ExpectedType",
|
|
122
|
-
"Use cast: cast(ExpectedType, value)",
|
|
123
|
-
],
|
|
124
|
-
},
|
|
125
|
-
),
|
|
126
|
-
"null_safety": UniversalPattern(
|
|
127
|
-
name="Null/Undefined Safety",
|
|
128
|
-
category=PatternCategory.NULL_SAFETY,
|
|
129
|
-
description="Potential null/undefined dereference",
|
|
130
|
-
why_it_matters="Common source of production crashes",
|
|
131
|
-
language_manifestations={
|
|
132
|
-
"javascript": "no-unsafe-optional-chaining",
|
|
133
|
-
"typescript": "TS2532", # Object is possibly undefined
|
|
134
|
-
"python": "none-check",
|
|
135
|
-
"rust": "Option handling",
|
|
136
|
-
"java": "NullPointerException warnings",
|
|
137
|
-
"kotlin": "nullable type",
|
|
138
|
-
},
|
|
139
|
-
universal_fix_strategy=(
|
|
140
|
-
"1. Check for null/undefined before use\n"
|
|
141
|
-
"2. Provide default value\n"
|
|
142
|
-
"3. Use language's null-safety features"
|
|
143
|
-
),
|
|
144
|
-
language_specific_fixes={
|
|
145
|
-
"javascript": [
|
|
146
|
-
"Use optional chaining: obj?.property",
|
|
147
|
-
"Nullish coalescing: value ?? default",
|
|
148
|
-
"Explicit check: if (value !== null)",
|
|
149
|
-
],
|
|
150
|
-
"typescript": [
|
|
151
|
-
"Non-null assertion: value!",
|
|
152
|
-
"Optional chaining: obj?.property",
|
|
153
|
-
"Type guard: if (value !== undefined)",
|
|
154
|
-
],
|
|
155
|
-
"python": [
|
|
156
|
-
"Check: if value is not None",
|
|
157
|
-
"Default: value or default_value",
|
|
158
|
-
"Optional type: Optional[Type]",
|
|
159
|
-
],
|
|
160
|
-
"rust": [
|
|
161
|
-
"Pattern match: match opt { Some(v) => ..., None => ... }",
|
|
162
|
-
"Unwrap with default: opt.unwrap_or(default)",
|
|
163
|
-
"Safe access: opt.as_ref()",
|
|
164
|
-
],
|
|
165
|
-
},
|
|
166
|
-
),
|
|
167
|
-
"unused_code": UniversalPattern(
|
|
168
|
-
name="Unused Code",
|
|
169
|
-
category=PatternCategory.UNUSED_CODE,
|
|
170
|
-
description="Variables, imports, or functions that are never used",
|
|
171
|
-
why_it_matters="Clutter, indicates incomplete refactoring",
|
|
172
|
-
language_manifestations={
|
|
173
|
-
"javascript": "no-unused-vars",
|
|
174
|
-
"python": "unused-variable",
|
|
175
|
-
"typescript": "TS6133",
|
|
176
|
-
"rust": "unused_variables",
|
|
177
|
-
"go": "unused",
|
|
178
|
-
"java": "unused",
|
|
179
|
-
},
|
|
180
|
-
universal_fix_strategy=(
|
|
181
|
-
"1. Remove if truly unused\n"
|
|
182
|
-
"2. Prefix with _ if intentionally unused\n"
|
|
183
|
-
"3. Use it or lose it"
|
|
184
|
-
),
|
|
185
|
-
language_specific_fixes={
|
|
186
|
-
"javascript": [
|
|
187
|
-
"Remove: Delete unused variable",
|
|
188
|
-
"Intentional: Prefix with _unused",
|
|
189
|
-
"Destructure: Use _ for unused items",
|
|
190
|
-
],
|
|
191
|
-
"python": [
|
|
192
|
-
"Remove: Delete unused variable",
|
|
193
|
-
"Intentional: _unused = value",
|
|
194
|
-
"Noqa comment: # noqa: F841",
|
|
195
|
-
],
|
|
196
|
-
"rust": [
|
|
197
|
-
"Remove: Delete binding",
|
|
198
|
-
"Intentional: let _unused = value",
|
|
199
|
-
"Attribute: #[allow(unused_variables)]",
|
|
200
|
-
],
|
|
201
|
-
},
|
|
202
|
-
),
|
|
203
|
-
"naming_convention": UniversalPattern(
|
|
204
|
-
name="Naming Convention Violation",
|
|
205
|
-
category=PatternCategory.NAMING_CONVENTION,
|
|
206
|
-
description="Identifier doesn't follow language conventions",
|
|
207
|
-
why_it_matters="Consistency, readability, team standards",
|
|
208
|
-
language_manifestations={
|
|
209
|
-
"javascript": "camelcase",
|
|
210
|
-
"python": "invalid-name",
|
|
211
|
-
"rust": "non_snake_case",
|
|
212
|
-
"go": "golint naming",
|
|
213
|
-
"java": "naming-convention",
|
|
214
|
-
},
|
|
215
|
-
universal_fix_strategy=(
|
|
216
|
-
"1. Rename to follow convention\n"
|
|
217
|
-
"2. Update all references\n"
|
|
218
|
-
"3. Consider IDE refactor tool"
|
|
219
|
-
),
|
|
220
|
-
language_specific_fixes={
|
|
221
|
-
"javascript": [
|
|
222
|
-
"camelCase for variables/functions",
|
|
223
|
-
"PascalCase for classes",
|
|
224
|
-
"UPPER_CASE for constants",
|
|
225
|
-
],
|
|
226
|
-
"python": [
|
|
227
|
-
"snake_case for variables/functions",
|
|
228
|
-
"PascalCase for classes",
|
|
229
|
-
"UPPER_CASE for constants",
|
|
230
|
-
],
|
|
231
|
-
"rust": [
|
|
232
|
-
"snake_case for variables/functions",
|
|
233
|
-
"PascalCase for types/traits",
|
|
234
|
-
"SCREAMING_SNAKE_CASE for constants",
|
|
235
|
-
],
|
|
236
|
-
},
|
|
237
|
-
),
|
|
238
|
-
"code_complexity": UniversalPattern(
|
|
239
|
-
name="Excessive Complexity",
|
|
240
|
-
category=PatternCategory.CODE_COMPLEXITY,
|
|
241
|
-
description="Function/class too complex (cyclomatic complexity)",
|
|
242
|
-
why_it_matters="Hard to test, maintain, understand",
|
|
243
|
-
language_manifestations={
|
|
244
|
-
"javascript": "complexity",
|
|
245
|
-
"python": "too-many-branches",
|
|
246
|
-
"java": "CyclomaticComplexity",
|
|
247
|
-
"go": "gocyclo",
|
|
248
|
-
},
|
|
249
|
-
universal_fix_strategy=(
|
|
250
|
-
"1. Extract helper functions\n"
|
|
251
|
-
"2. Simplify conditional logic\n"
|
|
252
|
-
"3. Use early returns\n"
|
|
253
|
-
"4. Consider design patterns"
|
|
254
|
-
),
|
|
255
|
-
language_specific_fixes={
|
|
256
|
-
"javascript": [
|
|
257
|
-
"Extract function: function helper() { ... }",
|
|
258
|
-
"Use guard clauses: if (!valid) return",
|
|
259
|
-
"Strategy pattern for complex conditionals",
|
|
260
|
-
],
|
|
261
|
-
"python": [
|
|
262
|
-
"Extract method: def _helper(self):",
|
|
263
|
-
"Use guard clauses: if not valid: return",
|
|
264
|
-
"Lookup tables instead of if-else chains",
|
|
265
|
-
],
|
|
266
|
-
},
|
|
267
|
-
),
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
def find_pattern_for_rule(self, linter: str, rule: str) -> UniversalPattern | None:
|
|
271
|
-
"""Find universal pattern that matches this linter rule.
|
|
272
|
-
|
|
273
|
-
Args:
|
|
274
|
-
linter: Linter name (eslint, pylint, etc.)
|
|
275
|
-
rule: Rule name
|
|
276
|
-
|
|
277
|
-
Returns:
|
|
278
|
-
UniversalPattern if found, None otherwise
|
|
279
|
-
|
|
280
|
-
"""
|
|
281
|
-
pattern: UniversalPattern
|
|
282
|
-
for pattern in self.patterns.values():
|
|
283
|
-
if linter in pattern.language_manifestations:
|
|
284
|
-
if pattern.language_manifestations[linter] == rule:
|
|
285
|
-
return pattern
|
|
286
|
-
return None
|
|
287
|
-
|
|
288
|
-
def get_fix_strategy(self, pattern_name: str, language: str) -> list[str] | None:
|
|
289
|
-
"""Get language-specific fix strategy for pattern.
|
|
290
|
-
|
|
291
|
-
Args:
|
|
292
|
-
pattern_name: Name of universal pattern
|
|
293
|
-
language: Target language
|
|
294
|
-
|
|
295
|
-
Returns:
|
|
296
|
-
List of fix steps, or None if not found
|
|
297
|
-
|
|
298
|
-
"""
|
|
299
|
-
pattern: UniversalPattern | None = self.patterns.get(pattern_name)
|
|
300
|
-
if not pattern:
|
|
301
|
-
return None
|
|
302
|
-
|
|
303
|
-
result: list[str] | None = pattern.language_specific_fixes.get(language)
|
|
304
|
-
return result
|
|
305
|
-
|
|
306
|
-
def suggest_cross_language_insight(
|
|
307
|
-
self,
|
|
308
|
-
from_language: str,
|
|
309
|
-
to_language: str,
|
|
310
|
-
pattern_name: str,
|
|
311
|
-
) -> str | None:
|
|
312
|
-
"""Generate insight from one language to another.
|
|
313
|
-
|
|
314
|
-
This is Level 5 in action - cross-domain learning.
|
|
315
|
-
|
|
316
|
-
Example: "This Python 'undefined-variable' error is like
|
|
317
|
-
JavaScript's 'no-undef' - same fix applies."
|
|
318
|
-
"""
|
|
319
|
-
pattern = self.patterns.get(pattern_name)
|
|
320
|
-
if not pattern:
|
|
321
|
-
return None
|
|
322
|
-
|
|
323
|
-
from_rule = pattern.language_manifestations.get(from_language)
|
|
324
|
-
to_rule = pattern.language_manifestations.get(to_language)
|
|
325
|
-
|
|
326
|
-
if not from_rule or not to_rule:
|
|
327
|
-
return None
|
|
328
|
-
|
|
329
|
-
return (
|
|
330
|
-
f"Cross-language insight: This {to_language} '{to_rule}' issue "
|
|
331
|
-
f"is the same pattern as {from_language}'s '{from_rule}'.\n\n"
|
|
332
|
-
f"Pattern: {pattern.name}\n"
|
|
333
|
-
f"{pattern.description}\n\n"
|
|
334
|
-
f"Universal strategy:\n{pattern.universal_fix_strategy}\n\n"
|
|
335
|
-
f"Specific to {to_language}:\n"
|
|
336
|
-
+ "\n".join(
|
|
337
|
-
f" - {step}" for step in pattern.language_specific_fixes.get(to_language, [])
|
|
338
|
-
)
|
|
339
|
-
)
|
|
340
|
-
|
|
341
|
-
def get_all_patterns(self) -> list[UniversalPattern]:
|
|
342
|
-
"""Get all universal patterns"""
|
|
343
|
-
return list(self.patterns.values())
|
|
344
|
-
|
|
345
|
-
def get_patterns_by_category(self, category: PatternCategory) -> list[UniversalPattern]:
|
|
346
|
-
"""Get patterns in specific category"""
|
|
347
|
-
return [p for p in self.patterns.values() if p.category == category]
|
|
348
|
-
|
|
349
|
-
def generate_pattern_summary(self) -> dict[str, Any]:
|
|
350
|
-
"""Generate summary of pattern library.
|
|
351
|
-
|
|
352
|
-
Useful for documentation or teaching.
|
|
353
|
-
"""
|
|
354
|
-
return {
|
|
355
|
-
"total_patterns": len(self.patterns),
|
|
356
|
-
"categories": {
|
|
357
|
-
cat.value: len(self.get_patterns_by_category(cat)) for cat in PatternCategory
|
|
358
|
-
},
|
|
359
|
-
"languages_covered": self._count_languages(),
|
|
360
|
-
"patterns": [
|
|
361
|
-
{
|
|
362
|
-
"name": p.name,
|
|
363
|
-
"category": p.category.value,
|
|
364
|
-
"languages": list(p.language_manifestations.keys()),
|
|
365
|
-
"why_it_matters": p.why_it_matters,
|
|
366
|
-
}
|
|
367
|
-
for p in self.patterns.values()
|
|
368
|
-
],
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
def _count_languages(self) -> int:
|
|
372
|
-
"""Count unique languages covered"""
|
|
373
|
-
languages = set()
|
|
374
|
-
for pattern in self.patterns.values():
|
|
375
|
-
languages.update(pattern.language_manifestations.keys())
|
|
376
|
-
return len(languages)
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
# Global pattern library instance
|
|
380
|
-
PATTERN_LIBRARY = CrossLanguagePatternLibrary()
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
def get_pattern_library() -> CrossLanguagePatternLibrary:
|
|
384
|
-
"""Get the global pattern library"""
|
|
385
|
-
return PATTERN_LIBRARY
|