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.
- empathy_framework-4.7.1.dist-info/METADATA +690 -0
- empathy_framework-4.7.1.dist-info/RECORD +379 -0
- {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.1.dist-info}/top_level.txt +1 -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 2.py +173 -0
- 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/README 2.md +454 -0
- empathy_os/workflows/progressive/__init__ 2.py +92 -0
- empathy_os/workflows/progressive/__init__.py +2 -12
- empathy_os/workflows/progressive/cli 2.py +242 -0
- empathy_os/workflows/progressive/cli.py +14 -37
- empathy_os/workflows/progressive/core 2.py +488 -0
- empathy_os/workflows/progressive/core.py +12 -12
- empathy_os/workflows/progressive/orchestrator 2.py +701 -0
- empathy_os/workflows/progressive/orchestrator.py +166 -144
- empathy_os/workflows/progressive/reports 2.py +528 -0
- empathy_os/workflows/progressive/reports.py +22 -31
- empathy_os/workflows/progressive/telemetry 2.py +280 -0
- empathy_os/workflows/progressive/telemetry.py +8 -14
- empathy_os/workflows/progressive/test_gen 2.py +514 -0
- empathy_os/workflows/progressive/test_gen.py +29 -48
- empathy_os/workflows/progressive/workflow 2.py +628 -0
- 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
- patterns/README.md +119 -0
- patterns/__init__.py +95 -0
- patterns/behavior.py +298 -0
- patterns/code_review_memory.json +441 -0
- patterns/core.py +97 -0
- patterns/debugging.json +3763 -0
- patterns/empathy.py +268 -0
- patterns/health_check_memory.json +505 -0
- patterns/input.py +161 -0
- patterns/memory_graph.json +8 -0
- patterns/refactoring_memory.json +1113 -0
- patterns/registry.py +663 -0
- patterns/security_memory.json +8 -0
- patterns/structural.py +415 -0
- patterns/validation.py +194 -0
- 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/METADATA +0 -1597
- 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.1.dist-info}/WHEEL +0 -0
- {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.1.dist-info}/entry_points.txt +0 -0
- {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.1.dist-info}/licenses/LICENSE +0 -0
patterns/registry.py
ADDED
|
@@ -0,0 +1,663 @@
|
|
|
1
|
+
"""Pattern Registry for the Wizard Factory.
|
|
2
|
+
|
|
3
|
+
The Pattern Registry is the central system for discovering, searching, and
|
|
4
|
+
recommending wizard patterns. It loads all extracted patterns and provides
|
|
5
|
+
intelligent pattern matching for new wizard creation.
|
|
6
|
+
|
|
7
|
+
Copyright 2025 Smart AI Memory, LLC
|
|
8
|
+
Licensed under Fair Source 0.9
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
import logging
|
|
12
|
+
from typing import Any, cast
|
|
13
|
+
|
|
14
|
+
from .behavior import (
|
|
15
|
+
AIEnhancementPattern,
|
|
16
|
+
FixApplicationPattern,
|
|
17
|
+
PredictionPattern,
|
|
18
|
+
RiskAssessmentPattern,
|
|
19
|
+
RiskLevel,
|
|
20
|
+
)
|
|
21
|
+
from .core import BasePattern, PatternCategory
|
|
22
|
+
from .empathy import EducationalBannerPattern, EmpathyLevelPattern, UserGuidancePattern
|
|
23
|
+
from .input import (
|
|
24
|
+
CodeAnalysisPattern,
|
|
25
|
+
ContextBasedPattern,
|
|
26
|
+
FieldDefinition,
|
|
27
|
+
StructuredFieldsPattern,
|
|
28
|
+
)
|
|
29
|
+
from .structural import (
|
|
30
|
+
LinearFlowPattern,
|
|
31
|
+
PhaseConfig,
|
|
32
|
+
PhasedProcessingPattern,
|
|
33
|
+
SessionBasedPattern,
|
|
34
|
+
StepConfig,
|
|
35
|
+
)
|
|
36
|
+
from .validation import ApprovalPattern, ConfigValidationPattern, StepValidationPattern
|
|
37
|
+
|
|
38
|
+
logger = logging.getLogger(__name__)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class PatternRegistry:
|
|
42
|
+
"""Central registry for all wizard patterns.
|
|
43
|
+
|
|
44
|
+
The registry provides:
|
|
45
|
+
- Pattern storage and retrieval by ID
|
|
46
|
+
- Search by category, name, or description
|
|
47
|
+
- Pattern recommendation based on wizard type and domain
|
|
48
|
+
- Statistics on pattern usage
|
|
49
|
+
"""
|
|
50
|
+
|
|
51
|
+
def __init__(self):
|
|
52
|
+
"""Initialize empty registry."""
|
|
53
|
+
self._patterns: dict[str, BasePattern] = {}
|
|
54
|
+
self._by_category: dict[PatternCategory, list[BasePattern]] = {
|
|
55
|
+
cat: [] for cat in PatternCategory
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
def register(self, pattern: BasePattern) -> None:
|
|
59
|
+
"""Register a pattern in the registry.
|
|
60
|
+
|
|
61
|
+
Args:
|
|
62
|
+
pattern: Pattern to register
|
|
63
|
+
|
|
64
|
+
Raises:
|
|
65
|
+
ValueError: If pattern ID already exists
|
|
66
|
+
|
|
67
|
+
"""
|
|
68
|
+
if pattern.id in self._patterns:
|
|
69
|
+
raise ValueError(f"Pattern with ID '{pattern.id}' already registered")
|
|
70
|
+
|
|
71
|
+
self._patterns[pattern.id] = pattern
|
|
72
|
+
self._by_category[pattern.category].append(pattern)
|
|
73
|
+
|
|
74
|
+
logger.debug(f"Registered pattern: {pattern.id} ({pattern.name})")
|
|
75
|
+
|
|
76
|
+
def get(self, pattern_id: str) -> BasePattern | None:
|
|
77
|
+
"""Get pattern by ID.
|
|
78
|
+
|
|
79
|
+
Args:
|
|
80
|
+
pattern_id: Unique pattern identifier
|
|
81
|
+
|
|
82
|
+
Returns:
|
|
83
|
+
Pattern if found, None otherwise
|
|
84
|
+
|
|
85
|
+
"""
|
|
86
|
+
return self._patterns.get(pattern_id)
|
|
87
|
+
|
|
88
|
+
def list_all(self) -> list[BasePattern]:
|
|
89
|
+
"""List all registered patterns.
|
|
90
|
+
|
|
91
|
+
Returns:
|
|
92
|
+
List of all patterns
|
|
93
|
+
|
|
94
|
+
"""
|
|
95
|
+
return list(self._patterns.values())
|
|
96
|
+
|
|
97
|
+
def list_by_category(self, category: PatternCategory) -> list[BasePattern]:
|
|
98
|
+
"""List all patterns in a category.
|
|
99
|
+
|
|
100
|
+
Args:
|
|
101
|
+
category: Pattern category
|
|
102
|
+
|
|
103
|
+
Returns:
|
|
104
|
+
List of patterns in that category
|
|
105
|
+
|
|
106
|
+
"""
|
|
107
|
+
return self._by_category[category].copy()
|
|
108
|
+
|
|
109
|
+
def search(self, query: str, case_sensitive: bool = False) -> list[BasePattern]:
|
|
110
|
+
"""Search patterns by name or description.
|
|
111
|
+
|
|
112
|
+
Args:
|
|
113
|
+
query: Search query string
|
|
114
|
+
case_sensitive: Whether search is case-sensitive
|
|
115
|
+
|
|
116
|
+
Returns:
|
|
117
|
+
List of matching patterns
|
|
118
|
+
|
|
119
|
+
"""
|
|
120
|
+
if not case_sensitive:
|
|
121
|
+
query = query.lower()
|
|
122
|
+
|
|
123
|
+
results = []
|
|
124
|
+
for pattern in self._patterns.values():
|
|
125
|
+
name = pattern.name if case_sensitive else pattern.name.lower()
|
|
126
|
+
desc = pattern.description if case_sensitive else pattern.description.lower()
|
|
127
|
+
|
|
128
|
+
if query in name or query in desc:
|
|
129
|
+
results.append(pattern)
|
|
130
|
+
|
|
131
|
+
return results
|
|
132
|
+
|
|
133
|
+
def recommend_for_wizard(
|
|
134
|
+
self,
|
|
135
|
+
wizard_type: str,
|
|
136
|
+
domain: str | None = None,
|
|
137
|
+
) -> list[BasePattern]:
|
|
138
|
+
"""Recommend patterns for a new wizard.
|
|
139
|
+
|
|
140
|
+
This uses a rule-based recommendation system based on:
|
|
141
|
+
- Wizard type (domain, coach, ai)
|
|
142
|
+
- Domain (healthcare, finance, legal, etc.)
|
|
143
|
+
- Pattern frequency and reusability scores
|
|
144
|
+
|
|
145
|
+
Args:
|
|
146
|
+
wizard_type: Type of wizard (domain, coach, ai)
|
|
147
|
+
domain: Optional domain (healthcare, finance, etc.)
|
|
148
|
+
|
|
149
|
+
Returns:
|
|
150
|
+
List of recommended patterns ordered by relevance
|
|
151
|
+
|
|
152
|
+
"""
|
|
153
|
+
recommendations = []
|
|
154
|
+
|
|
155
|
+
# Universal patterns (always recommended)
|
|
156
|
+
recommendations.extend(
|
|
157
|
+
[
|
|
158
|
+
self.get("empathy_level"),
|
|
159
|
+
self.get("user_guidance"),
|
|
160
|
+
]
|
|
161
|
+
)
|
|
162
|
+
|
|
163
|
+
# Healthcare domain patterns
|
|
164
|
+
if domain == "healthcare":
|
|
165
|
+
recommendations.extend(
|
|
166
|
+
[
|
|
167
|
+
self.get("linear_flow"),
|
|
168
|
+
self.get("structured_fields"),
|
|
169
|
+
self.get("step_validation"),
|
|
170
|
+
self.get("approval"),
|
|
171
|
+
self.get("educational_banner"),
|
|
172
|
+
self.get("ai_enhancement"),
|
|
173
|
+
]
|
|
174
|
+
)
|
|
175
|
+
|
|
176
|
+
# Legal/Finance domains patterns
|
|
177
|
+
elif domain in ["legal", "finance", "insurance"]:
|
|
178
|
+
recommendations.extend(
|
|
179
|
+
[
|
|
180
|
+
self.get("linear_flow"),
|
|
181
|
+
self.get("structured_fields"),
|
|
182
|
+
self.get("approval"),
|
|
183
|
+
self.get("educational_banner"),
|
|
184
|
+
self.get("config_validation"),
|
|
185
|
+
]
|
|
186
|
+
)
|
|
187
|
+
|
|
188
|
+
# Coach wizard patterns
|
|
189
|
+
if wizard_type == "coach":
|
|
190
|
+
recommendations.extend(
|
|
191
|
+
[
|
|
192
|
+
self.get("code_analysis_input"),
|
|
193
|
+
self.get("risk_assessment"),
|
|
194
|
+
self.get("prediction"),
|
|
195
|
+
self.get("config_validation"),
|
|
196
|
+
]
|
|
197
|
+
)
|
|
198
|
+
|
|
199
|
+
# AI wizard patterns
|
|
200
|
+
elif wizard_type == "ai":
|
|
201
|
+
recommendations.extend(
|
|
202
|
+
[
|
|
203
|
+
self.get("phased_processing"),
|
|
204
|
+
self.get("context_based_input"),
|
|
205
|
+
self.get("risk_assessment"),
|
|
206
|
+
self.get("fix_application"),
|
|
207
|
+
]
|
|
208
|
+
)
|
|
209
|
+
|
|
210
|
+
# Domain wizard patterns
|
|
211
|
+
elif wizard_type == "domain":
|
|
212
|
+
recommendations.extend(
|
|
213
|
+
[
|
|
214
|
+
self.get("config_validation"),
|
|
215
|
+
self.get("session_based"),
|
|
216
|
+
]
|
|
217
|
+
)
|
|
218
|
+
|
|
219
|
+
# Filter out None values and duplicates
|
|
220
|
+
filtered_recommendations = cast(
|
|
221
|
+
list[BasePattern], [p for p in recommendations if p is not None]
|
|
222
|
+
)
|
|
223
|
+
seen: set[str] = set()
|
|
224
|
+
unique_recommendations: list[BasePattern] = []
|
|
225
|
+
for pattern in filtered_recommendations:
|
|
226
|
+
if pattern.id not in seen:
|
|
227
|
+
seen.add(pattern.id)
|
|
228
|
+
unique_recommendations.append(pattern)
|
|
229
|
+
|
|
230
|
+
return unique_recommendations
|
|
231
|
+
|
|
232
|
+
def get_statistics(self) -> dict[str, Any]:
|
|
233
|
+
"""Get registry statistics.
|
|
234
|
+
|
|
235
|
+
Returns:
|
|
236
|
+
Dictionary with statistics
|
|
237
|
+
|
|
238
|
+
"""
|
|
239
|
+
total_patterns = len(self._patterns)
|
|
240
|
+
by_category = {cat.value: len(patterns) for cat, patterns in self._by_category.items()}
|
|
241
|
+
|
|
242
|
+
# Calculate average reusability
|
|
243
|
+
avg_reusability = (
|
|
244
|
+
sum(p.reusability_score for p in self._patterns.values()) / total_patterns
|
|
245
|
+
if total_patterns > 0
|
|
246
|
+
else 0.0
|
|
247
|
+
)
|
|
248
|
+
|
|
249
|
+
# Get most frequently used patterns
|
|
250
|
+
top_patterns = sorted(self._patterns.values(), key=lambda p: p.frequency, reverse=True)[:5]
|
|
251
|
+
|
|
252
|
+
return {
|
|
253
|
+
"total_patterns": total_patterns,
|
|
254
|
+
"by_category": by_category,
|
|
255
|
+
"average_reusability": avg_reusability,
|
|
256
|
+
"top_patterns": [
|
|
257
|
+
{"id": p.id, "name": p.name, "frequency": p.frequency} for p in top_patterns
|
|
258
|
+
],
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
# Global registry instance
|
|
263
|
+
_registry: PatternRegistry | None = None
|
|
264
|
+
|
|
265
|
+
|
|
266
|
+
def get_pattern_registry() -> PatternRegistry:
|
|
267
|
+
"""Get the global pattern registry.
|
|
268
|
+
|
|
269
|
+
Returns:
|
|
270
|
+
Global PatternRegistry instance
|
|
271
|
+
|
|
272
|
+
"""
|
|
273
|
+
global _registry
|
|
274
|
+
if _registry is None:
|
|
275
|
+
_registry = PatternRegistry()
|
|
276
|
+
load_patterns(_registry)
|
|
277
|
+
return _registry
|
|
278
|
+
|
|
279
|
+
|
|
280
|
+
def load_patterns(registry: PatternRegistry) -> None:
|
|
281
|
+
"""Load all extracted patterns into registry.
|
|
282
|
+
|
|
283
|
+
This function loads all 15 patterns extracted from the 78 existing wizards.
|
|
284
|
+
|
|
285
|
+
Args:
|
|
286
|
+
registry: Pattern registry to load patterns into
|
|
287
|
+
|
|
288
|
+
"""
|
|
289
|
+
logger.info("Loading patterns from existing wizards...")
|
|
290
|
+
|
|
291
|
+
# =========================================================================
|
|
292
|
+
# Structural Patterns (3)
|
|
293
|
+
# =========================================================================
|
|
294
|
+
|
|
295
|
+
# Linear Flow Pattern
|
|
296
|
+
registry.register(
|
|
297
|
+
LinearFlowPattern(
|
|
298
|
+
id="linear_flow",
|
|
299
|
+
name="Linear Flow",
|
|
300
|
+
description="Step-by-step wizard with review and approval",
|
|
301
|
+
frequency=16,
|
|
302
|
+
reusability_score=0.9,
|
|
303
|
+
examples=["soap_note", "sbar", "shift_handoff", "care_plan"],
|
|
304
|
+
total_steps=5,
|
|
305
|
+
steps={
|
|
306
|
+
1: StepConfig(
|
|
307
|
+
step=1,
|
|
308
|
+
title="Step 1",
|
|
309
|
+
prompt="Complete step 1",
|
|
310
|
+
fields=["field1", "field2"],
|
|
311
|
+
help_text="Help for step 1",
|
|
312
|
+
),
|
|
313
|
+
2: StepConfig(
|
|
314
|
+
step=2,
|
|
315
|
+
title="Step 2",
|
|
316
|
+
prompt="Complete step 2",
|
|
317
|
+
fields=["field3", "field4"],
|
|
318
|
+
help_text="Help for step 2",
|
|
319
|
+
),
|
|
320
|
+
3: StepConfig(
|
|
321
|
+
step=3,
|
|
322
|
+
title="Step 3",
|
|
323
|
+
prompt="Complete step 3",
|
|
324
|
+
fields=["field5"],
|
|
325
|
+
help_text="Help for step 3",
|
|
326
|
+
),
|
|
327
|
+
4: StepConfig(
|
|
328
|
+
step=4,
|
|
329
|
+
title="Step 4",
|
|
330
|
+
prompt="Complete step 4",
|
|
331
|
+
fields=["field6", "field7"],
|
|
332
|
+
help_text="Help for step 4",
|
|
333
|
+
),
|
|
334
|
+
5: StepConfig(
|
|
335
|
+
step=5,
|
|
336
|
+
title="Review & Finalize",
|
|
337
|
+
prompt="Review and approve",
|
|
338
|
+
fields=["review_complete", "user_approved"],
|
|
339
|
+
help_text="Review all sections before finalizing",
|
|
340
|
+
is_review_step=True,
|
|
341
|
+
),
|
|
342
|
+
},
|
|
343
|
+
requires_approval=True,
|
|
344
|
+
session_storage="redis",
|
|
345
|
+
)
|
|
346
|
+
)
|
|
347
|
+
|
|
348
|
+
# Phased Processing Pattern
|
|
349
|
+
registry.register(
|
|
350
|
+
PhasedProcessingPattern(
|
|
351
|
+
id="phased_processing",
|
|
352
|
+
name="Phased Processing",
|
|
353
|
+
description="Multi-phase analysis pipeline",
|
|
354
|
+
frequency=12,
|
|
355
|
+
reusability_score=0.85,
|
|
356
|
+
examples=["advanced_debugging", "security_analysis", "performance_profiling"],
|
|
357
|
+
phases=[
|
|
358
|
+
PhaseConfig(
|
|
359
|
+
name="parse",
|
|
360
|
+
description="Parse and extract structured data from input",
|
|
361
|
+
required=True,
|
|
362
|
+
),
|
|
363
|
+
PhaseConfig(
|
|
364
|
+
name="load_config",
|
|
365
|
+
description="Load wizard and tool configuration",
|
|
366
|
+
required=True,
|
|
367
|
+
),
|
|
368
|
+
PhaseConfig(
|
|
369
|
+
name="analyze",
|
|
370
|
+
description="Perform core analysis",
|
|
371
|
+
required=True,
|
|
372
|
+
),
|
|
373
|
+
PhaseConfig(
|
|
374
|
+
name="fix",
|
|
375
|
+
description="Apply fixes or transformations",
|
|
376
|
+
required=False,
|
|
377
|
+
),
|
|
378
|
+
PhaseConfig(
|
|
379
|
+
name="verify",
|
|
380
|
+
description="Verify results and confirm success",
|
|
381
|
+
required=False,
|
|
382
|
+
),
|
|
383
|
+
],
|
|
384
|
+
)
|
|
385
|
+
)
|
|
386
|
+
|
|
387
|
+
# Session-Based Pattern
|
|
388
|
+
registry.register(
|
|
389
|
+
SessionBasedPattern(
|
|
390
|
+
id="session_based",
|
|
391
|
+
name="Session-Based",
|
|
392
|
+
description="State management with session storage",
|
|
393
|
+
frequency=16,
|
|
394
|
+
reusability_score=0.95,
|
|
395
|
+
examples=["soap_note", "sbar", "care_plan"],
|
|
396
|
+
session_ttl_seconds=7200,
|
|
397
|
+
storage_backend="both",
|
|
398
|
+
)
|
|
399
|
+
)
|
|
400
|
+
|
|
401
|
+
# =========================================================================
|
|
402
|
+
# Input Patterns (3)
|
|
403
|
+
# =========================================================================
|
|
404
|
+
|
|
405
|
+
# Structured Fields Pattern
|
|
406
|
+
registry.register(
|
|
407
|
+
StructuredFieldsPattern(
|
|
408
|
+
id="structured_fields",
|
|
409
|
+
name="Structured Fields",
|
|
410
|
+
description="Predefined fields per step with validation",
|
|
411
|
+
frequency=16,
|
|
412
|
+
reusability_score=0.9,
|
|
413
|
+
examples=["soap_note", "care_plan", "admission_assessment"],
|
|
414
|
+
fields_by_step={
|
|
415
|
+
1: [
|
|
416
|
+
FieldDefinition(
|
|
417
|
+
name="chief_complaint",
|
|
418
|
+
field_type="str",
|
|
419
|
+
required=True,
|
|
420
|
+
description="Primary complaint",
|
|
421
|
+
),
|
|
422
|
+
FieldDefinition(
|
|
423
|
+
name="history_present_illness",
|
|
424
|
+
field_type="str",
|
|
425
|
+
required=True,
|
|
426
|
+
description="History of present illness",
|
|
427
|
+
),
|
|
428
|
+
],
|
|
429
|
+
2: [
|
|
430
|
+
FieldDefinition(
|
|
431
|
+
name="vital_signs",
|
|
432
|
+
field_type="str",
|
|
433
|
+
required=True,
|
|
434
|
+
description="Vital signs measurement",
|
|
435
|
+
),
|
|
436
|
+
],
|
|
437
|
+
},
|
|
438
|
+
)
|
|
439
|
+
)
|
|
440
|
+
|
|
441
|
+
# Code Analysis Pattern
|
|
442
|
+
registry.register(
|
|
443
|
+
CodeAnalysisPattern(
|
|
444
|
+
id="code_analysis_input",
|
|
445
|
+
name="Code Analysis Input",
|
|
446
|
+
description="Standard code analysis input (code, file_path, language)",
|
|
447
|
+
frequency=16,
|
|
448
|
+
reusability_score=0.9,
|
|
449
|
+
examples=["debugging", "testing", "security", "refactoring"],
|
|
450
|
+
supported_languages=["python", "javascript", "typescript", "java", "go", "rust"],
|
|
451
|
+
returns_issues=True,
|
|
452
|
+
)
|
|
453
|
+
)
|
|
454
|
+
|
|
455
|
+
# Context-Based Pattern
|
|
456
|
+
registry.register(
|
|
457
|
+
ContextBasedPattern(
|
|
458
|
+
id="context_based_input",
|
|
459
|
+
name="Context-Based Input",
|
|
460
|
+
description="Flexible dictionary-based input",
|
|
461
|
+
frequency=12,
|
|
462
|
+
reusability_score=0.8,
|
|
463
|
+
examples=["advanced_debugging", "multi_model", "rag_pattern"],
|
|
464
|
+
required_keys=["project_path"],
|
|
465
|
+
optional_keys=["linters", "configs", "auto_fix", "verify"],
|
|
466
|
+
key_descriptions={
|
|
467
|
+
"project_path": "Path to project root",
|
|
468
|
+
"linters": "Linter outputs to analyze",
|
|
469
|
+
"auto_fix": "Whether to apply auto-fixes",
|
|
470
|
+
},
|
|
471
|
+
)
|
|
472
|
+
)
|
|
473
|
+
|
|
474
|
+
# =========================================================================
|
|
475
|
+
# Validation Patterns (3)
|
|
476
|
+
# =========================================================================
|
|
477
|
+
|
|
478
|
+
# Config Validation Pattern
|
|
479
|
+
registry.register(
|
|
480
|
+
ConfigValidationPattern(
|
|
481
|
+
id="config_validation",
|
|
482
|
+
name="Config Validation",
|
|
483
|
+
description="Validate wizard configuration on initialization",
|
|
484
|
+
frequency=16,
|
|
485
|
+
reusability_score=0.9,
|
|
486
|
+
examples=["healthcare", "finance", "legal"],
|
|
487
|
+
validation_rules=["empathy_level", "classification", "api_keys"],
|
|
488
|
+
fail_fast=True,
|
|
489
|
+
)
|
|
490
|
+
)
|
|
491
|
+
|
|
492
|
+
# Step Validation Pattern
|
|
493
|
+
registry.register(
|
|
494
|
+
StepValidationPattern(
|
|
495
|
+
id="step_validation",
|
|
496
|
+
name="Step Validation",
|
|
497
|
+
description="Ensure steps are completed in order",
|
|
498
|
+
frequency=16,
|
|
499
|
+
reusability_score=0.9,
|
|
500
|
+
examples=["soap_note", "sbar", "care_plan"],
|
|
501
|
+
allow_step_skipping=False,
|
|
502
|
+
allow_step_revisiting=True,
|
|
503
|
+
)
|
|
504
|
+
)
|
|
505
|
+
|
|
506
|
+
# Approval Pattern
|
|
507
|
+
registry.register(
|
|
508
|
+
ApprovalPattern(
|
|
509
|
+
id="approval",
|
|
510
|
+
name="User Approval",
|
|
511
|
+
description="Preview → Explicit Approval → Finalize",
|
|
512
|
+
frequency=16,
|
|
513
|
+
reusability_score=0.95,
|
|
514
|
+
examples=["soap_note", "sbar", "discharge_summary"],
|
|
515
|
+
requires_preview=True,
|
|
516
|
+
approval_field="user_approved",
|
|
517
|
+
allow_edits_after_preview=True,
|
|
518
|
+
)
|
|
519
|
+
)
|
|
520
|
+
|
|
521
|
+
# =========================================================================
|
|
522
|
+
# Behavior Patterns (4)
|
|
523
|
+
# =========================================================================
|
|
524
|
+
|
|
525
|
+
# Risk Assessment Pattern
|
|
526
|
+
registry.register(
|
|
527
|
+
RiskAssessmentPattern(
|
|
528
|
+
id="risk_assessment",
|
|
529
|
+
name="Risk Assessment",
|
|
530
|
+
description="Level 4 Anticipatory risk analysis",
|
|
531
|
+
frequency=16,
|
|
532
|
+
reusability_score=0.8,
|
|
533
|
+
examples=["debugging", "security", "testing"],
|
|
534
|
+
risk_levels=[
|
|
535
|
+
RiskLevel(
|
|
536
|
+
name="critical",
|
|
537
|
+
threshold=1,
|
|
538
|
+
alert_message="Critical issues detected",
|
|
539
|
+
),
|
|
540
|
+
RiskLevel(
|
|
541
|
+
name="high",
|
|
542
|
+
threshold=5,
|
|
543
|
+
alert_message="High-risk issues accumulating",
|
|
544
|
+
),
|
|
545
|
+
RiskLevel(
|
|
546
|
+
name="medium",
|
|
547
|
+
threshold=20,
|
|
548
|
+
alert_message="Medium issues detected",
|
|
549
|
+
),
|
|
550
|
+
],
|
|
551
|
+
)
|
|
552
|
+
)
|
|
553
|
+
|
|
554
|
+
# AI Enhancement Pattern
|
|
555
|
+
registry.register(
|
|
556
|
+
AIEnhancementPattern(
|
|
557
|
+
id="ai_enhancement",
|
|
558
|
+
name="AI Enhancement",
|
|
559
|
+
description="Improve user input with AI",
|
|
560
|
+
frequency=16,
|
|
561
|
+
reusability_score=0.7,
|
|
562
|
+
examples=["soap_note", "sbar", "care_plan"],
|
|
563
|
+
enhancement_guidelines=[
|
|
564
|
+
"Use appropriate terminology",
|
|
565
|
+
"Clear and concise language",
|
|
566
|
+
"Maintain professional tone",
|
|
567
|
+
],
|
|
568
|
+
)
|
|
569
|
+
)
|
|
570
|
+
|
|
571
|
+
# Prediction Pattern
|
|
572
|
+
registry.register(
|
|
573
|
+
PredictionPattern(
|
|
574
|
+
id="prediction",
|
|
575
|
+
name="Prediction",
|
|
576
|
+
description="Level 4 Anticipatory prediction of future issues",
|
|
577
|
+
frequency=16,
|
|
578
|
+
reusability_score=0.8,
|
|
579
|
+
examples=["debugging", "testing", "security"],
|
|
580
|
+
timeline_days=90,
|
|
581
|
+
prediction_types=[
|
|
582
|
+
"production_failure_risk",
|
|
583
|
+
"bug_density_increase",
|
|
584
|
+
"technical_debt_accumulation",
|
|
585
|
+
],
|
|
586
|
+
)
|
|
587
|
+
)
|
|
588
|
+
|
|
589
|
+
# Fix Application Pattern
|
|
590
|
+
registry.register(
|
|
591
|
+
FixApplicationPattern(
|
|
592
|
+
id="fix_application",
|
|
593
|
+
name="Fix Application",
|
|
594
|
+
description="Automatically fix detected issues",
|
|
595
|
+
frequency=8,
|
|
596
|
+
reusability_score=0.75,
|
|
597
|
+
examples=["advanced_debugging", "code_review"],
|
|
598
|
+
auto_fix_enabled=False,
|
|
599
|
+
dry_run_by_default=True,
|
|
600
|
+
supported_fix_types=["lint", "format", "import", "refactor"],
|
|
601
|
+
)
|
|
602
|
+
)
|
|
603
|
+
|
|
604
|
+
# =========================================================================
|
|
605
|
+
# Empathy Patterns (2)
|
|
606
|
+
# =========================================================================
|
|
607
|
+
|
|
608
|
+
# Empathy Level Pattern
|
|
609
|
+
registry.register(
|
|
610
|
+
EmpathyLevelPattern(
|
|
611
|
+
id="empathy_level",
|
|
612
|
+
name="Empathy Level",
|
|
613
|
+
description="0-4 empathy level configuration",
|
|
614
|
+
frequency=16,
|
|
615
|
+
reusability_score=1.0,
|
|
616
|
+
examples=["healthcare", "finance", "legal"],
|
|
617
|
+
default_level=2,
|
|
618
|
+
level_descriptions={
|
|
619
|
+
0: "Pure data/computation",
|
|
620
|
+
1: "Reactive",
|
|
621
|
+
2: "Responsive",
|
|
622
|
+
3: "Proactive",
|
|
623
|
+
4: "Anticipatory",
|
|
624
|
+
},
|
|
625
|
+
allow_user_override=True,
|
|
626
|
+
)
|
|
627
|
+
)
|
|
628
|
+
|
|
629
|
+
# Educational Banner Pattern
|
|
630
|
+
registry.register(
|
|
631
|
+
EducationalBannerPattern(
|
|
632
|
+
id="educational_banner",
|
|
633
|
+
name="Educational Banner",
|
|
634
|
+
description="Safety notices and educational content",
|
|
635
|
+
frequency=16,
|
|
636
|
+
reusability_score=1.0,
|
|
637
|
+
examples=["soap_note", "sbar", "care_plan"],
|
|
638
|
+
banner_text=(
|
|
639
|
+
"This wizard is an educational tool. "
|
|
640
|
+
"All output should be reviewed by qualified professionals."
|
|
641
|
+
),
|
|
642
|
+
banner_type="educational",
|
|
643
|
+
display_locations=["start", "report", "preview"],
|
|
644
|
+
can_dismiss=False,
|
|
645
|
+
)
|
|
646
|
+
)
|
|
647
|
+
|
|
648
|
+
# User Guidance Pattern (not registered - docs only)
|
|
649
|
+
registry.register(
|
|
650
|
+
UserGuidancePattern(
|
|
651
|
+
id="user_guidance",
|
|
652
|
+
name="User Guidance",
|
|
653
|
+
description="Help text, examples, and prompts",
|
|
654
|
+
frequency=78, # All wizards should have this
|
|
655
|
+
reusability_score=1.0,
|
|
656
|
+
examples=["all wizards"],
|
|
657
|
+
help_text_per_step={},
|
|
658
|
+
field_examples={},
|
|
659
|
+
contextual_prompts=False,
|
|
660
|
+
)
|
|
661
|
+
)
|
|
662
|
+
|
|
663
|
+
logger.info(f"Loaded {len(registry.list_all())} patterns")
|