empathy-framework 4.6.6__py3-none-any.whl → 4.7.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (247) hide show
  1. {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.0.dist-info}/METADATA +7 -6
  2. empathy_framework-4.7.0.dist-info/RECORD +354 -0
  3. {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.0.dist-info}/top_level.txt +0 -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.py +173 -0
  130. empathy_os/workflows/__init__.py +212 -120
  131. empathy_os/workflows/batch_processing.py +8 -24
  132. empathy_os/workflows/bug_predict.py +1 -1
  133. empathy_os/workflows/code_review.py +20 -5
  134. empathy_os/workflows/code_review_pipeline.py +13 -8
  135. empathy_os/workflows/keyboard_shortcuts/workflow.py +6 -2
  136. empathy_os/workflows/manage_documentation.py +1 -0
  137. empathy_os/workflows/orchestrated_health_check.py +6 -11
  138. empathy_os/workflows/orchestrated_release_prep.py +3 -3
  139. empathy_os/workflows/pr_review.py +18 -10
  140. empathy_os/workflows/progressive/__init__.py +2 -12
  141. empathy_os/workflows/progressive/cli.py +14 -37
  142. empathy_os/workflows/progressive/core.py +12 -12
  143. empathy_os/workflows/progressive/orchestrator.py +166 -144
  144. empathy_os/workflows/progressive/reports.py +22 -31
  145. empathy_os/workflows/progressive/telemetry.py +8 -14
  146. empathy_os/workflows/progressive/test_gen.py +29 -48
  147. empathy_os/workflows/progressive/workflow.py +31 -70
  148. empathy_os/workflows/release_prep.py +21 -6
  149. empathy_os/workflows/release_prep_crew.py +1 -0
  150. empathy_os/workflows/secure_release.py +13 -6
  151. empathy_os/workflows/security_audit.py +8 -3
  152. empathy_os/workflows/test_coverage_boost_crew.py +3 -2
  153. empathy_os/workflows/test_maintenance_crew.py +1 -0
  154. empathy_os/workflows/test_runner.py +16 -12
  155. empathy_software_plugin/SOFTWARE_PLUGIN_README.md +25 -703
  156. empathy_software_plugin/cli.py +0 -122
  157. coach_wizards/__init__.py +0 -45
  158. coach_wizards/accessibility_wizard.py +0 -91
  159. coach_wizards/api_wizard.py +0 -91
  160. coach_wizards/base_wizard.py +0 -209
  161. coach_wizards/cicd_wizard.py +0 -91
  162. coach_wizards/code_reviewer_README.md +0 -60
  163. coach_wizards/code_reviewer_wizard.py +0 -180
  164. coach_wizards/compliance_wizard.py +0 -91
  165. coach_wizards/database_wizard.py +0 -91
  166. coach_wizards/debugging_wizard.py +0 -91
  167. coach_wizards/documentation_wizard.py +0 -91
  168. coach_wizards/generate_wizards.py +0 -347
  169. coach_wizards/localization_wizard.py +0 -173
  170. coach_wizards/migration_wizard.py +0 -91
  171. coach_wizards/monitoring_wizard.py +0 -91
  172. coach_wizards/observability_wizard.py +0 -91
  173. coach_wizards/performance_wizard.py +0 -91
  174. coach_wizards/prompt_engineering_wizard.py +0 -661
  175. coach_wizards/refactoring_wizard.py +0 -91
  176. coach_wizards/scaling_wizard.py +0 -90
  177. coach_wizards/security_wizard.py +0 -92
  178. coach_wizards/testing_wizard.py +0 -91
  179. empathy_framework-4.6.6.dist-info/RECORD +0 -410
  180. empathy_llm_toolkit/wizards/__init__.py +0 -43
  181. empathy_llm_toolkit/wizards/base_wizard.py +0 -364
  182. empathy_llm_toolkit/wizards/customer_support_wizard.py +0 -190
  183. empathy_llm_toolkit/wizards/healthcare_wizard.py +0 -378
  184. empathy_llm_toolkit/wizards/patient_assessment_README.md +0 -64
  185. empathy_llm_toolkit/wizards/patient_assessment_wizard.py +0 -193
  186. empathy_llm_toolkit/wizards/technology_wizard.py +0 -209
  187. empathy_os/wizard_factory_cli.py +0 -170
  188. empathy_software_plugin/wizards/__init__.py +0 -42
  189. empathy_software_plugin/wizards/advanced_debugging_wizard.py +0 -395
  190. empathy_software_plugin/wizards/agent_orchestration_wizard.py +0 -511
  191. empathy_software_plugin/wizards/ai_collaboration_wizard.py +0 -503
  192. empathy_software_plugin/wizards/ai_context_wizard.py +0 -441
  193. empathy_software_plugin/wizards/ai_documentation_wizard.py +0 -503
  194. empathy_software_plugin/wizards/base_wizard.py +0 -288
  195. empathy_software_plugin/wizards/book_chapter_wizard.py +0 -519
  196. empathy_software_plugin/wizards/code_review_wizard.py +0 -604
  197. empathy_software_plugin/wizards/debugging/__init__.py +0 -50
  198. empathy_software_plugin/wizards/debugging/bug_risk_analyzer.py +0 -414
  199. empathy_software_plugin/wizards/debugging/config_loaders.py +0 -446
  200. empathy_software_plugin/wizards/debugging/fix_applier.py +0 -469
  201. empathy_software_plugin/wizards/debugging/language_patterns.py +0 -385
  202. empathy_software_plugin/wizards/debugging/linter_parsers.py +0 -470
  203. empathy_software_plugin/wizards/debugging/verification.py +0 -369
  204. empathy_software_plugin/wizards/enhanced_testing_wizard.py +0 -537
  205. empathy_software_plugin/wizards/memory_enhanced_debugging_wizard.py +0 -816
  206. empathy_software_plugin/wizards/multi_model_wizard.py +0 -501
  207. empathy_software_plugin/wizards/pattern_extraction_wizard.py +0 -422
  208. empathy_software_plugin/wizards/pattern_retriever_wizard.py +0 -400
  209. empathy_software_plugin/wizards/performance/__init__.py +0 -9
  210. empathy_software_plugin/wizards/performance/bottleneck_detector.py +0 -221
  211. empathy_software_plugin/wizards/performance/profiler_parsers.py +0 -278
  212. empathy_software_plugin/wizards/performance/trajectory_analyzer.py +0 -429
  213. empathy_software_plugin/wizards/performance_profiling_wizard.py +0 -305
  214. empathy_software_plugin/wizards/prompt_engineering_wizard.py +0 -425
  215. empathy_software_plugin/wizards/rag_pattern_wizard.py +0 -461
  216. empathy_software_plugin/wizards/security/__init__.py +0 -32
  217. empathy_software_plugin/wizards/security/exploit_analyzer.py +0 -290
  218. empathy_software_plugin/wizards/security/owasp_patterns.py +0 -241
  219. empathy_software_plugin/wizards/security/vulnerability_scanner.py +0 -604
  220. empathy_software_plugin/wizards/security_analysis_wizard.py +0 -322
  221. empathy_software_plugin/wizards/security_learning_wizard.py +0 -740
  222. empathy_software_plugin/wizards/tech_debt_wizard.py +0 -726
  223. empathy_software_plugin/wizards/testing/__init__.py +0 -27
  224. empathy_software_plugin/wizards/testing/coverage_analyzer.py +0 -459
  225. empathy_software_plugin/wizards/testing/quality_analyzer.py +0 -525
  226. empathy_software_plugin/wizards/testing/test_suggester.py +0 -533
  227. empathy_software_plugin/wizards/testing_wizard.py +0 -274
  228. wizards/__init__.py +0 -82
  229. wizards/admission_assessment_wizard.py +0 -644
  230. wizards/care_plan.py +0 -321
  231. wizards/clinical_assessment.py +0 -769
  232. wizards/discharge_planning.py +0 -77
  233. wizards/discharge_summary_wizard.py +0 -468
  234. wizards/dosage_calculation.py +0 -497
  235. wizards/incident_report_wizard.py +0 -454
  236. wizards/medication_reconciliation.py +0 -85
  237. wizards/nursing_assessment.py +0 -171
  238. wizards/patient_education.py +0 -654
  239. wizards/quality_improvement.py +0 -705
  240. wizards/sbar_report.py +0 -324
  241. wizards/sbar_wizard.py +0 -608
  242. wizards/shift_handoff_wizard.py +0 -535
  243. wizards/soap_note_wizard.py +0 -679
  244. wizards/treatment_plan.py +0 -15
  245. {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.0.dist-info}/WHEEL +0 -0
  246. {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.0.dist-info}/entry_points.txt +0 -0
  247. {empathy_framework-4.6.6.dist-info → empathy_framework-4.7.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,511 +0,0 @@
1
- """Agent Orchestration Wizard - Level 4 Anticipatory Empathy
2
-
3
- Alerts developers when multi-agent system complexity will become unmanageable.
4
-
5
- In our experience building AI Nurse Florence with LangGraph multi-agent systems,
6
- we learned that agent coordination complexity grows non-linearly. This wizard
7
- detects when simple orchestration patterns will fail at scale.
8
-
9
- Copyright 2025 Smart AI Memory, LLC
10
- Licensed under Fair Source 0.9
11
- """
12
-
13
- import os
14
- import sys
15
- from typing import Any
16
-
17
- sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "..", "src"))
18
-
19
- from empathy_os.plugins import BaseWizard
20
-
21
-
22
- class AgentOrchestrationWizard(BaseWizard):
23
- """Level 4 Anticipatory: Predicts multi-agent coordination issues.
24
-
25
- What We Learned Building Multi-Agent Systems:
26
- - Simple sequential agents scale fine to 3-5 agents
27
- - Parallel agent coordination needs explicit state management at 5+
28
- - Agent-to-agent communication requires structured protocols at 7+
29
- - Without planning, refactoring happens around 10 agents (painful)
30
- """
31
-
32
- def __init__(self):
33
- super().__init__(
34
- name="Agent Orchestration Wizard",
35
- domain="software",
36
- empathy_level=4,
37
- category="ai_development",
38
- )
39
-
40
- def get_required_context(self) -> list[str]:
41
- """Required context for analysis (optional in demo mode)"""
42
- return [
43
- "agent_definitions", # Agent classes/configs
44
- "orchestration_code", # Code that coordinates agents
45
- "project_path", # Project root
46
- ]
47
-
48
- def _parse_agents_from_text(self, text: str) -> list[dict]:
49
- """Parse agent definitions from natural language text input."""
50
- import re
51
-
52
- agents = []
53
-
54
- # Look for patterns like "5 agents", "agents: X, Y, Z", numbered lists
55
- # Pattern 1: "N agents" or "N specialized agents"
56
- count_match = re.search(r"(\d+)\s+(?:specialized\s+)?agents?", text.lower())
57
- if count_match:
58
- count = int(count_match.group(1))
59
- # Try to extract agent names from the text
60
- # Look for colon-separated list: "agents: ingestion, validation, ..."
61
- list_match = re.search(r":\s*([^.]+)", text)
62
- if list_match:
63
- names = [n.strip() for n in list_match.group(1).split(",")]
64
- for name in names[:count]:
65
- agents.append({"name": name, "type": "specialized"})
66
- else:
67
- # Generate generic agent names
68
- for i in range(count):
69
- agents.append({"name": f"Agent_{i + 1}", "type": "specialized"})
70
-
71
- # Pattern 2: Look for specific agent-like words
72
- agent_keywords = [
73
- "ingestion",
74
- "validation",
75
- "transformation",
76
- "analysis",
77
- "reporting",
78
- "extraction",
79
- "processing",
80
- "routing",
81
- "aggregation",
82
- "monitoring",
83
- "scheduler",
84
- "executor",
85
- "coordinator",
86
- "supervisor",
87
- "worker",
88
- ]
89
- for kw in agent_keywords:
90
- if kw in text.lower() and not any(a["name"].lower() == kw for a in agents):
91
- agents.append({"name": kw.title(), "type": "specialized"})
92
-
93
- # Ensure at least 1 agent for demo
94
- if not agents:
95
- agents = [{"name": "DefaultAgent", "type": "generic"}]
96
-
97
- return agents
98
-
99
- async def analyze(self, context: dict[str, Any]) -> dict[str, Any]:
100
- """Analyze agent orchestration patterns and predict coordination issues.
101
-
102
- In our experience: Multi-agent complexity sneaks up fast.
103
- By agent #7-10, you need formal orchestration or face refactoring.
104
-
105
- Supports two modes:
106
- - Structured: Pass agent_definitions, orchestration_code, project_path
107
- - Demo/Text: Pass user_input with natural language description
108
- """
109
- # Support text input mode (from web demo) or structured mode
110
- user_input = context.get("user_input", "")
111
-
112
- if "agent_definitions" not in context:
113
- # Parse agents from text input for demo mode
114
- agents = self._parse_agents_from_text(user_input)
115
- orchestration = [] # No file analysis in demo mode
116
- else:
117
- self.validate_context(context)
118
- agents = context["agent_definitions"]
119
- orchestration = context["orchestration_code"]
120
-
121
- # Current issues
122
- issues = await self._analyze_orchestration_patterns(agents, orchestration)
123
-
124
- # Level 4: Predict future coordination breakdowns
125
- predictions = await self._predict_orchestration_complexity(agents, orchestration, context)
126
-
127
- recommendations = self._generate_recommendations(issues, predictions)
128
- patterns = self._extract_patterns(issues, predictions)
129
-
130
- return {
131
- "issues": issues,
132
- "predictions": predictions,
133
- "recommendations": recommendations,
134
- "patterns": patterns,
135
- "confidence": 0.85,
136
- "metadata": {
137
- "wizard": self.name,
138
- "empathy_level": self.empathy_level,
139
- "agent_count": len(agents),
140
- "orchestration_complexity": self._assess_complexity(orchestration),
141
- },
142
- }
143
-
144
- async def _analyze_orchestration_patterns(
145
- self,
146
- agents: list[dict],
147
- orchestration: list[str],
148
- ) -> list[dict[str, Any]]:
149
- """Analyze current orchestration patterns"""
150
- issues = []
151
-
152
- agent_count = len(agents)
153
-
154
- # Issue: No state management with multiple agents
155
- if agent_count > 3 and not self._has_state_management(orchestration):
156
- issues.append(
157
- {
158
- "severity": "warning",
159
- "type": "missing_state_management",
160
- "message": (
161
- f"You have {agent_count} agents without centralized state management. "
162
- "In our experience, agent coordination becomes unreliable beyond 3 agents "
163
- "without explicit state tracking."
164
- ),
165
- "suggestion": "Implement shared state pattern (e.g., LangGraph StateGraph, custom State class)",
166
- },
167
- )
168
-
169
- # Issue: No error handling between agents
170
- if not self._has_agent_error_handling(orchestration):
171
- issues.append(
172
- {
173
- "severity": "warning",
174
- "type": "missing_error_handling",
175
- "message": (
176
- "No agent-level error handling detected. When one agent fails, "
177
- "entire pipeline crashes. In our experience, this creates brittle systems."
178
- ),
179
- "suggestion": "Add try-except wrappers, fallback agents, retry logic",
180
- },
181
- )
182
-
183
- # Issue: Circular agent dependencies
184
- if self._detect_circular_dependencies(agents):
185
- issues.append(
186
- {
187
- "severity": "error",
188
- "type": "circular_dependencies",
189
- "message": (
190
- "Circular dependencies detected between agents. "
191
- "This creates deadlocks and unpredictable behavior."
192
- ),
193
- "suggestion": "Restructure agent graph to be acyclic (DAG)",
194
- },
195
- )
196
-
197
- # Issue: No agent communication protocol
198
- if agent_count > 5 and not self._has_communication_protocol(agents):
199
- issues.append(
200
- {
201
- "severity": "info",
202
- "type": "ad_hoc_communication",
203
- "message": (
204
- f"{agent_count} agents with ad-hoc communication. "
205
- "In our experience, structured protocols become essential beyond 5 agents."
206
- ),
207
- "suggestion": "Define message schemas, use TypedDict for agent inputs/outputs",
208
- },
209
- )
210
-
211
- return issues
212
-
213
- async def _predict_orchestration_complexity(
214
- self,
215
- agents: list[dict],
216
- orchestration: list[str],
217
- full_context: dict[str, Any],
218
- ) -> list[dict[str, Any]]:
219
- """Level 4: Predict when orchestration will break down.
220
-
221
- Based on our experience: Coordination complexity = O(n²) with agents.
222
- """
223
- predictions = []
224
-
225
- agent_count = len(agents)
226
-
227
- # Pattern 1: Approaching complexity threshold
228
- if 7 <= agent_count <= 12:
229
- predictions.append(
230
- {
231
- "type": "orchestration_complexity_threshold",
232
- "alert": (
233
- f"You have {agent_count} agents. In our experience, multi-agent systems "
234
- "become difficult to manage around 10 agents without formal orchestration. "
235
- "Alert: Design orchestration framework before complexity compounds."
236
- ),
237
- "probability": "high",
238
- "impact": "high",
239
- "prevention_steps": [
240
- "Adopt orchestration framework (LangGraph, CrewAI, custom)",
241
- "Define agent state machine explicitly",
242
- "Implement agent registry (dynamic agent discovery)",
243
- "Add agent performance monitoring",
244
- "Create agent testing framework",
245
- ],
246
- "reasoning": (
247
- f"Coordination complexity: {agent_count} agents = "
248
- f"{agent_count * (agent_count - 1) // 2} potential interactions. "
249
- "We hit refactoring wall at 10 agents. Proactive design prevents crisis."
250
- ),
251
- "personal_experience": (
252
- "Building AI Nurse Florence, we started with 3 agents (simple sequence). "
253
- "By agent 7, we needed LangGraph StateGraph. By agent 12, we needed "
254
- "full orchestration framework. Wish we'd designed for it earlier."
255
- ),
256
- },
257
- )
258
-
259
- # Pattern 2: Sequential agents that should be parallel
260
- if agent_count > 5 and self._all_sequential(orchestration):
261
- predictions.append(
262
- {
263
- "type": "sequential_bottleneck",
264
- "alert": (
265
- f"{agent_count} agents running sequentially. In our experience, "
266
- "sequential execution becomes a bottleneck. Alert: Identify parallelization "
267
- "opportunities before performance degrades."
268
- ),
269
- "probability": "medium-high",
270
- "impact": "medium",
271
- "prevention_steps": [
272
- "Analyze agent dependency graph",
273
- "Identify independent agents (can run parallel)",
274
- "Implement parallel execution (asyncio.gather, ThreadPoolExecutor)",
275
- "Add result aggregation layer",
276
- ],
277
- "reasoning": (
278
- "Many agents have no dependencies on each other. "
279
- "Sequential execution leaves performance on table."
280
- ),
281
- },
282
- )
283
-
284
- # Pattern 3: Growing agent communication overhead
285
- if agent_count > 6:
286
- predictions.append(
287
- {
288
- "type": "communication_overhead",
289
- "alert": (
290
- f"With {agent_count} agents, communication overhead grows quadratically. "
291
- "In our experience, agent-to-agent communication becomes bottleneck. "
292
- "Alert: Implement efficient communication patterns."
293
- ),
294
- "probability": "medium",
295
- "impact": "medium",
296
- "prevention_steps": [
297
- "Use pub-sub pattern (agents subscribe to relevant messages only)",
298
- "Implement message routing (don't broadcast everything)",
299
- "Add message queues for async communication",
300
- "Create agent isolation (agents don't need to know about all others)",
301
- ],
302
- "reasoning": (
303
- f"Full mesh communication: {agent_count}² = {agent_count**2} channels. "
304
- "Selective communication dramatically reduces overhead."
305
- ),
306
- },
307
- )
308
-
309
- # Pattern 4: No agent versioning strategy
310
- if agent_count > 4 and not self._has_agent_versioning(agents):
311
- predictions.append(
312
- {
313
- "type": "agent_version_chaos",
314
- "alert": (
315
- "No agent versioning detected. In our experience, as agents evolve, "
316
- "breaking changes cause cascade failures. Alert: Implement versioning "
317
- "before inter-agent contracts become implicit."
318
- ),
319
- "probability": "medium-high",
320
- "impact": "high",
321
- "prevention_steps": [
322
- "Add version to each agent (semantic versioning)",
323
- "Define agent API contracts (input/output schemas)",
324
- "Implement compatibility checks",
325
- "Create agent migration paths for breaking changes",
326
- ],
327
- "reasoning": (
328
- "When agent A changes output format, agent B breaks. "
329
- "Versioning prevents cascade failures."
330
- ),
331
- },
332
- )
333
-
334
- # Pattern 5: Missing observability
335
- if agent_count > 5 and not self._has_observability(orchestration):
336
- predictions.append(
337
- {
338
- "type": "orchestration_black_box",
339
- "alert": (
340
- f"With {agent_count} agents, you have limited visibility into orchestration flow. "
341
- "In our experience, debugging multi-agent issues without observability is extremely difficult. "
342
- "Alert: Add observability before issues become impossible to diagnose."
343
- ),
344
- "probability": "high",
345
- "impact": "high",
346
- "prevention_steps": [
347
- "Add structured logging (agent name, inputs, outputs, timing)",
348
- "Implement distributed tracing (correlate agent executions)",
349
- "Create agent execution visualizer (see flow in real-time)",
350
- "Add performance metrics per agent",
351
- "Build debugging tools (replay agent execution)",
352
- ],
353
- "reasoning": (
354
- "Multi-agent debugging: 'Which agent failed? Why? With what input?' "
355
- "Impossible to answer without observability."
356
- ),
357
- "personal_experience": (
358
- "We spent 3 days debugging an agent cascade failure. Root cause: "
359
- "Agent #4 was receiving null from Agent #2. No logging made this "
360
- "a nightmare. Never again."
361
- ),
362
- },
363
- )
364
-
365
- return predictions
366
-
367
- def _generate_recommendations(self, issues: list[dict], predictions: list[dict]) -> list[str]:
368
- """Generate actionable recommendations"""
369
- recommendations = []
370
-
371
- # Critical issues first
372
- critical = [i for i in issues if i.get("severity") == "error"]
373
- if critical:
374
- recommendations.append(
375
- f"[CRITICAL] Fix {len(critical)} critical orchestration issues immediately",
376
- )
377
-
378
- # High-impact predictions
379
- for pred in predictions:
380
- if pred.get("impact") == "high":
381
- recommendations.append(f"\n[ALERT] {pred['alert']}")
382
- if "personal_experience" in pred:
383
- recommendations.append(f"Experience: {pred['personal_experience']}")
384
- recommendations.append("Prevention steps:")
385
- for i, step in enumerate(pred["prevention_steps"][:3], 1):
386
- recommendations.append(f" {i}. {step}")
387
-
388
- return recommendations
389
-
390
- def _extract_patterns(
391
- self,
392
- issues: list[dict],
393
- predictions: list[dict],
394
- ) -> list[dict[str, Any]]:
395
- """Extract cross-domain patterns"""
396
- return [
397
- {
398
- "pattern_type": "coordination_complexity_threshold",
399
- "description": (
400
- "Systems with multiple coordinating components hit complexity threshold "
401
- "around 7-10 components. Formal orchestration becomes essential."
402
- ),
403
- "domain_agnostic": True,
404
- "applicable_to": [
405
- "Multi-agent AI systems",
406
- "Microservices architecture",
407
- "Distributed systems",
408
- "Team coordination (humans)",
409
- "Clinical care coordination (healthcare)",
410
- ],
411
- "threshold": "7-10 components",
412
- "solution": "Adopt formal orchestration framework before threshold",
413
- },
414
- ]
415
-
416
- # Helper methods
417
-
418
- def _has_state_management(self, orchestration: list[str]) -> bool:
419
- """Check for centralized state management"""
420
- for file_path in orchestration:
421
- try:
422
- with open(file_path) as f:
423
- content = f.read()
424
- if any(
425
- kw in content
426
- for kw in ["StateGraph", "AgentState", "shared_state", "TypedDict"]
427
- ):
428
- return True
429
- except OSError:
430
- pass
431
- return False
432
-
433
- def _has_agent_error_handling(self, orchestration: list[str]) -> bool:
434
- """Check for agent-level error handling"""
435
- for file_path in orchestration:
436
- try:
437
- with open(file_path) as f:
438
- content = f.read()
439
- # Look for error handling patterns
440
- if "try:" in content and "agent" in content.lower():
441
- return True
442
- except OSError:
443
- pass
444
- return False
445
-
446
- def _detect_circular_dependencies(self, agents: list[dict]) -> bool:
447
- """Detect circular dependencies between agents"""
448
- # Simplified detection - would need actual dependency analysis
449
- # For now, just check if agents reference each other
450
- _agent_names = [a.get("name", "") for a in agents]
451
-
452
- for agent in agents:
453
- deps = agent.get("dependencies", [])
454
- if agent.get("name") in deps:
455
- return True # Self-dependency
456
- return False
457
-
458
- def _has_communication_protocol(self, agents: list[dict]) -> bool:
459
- """Check for structured communication protocol"""
460
- # Look for message schemas, TypedDict, etc.
461
- for agent in agents:
462
- if "message_schema" in agent or "input_schema" in agent:
463
- return True
464
- return False
465
-
466
- def _assess_complexity(self, orchestration: list[str]) -> str:
467
- """Assess orchestration complexity"""
468
- if len(orchestration) == 0:
469
- return "none"
470
- if len(orchestration) <= 2:
471
- return "low"
472
- if len(orchestration) <= 5:
473
- return "medium"
474
- return "high"
475
-
476
- def _all_sequential(self, orchestration: list[str]) -> bool:
477
- """Check if all agents run sequentially"""
478
- for file_path in orchestration:
479
- try:
480
- with open(file_path) as f:
481
- content = f.read()
482
- # Look for parallel execution indicators
483
- if any(
484
- kw in content
485
- for kw in ["asyncio.gather", "ThreadPool", "parallel", "concurrent"]
486
- ):
487
- return False
488
- except OSError:
489
- pass
490
- return True
491
-
492
- def _has_agent_versioning(self, agents: list[dict]) -> bool:
493
- """Check if agents have version information"""
494
- for agent in agents:
495
- if "version" in agent or "api_version" in agent:
496
- return True
497
- return False
498
-
499
- def _has_observability(self, orchestration: list[str]) -> bool:
500
- """Check for observability features"""
501
- for file_path in orchestration:
502
- try:
503
- with open(file_path) as f:
504
- content = f.read()
505
- if any(
506
- kw in content for kw in ["logger", "trace", "span", "metrics", "telemetry"]
507
- ):
508
- return True
509
- except OSError:
510
- pass
511
- return False