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
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")
@@ -0,0 +1,8 @@
1
+ {
2
+ "version": "1.0",
3
+ "updated_at": "2025-12-23T07:18:42.338323",
4
+ "node_count": 0,
5
+ "edge_count": 0,
6
+ "nodes": [],
7
+ "edges": []
8
+ }