empathy-framework 3.7.0__py3-none-any.whl → 3.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 (267) hide show
  1. coach_wizards/code_reviewer_README.md +60 -0
  2. coach_wizards/code_reviewer_wizard.py +180 -0
  3. {empathy_framework-3.7.0.dist-info → empathy_framework-3.7.1.dist-info}/METADATA +20 -2
  4. empathy_framework-3.7.1.dist-info/RECORD +327 -0
  5. {empathy_framework-3.7.0.dist-info → empathy_framework-3.7.1.dist-info}/top_level.txt +5 -1
  6. empathy_healthcare_plugin/monitors/__init__.py +9 -0
  7. empathy_healthcare_plugin/monitors/clinical_protocol_monitor.py +315 -0
  8. empathy_healthcare_plugin/monitors/monitoring/__init__.py +44 -0
  9. empathy_healthcare_plugin/monitors/monitoring/protocol_checker.py +300 -0
  10. empathy_healthcare_plugin/monitors/monitoring/protocol_loader.py +214 -0
  11. empathy_healthcare_plugin/monitors/monitoring/sensor_parsers.py +306 -0
  12. empathy_healthcare_plugin/monitors/monitoring/trajectory_analyzer.py +389 -0
  13. empathy_llm_toolkit/agent_factory/__init__.py +53 -0
  14. empathy_llm_toolkit/agent_factory/adapters/__init__.py +85 -0
  15. empathy_llm_toolkit/agent_factory/adapters/autogen_adapter.py +312 -0
  16. empathy_llm_toolkit/agent_factory/adapters/crewai_adapter.py +454 -0
  17. empathy_llm_toolkit/agent_factory/adapters/haystack_adapter.py +298 -0
  18. empathy_llm_toolkit/agent_factory/adapters/langchain_adapter.py +362 -0
  19. empathy_llm_toolkit/agent_factory/adapters/langgraph_adapter.py +333 -0
  20. empathy_llm_toolkit/agent_factory/adapters/native.py +228 -0
  21. empathy_llm_toolkit/agent_factory/adapters/wizard_adapter.py +426 -0
  22. empathy_llm_toolkit/agent_factory/base.py +305 -0
  23. empathy_llm_toolkit/agent_factory/crews/__init__.py +67 -0
  24. empathy_llm_toolkit/agent_factory/crews/code_review.py +1113 -0
  25. empathy_llm_toolkit/agent_factory/crews/health_check.py +1246 -0
  26. empathy_llm_toolkit/agent_factory/crews/refactoring.py +1128 -0
  27. empathy_llm_toolkit/agent_factory/crews/security_audit.py +1018 -0
  28. empathy_llm_toolkit/agent_factory/decorators.py +286 -0
  29. empathy_llm_toolkit/agent_factory/factory.py +558 -0
  30. empathy_llm_toolkit/agent_factory/framework.py +192 -0
  31. empathy_llm_toolkit/agent_factory/memory_integration.py +324 -0
  32. empathy_llm_toolkit/agent_factory/resilient.py +320 -0
  33. empathy_llm_toolkit/cli/__init__.py +8 -0
  34. empathy_llm_toolkit/cli/sync_claude.py +487 -0
  35. empathy_llm_toolkit/code_health.py +150 -3
  36. empathy_llm_toolkit/config/__init__.py +29 -0
  37. empathy_llm_toolkit/config/unified.py +295 -0
  38. empathy_llm_toolkit/routing/__init__.py +32 -0
  39. empathy_llm_toolkit/routing/model_router.py +362 -0
  40. empathy_llm_toolkit/security/IMPLEMENTATION_SUMMARY.md +413 -0
  41. empathy_llm_toolkit/security/PHASE2_COMPLETE.md +384 -0
  42. empathy_llm_toolkit/security/PHASE2_SECRETS_DETECTOR_COMPLETE.md +271 -0
  43. empathy_llm_toolkit/security/QUICK_REFERENCE.md +316 -0
  44. empathy_llm_toolkit/security/README.md +262 -0
  45. empathy_llm_toolkit/security/__init__.py +62 -0
  46. empathy_llm_toolkit/security/audit_logger.py +929 -0
  47. empathy_llm_toolkit/security/audit_logger_example.py +152 -0
  48. empathy_llm_toolkit/security/pii_scrubber.py +640 -0
  49. empathy_llm_toolkit/security/secrets_detector.py +678 -0
  50. empathy_llm_toolkit/security/secrets_detector_example.py +304 -0
  51. empathy_llm_toolkit/security/secure_memdocs.py +1192 -0
  52. empathy_llm_toolkit/security/secure_memdocs_example.py +278 -0
  53. empathy_llm_toolkit/wizards/__init__.py +38 -0
  54. empathy_llm_toolkit/wizards/base_wizard.py +364 -0
  55. empathy_llm_toolkit/wizards/customer_support_wizard.py +190 -0
  56. empathy_llm_toolkit/wizards/healthcare_wizard.py +362 -0
  57. empathy_llm_toolkit/wizards/patient_assessment_README.md +64 -0
  58. empathy_llm_toolkit/wizards/patient_assessment_wizard.py +193 -0
  59. empathy_llm_toolkit/wizards/technology_wizard.py +194 -0
  60. empathy_os/__init__.py +52 -52
  61. empathy_os/adaptive/__init__.py +13 -0
  62. empathy_os/adaptive/task_complexity.py +127 -0
  63. empathy_os/cli.py +118 -8
  64. empathy_os/cli_unified.py +121 -1
  65. empathy_os/config/__init__.py +63 -0
  66. empathy_os/config/xml_config.py +239 -0
  67. empathy_os/dashboard/__init__.py +15 -0
  68. empathy_os/dashboard/server.py +743 -0
  69. empathy_os/memory/__init__.py +195 -0
  70. empathy_os/memory/claude_memory.py +466 -0
  71. empathy_os/memory/config.py +224 -0
  72. empathy_os/memory/control_panel.py +1298 -0
  73. empathy_os/memory/edges.py +179 -0
  74. empathy_os/memory/graph.py +567 -0
  75. empathy_os/memory/long_term.py +1193 -0
  76. empathy_os/memory/nodes.py +179 -0
  77. empathy_os/memory/redis_bootstrap.py +540 -0
  78. empathy_os/memory/security/__init__.py +31 -0
  79. empathy_os/memory/security/audit_logger.py +930 -0
  80. empathy_os/memory/security/pii_scrubber.py +640 -0
  81. empathy_os/memory/security/secrets_detector.py +678 -0
  82. empathy_os/memory/short_term.py +2119 -0
  83. empathy_os/memory/storage/__init__.py +15 -0
  84. empathy_os/memory/summary_index.py +583 -0
  85. empathy_os/memory/unified.py +619 -0
  86. empathy_os/metrics/__init__.py +12 -0
  87. empathy_os/metrics/prompt_metrics.py +190 -0
  88. empathy_os/models/__init__.py +136 -0
  89. empathy_os/models/__main__.py +13 -0
  90. empathy_os/models/cli.py +655 -0
  91. empathy_os/models/empathy_executor.py +354 -0
  92. empathy_os/models/executor.py +252 -0
  93. empathy_os/models/fallback.py +671 -0
  94. empathy_os/models/provider_config.py +563 -0
  95. empathy_os/models/registry.py +382 -0
  96. empathy_os/models/tasks.py +302 -0
  97. empathy_os/models/telemetry.py +548 -0
  98. empathy_os/models/token_estimator.py +378 -0
  99. empathy_os/models/validation.py +274 -0
  100. empathy_os/monitoring/__init__.py +52 -0
  101. empathy_os/monitoring/alerts.py +23 -0
  102. empathy_os/monitoring/alerts_cli.py +268 -0
  103. empathy_os/monitoring/multi_backend.py +271 -0
  104. empathy_os/monitoring/otel_backend.py +363 -0
  105. empathy_os/optimization/__init__.py +19 -0
  106. empathy_os/optimization/context_optimizer.py +272 -0
  107. empathy_os/plugins/__init__.py +28 -0
  108. empathy_os/plugins/base.py +361 -0
  109. empathy_os/plugins/registry.py +268 -0
  110. empathy_os/project_index/__init__.py +30 -0
  111. empathy_os/project_index/cli.py +335 -0
  112. empathy_os/project_index/crew_integration.py +430 -0
  113. empathy_os/project_index/index.py +425 -0
  114. empathy_os/project_index/models.py +501 -0
  115. empathy_os/project_index/reports.py +473 -0
  116. empathy_os/project_index/scanner.py +538 -0
  117. empathy_os/prompts/__init__.py +61 -0
  118. empathy_os/prompts/config.py +77 -0
  119. empathy_os/prompts/context.py +177 -0
  120. empathy_os/prompts/parser.py +285 -0
  121. empathy_os/prompts/registry.py +313 -0
  122. empathy_os/prompts/templates.py +208 -0
  123. empathy_os/resilience/__init__.py +56 -0
  124. empathy_os/resilience/circuit_breaker.py +256 -0
  125. empathy_os/resilience/fallback.py +179 -0
  126. empathy_os/resilience/health.py +300 -0
  127. empathy_os/resilience/retry.py +209 -0
  128. empathy_os/resilience/timeout.py +135 -0
  129. empathy_os/routing/__init__.py +43 -0
  130. empathy_os/routing/chain_executor.py +433 -0
  131. empathy_os/routing/classifier.py +217 -0
  132. empathy_os/routing/smart_router.py +234 -0
  133. empathy_os/routing/wizard_registry.py +307 -0
  134. empathy_os/trust/__init__.py +28 -0
  135. empathy_os/trust/circuit_breaker.py +579 -0
  136. empathy_os/validation/__init__.py +19 -0
  137. empathy_os/validation/xml_validator.py +281 -0
  138. empathy_os/wizard_factory_cli.py +170 -0
  139. empathy_os/workflows/__init__.py +360 -0
  140. empathy_os/workflows/base.py +1530 -0
  141. empathy_os/workflows/bug_predict.py +962 -0
  142. empathy_os/workflows/code_review.py +960 -0
  143. empathy_os/workflows/code_review_adapters.py +310 -0
  144. empathy_os/workflows/code_review_pipeline.py +720 -0
  145. empathy_os/workflows/config.py +600 -0
  146. empathy_os/workflows/dependency_check.py +648 -0
  147. empathy_os/workflows/document_gen.py +1069 -0
  148. empathy_os/workflows/documentation_orchestrator.py +1205 -0
  149. empathy_os/workflows/health_check.py +679 -0
  150. empathy_os/workflows/keyboard_shortcuts/__init__.py +39 -0
  151. empathy_os/workflows/keyboard_shortcuts/generators.py +386 -0
  152. empathy_os/workflows/keyboard_shortcuts/parsers.py +414 -0
  153. empathy_os/workflows/keyboard_shortcuts/prompts.py +295 -0
  154. empathy_os/workflows/keyboard_shortcuts/schema.py +193 -0
  155. empathy_os/workflows/keyboard_shortcuts/workflow.py +505 -0
  156. empathy_os/workflows/manage_documentation.py +804 -0
  157. empathy_os/workflows/new_sample_workflow1.py +146 -0
  158. empathy_os/workflows/new_sample_workflow1_README.md +150 -0
  159. empathy_os/workflows/perf_audit.py +687 -0
  160. empathy_os/workflows/pr_review.py +748 -0
  161. empathy_os/workflows/progress.py +445 -0
  162. empathy_os/workflows/progress_server.py +322 -0
  163. empathy_os/workflows/refactor_plan.py +691 -0
  164. empathy_os/workflows/release_prep.py +808 -0
  165. empathy_os/workflows/research_synthesis.py +404 -0
  166. empathy_os/workflows/secure_release.py +585 -0
  167. empathy_os/workflows/security_adapters.py +297 -0
  168. empathy_os/workflows/security_audit.py +1050 -0
  169. empathy_os/workflows/step_config.py +234 -0
  170. empathy_os/workflows/test5.py +125 -0
  171. empathy_os/workflows/test5_README.md +158 -0
  172. empathy_os/workflows/test_gen.py +1855 -0
  173. empathy_os/workflows/test_lifecycle.py +526 -0
  174. empathy_os/workflows/test_maintenance.py +626 -0
  175. empathy_os/workflows/test_maintenance_cli.py +590 -0
  176. empathy_os/workflows/test_maintenance_crew.py +821 -0
  177. empathy_os/workflows/xml_enhanced_crew.py +285 -0
  178. empathy_software_plugin/cli/__init__.py +120 -0
  179. empathy_software_plugin/cli/inspect.py +362 -0
  180. empathy_software_plugin/cli.py +3 -1
  181. empathy_software_plugin/wizards/__init__.py +42 -0
  182. empathy_software_plugin/wizards/advanced_debugging_wizard.py +392 -0
  183. empathy_software_plugin/wizards/agent_orchestration_wizard.py +511 -0
  184. empathy_software_plugin/wizards/ai_collaboration_wizard.py +503 -0
  185. empathy_software_plugin/wizards/ai_context_wizard.py +441 -0
  186. empathy_software_plugin/wizards/ai_documentation_wizard.py +503 -0
  187. empathy_software_plugin/wizards/base_wizard.py +288 -0
  188. empathy_software_plugin/wizards/book_chapter_wizard.py +519 -0
  189. empathy_software_plugin/wizards/code_review_wizard.py +606 -0
  190. empathy_software_plugin/wizards/debugging/__init__.py +50 -0
  191. empathy_software_plugin/wizards/debugging/bug_risk_analyzer.py +414 -0
  192. empathy_software_plugin/wizards/debugging/config_loaders.py +442 -0
  193. empathy_software_plugin/wizards/debugging/fix_applier.py +469 -0
  194. empathy_software_plugin/wizards/debugging/language_patterns.py +383 -0
  195. empathy_software_plugin/wizards/debugging/linter_parsers.py +470 -0
  196. empathy_software_plugin/wizards/debugging/verification.py +369 -0
  197. empathy_software_plugin/wizards/enhanced_testing_wizard.py +537 -0
  198. empathy_software_plugin/wizards/memory_enhanced_debugging_wizard.py +816 -0
  199. empathy_software_plugin/wizards/multi_model_wizard.py +501 -0
  200. empathy_software_plugin/wizards/pattern_extraction_wizard.py +422 -0
  201. empathy_software_plugin/wizards/pattern_retriever_wizard.py +400 -0
  202. empathy_software_plugin/wizards/performance/__init__.py +9 -0
  203. empathy_software_plugin/wizards/performance/bottleneck_detector.py +221 -0
  204. empathy_software_plugin/wizards/performance/profiler_parsers.py +278 -0
  205. empathy_software_plugin/wizards/performance/trajectory_analyzer.py +429 -0
  206. empathy_software_plugin/wizards/performance_profiling_wizard.py +305 -0
  207. empathy_software_plugin/wizards/prompt_engineering_wizard.py +425 -0
  208. empathy_software_plugin/wizards/rag_pattern_wizard.py +461 -0
  209. empathy_software_plugin/wizards/security/__init__.py +32 -0
  210. empathy_software_plugin/wizards/security/exploit_analyzer.py +290 -0
  211. empathy_software_plugin/wizards/security/owasp_patterns.py +241 -0
  212. empathy_software_plugin/wizards/security/vulnerability_scanner.py +604 -0
  213. empathy_software_plugin/wizards/security_analysis_wizard.py +322 -0
  214. empathy_software_plugin/wizards/security_learning_wizard.py +740 -0
  215. empathy_software_plugin/wizards/tech_debt_wizard.py +726 -0
  216. empathy_software_plugin/wizards/testing/__init__.py +27 -0
  217. empathy_software_plugin/wizards/testing/coverage_analyzer.py +459 -0
  218. empathy_software_plugin/wizards/testing/quality_analyzer.py +531 -0
  219. empathy_software_plugin/wizards/testing/test_suggester.py +533 -0
  220. empathy_software_plugin/wizards/testing_wizard.py +274 -0
  221. hot_reload/README.md +473 -0
  222. hot_reload/__init__.py +62 -0
  223. hot_reload/config.py +84 -0
  224. hot_reload/integration.py +228 -0
  225. hot_reload/reloader.py +298 -0
  226. hot_reload/watcher.py +179 -0
  227. hot_reload/websocket.py +176 -0
  228. scaffolding/README.md +589 -0
  229. scaffolding/__init__.py +35 -0
  230. scaffolding/__main__.py +14 -0
  231. scaffolding/cli.py +240 -0
  232. test_generator/__init__.py +38 -0
  233. test_generator/__main__.py +14 -0
  234. test_generator/cli.py +226 -0
  235. test_generator/generator.py +325 -0
  236. test_generator/risk_analyzer.py +216 -0
  237. workflow_patterns/__init__.py +33 -0
  238. workflow_patterns/behavior.py +249 -0
  239. workflow_patterns/core.py +76 -0
  240. workflow_patterns/output.py +99 -0
  241. workflow_patterns/registry.py +255 -0
  242. workflow_patterns/structural.py +288 -0
  243. workflow_scaffolding/__init__.py +11 -0
  244. workflow_scaffolding/__main__.py +12 -0
  245. workflow_scaffolding/cli.py +206 -0
  246. workflow_scaffolding/generator.py +265 -0
  247. agents/code_inspection/patterns/inspection/recurring_B112.json +0 -18
  248. agents/code_inspection/patterns/inspection/recurring_F541.json +0 -16
  249. agents/code_inspection/patterns/inspection/recurring_FORMAT.json +0 -25
  250. agents/code_inspection/patterns/inspection/recurring_bug_20250822_def456.json +0 -16
  251. agents/code_inspection/patterns/inspection/recurring_bug_20250915_abc123.json +0 -16
  252. agents/code_inspection/patterns/inspection/recurring_bug_20251212_3c5b9951.json +0 -16
  253. agents/code_inspection/patterns/inspection/recurring_bug_20251212_97c0f72f.json +0 -16
  254. agents/code_inspection/patterns/inspection/recurring_bug_20251212_a0871d53.json +0 -16
  255. agents/code_inspection/patterns/inspection/recurring_bug_20251212_a9b6ec41.json +0 -16
  256. agents/code_inspection/patterns/inspection/recurring_bug_null_001.json +0 -16
  257. agents/code_inspection/patterns/inspection/recurring_builtin.json +0 -16
  258. agents/compliance_anticipation_agent.py +0 -1422
  259. agents/compliance_db.py +0 -339
  260. agents/epic_integration_wizard.py +0 -530
  261. agents/notifications.py +0 -291
  262. agents/trust_building_behaviors.py +0 -872
  263. empathy_framework-3.7.0.dist-info/RECORD +0 -105
  264. {empathy_framework-3.7.0.dist-info → empathy_framework-3.7.1.dist-info}/WHEEL +0 -0
  265. {empathy_framework-3.7.0.dist-info → empathy_framework-3.7.1.dist-info}/entry_points.txt +0 -0
  266. {empathy_framework-3.7.0.dist-info → empathy_framework-3.7.1.dist-info}/licenses/LICENSE +0 -0
  267. /empathy_os/{monitoring.py → agent_monitoring.py} +0 -0
