empathy-framework 3.2.3__py3-none-any.whl → 3.8.2__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 (328) hide show
  1. coach_wizards/__init__.py +11 -12
  2. coach_wizards/accessibility_wizard.py +12 -12
  3. coach_wizards/api_wizard.py +12 -12
  4. coach_wizards/base_wizard.py +26 -20
  5. coach_wizards/cicd_wizard.py +15 -13
  6. coach_wizards/code_reviewer_README.md +60 -0
  7. coach_wizards/code_reviewer_wizard.py +180 -0
  8. coach_wizards/compliance_wizard.py +12 -12
  9. coach_wizards/database_wizard.py +12 -12
  10. coach_wizards/debugging_wizard.py +12 -12
  11. coach_wizards/documentation_wizard.py +12 -12
  12. coach_wizards/generate_wizards.py +1 -2
  13. coach_wizards/localization_wizard.py +101 -19
  14. coach_wizards/migration_wizard.py +12 -12
  15. coach_wizards/monitoring_wizard.py +12 -12
  16. coach_wizards/observability_wizard.py +12 -12
  17. coach_wizards/performance_wizard.py +12 -12
  18. coach_wizards/prompt_engineering_wizard.py +22 -25
  19. coach_wizards/refactoring_wizard.py +12 -12
  20. coach_wizards/scaling_wizard.py +12 -12
  21. coach_wizards/security_wizard.py +12 -12
  22. coach_wizards/testing_wizard.py +12 -12
  23. {empathy_framework-3.2.3.dist-info → empathy_framework-3.8.2.dist-info}/METADATA +513 -58
  24. empathy_framework-3.8.2.dist-info/RECORD +333 -0
  25. empathy_framework-3.8.2.dist-info/entry_points.txt +22 -0
  26. {empathy_framework-3.2.3.dist-info → empathy_framework-3.8.2.dist-info}/top_level.txt +5 -1
  27. empathy_healthcare_plugin/__init__.py +1 -2
  28. empathy_healthcare_plugin/monitors/__init__.py +9 -0
  29. empathy_healthcare_plugin/monitors/clinical_protocol_monitor.py +315 -0
  30. empathy_healthcare_plugin/monitors/monitoring/__init__.py +44 -0
  31. empathy_healthcare_plugin/monitors/monitoring/protocol_checker.py +300 -0
  32. empathy_healthcare_plugin/monitors/monitoring/protocol_loader.py +214 -0
  33. empathy_healthcare_plugin/monitors/monitoring/sensor_parsers.py +306 -0
  34. empathy_healthcare_plugin/monitors/monitoring/trajectory_analyzer.py +389 -0
  35. empathy_llm_toolkit/__init__.py +7 -7
  36. empathy_llm_toolkit/agent_factory/__init__.py +53 -0
  37. empathy_llm_toolkit/agent_factory/adapters/__init__.py +85 -0
  38. empathy_llm_toolkit/agent_factory/adapters/autogen_adapter.py +312 -0
  39. empathy_llm_toolkit/agent_factory/adapters/crewai_adapter.py +454 -0
  40. empathy_llm_toolkit/agent_factory/adapters/haystack_adapter.py +298 -0
  41. empathy_llm_toolkit/agent_factory/adapters/langchain_adapter.py +362 -0
  42. empathy_llm_toolkit/agent_factory/adapters/langgraph_adapter.py +333 -0
  43. empathy_llm_toolkit/agent_factory/adapters/native.py +228 -0
  44. empathy_llm_toolkit/agent_factory/adapters/wizard_adapter.py +426 -0
  45. empathy_llm_toolkit/agent_factory/base.py +305 -0
  46. empathy_llm_toolkit/agent_factory/crews/__init__.py +67 -0
  47. empathy_llm_toolkit/agent_factory/crews/code_review.py +1113 -0
  48. empathy_llm_toolkit/agent_factory/crews/health_check.py +1246 -0
  49. empathy_llm_toolkit/agent_factory/crews/refactoring.py +1128 -0
  50. empathy_llm_toolkit/agent_factory/crews/security_audit.py +1018 -0
  51. empathy_llm_toolkit/agent_factory/decorators.py +286 -0
  52. empathy_llm_toolkit/agent_factory/factory.py +558 -0
  53. empathy_llm_toolkit/agent_factory/framework.py +192 -0
  54. empathy_llm_toolkit/agent_factory/memory_integration.py +324 -0
  55. empathy_llm_toolkit/agent_factory/resilient.py +320 -0
  56. empathy_llm_toolkit/claude_memory.py +14 -15
  57. empathy_llm_toolkit/cli/__init__.py +8 -0
  58. empathy_llm_toolkit/cli/sync_claude.py +487 -0
  59. empathy_llm_toolkit/code_health.py +177 -22
  60. empathy_llm_toolkit/config/__init__.py +29 -0
  61. empathy_llm_toolkit/config/unified.py +295 -0
  62. empathy_llm_toolkit/contextual_patterns.py +11 -12
  63. empathy_llm_toolkit/core.py +51 -49
  64. empathy_llm_toolkit/git_pattern_extractor.py +16 -12
  65. empathy_llm_toolkit/levels.py +6 -13
  66. empathy_llm_toolkit/pattern_confidence.py +14 -18
  67. empathy_llm_toolkit/pattern_resolver.py +10 -12
  68. empathy_llm_toolkit/pattern_summary.py +13 -11
  69. empathy_llm_toolkit/providers.py +194 -28
  70. empathy_llm_toolkit/routing/__init__.py +32 -0
  71. empathy_llm_toolkit/routing/model_router.py +362 -0
  72. empathy_llm_toolkit/security/IMPLEMENTATION_SUMMARY.md +413 -0
  73. empathy_llm_toolkit/security/PHASE2_COMPLETE.md +384 -0
  74. empathy_llm_toolkit/security/PHASE2_SECRETS_DETECTOR_COMPLETE.md +271 -0
  75. empathy_llm_toolkit/security/QUICK_REFERENCE.md +316 -0
  76. empathy_llm_toolkit/security/README.md +262 -0
  77. empathy_llm_toolkit/security/__init__.py +62 -0
  78. empathy_llm_toolkit/security/audit_logger.py +929 -0
  79. empathy_llm_toolkit/security/audit_logger_example.py +152 -0
  80. empathy_llm_toolkit/security/pii_scrubber.py +640 -0
  81. empathy_llm_toolkit/security/secrets_detector.py +678 -0
  82. empathy_llm_toolkit/security/secrets_detector_example.py +304 -0
  83. empathy_llm_toolkit/security/secure_memdocs.py +1192 -0
  84. empathy_llm_toolkit/security/secure_memdocs_example.py +278 -0
  85. empathy_llm_toolkit/session_status.py +18 -20
  86. empathy_llm_toolkit/state.py +20 -21
  87. empathy_llm_toolkit/wizards/__init__.py +38 -0
  88. empathy_llm_toolkit/wizards/base_wizard.py +364 -0
  89. empathy_llm_toolkit/wizards/customer_support_wizard.py +190 -0
  90. empathy_llm_toolkit/wizards/healthcare_wizard.py +362 -0
  91. empathy_llm_toolkit/wizards/patient_assessment_README.md +64 -0
  92. empathy_llm_toolkit/wizards/patient_assessment_wizard.py +193 -0
  93. empathy_llm_toolkit/wizards/technology_wizard.py +194 -0
  94. empathy_os/__init__.py +76 -77
  95. empathy_os/adaptive/__init__.py +13 -0
  96. empathy_os/adaptive/task_complexity.py +127 -0
  97. empathy_os/{monitoring.py → agent_monitoring.py} +27 -27
  98. empathy_os/cache/__init__.py +117 -0
  99. empathy_os/cache/base.py +166 -0
  100. empathy_os/cache/dependency_manager.py +253 -0
  101. empathy_os/cache/hash_only.py +248 -0
  102. empathy_os/cache/hybrid.py +390 -0
  103. empathy_os/cache/storage.py +282 -0
  104. empathy_os/cli.py +515 -109
  105. empathy_os/cli_unified.py +189 -42
  106. empathy_os/config/__init__.py +63 -0
  107. empathy_os/config/xml_config.py +239 -0
  108. empathy_os/config.py +87 -36
  109. empathy_os/coordination.py +48 -54
  110. empathy_os/core.py +90 -99
  111. empathy_os/cost_tracker.py +20 -23
  112. empathy_os/dashboard/__init__.py +15 -0
  113. empathy_os/dashboard/server.py +743 -0
  114. empathy_os/discovery.py +9 -11
  115. empathy_os/emergence.py +20 -21
  116. empathy_os/exceptions.py +18 -30
  117. empathy_os/feedback_loops.py +27 -30
  118. empathy_os/levels.py +31 -34
  119. empathy_os/leverage_points.py +27 -28
  120. empathy_os/logging_config.py +11 -12
  121. empathy_os/memory/__init__.py +195 -0
  122. empathy_os/memory/claude_memory.py +466 -0
  123. empathy_os/memory/config.py +224 -0
  124. empathy_os/memory/control_panel.py +1298 -0
  125. empathy_os/memory/edges.py +179 -0
  126. empathy_os/memory/graph.py +567 -0
  127. empathy_os/memory/long_term.py +1194 -0
  128. empathy_os/memory/nodes.py +179 -0
  129. empathy_os/memory/redis_bootstrap.py +540 -0
  130. empathy_os/memory/security/__init__.py +31 -0
  131. empathy_os/memory/security/audit_logger.py +930 -0
  132. empathy_os/memory/security/pii_scrubber.py +640 -0
  133. empathy_os/memory/security/secrets_detector.py +678 -0
  134. empathy_os/memory/short_term.py +2119 -0
  135. empathy_os/memory/storage/__init__.py +15 -0
  136. empathy_os/memory/summary_index.py +583 -0
  137. empathy_os/memory/unified.py +619 -0
  138. empathy_os/metrics/__init__.py +12 -0
  139. empathy_os/metrics/prompt_metrics.py +190 -0
  140. empathy_os/models/__init__.py +136 -0
  141. empathy_os/models/__main__.py +13 -0
  142. empathy_os/models/cli.py +655 -0
  143. empathy_os/models/empathy_executor.py +354 -0
  144. empathy_os/models/executor.py +252 -0
  145. empathy_os/models/fallback.py +671 -0
  146. empathy_os/models/provider_config.py +563 -0
  147. empathy_os/models/registry.py +382 -0
  148. empathy_os/models/tasks.py +302 -0
  149. empathy_os/models/telemetry.py +548 -0
  150. empathy_os/models/token_estimator.py +378 -0
  151. empathy_os/models/validation.py +274 -0
  152. empathy_os/monitoring/__init__.py +52 -0
  153. empathy_os/monitoring/alerts.py +23 -0
  154. empathy_os/monitoring/alerts_cli.py +268 -0
  155. empathy_os/monitoring/multi_backend.py +271 -0
  156. empathy_os/monitoring/otel_backend.py +363 -0
  157. empathy_os/optimization/__init__.py +19 -0
  158. empathy_os/optimization/context_optimizer.py +272 -0
  159. empathy_os/pattern_library.py +29 -28
  160. empathy_os/persistence.py +30 -34
  161. empathy_os/platform_utils.py +261 -0
  162. empathy_os/plugins/__init__.py +28 -0
  163. empathy_os/plugins/base.py +361 -0
  164. empathy_os/plugins/registry.py +268 -0
  165. empathy_os/project_index/__init__.py +30 -0
  166. empathy_os/project_index/cli.py +335 -0
  167. empathy_os/project_index/crew_integration.py +430 -0
  168. empathy_os/project_index/index.py +425 -0
  169. empathy_os/project_index/models.py +501 -0
  170. empathy_os/project_index/reports.py +473 -0
  171. empathy_os/project_index/scanner.py +538 -0
  172. empathy_os/prompts/__init__.py +61 -0
  173. empathy_os/prompts/config.py +77 -0
  174. empathy_os/prompts/context.py +177 -0
  175. empathy_os/prompts/parser.py +285 -0
  176. empathy_os/prompts/registry.py +313 -0
  177. empathy_os/prompts/templates.py +208 -0
  178. empathy_os/redis_config.py +144 -58
  179. empathy_os/redis_memory.py +53 -56
  180. empathy_os/resilience/__init__.py +56 -0
  181. empathy_os/resilience/circuit_breaker.py +256 -0
  182. empathy_os/resilience/fallback.py +179 -0
  183. empathy_os/resilience/health.py +300 -0
  184. empathy_os/resilience/retry.py +209 -0
  185. empathy_os/resilience/timeout.py +135 -0
  186. empathy_os/routing/__init__.py +43 -0
  187. empathy_os/routing/chain_executor.py +433 -0
  188. empathy_os/routing/classifier.py +217 -0
  189. empathy_os/routing/smart_router.py +234 -0
  190. empathy_os/routing/wizard_registry.py +307 -0
  191. empathy_os/templates.py +12 -11
  192. empathy_os/trust/__init__.py +28 -0
  193. empathy_os/trust/circuit_breaker.py +579 -0
  194. empathy_os/trust_building.py +44 -36
  195. empathy_os/validation/__init__.py +19 -0
  196. empathy_os/validation/xml_validator.py +281 -0
  197. empathy_os/wizard_factory_cli.py +170 -0
  198. empathy_os/{workflows.py → workflow_commands.py} +123 -31
  199. empathy_os/workflows/__init__.py +360 -0
  200. empathy_os/workflows/base.py +1660 -0
  201. empathy_os/workflows/bug_predict.py +962 -0
  202. empathy_os/workflows/code_review.py +960 -0
  203. empathy_os/workflows/code_review_adapters.py +310 -0
  204. empathy_os/workflows/code_review_pipeline.py +720 -0
  205. empathy_os/workflows/config.py +600 -0
  206. empathy_os/workflows/dependency_check.py +648 -0
  207. empathy_os/workflows/document_gen.py +1069 -0
  208. empathy_os/workflows/documentation_orchestrator.py +1205 -0
  209. empathy_os/workflows/health_check.py +679 -0
  210. empathy_os/workflows/keyboard_shortcuts/__init__.py +39 -0
  211. empathy_os/workflows/keyboard_shortcuts/generators.py +386 -0
  212. empathy_os/workflows/keyboard_shortcuts/parsers.py +414 -0
  213. empathy_os/workflows/keyboard_shortcuts/prompts.py +295 -0
  214. empathy_os/workflows/keyboard_shortcuts/schema.py +193 -0
  215. empathy_os/workflows/keyboard_shortcuts/workflow.py +505 -0
  216. empathy_os/workflows/manage_documentation.py +804 -0
  217. empathy_os/workflows/new_sample_workflow1.py +146 -0
  218. empathy_os/workflows/new_sample_workflow1_README.md +150 -0
  219. empathy_os/workflows/perf_audit.py +687 -0
  220. empathy_os/workflows/pr_review.py +748 -0
  221. empathy_os/workflows/progress.py +445 -0
  222. empathy_os/workflows/progress_server.py +322 -0
  223. empathy_os/workflows/refactor_plan.py +693 -0
  224. empathy_os/workflows/release_prep.py +808 -0
  225. empathy_os/workflows/research_synthesis.py +404 -0
  226. empathy_os/workflows/secure_release.py +585 -0
  227. empathy_os/workflows/security_adapters.py +297 -0
  228. empathy_os/workflows/security_audit.py +1046 -0
  229. empathy_os/workflows/step_config.py +234 -0
  230. empathy_os/workflows/test5.py +125 -0
  231. empathy_os/workflows/test5_README.md +158 -0
  232. empathy_os/workflows/test_gen.py +1855 -0
  233. empathy_os/workflows/test_lifecycle.py +526 -0
  234. empathy_os/workflows/test_maintenance.py +626 -0
  235. empathy_os/workflows/test_maintenance_cli.py +590 -0
  236. empathy_os/workflows/test_maintenance_crew.py +821 -0
  237. empathy_os/workflows/xml_enhanced_crew.py +285 -0
  238. empathy_software_plugin/__init__.py +1 -2
  239. empathy_software_plugin/cli/__init__.py +120 -0
  240. empathy_software_plugin/cli/inspect.py +362 -0
  241. empathy_software_plugin/cli.py +35 -26
  242. empathy_software_plugin/plugin.py +4 -8
  243. empathy_software_plugin/wizards/__init__.py +42 -0
  244. empathy_software_plugin/wizards/advanced_debugging_wizard.py +392 -0
  245. empathy_software_plugin/wizards/agent_orchestration_wizard.py +511 -0
  246. empathy_software_plugin/wizards/ai_collaboration_wizard.py +503 -0
  247. empathy_software_plugin/wizards/ai_context_wizard.py +441 -0
  248. empathy_software_plugin/wizards/ai_documentation_wizard.py +503 -0
  249. empathy_software_plugin/wizards/base_wizard.py +288 -0
  250. empathy_software_plugin/wizards/book_chapter_wizard.py +519 -0
  251. empathy_software_plugin/wizards/code_review_wizard.py +606 -0
  252. empathy_software_plugin/wizards/debugging/__init__.py +50 -0
  253. empathy_software_plugin/wizards/debugging/bug_risk_analyzer.py +414 -0
  254. empathy_software_plugin/wizards/debugging/config_loaders.py +442 -0
  255. empathy_software_plugin/wizards/debugging/fix_applier.py +469 -0
  256. empathy_software_plugin/wizards/debugging/language_patterns.py +383 -0
  257. empathy_software_plugin/wizards/debugging/linter_parsers.py +470 -0
  258. empathy_software_plugin/wizards/debugging/verification.py +369 -0
  259. empathy_software_plugin/wizards/enhanced_testing_wizard.py +537 -0
  260. empathy_software_plugin/wizards/memory_enhanced_debugging_wizard.py +816 -0
  261. empathy_software_plugin/wizards/multi_model_wizard.py +501 -0
  262. empathy_software_plugin/wizards/pattern_extraction_wizard.py +422 -0
  263. empathy_software_plugin/wizards/pattern_retriever_wizard.py +400 -0
  264. empathy_software_plugin/wizards/performance/__init__.py +9 -0
  265. empathy_software_plugin/wizards/performance/bottleneck_detector.py +221 -0
  266. empathy_software_plugin/wizards/performance/profiler_parsers.py +278 -0
  267. empathy_software_plugin/wizards/performance/trajectory_analyzer.py +429 -0
  268. empathy_software_plugin/wizards/performance_profiling_wizard.py +305 -0
  269. empathy_software_plugin/wizards/prompt_engineering_wizard.py +425 -0
  270. empathy_software_plugin/wizards/rag_pattern_wizard.py +461 -0
  271. empathy_software_plugin/wizards/security/__init__.py +32 -0
  272. empathy_software_plugin/wizards/security/exploit_analyzer.py +290 -0
  273. empathy_software_plugin/wizards/security/owasp_patterns.py +241 -0
  274. empathy_software_plugin/wizards/security/vulnerability_scanner.py +604 -0
  275. empathy_software_plugin/wizards/security_analysis_wizard.py +322 -0
  276. empathy_software_plugin/wizards/security_learning_wizard.py +740 -0
  277. empathy_software_plugin/wizards/tech_debt_wizard.py +726 -0
  278. empathy_software_plugin/wizards/testing/__init__.py +27 -0
  279. empathy_software_plugin/wizards/testing/coverage_analyzer.py +459 -0
  280. empathy_software_plugin/wizards/testing/quality_analyzer.py +531 -0
  281. empathy_software_plugin/wizards/testing/test_suggester.py +533 -0
  282. empathy_software_plugin/wizards/testing_wizard.py +274 -0
  283. hot_reload/README.md +473 -0
  284. hot_reload/__init__.py +62 -0
  285. hot_reload/config.py +84 -0
  286. hot_reload/integration.py +228 -0
  287. hot_reload/reloader.py +298 -0
  288. hot_reload/watcher.py +179 -0
  289. hot_reload/websocket.py +176 -0
  290. scaffolding/README.md +589 -0
  291. scaffolding/__init__.py +35 -0
  292. scaffolding/__main__.py +14 -0
  293. scaffolding/cli.py +240 -0
  294. test_generator/__init__.py +38 -0
  295. test_generator/__main__.py +14 -0
  296. test_generator/cli.py +226 -0
  297. test_generator/generator.py +325 -0
  298. test_generator/risk_analyzer.py +216 -0
  299. workflow_patterns/__init__.py +33 -0
  300. workflow_patterns/behavior.py +249 -0
  301. workflow_patterns/core.py +76 -0
  302. workflow_patterns/output.py +99 -0
  303. workflow_patterns/registry.py +255 -0
  304. workflow_patterns/structural.py +288 -0
  305. workflow_scaffolding/__init__.py +11 -0
  306. workflow_scaffolding/__main__.py +12 -0
  307. workflow_scaffolding/cli.py +206 -0
  308. workflow_scaffolding/generator.py +265 -0
  309. agents/code_inspection/patterns/inspection/recurring_B112.json +0 -18
  310. agents/code_inspection/patterns/inspection/recurring_F541.json +0 -16
  311. agents/code_inspection/patterns/inspection/recurring_FORMAT.json +0 -25
  312. agents/code_inspection/patterns/inspection/recurring_bug_20250822_def456.json +0 -16
  313. agents/code_inspection/patterns/inspection/recurring_bug_20250915_abc123.json +0 -16
  314. agents/code_inspection/patterns/inspection/recurring_bug_20251212_3c5b9951.json +0 -16
  315. agents/code_inspection/patterns/inspection/recurring_bug_20251212_97c0f72f.json +0 -16
  316. agents/code_inspection/patterns/inspection/recurring_bug_20251212_a0871d53.json +0 -16
  317. agents/code_inspection/patterns/inspection/recurring_bug_20251212_a9b6ec41.json +0 -16
  318. agents/code_inspection/patterns/inspection/recurring_bug_null_001.json +0 -16
  319. agents/code_inspection/patterns/inspection/recurring_builtin.json +0 -16
  320. agents/compliance_anticipation_agent.py +0 -1427
  321. agents/epic_integration_wizard.py +0 -541
  322. agents/trust_building_behaviors.py +0 -891
  323. empathy_framework-3.2.3.dist-info/RECORD +0 -104
  324. empathy_framework-3.2.3.dist-info/entry_points.txt +0 -7
  325. empathy_llm_toolkit/htmlcov/status.json +0 -1
  326. empathy_llm_toolkit/security/htmlcov/status.json +0 -1
  327. {empathy_framework-3.2.3.dist-info → empathy_framework-3.8.2.dist-info}/WHEEL +0 -0
  328. {empathy_framework-3.2.3.dist-info → empathy_framework-3.8.2.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,362 @@
1
+ """Healthcare Wizard - HIPAA-Compliant AI Assistant
2
+
3
+ Specialized wizard for healthcare applications with enhanced PHI protection,
4
+ mandatory encryption, comprehensive audit logging, and HIPAA compliance features.
5
+
6
+ Key Features:
7
+ - Enhanced PHI/PII detection (10+ medical patterns)
8
+ - Automatic de-identification before LLM processing
9
+ - Mandatory AES-256-GCM encryption for all data
10
+ - 90-day minimum retention (HIPAA §164.528)
11
+ - Comprehensive audit trail (HIPAA §164.312(b))
12
+ - Access control and permission enforcement
13
+ - Automatic classification as SENSITIVE
14
+
15
+ Reference:
16
+ - HIPAA Security Rule (45 CFR §164.312)
17
+ - HIPAA Privacy Rule (45 CFR §164.514)
18
+ - HITECH Act requirements
19
+
20
+ Copyright 2025 Smart AI Memory, LLC
21
+ Licensed under Fair Source 0.9
22
+ """
23
+
24
+ import logging
25
+ from typing import Any
26
+
27
+ from empathy_llm_toolkit import EmpathyLLM
28
+
29
+ from .base_wizard import BaseWizard, WizardConfig
30
+
31
+ logger = logging.getLogger(__name__)
32
+
33
+
34
+ # Enhanced PHI patterns for healthcare (beyond standard PII)
35
+ HEALTHCARE_PHI_PATTERNS = [
36
+ # Standard PII (enabled by default)
37
+ "email",
38
+ "phone",
39
+ "ssn",
40
+ "address",
41
+ "credit_card",
42
+ "ip_address",
43
+ # Healthcare-specific PHI
44
+ "mrn", # Medical Record Number
45
+ "patient_id", # Patient identifier
46
+ "dob", # Date of birth
47
+ "insurance_id", # Insurance/policy numbers
48
+ "provider_npi", # National Provider Identifier
49
+ "cpt_code", # Medical procedure codes
50
+ "icd_code", # Diagnosis codes
51
+ "medication_name", # Medication names (optional, configurable)
52
+ ]
53
+
54
+
55
+ class HealthcareWizard(BaseWizard):
56
+ """HIPAA-compliant healthcare AI assistant
57
+
58
+ Implements defense-in-depth security for Protected Health Information (PHI):
59
+ 1. Enhanced PHI detection and scrubbing
60
+ 2. Secrets detection (API keys, passwords in medical software configs)
61
+ 3. Mandatory encryption (AES-256-GCM)
62
+ 4. Comprehensive audit logging
63
+ 5. 90-day minimum retention
64
+ 6. Access control enforcement
65
+
66
+ Example:
67
+ >>> from empathy_llm_toolkit import EmpathyLLM
68
+ >>> from empathy_llm_toolkit.wizards import HealthcareWizard
69
+ >>>
70
+ >>> llm = EmpathyLLM(
71
+ ... provider="anthropic",
72
+ ... api_key=os.getenv("ANTHROPIC_API_KEY"),
73
+ ... enable_security=True,
74
+ ... )
75
+ >>>
76
+ >>> wizard = HealthcareWizard(llm)
77
+ >>>
78
+ >>> result = await wizard.process(
79
+ ... user_input="Patient John Doe (MRN 123456) needs follow-up",
80
+ ... user_id="doctor@hospital.com"
81
+ ... )
82
+ >>>
83
+ >>> print(result['security_report']['phi_removed']) # PHI was scrubbed
84
+
85
+ """
86
+
87
+ def __init__(
88
+ self,
89
+ llm: EmpathyLLM,
90
+ enable_medication_scrubbing: bool = False,
91
+ enable_diagnosis_scrubbing: bool = False,
92
+ custom_phi_patterns: list[str] | None = None,
93
+ ):
94
+ """Initialize HIPAA-compliant healthcare wizard
95
+
96
+ Args:
97
+ llm: EmpathyLLM instance (security should be enabled)
98
+ enable_medication_scrubbing: Scrub medication names (may reduce context)
99
+ enable_diagnosis_scrubbing: Scrub diagnosis codes (may reduce context)
100
+ custom_phi_patterns: Additional facility-specific PHI patterns
101
+
102
+ Note:
103
+ For maximum HIPAA compliance, llm should be initialized with
104
+ enable_security=True. This wizard enforces SENSITIVE classification
105
+ and 90-day retention regardless of LLM security settings.
106
+
107
+ """
108
+ # Build PHI pattern list
109
+ phi_patterns = HEALTHCARE_PHI_PATTERNS.copy()
110
+
111
+ if not enable_medication_scrubbing:
112
+ phi_patterns.remove("medication_name")
113
+ if not enable_diagnosis_scrubbing:
114
+ if "cpt_code" in phi_patterns:
115
+ phi_patterns.remove("cpt_code")
116
+ if "icd_code" in phi_patterns:
117
+ phi_patterns.remove("icd_code")
118
+
119
+ if custom_phi_patterns:
120
+ phi_patterns.extend(custom_phi_patterns)
121
+
122
+ # HIPAA-compliant configuration
123
+ config = WizardConfig(
124
+ name="Healthcare Assistant",
125
+ description="HIPAA-compliant AI assistant for healthcare professionals",
126
+ domain="healthcare",
127
+ # Empathy configuration
128
+ default_empathy_level=3, # Proactive - anticipates needs
129
+ # Security configuration (HIPAA requirements)
130
+ enable_security=True,
131
+ pii_patterns=phi_patterns,
132
+ enable_secrets_detection=True,
133
+ block_on_secrets=True, # CRITICAL: Block if secrets detected
134
+ # Audit configuration (HIPAA §164.312(b))
135
+ audit_all_access=True, # Log every interaction
136
+ retention_days=90, # HIPAA minimum for audit logs
137
+ # Classification (HIPAA §164.514)
138
+ default_classification="SENSITIVE", # PHI is always SENSITIVE
139
+ auto_classify=True,
140
+ )
141
+
142
+ super().__init__(llm, config)
143
+
144
+ # Verify security is enabled
145
+ if not llm.enable_security:
146
+ logger.warning(
147
+ "HealthcareWizard initialized with security DISABLED. "
148
+ "HIPAA compliance requires enable_security=True in EmpathyLLM.",
149
+ )
150
+
151
+ logger.info(
152
+ f"HealthcareWizard initialized: {len(phi_patterns)} PHI patterns, "
153
+ f"empathy level={config.default_empathy_level}, security={llm.enable_security}",
154
+ )
155
+
156
+ async def process(
157
+ self,
158
+ user_input: str,
159
+ user_id: str,
160
+ empathy_level: int | None = None,
161
+ session_context: dict[str, Any] | None = None,
162
+ patient_id: str | None = None,
163
+ ) -> dict[str, Any]:
164
+ """Process healthcare request with HIPAA compliance
165
+
166
+ Args:
167
+ user_input: Healthcare professional's message (may contain PHI)
168
+ user_id: Healthcare provider identifier (email, NPI, etc.)
169
+ empathy_level: Override default empathy level
170
+ session_context: Session metadata (encounter ID, facility, etc.)
171
+ patient_id: Patient identifier for audit trail (optional)
172
+
173
+ Returns:
174
+ Dict containing:
175
+ - response: De-identified AI response
176
+ - security_report: PHI scrubbing and security scan results
177
+ - empathy_level: Level used
178
+ - hipaa_compliance: Compliance status
179
+ - audit_event_id: Audit trail event ID
180
+
181
+ Raises:
182
+ SecurityError: If secrets detected in input
183
+ ValueError: If invalid user_id or parameters
184
+
185
+ """
186
+ # Enhance session context with patient ID for audit trail
187
+ if patient_id:
188
+ if session_context is None:
189
+ session_context = {}
190
+ session_context["patient_id"] = patient_id
191
+
192
+ # Log PHI access
193
+ self.logger.info(
194
+ f"PHI access: user={user_id}, wizard={self.config.name}, "
195
+ f"patient={patient_id}, audit=True",
196
+ )
197
+
198
+ # Process through base wizard (handles security pipeline)
199
+ result = await super().process(
200
+ user_input=user_input,
201
+ user_id=user_id,
202
+ empathy_level=empathy_level,
203
+ session_context=session_context,
204
+ )
205
+
206
+ # Add HIPAA compliance metadata
207
+ result["hipaa_compliance"] = {
208
+ "phi_detected": result.get("security_report", {}).get("pii_count", 0) > 0,
209
+ "phi_scrubbed": True if self.llm.enable_security else False,
210
+ "encrypted": result.get("security_report", {}).get("encrypted", False),
211
+ "audit_logged": True,
212
+ "retention_days": self.config.retention_days,
213
+ "classification": "SENSITIVE",
214
+ }
215
+
216
+ # Log completion
217
+ self.logger.info(
218
+ f"PHI processing complete: user={user_id}, "
219
+ f"detected={result['hipaa_compliance']['phi_detected']}, "
220
+ f"scrubbed={result['hipaa_compliance']['phi_scrubbed']}",
221
+ )
222
+
223
+ return result
224
+
225
+ def _build_system_prompt(self, user_input: str = "") -> str:
226
+ """Build HIPAA-aware system prompt for healthcare domain
227
+
228
+ Includes:
229
+ - Healthcare domain knowledge
230
+ - HIPAA compliance reminders
231
+ - Clinical communication best practices
232
+ - Patient privacy emphasis
233
+
234
+ Uses XML-enhanced prompts if enabled for improved reliability
235
+ and reduced hallucinations (critical for HIPAA compliance).
236
+ """
237
+ # Check if XML prompts are enabled
238
+ if self._is_xml_enabled():
239
+ # Use XML-enhanced prompt for better structure and HIPAA compliance
240
+ return self._render_xml_prompt(
241
+ role="HIPAA-compliant AI healthcare assistant for clinical decision support",
242
+ goal="Assist healthcare professionals with evidence-based clinical guidance while maintaining strict HIPAA compliance and patient safety",
243
+ instructions=[
244
+ "Provide clinical decision support based on current evidence-based guidelines",
245
+ "Support clinical documentation following standardized formats (SBAR, SOAP, etc.)",
246
+ "Help with care coordination and patient management workflows",
247
+ "Use standardized medical terminology (ICD-10, CPT, SNOMED) where appropriate",
248
+ "Acknowledge limitations and suggest specialist consultation when needed",
249
+ "Maintain professional, empathetic communication",
250
+ ],
251
+ constraints=[
252
+ "CRITICAL: All PHI is automatically de-identified - never request or display patient identifiers",
253
+ "You are a decision support tool, NOT a replacement for professional clinical judgment",
254
+ "NEVER diagnose or prescribe - support licensed healthcare providers who do",
255
+ "In emergencies, direct to appropriate emergency services immediately",
256
+ "Focus on clinical reasoning and evidence-based medicine",
257
+ "Patient safety and privacy are paramount - all interactions logged for HIPAA compliance",
258
+ ],
259
+ input_type="clinical_query",
260
+ input_payload=user_input if user_input else "[Healthcare professional query]",
261
+ extra={
262
+ "domain": "Healthcare / Clinical Medicine",
263
+ "compliance": "HIPAA §164.312 (Security Rule), §164.514 (Privacy Rule)",
264
+ "empathy_level": self.config.default_empathy_level,
265
+ "phi_detection_enabled": len(self.config.pii_patterns),
266
+ },
267
+ )
268
+ else:
269
+ # Fallback to legacy plain text prompt
270
+ return """You are a HIPAA-compliant AI healthcare assistant.
271
+
272
+ **Domain**: Healthcare / Clinical Medicine
273
+
274
+ **Your Role**:
275
+ - Assist healthcare professionals with clinical decision support
276
+ - Provide evidence-based medical information
277
+ - Support clinical documentation and communication
278
+ - Help with care coordination and patient management
279
+
280
+ **HIPAA Compliance**:
281
+ - All patient data (PHI) is automatically de-identified before you see it
282
+ - Never request or display patient identifiers in your responses
283
+ - Focus on clinical reasoning and medical knowledge
284
+ - Maintain patient confidentiality at all times
285
+
286
+ **Clinical Guidelines**:
287
+ - Base recommendations on current evidence-based guidelines
288
+ - Acknowledge limitations and suggest consulting specialists when appropriate
289
+ - Use standardized medical terminology (ICD-10, CPT, SNOMED)
290
+ - Follow clinical communication best practices (SBAR, SOAP, etc.)
291
+
292
+ **Communication Style**:
293
+ - Professional and empathetic
294
+ - Clear and concise
295
+ - Evidence-based
296
+ - Action-oriented when appropriate
297
+
298
+ **Important Disclaimers**:
299
+ - You are a clinical decision support tool, not a replacement for professional judgment
300
+ - Always defer to licensed healthcare providers for final decisions
301
+ - In emergencies, direct users to appropriate emergency services
302
+ - Do not diagnose or prescribe - support healthcare professionals who do
303
+
304
+ Remember: Patient safety and privacy are paramount. Interactions are logged for HIPAA compliance.
305
+ """
306
+
307
+ def get_phi_patterns(self) -> list[str]:
308
+ """Get list of PHI patterns being detected"""
309
+ return self.config.pii_patterns.copy()
310
+
311
+ def get_hipaa_compliance_status(self) -> dict[str, Any]:
312
+ """Get HIPAA compliance status for this wizard
313
+
314
+ Returns:
315
+ Dict with compliance checks and recommendations
316
+
317
+ """
318
+ status: dict[str, Any] = {
319
+ "compliant": True,
320
+ "checks": {},
321
+ "recommendations": [],
322
+ }
323
+
324
+ # Check 1: Security enabled
325
+ status["checks"]["security_enabled"] = self.llm.enable_security
326
+ if not self.llm.enable_security:
327
+ status["compliant"] = False
328
+ status["recommendations"].append(
329
+ "Enable security in EmpathyLLM (enable_security=True) for HIPAA compliance",
330
+ )
331
+
332
+ # Check 2: Encryption for SENSITIVE data
333
+ # Note: Encryption is handled by SecureMemDocsIntegration, not directly by EmpathyLLM
334
+ status["checks"]["encryption_enabled"] = self.llm.enable_security
335
+ if not status["checks"]["encryption_enabled"]:
336
+ status["recommendations"].append(
337
+ "Enable encryption for SENSITIVE data (HIPAA §164.312(a)(2)(iv))",
338
+ )
339
+
340
+ # Check 3: Audit logging
341
+ status["checks"]["audit_logging"] = (
342
+ self.llm.enable_security and self.config.audit_all_access
343
+ )
344
+ if not status["checks"]["audit_logging"]:
345
+ status["compliant"] = False
346
+ status["recommendations"].append(
347
+ "Enable comprehensive audit logging (HIPAA §164.312(b))",
348
+ )
349
+
350
+ # Check 4: PHI detection
351
+ status["checks"]["phi_detection"] = len(self.config.pii_patterns) >= 10
352
+ if not status["checks"]["phi_detection"]:
353
+ status["recommendations"].append("Enable comprehensive PHI detection patterns")
354
+
355
+ # Check 5: Minimum retention
356
+ status["checks"]["retention_policy"] = self.config.retention_days >= 90
357
+ if not status["checks"]["retention_policy"]:
358
+ status["recommendations"].append(
359
+ "Set minimum 90-day retention for audit logs (HIPAA §164.528)",
360
+ )
361
+
362
+ return status
@@ -0,0 +1,64 @@
1
+ # Patient Assessment Wizard
2
+
3
+ **Domain:** healthcare
4
+ **Type:** Wizard
5
+ **Generated:** Pattern-Compose Methodology
6
+
7
+ ## Overview
8
+
9
+ Auto-generated wizard using proven patterns from the Empathy Framework.
10
+
11
+ ## Patterns Used
12
+
13
+ - **Empathy Level**: 0-4 empathy level configuration
14
+ - **User Guidance**: Help text, examples, and prompts
15
+ - **Linear Flow**: Step-by-step wizard with review and approval
16
+ - **Structured Fields**: Predefined fields per step with validation
17
+ - **Step Validation**: Ensure steps are completed in order
18
+ - **User Approval**: Preview → Explicit Approval → Finalize
19
+ - **Educational Banner**: Safety notices and educational content
20
+ - **AI Enhancement**: Improve user input with AI
21
+ - **Config Validation**: Validate wizard configuration on initialization
22
+ - **Session-Based**: State management with session storage
23
+
24
+ ## Usage
25
+
26
+ ```python
27
+ from wizards.patient_assessment_wizard import PatientAssessmentWizard
28
+
29
+ wizard = PatientAssessmentWizard()
30
+ result = await wizard.process(user_input="...")
31
+ ```
32
+
33
+ ## API Endpoints
34
+
35
+ ```bash
36
+ # Process with wizard
37
+ POST /api/wizard/patient_assessment/process
38
+ {
39
+ "input": "your input here",
40
+ "context": {}
41
+ }
42
+ ```
43
+
44
+ ## Testing
45
+
46
+ ```bash
47
+ # Run unit tests
48
+ pytest tests/unit/wizards/test_patient_assessment_wizard.py
49
+
50
+ # Run with coverage
51
+ pytest tests/unit/wizards/test_patient_assessment_wizard.py --cov
52
+ ```
53
+
54
+ ## Next Steps
55
+
56
+ 1. Customize wizard logic as needed
57
+ 2. Add domain-specific validation
58
+ 3. Extend with additional features
59
+ 4. Update tests for custom logic
60
+
61
+ ---
62
+
63
+ **Generated by:** Empathy Framework - Wizard Factory
64
+ **Methodology:** Pattern-Compose
@@ -0,0 +1,193 @@
1
+ """PatientAssessmentWizard - Generated by Pattern-Compose
2
+
3
+ Domain: healthcare
4
+ Patterns: empathy_level, user_guidance, linear_flow, structured_fields, step_validation, approval, educational_banner, ai_enhancement, config_validation, session_based
5
+ Generated: Auto-generated by Empathy Framework
6
+ """
7
+
8
+ from datetime import datetime
9
+ from typing import Any
10
+ from uuid import uuid4
11
+
12
+ from fastapi import APIRouter, HTTPException
13
+ from pydantic import BaseModel
14
+
15
+ router = APIRouter(
16
+ prefix="/wizards/patient_assessment",
17
+ tags=["wizards"],
18
+ )
19
+
20
+
21
+ # Request/Response Models
22
+ class WizardRequest(BaseModel):
23
+ """Request model for wizard."""
24
+
25
+ input: str
26
+ context: dict[str, Any] | None = None
27
+
28
+
29
+ class WizardResponse(BaseModel):
30
+ """Response model for wizard."""
31
+
32
+ success: bool
33
+ output: str
34
+ wizard_id: str | None = None
35
+ error: str | None = None
36
+
37
+
38
+ # Session storage (Redis in production, memory for development)
39
+ _wizard_sessions: dict[str, dict[str, Any]] = {}
40
+
41
+
42
+ @router.post("/start")
43
+ async def start_wizard():
44
+ """Start patient_assessment wizard session.
45
+
46
+ Returns wizard_id and first step configuration.
47
+ """
48
+ wizard_id = str(uuid4())
49
+
50
+ session_data = {
51
+ "wizard_id": wizard_id,
52
+ "wizard_type": "patient_assessment",
53
+ "current_step": 1,
54
+ "total_steps": 5, # TODO: Adjust based on your wizard
55
+ "collected_data": {},
56
+ "created_at": datetime.now().isoformat(),
57
+ }
58
+
59
+ _wizard_sessions[wizard_id] = session_data
60
+
61
+ return {
62
+ "wizard_id": wizard_id,
63
+ "current_step": 1,
64
+ "total_steps": 5,
65
+ "message": "Wizard started successfully",
66
+ }
67
+
68
+
69
+ @router.post("/{wizard_id}/step")
70
+ async def submit_step(wizard_id: str, step_data: dict[str, Any]):
71
+ """Submit data for current step.
72
+
73
+ Validates step sequence and stores data.
74
+ """
75
+ if wizard_id not in _wizard_sessions:
76
+ raise HTTPException(404, "Wizard session not found")
77
+
78
+ session = _wizard_sessions[wizard_id]
79
+ current_step = session["current_step"]
80
+ total_steps = session["total_steps"]
81
+
82
+ # Validate step number
83
+ submitted_step = step_data.get("step", current_step)
84
+ if submitted_step != current_step:
85
+ raise HTTPException(422, f"Expected step {current_step}, got step {submitted_step}")
86
+
87
+ # Store data
88
+ session["collected_data"].update(step_data.get("data", {}))
89
+ session["updated_at"] = datetime.now().isoformat()
90
+
91
+ # Advance to next step
92
+ if current_step < total_steps:
93
+ session["current_step"] = current_step + 1
94
+
95
+ return {
96
+ "wizard_id": wizard_id,
97
+ "current_step": session["current_step"],
98
+ "total_steps": total_steps,
99
+ "message": f"Step {current_step} completed",
100
+ }
101
+
102
+
103
+ @router.post("/{wizard_id}/preview")
104
+ async def preview_report(wizard_id: str):
105
+ """Generate preview without finalizing.
106
+
107
+ Allows user to review before explicit approval.
108
+ """
109
+ if wizard_id not in _wizard_sessions:
110
+ raise HTTPException(404, "Wizard session not found")
111
+
112
+ session = _wizard_sessions[wizard_id]
113
+
114
+ if session["current_step"] != session["total_steps"]:
115
+ raise HTTPException(400, "Complete all steps before preview")
116
+
117
+ # Generate preview
118
+ preview = _generate_report(session["collected_data"])
119
+ session["preview_report"] = preview
120
+ session["preview_generated_at"] = datetime.now().isoformat()
121
+
122
+ return {
123
+ "preview": preview,
124
+ "message": "Preview generated. Review and approve to finalize.",
125
+ }
126
+
127
+
128
+ @router.post("/{wizard_id}/save")
129
+ async def save_report(wizard_id: str, approval: dict[str, Any]):
130
+ """Finalize report with user approval.
131
+
132
+ Requires preview generated and explicit user approval.
133
+ """
134
+ if wizard_id not in _wizard_sessions:
135
+ raise HTTPException(404, "Wizard session not found")
136
+
137
+ session = _wizard_sessions[wizard_id]
138
+
139
+ # Verify preview generated
140
+ if "preview_report" not in session:
141
+ raise HTTPException(400, "Must generate preview before saving. Call /preview first.")
142
+
143
+ # Verify user approval
144
+ if not approval.get("user_approved", False):
145
+ raise HTTPException(400, "User approval required. Set 'user_approved': true")
146
+
147
+ # Mark as complete
148
+ session["completed"] = True
149
+ session["completed_at"] = datetime.now().isoformat()
150
+ session["final_report"] = session["preview_report"]
151
+
152
+ return {
153
+ "wizard_id": wizard_id,
154
+ "completed": True,
155
+ "report": session["final_report"],
156
+ "message": "Report finalized successfully",
157
+ }
158
+
159
+
160
+ @router.get("/{wizard_id}/report")
161
+ async def get_report(wizard_id: str):
162
+ """Retrieve completed report.
163
+
164
+ Only available after wizard is completed.
165
+ """
166
+ if wizard_id not in _wizard_sessions:
167
+ raise HTTPException(404, "Wizard session not found")
168
+
169
+ session = _wizard_sessions[wizard_id]
170
+
171
+ if not session.get("completed", False):
172
+ raise HTTPException(422, "Wizard not yet completed")
173
+
174
+ return {
175
+ "wizard_id": wizard_id,
176
+ "report": _generate_report(session["collected_data"]),
177
+ }
178
+
179
+
180
+ def _generate_report(collected_data: dict[str, Any]) -> dict[str, Any]:
181
+ """Generate report from collected data.
182
+
183
+ TODO: Customize report generation for your wizard.
184
+ """
185
+ return {
186
+ "data": collected_data,
187
+ "generated_at": datetime.now().isoformat(),
188
+ "wizard_type": "patient_assessment",
189
+ }
190
+
191
+
192
+ # Export router
193
+ __all__ = ["router"]