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,425 +0,0 @@
1
- """Prompt Engineering Quality Wizard - Level 4 Anticipatory Empathy
2
-
3
- Alerts developers to prompt quality issues before they impact AI performance.
4
-
5
- In our experience developing AI Nurse Florence and the Empathy Framework,
6
- we learned that prompt quality degrades subtly over time. This wizard alerts
7
- you to drift patterns, context inefficiencies, and structural issues before
8
- they compound into major problems.
9
-
10
- Copyright 2025 Smart AI Memory, LLC
11
- Licensed under Fair Source 0.9
12
- """
13
-
14
- import os
15
- import re
16
- import sys
17
- from typing import Any
18
-
19
- sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "..", "src"))
20
-
21
- from empathy_os.plugins import BaseWizard
22
-
23
-
24
- class PromptEngineeringWizard(BaseWizard):
25
- """Level 4 Anticipatory: Analyzes prompt quality and alerts to degradation.
26
-
27
- What This Wizard Learned From Experience:
28
- - Prompts drift subtly as features evolve
29
- - Context bloat reduces effectiveness over time
30
- - Inconsistent structures across prompts create confusion
31
- - Early detection prevents compounding quality issues
32
- """
33
-
34
- def __init__(self):
35
- super().__init__(
36
- name="Prompt Engineering Quality Wizard",
37
- domain="software",
38
- empathy_level=4,
39
- category="ai_development",
40
- )
41
-
42
- def get_required_context(self) -> list[str]:
43
- """Required context for prompt analysis"""
44
- return [
45
- "prompt_files", # List of prompt template files
46
- "project_path", # Path to project
47
- "ai_provider", # openai, anthropic, etc. (optional)
48
- "version_history", # Git history (optional for drift detection)
49
- ]
50
-
51
- async def analyze(self, context: dict[str, Any]) -> dict[str, Any]:
52
- """Analyze prompt quality and predict degradation patterns.
53
-
54
- In our experience: Prompt quality issues compound quickly.
55
- A small inconsistency today becomes a major refactor in weeks.
56
- """
57
- self.validate_context(context)
58
-
59
- prompt_files = context["prompt_files"]
60
- _project_path = context["project_path"]
61
- version_history = context.get("version_history", [])
62
-
63
- # Current issues (Levels 1-3)
64
- issues = await self._analyze_prompt_quality(prompt_files)
65
-
66
- # Level 4: Predict future problems
67
- predictions = await self._predict_prompt_degradation(prompt_files, version_history, context)
68
-
69
- # Generate recommendations
70
- recommendations = self._generate_recommendations(issues, predictions)
71
-
72
- # Extract patterns for cross-domain learning
73
- patterns = self._extract_patterns(issues, predictions)
74
-
75
- return {
76
- "issues": issues,
77
- "predictions": predictions,
78
- "recommendations": recommendations,
79
- "patterns": patterns,
80
- "confidence": self._calculate_confidence(context),
81
- "metadata": {
82
- "wizard": self.name,
83
- "empathy_level": self.empathy_level,
84
- "prompts_analyzed": len(prompt_files),
85
- },
86
- }
87
-
88
- async def _analyze_prompt_quality(self, prompt_files: list[str]) -> list[dict[str, Any]]:
89
- """Analyze current prompt quality (Level 3 Proactive).
90
-
91
- Checks for immediate issues that impact AI performance.
92
- """
93
- issues = []
94
-
95
- for prompt_file in prompt_files:
96
- # Read prompt content
97
- try:
98
- with open(prompt_file) as f:
99
- content = f.read()
100
- except Exception as e:
101
- issues.append(
102
- {
103
- "severity": "error",
104
- "type": "file_read_error",
105
- "file": prompt_file,
106
- "message": f"Could not read prompt file: {e}",
107
- },
108
- )
109
- continue
110
-
111
- # Check prompt structure
112
- if not self._has_clear_structure(content):
113
- issues.append(
114
- {
115
- "severity": "warning",
116
- "type": "unclear_structure",
117
- "file": prompt_file,
118
- "message": (
119
- "Prompt lacks clear structure (role, task, context, constraints). "
120
- "In our experience, structured prompts perform more reliably."
121
- ),
122
- "suggestion": "Use sections: ## Role, ## Task, ## Context, ## Constraints",
123
- },
124
- )
125
-
126
- # Check for context bloat
127
- if len(content) > 4000: # Arbitrary threshold from experience
128
- issues.append(
129
- {
130
- "severity": "warning",
131
- "type": "context_bloat",
132
- "file": prompt_file,
133
- "message": (
134
- f"Prompt is {len(content)} characters. "
135
- "Longer prompts often contain redundancy that reduces clarity."
136
- ),
137
- "suggestion": "Review for redundancy. Consider separating into base + context injection.",
138
- },
139
- )
140
-
141
- # Check for vague instructions
142
- vague_patterns = [r"\bhelp\b", r"\btry to\b", r"\bmaybe\b", r"\bif possible\b"]
143
- vague_found = []
144
- for pattern in vague_patterns:
145
- if re.search(pattern, content, re.IGNORECASE):
146
- vague_found.append(pattern.strip("\\b"))
147
-
148
- if vague_found:
149
- issues.append(
150
- {
151
- "severity": "info",
152
- "type": "vague_language",
153
- "file": prompt_file,
154
- "message": (
155
- f"Vague language detected: {', '.join(vague_found)}. "
156
- "Precise instructions yield more consistent results."
157
- ),
158
- "suggestion": "Use imperative verbs: 'Analyze', 'Extract', 'Generate'",
159
- },
160
- )
161
-
162
- # Check for missing examples
163
- if not self._has_examples(content):
164
- issues.append(
165
- {
166
- "severity": "info",
167
- "type": "missing_examples",
168
- "file": prompt_file,
169
- "message": (
170
- "No examples found. In our experience, few-shot examples "
171
- "significantly improve output quality."
172
- ),
173
- "suggestion": "Add 2-3 examples in <example> tags",
174
- },
175
- )
176
-
177
- return issues
178
-
179
- async def _predict_prompt_degradation(
180
- self,
181
- prompt_files: list[str],
182
- version_history: list[dict],
183
- context: dict[str, Any],
184
- ) -> list[dict[str, Any]]:
185
- """Level 4 Anticipatory: Predict prompt quality degradation.
186
-
187
- Experience-based insight: Prompts drift as codebases evolve.
188
- Early alerts prevent compound degradation.
189
- """
190
- predictions = []
191
-
192
- # Pattern 1: Prompt-code drift
193
- if len(version_history) > 0:
194
- prompt_changes = self._count_prompt_changes(version_history)
195
- code_changes = self._count_code_changes(version_history)
196
-
197
- if code_changes > prompt_changes * 3:
198
- predictions.append(
199
- {
200
- "type": "prompt_code_drift",
201
- "alert": (
202
- "Code is evolving faster than prompts. "
203
- "In our experience, this leads to AI responses that become "
204
- "less relevant as the codebase changes. Alert: Review prompts "
205
- "to ensure they reflect current architecture."
206
- ),
207
- "probability": "high",
208
- "impact": "medium",
209
- "prevention_steps": [
210
- "Schedule quarterly prompt review",
211
- "Link prompt updates to major code refactors",
212
- "Add prompt validation tests",
213
- "Document prompt-code dependencies",
214
- ],
215
- "reasoning": (
216
- "Code evolution without corresponding prompt updates creates "
217
- "misalignment. We've seen this reduce AI effectiveness by 30-50%."
218
- ),
219
- },
220
- )
221
-
222
- # Pattern 2: Prompt sprawl
223
- if len(prompt_files) > 10:
224
- predictions.append(
225
- {
226
- "type": "prompt_sprawl",
227
- "alert": (
228
- f"You have {len(prompt_files)} prompt files. "
229
- "In our experience, prompt count above 15 leads to maintenance burden. "
230
- "Alert: Consider consolidating with parameterized base prompts before "
231
- "this becomes unwieldy."
232
- ),
233
- "probability": "medium-high",
234
- "impact": "medium",
235
- "prevention_steps": [
236
- "Create base prompt templates",
237
- "Use variable injection for variations",
238
- "Implement prompt composition pattern",
239
- "Document prompt inheritance structure",
240
- ],
241
- "reasoning": (
242
- "Each additional prompt increases maintenance surface. "
243
- "We've found 3-5 base prompts with composition scales better than "
244
- "dozens of standalone prompts."
245
- ),
246
- },
247
- )
248
-
249
- # Pattern 3: Missing version control
250
- prompts_with_versions = sum(1 for f in prompt_files if self._has_version_marker(f))
251
-
252
- if prompts_with_versions < len(prompt_files) * 0.5:
253
- predictions.append(
254
- {
255
- "type": "prompt_versioning_gap",
256
- "alert": (
257
- "Most prompts lack version markers. "
258
- "In our experience, unversioned prompts make debugging AI behavior "
259
- "extremely difficult. Alert: Implement versioning before issues arise."
260
- ),
261
- "probability": "high",
262
- "impact": "high",
263
- "prevention_steps": [
264
- "Add version markers to all prompts (e.g., v1.2.0)",
265
- "Log prompt version with each AI request",
266
- "Create prompt changelog",
267
- "Implement A/B testing framework for prompt changes",
268
- ],
269
- "reasoning": (
270
- "When AI behavior changes unexpectedly, version tracking is essential "
271
- "for debugging. We learned this the hard way."
272
- ),
273
- },
274
- )
275
-
276
- # Pattern 4: Context window inefficiency
277
- total_prompt_size = sum(self._estimate_token_count(f) for f in prompt_files)
278
- avg_size = total_prompt_size / len(prompt_files) if prompt_files else 0
279
-
280
- if avg_size > 2000: # tokens
281
- predictions.append(
282
- {
283
- "type": "context_window_inefficiency",
284
- "alert": (
285
- f"Average prompt size ~{int(avg_size)} tokens. "
286
- "In our experience, prompts above 2000 tokens often contain "
287
- "redundancy that could be refactored. Alert: Review for efficiency "
288
- "before context costs compound."
289
- ),
290
- "probability": "medium",
291
- "impact": "medium",
292
- "prevention_steps": [
293
- "Extract common instructions to base template",
294
- "Use dynamic context injection (not static bloat)",
295
- "Implement prompt caching strategies",
296
- "Consider retrieval-augmented generation for large contexts",
297
- ],
298
- "reasoning": (
299
- "Token costs scale linearly with prompt size. We've reduced costs "
300
- "40-60% by refactoring bloated prompts."
301
- ),
302
- },
303
- )
304
-
305
- return predictions
306
-
307
- def _generate_recommendations(self, issues: list[dict], predictions: list[dict]) -> list[str]:
308
- """Generate actionable recommendations"""
309
- recommendations = []
310
-
311
- # High-impact predictions first
312
- high_impact = [p for p in predictions if p.get("impact") in ["high", "medium"]]
313
- for pred in high_impact:
314
- recommendations.append(f"[ALERT] {pred['alert']}")
315
- recommendations.append(" Prevention steps:")
316
- for step in pred["prevention_steps"][:3]: # Top 3
317
- recommendations.append(f" - {step}")
318
-
319
- # Critical issues
320
- critical = [i for i in issues if i.get("severity") == "error"]
321
- if critical:
322
- recommendations.append(f"\n[CRITICAL] Fix {len(critical)} errors immediately")
323
-
324
- # Quick wins
325
- warnings = [i for i in issues if i.get("severity") == "warning"]
326
- if len(warnings) > 3:
327
- recommendations.append(
328
- f"\n[QUICK WIN] Address {len(warnings)} warnings to improve prompt quality",
329
- )
330
-
331
- return recommendations
332
-
333
- def _extract_patterns(
334
- self,
335
- issues: list[dict],
336
- predictions: list[dict],
337
- ) -> list[dict[str, Any]]:
338
- """Extract patterns for cross-domain learning (Level 5).
339
-
340
- Pattern: Drift detection applies to many domains.
341
- """
342
- patterns = []
343
-
344
- if any(p["type"] == "prompt_code_drift" for p in predictions):
345
- patterns.append(
346
- {
347
- "pattern_type": "artifact_code_drift",
348
- "description": (
349
- "When artifacts (prompts, docs, configs) evolve slower than "
350
- "code, misalignment compounds over time"
351
- ),
352
- "domain_agnostic": True,
353
- "applicable_to": [
354
- "AI prompt engineering",
355
- "API documentation",
356
- "Configuration management",
357
- "Clinical protocols (healthcare)",
358
- "Compliance documentation",
359
- ],
360
- "detection": "Compare change velocity: artifacts vs code",
361
- "threshold": "Alert when code_changes > artifact_changes * 3",
362
- },
363
- )
364
-
365
- return patterns
366
-
367
- def _calculate_confidence(self, context: dict[str, Any]) -> float:
368
- """Calculate analysis confidence"""
369
- confidence = 0.75 # Base
370
-
371
- if context.get("version_history"):
372
- confidence += 0.15 # History improves drift detection
373
-
374
- if len(context.get("prompt_files", [])) > 5:
375
- confidence += 0.05 # More data = better patterns
376
-
377
- return min(1.0, confidence)
378
-
379
- # Helper methods
380
-
381
- def _has_clear_structure(self, content: str) -> bool:
382
- """Check if prompt has clear structural markers"""
383
- markers = ["##", "Role:", "Task:", "Context:", "Instructions:"]
384
- return any(marker in content for marker in markers)
385
-
386
- def _has_examples(self, content: str) -> bool:
387
- """Check if prompt contains examples"""
388
- example_markers = ["<example>", "Example:", "For example:", "```"]
389
- return any(marker in content for marker in example_markers)
390
-
391
- def _count_prompt_changes(self, history: list[dict]) -> int:
392
- """Count prompt-related changes in version history"""
393
- return sum(
394
- 1
395
- for commit in history
396
- if any(
397
- "prompt" in f.lower() or f.endswith(".txt") or f.endswith(".md")
398
- for f in commit.get("files", [])
399
- )
400
- )
401
-
402
- def _count_code_changes(self, history: list[dict]) -> int:
403
- """Count code changes in version history"""
404
- return sum(
405
- 1
406
- for commit in history
407
- if any(f.endswith((".py", ".js", ".ts", ".java")) for f in commit.get("files", []))
408
- )
409
-
410
- def _has_version_marker(self, filepath: str) -> bool:
411
- """Check if file has version marker"""
412
- try:
413
- with open(filepath) as f:
414
- content = f.read()
415
- return bool(re.search(r"v\d+\.\d+\.\d+|version:", content, re.IGNORECASE))
416
- except OSError:
417
- return False
418
-
419
- def _estimate_token_count(self, filepath: str) -> int:
420
- """Rough estimate of token count (chars / 4)"""
421
- try:
422
- with open(filepath) as f:
423
- return len(f.read()) // 4
424
- except OSError:
425
- return 0