@@ -0,0 +1,360 @@
1
+ """Multi-Model Workflow Templates for Empathy Framework
2
+
3
+ Cost-optimized workflow patterns that leverage 3-tier model routing:
4
+ - Haiku (cheap): Summarization, classification, triage
5
+ - Sonnet (capable): Analysis, code generation, security review
6
+ - Opus (premium): Synthesis, architectural decisions, coordination
7
+
8
+ Usage:
9
+ from empathy_os.workflows import ResearchSynthesisWorkflow
10
+
11
+ workflow = ResearchSynthesisWorkflow()
12
+ result = await workflow.execute(
13
+ sources=["doc1.md", "doc2.md"],
14
+ question="What are the key patterns?"
15
+ )
16
+
17
+ print(f"Cost: ${result.cost_report.total_cost:.4f}")
18
+ print(f"Saved: {result.cost_report.savings_percent:.1f}% vs premium-only")
19
+
20
+ Workflow Discovery:
21
+ Workflows can be discovered via entry points (pyproject.toml):
22
+
23
+ [project.entry-points."empathy.workflows"]
24
+ my-workflow = "my_package.workflows:MyWorkflow"
25
+
26
+ Then call discover_workflows() to load all registered workflows.
27
+
28
+ Copyright 2025 Smart-AI-Memory
29
+ Licensed under Fair Source License 0.9
30
+ """
31
+
32
+ import importlib.metadata
33
+ import importlib.util
34
+ import os
35
+ from typing import TYPE_CHECKING
36
+
37
+ if TYPE_CHECKING:
38
+ from .base import BaseWorkflow
39
+
40
+ from .base import (
41
+ PROVIDER_MODELS,
42
+ BaseWorkflow,
43
+ CostReport,
44
+ ModelProvider,
45
+ ModelTier,
46
+ WorkflowResult,
47
+ WorkflowStage,
48
+ get_workflow_stats,
49
+ )
50
+
51
+ # New high-value workflows
52
+ from .bug_predict import BugPredictionWorkflow
53
+ from .code_review import CodeReviewWorkflow
54
+
55
+ # Code review crew integration (v3.1)
56
+ from .code_review_pipeline import CodeReviewPipeline, CodeReviewPipelineResult
57
+ from .config import DEFAULT_MODELS, ModelConfig, WorkflowConfig, create_example_config, get_model
58
+ from .dependency_check import DependencyCheckWorkflow
59
+ from .document_gen import DocumentGenerationWorkflow
60
+ from .documentation_orchestrator import DocumentationOrchestrator, OrchestratorResult
61
+ from .health_check import HealthCheckWorkflow
62
+
63
+ # Keyboard Conductor (v3.6) - keyboard shortcut generation
64
+ from .keyboard_shortcuts import KeyboardShortcutWorkflow
65
+ from .manage_documentation import ManageDocumentationCrew, ManageDocumentationCrewResult
66
+ from .perf_audit import PerformanceAuditWorkflow
67
+ from .pr_review import PRReviewResult, PRReviewWorkflow
68
+ from .refactor_plan import RefactorPlanWorkflow
69
+ from .release_prep import ReleasePreparationWorkflow
70
+ from .research_synthesis import ResearchSynthesisWorkflow
71
+
72
+ # Security crew integration (v3.0)
73
+ from .secure_release import SecureReleasePipeline, SecureReleaseResult
74
+ from .security_audit import SecurityAuditWorkflow
75
+ from .step_config import WorkflowStepConfig, steps_from_tier_map, validate_step_config
76
+
77
+ # User-generated workflows
78
+ from .test5 import Test5Workflow
79
+ from .test_gen import TestGenerationWorkflow
80
+
81
+ # Re-export CLI commands from workflow_commands.py
82
+ _parent_dir = os.path.dirname(os.path.dirname(__file__))
83
+ _workflows_module_path = os.path.join(_parent_dir, "workflow_commands.py")
84
+
85
+ # Initialize to None for type checking
86
+ cmd_morning = None
87
+ cmd_ship = None
88
+ cmd_fix_all = None
89
+ cmd_learn = None
90
+
91
+ if os.path.exists(_workflows_module_path):
92
+ _spec = importlib.util.spec_from_file_location("_workflows_cli", _workflows_module_path)
93
+ if _spec is not None and _spec.loader is not None:
94
+ _workflows_cli = importlib.util.module_from_spec(_spec)
95
+ _spec.loader.exec_module(_workflows_cli)
96
+
97
+ # Re-export CLI commands
98
+ cmd_morning = _workflows_cli.cmd_morning
99
+ cmd_ship = _workflows_cli.cmd_ship
100
+ cmd_fix_all = _workflows_cli.cmd_fix_all
101
+ cmd_learn = _workflows_cli.cmd_learn
102
+
103
+ # Default workflow registry (statically defined for backwards compatibility)
104
+ # Note: Some entries are composite pipelines, not direct BaseWorkflow subclasses
105
+ _DEFAULT_WORKFLOWS: dict[str, type] = {
106
+ # Core workflows
107
+ "code-review": CodeReviewWorkflow,
108
+ "doc-gen": DocumentGenerationWorkflow,
109
+ # Analysis workflows
110
+ "bug-predict": BugPredictionWorkflow,
111
+ "security-audit": SecurityAuditWorkflow,
112
+ "perf-audit": PerformanceAuditWorkflow,
113
+ # Generation workflows
114
+ "test-gen": TestGenerationWorkflow, # Enabled by default for test coverage
115
+ "refactor-plan": RefactorPlanWorkflow,
116
+ # Operational workflows
117
+ "dependency-check": DependencyCheckWorkflow,
118
+ "release-prep": ReleasePreparationWorkflow,
119
+ # Composite security pipeline (v3.0)
120
+ "secure-release": SecureReleasePipeline,
121
+ # Code review crew integration (v3.1)
122
+ "pro-review": CodeReviewPipeline,
123
+ "pr-review": PRReviewWorkflow,
124
+ # Health check crew integration (v3.1)
125
+ "health-check": HealthCheckWorkflow,
126
+ # Documentation management (v3.5)
127
+ "doc-orchestrator": DocumentationOrchestrator,
128
+ "manage-docs": ManageDocumentationCrew,
129
+ # Keyboard Conductor (v3.6) - keyboard shortcut generation
130
+ "keyboard-shortcuts": KeyboardShortcutWorkflow,
131
+ # User-generated workflows
132
+ "test5": Test5Workflow,
133
+ }
134
+
135
+ # Opt-in workflows - not included by default, must be explicitly enabled
136
+ # Currently empty - all workflows are enabled by default
137
+ # Use disabled_workflows in config to turn off specific workflows
138
+ _OPT_IN_WORKFLOWS: dict[str, type] = {}
139
+
140
+ # Workflow registry populated at module load
141
+ WORKFLOW_REGISTRY: dict[str, type[BaseWorkflow]] = {}
142
+
143
+
144
+ def discover_workflows(
145
+ include_defaults: bool = True,
146
+ config: "WorkflowConfig | None" = None,
147
+ ) -> dict[str, type[BaseWorkflow]]:
148
+ """Discover workflows via entry points and config.
149
+
150
+ This function loads workflows registered as entry points under the
151
+ 'empathy.workflows' group. This allows third-party packages to register
152
+ custom workflows that integrate with the Empathy Framework.
153
+
154
+ Workflow availability is controlled by:
155
+ 1. Default workflows (always included unless disabled)
156
+ 2. Opt-in workflows (test-gen) - must be explicitly enabled OR compliance_mode=hipaa
157
+ 3. enabled_workflows config - explicitly enable specific workflows
158
+ 4. disabled_workflows config - explicitly disable specific workflows
159
+ 5. Entry point discovery - third-party workflows
160
+
161
+ Args:
162
+ include_defaults: Whether to include default built-in workflows
163
+ config: Optional WorkflowConfig for enabled/disabled workflows
164
+
165
+ Returns:
166
+ Dictionary mapping workflow names to workflow classes
167
+
168
+ Example:
169
+ # In your pyproject.toml:
170
+ [project.entry-points."empathy.workflows"]
171
+ my-workflow = "my_package.workflows:MyCustomWorkflow"
172
+
173
+ # In your code:
174
+ from empathy_os.workflows import discover_workflows
175
+ workflows = discover_workflows()
176
+ MyWorkflow = workflows.get("my-workflow")
177
+
178
+ # With HIPAA mode (enables test-gen):
179
+ config = WorkflowConfig.load() # compliance_mode: hipaa
180
+ workflows = discover_workflows(config=config)
181
+
182
+ """
183
+ discovered: dict[str, type[BaseWorkflow]] = {}
184
+
185
+ # Include default workflows if requested
186
+ if include_defaults:
187
+ discovered.update(_DEFAULT_WORKFLOWS)
188
+
189
+ # Add opt-in workflows based on config
190
+ if config is not None:
191
+ # HIPAA mode auto-enables healthcare workflows
192
+ if config.is_hipaa_mode():
193
+ discovered.update(_OPT_IN_WORKFLOWS)
194
+
195
+ # Explicitly enabled workflows
196
+ for workflow_name in config.enabled_workflows:
197
+ if workflow_name in _OPT_IN_WORKFLOWS:
198
+ discovered[workflow_name] = _OPT_IN_WORKFLOWS[workflow_name]
199
+
200
+ # Explicitly disabled workflows
201
+ for workflow_name in config.disabled_workflows:
202
+ discovered.pop(workflow_name, None)
203
+
204
+ # Discover via entry points
205
+ try:
206
+ eps = importlib.metadata.entry_points(group="empathy.workflows")
207
+ for ep in eps:
208
+ try:
209
+ workflow_cls = ep.load()
210
+ # Validate it's a proper workflow class
211
+ if isinstance(workflow_cls, type) and hasattr(workflow_cls, "execute"):
212
+ # Check if disabled in config
213
+ if config is None or ep.name not in config.disabled_workflows:
214
+ discovered[ep.name] = workflow_cls
215
+ except Exception:
216
+ # Skip invalid entry points silently
217
+ pass
218
+ except Exception:
219
+ # If entry point discovery fails, just use defaults
220
+ pass
221
+
222
+ return discovered
223
+
224
+
225
+ def refresh_workflow_registry(config: "WorkflowConfig | None" = None) -> None:
226
+ """Refresh the global WORKFLOW_REGISTRY by re-discovering all workflows.
227
+
228
+ Call this after installing new packages that register workflows,
229
+ or after changing the WorkflowConfig (e.g., enabling HIPAA mode).
230
+
231
+ Args:
232
+ config: Optional WorkflowConfig for enabled/disabled workflows
233
+
234
+ """
235
+ global WORKFLOW_REGISTRY
236
+ WORKFLOW_REGISTRY.clear()
237
+ WORKFLOW_REGISTRY.update(discover_workflows(config=config))
238
+
239
+
240
+ def get_opt_in_workflows() -> dict[str, type]:
241
+ """Get the list of opt-in workflows that require explicit enabling.
242
+
243
+ Returns:
244
+ Dictionary of workflow name to class for opt-in workflows
245
+
246
+ """
247
+ return dict(_OPT_IN_WORKFLOWS)
248
+
249
+
250
+ # Initialize registry on module load
251
+ WORKFLOW_REGISTRY.update(discover_workflows())
252
+
253
+
254
+ def get_workflow(name: str) -> type[BaseWorkflow]:
255
+ """Get a workflow class by name.
256
+
257
+ Args:
258
+ name: Workflow name (e.g., "research", "code-review", "doc-gen")
259
+
260
+ Returns:
261
+ Workflow class
262
+
263
+ Raises:
264
+ KeyError: If workflow not found
265
+
266
+ """
267
+ if name not in WORKFLOW_REGISTRY:
268
+ available = ", ".join(WORKFLOW_REGISTRY.keys())
269
+ raise KeyError(f"Unknown workflow: {name}. Available: {available}")
270
+ return WORKFLOW_REGISTRY[name]
271
+
272
+
273
+ def list_workflows() -> list[dict]:
274
+ """List all available workflows with descriptions.
275
+
276
+ Returns:
277
+ List of workflow info dicts
278
+
279
+ """
280
+ workflows = []
281
+ for name, cls in WORKFLOW_REGISTRY.items():
282
+ # Handle both BaseWorkflow subclasses and composite pipelines
283
+ stages = getattr(cls, "stages", [])
284
+ tier_map = getattr(cls, "tier_map", {})
285
+ description = getattr(cls, "description", "No description")
286
+
287
+ workflows.append(
288
+ {
289
+ "name": name,
290
+ "class": cls.__name__,
291
+ "description": description,
292
+ "stages": stages,
293
+ "tier_map": {k: v.value for k, v in tier_map.items()} if tier_map else {},
294
+ },
295
+ )
296
+ return workflows
297
+
298
+
299
+ __all__ = [
300
+ "DEFAULT_MODELS",
301
+ "PROVIDER_MODELS",
302
+ # Registry and discovery
303
+ "WORKFLOW_REGISTRY",
304
+ # Base classes
305
+ "BaseWorkflow",
306
+ # New high-value workflows
307
+ "BugPredictionWorkflow",
308
+ # Code review crew integration (v3.1)
309
+ "CodeReviewPipeline",
310
+ "CodeReviewPipelineResult",
311
+ "CodeReviewWorkflow",
312
+ "CostReport",
313
+ "DependencyCheckWorkflow",
314
+ "DocumentGenerationWorkflow",
315
+ # Documentation management (v3.5)
316
+ "DocumentationOrchestrator",
317
+ # Health check crew integration (v3.1)
318
+ "HealthCheckWorkflow",
319
+ # Keyboard Conductor (v3.6)
320
+ "KeyboardShortcutWorkflow",
321
+ "ManageDocumentationCrew",
322
+ "ManageDocumentationCrewResult",
323
+ "ModelConfig",
324
+ "ModelProvider",
325
+ "ModelTier",
326
+ "OrchestratorResult",
327
+ "PRReviewResult",
328
+ "PRReviewWorkflow",
329
+ "PerformanceAuditWorkflow",
330
+ "RefactorPlanWorkflow",
331
+ "ReleasePreparationWorkflow",
332
+ # Workflow implementations
333
+ "ResearchSynthesisWorkflow",
334
+ # Security crew integration (v3.0)
335
+ "SecureReleasePipeline",
336
+ "SecureReleaseResult",
337
+ "SecurityAuditWorkflow",
338
+ "TestGenerationWorkflow",
339
+ # Configuration
340
+ "WorkflowConfig",
341
+ "WorkflowResult",
342
+ "WorkflowStage",
343
+ # Step configuration (new)
344
+ "WorkflowStepConfig",
345
+ "cmd_fix_all",
346
+ "cmd_learn",
347
+ # CLI commands (re-exported from workflow_commands.py)
348
+ "cmd_morning",
349
+ "cmd_ship",
350
+ "create_example_config",
351
+ "discover_workflows",
352
+ "get_model",
353
+ "get_workflow",
354
+ # Stats for dashboard
355
+ "get_workflow_stats",
356
+ "list_workflows",
357
+ "refresh_workflow_registry",
358
+ "steps_from_tier_map",
359
+ "validate_step_config",
360
+ ]