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,519 +0,0 @@
1
- """Book Chapter Wizard - Level 4 Anticipatory Empathy
2
-
3
- Transforms technical documentation into polished book chapters.
4
-
5
- This wizard encodes the patterns discovered during the creation of
6
- "Persistent Memory for AI" book, where 5 chapters + 5 appendices
7
- were written in ~2 hours through systematic transformation of
8
- existing documentation.
9
-
10
- Key Insight: Technical docs contain the knowledge, but not the
11
- narrative structure. This wizard bridges that gap.
12
-
13
- Copyright 2025 Smart AI Memory, LLC
14
- Licensed under Fair Source 0.9
15
- """
16
-
17
- import os
18
- import re
19
- import sys
20
- from typing import Any
21
-
22
- sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "..", "src"))
23
-
24
- from empathy_os.plugins import BaseWizard
25
-
26
-
27
- class BookChapterWizard(BaseWizard):
28
- """Level 4 Anticipatory: Transforms technical docs into book chapters.
29
-
30
- Key Insight from Experience:
31
- When writing the MemDocs/Empathy book, we discovered that existing
32
- documentation could be transformed into high-quality book chapters
33
- in minutes rather than hours by following consistent patterns.
34
-
35
- This wizard automates that transformation process.
36
- """
37
-
38
- # Chapter structure template (what made our chapters successful)
39
- CHAPTER_STRUCTURE = {
40
- "opening_quote": "Memorable quote setting the theme",
41
- "introduction": {
42
- "hook": "Why this topic matters",
43
- "preview": "What you'll learn (bullet points)",
44
- "context": "How this connects to previous chapters",
45
- },
46
- "sections": {
47
- "count": "5-7 substantive sections",
48
- "structure": {
49
- "concept": "Explain the idea",
50
- "code_example": "Show it in action",
51
- "real_world": "Connect to practical use",
52
- },
53
- },
54
- "key_takeaways": "5-6 bullet points summarizing chapter",
55
- "exercise": "Hands-on 'Try It Yourself' activity",
56
- "navigation": "Next chapter link",
57
- }
58
-
59
- # Voice patterns (extracted from successful chapters)
60
- VOICE_PATTERNS = {
61
- "authority": "State facts confidently without hedging",
62
- "practicality": "Every concept should have code",
63
- "progression": "Build complexity gradually",
64
- "callbacks": "Reference earlier chapters",
65
- "foreshadowing": "Hint at upcoming topics",
66
- }
67
-
68
- def __init__(self):
69
- super().__init__(
70
- name="Book Chapter Wizard",
71
- domain="documentation",
72
- empathy_level=4,
73
- category="content_transformation",
74
- )
75
-
76
- def get_required_context(self) -> list[str]:
77
- """Required context for analysis"""
78
- return [
79
- "source_document", # Path to source technical doc
80
- "chapter_number", # Target chapter number
81
- "chapter_title", # Target chapter title
82
- "book_context", # Brief context about the book
83
- ]
84
-
85
- async def analyze(self, context: dict[str, Any]) -> dict[str, Any]:
86
- """Analyze source document and generate transformation plan.
87
-
88
- Returns a complete blueprint for chapter creation.
89
- """
90
- self.validate_context(context)
91
-
92
- source_doc = context["source_document"]
93
- chapter_num = context["chapter_number"]
94
- chapter_title = context["chapter_title"]
95
- book_context = context.get("book_context", "")
96
-
97
- # Read and analyze source document
98
- source_content = self._read_source(source_doc)
99
- if not source_content:
100
- return self._error_result(f"Could not read source: {source_doc}")
101
-
102
- # Extract key elements from source
103
- elements = await self._extract_elements(source_content)
104
-
105
- # Generate transformation plan
106
- transformation_plan = await self._create_transformation_plan(
107
- elements,
108
- chapter_num,
109
- chapter_title,
110
- book_context,
111
- )
112
-
113
- # Level 4: Predict potential issues
114
- predictions = await self._predict_transformation_issues(elements, transformation_plan)
115
-
116
- # Generate chapter outline
117
- outline = self._generate_outline(elements, chapter_num, chapter_title)
118
-
119
- # Generate draft content
120
- draft = await self._generate_draft(
121
- elements,
122
- outline,
123
- chapter_num,
124
- chapter_title,
125
- book_context,
126
- )
127
-
128
- return {
129
- "source_analysis": elements,
130
- "transformation_plan": transformation_plan,
131
- "predictions": predictions,
132
- "outline": outline,
133
- "draft": draft,
134
- "recommendations": self._generate_recommendations(predictions),
135
- "confidence": 0.88,
136
- "metadata": {
137
- "wizard": self.name,
138
- "empathy_level": self.empathy_level,
139
- "source_words": len(source_content.split()),
140
- "estimated_chapter_words": len(draft.split()) if draft else 0,
141
- },
142
- }
143
-
144
- def _read_source(self, source_path: str) -> str:
145
- """Read source document content."""
146
- try:
147
- with open(source_path, encoding="utf-8") as f:
148
- return f.read()
149
- except OSError:
150
- return ""
151
-
152
- async def _extract_elements(self, content: str) -> dict[str, Any]:
153
- """Extract key elements from source document."""
154
- return {
155
- "headings": self._extract_headings(content),
156
- "code_blocks": self._extract_code_blocks(content),
157
- "key_concepts": self._extract_concepts(content),
158
- "metrics": self._extract_metrics(content),
159
- "examples": self._extract_examples(content),
160
- "word_count": len(content.split()),
161
- "complexity": self._assess_complexity(content),
162
- }
163
-
164
- def _extract_headings(self, content: str) -> list[dict]:
165
- """Extract markdown headings with levels."""
166
- headings = []
167
- for match in re.finditer(r"^(#{1,6})\s+(.+)$", content, re.MULTILINE):
168
- headings.append(
169
- {
170
- "level": len(match.group(1)),
171
- "text": match.group(2).strip(),
172
- },
173
- )
174
- return headings
175
-
176
- def _extract_code_blocks(self, content: str) -> list[dict]:
177
- """Extract code blocks with language hints."""
178
- blocks = []
179
- pattern = r"```(\w*)\n(.*?)```"
180
- for match in re.finditer(pattern, content, re.DOTALL):
181
- blocks.append(
182
- {
183
- "language": match.group(1) or "text",
184
- "code": match.group(2).strip(),
185
- "lines": len(match.group(2).strip().split("\n")),
186
- },
187
- )
188
- return blocks
189
-
190
- def _extract_concepts(self, content: str) -> list[str]:
191
- """Extract key concepts (bold text, definitions)."""
192
- concepts = []
193
- # Bold text often indicates key concepts
194
- for match in re.finditer(r"\*\*([^*]+)\*\*", content):
195
- concept = match.group(1).strip()
196
- if len(concept) < 50: # Reasonable concept length
197
- concepts.append(concept)
198
- return list(dict.fromkeys(concepts))[:20] # Dedupe (preserves order), limit
199
-
200
- def _extract_metrics(self, content: str) -> list[str]:
201
- """Extract metrics and numbers (good for book credibility)."""
202
- metrics = []
203
- # Look for percentage patterns
204
- for match in re.finditer(r"\d+\.?\d*%", content):
205
- metrics.append(match.group(0))
206
- # Look for multiplier patterns
207
- for match in re.finditer(r"\d+\.?\d*x\s+\w+", content):
208
- metrics.append(match.group(0))
209
- return list(dict.fromkeys(metrics))[:10] # Dedupe (preserves order)
210
-
211
- def _extract_examples(self, content: str) -> list[str]:
212
- """Extract example scenarios."""
213
- examples = []
214
- # Look for "Example:" or "For example" sections
215
- pattern = r"(?:Example|For example)[:\s]+([^\n]+(?:\n(?!\n)[^\n]+)*)"
216
- for match in re.finditer(pattern, content, re.IGNORECASE):
217
- examples.append(match.group(1).strip()[:200])
218
- return examples[:5]
219
-
220
- def _assess_complexity(self, content: str) -> str:
221
- """Assess content complexity."""
222
- code_ratio = content.count("```") / max(1, len(content.split()) / 100)
223
- if code_ratio > 2:
224
- return "high_code"
225
- if "architecture" in content.lower() or "system" in content.lower():
226
- return "architectural"
227
- if len(content.split()) < 500:
228
- return "brief"
229
- return "standard"
230
-
231
- async def _create_transformation_plan(
232
- self,
233
- elements: dict,
234
- chapter_num: int,
235
- chapter_title: str,
236
- book_context: str,
237
- ) -> dict[str, Any]:
238
- """Create a plan for transforming source to chapter."""
239
- return {
240
- "approach": self._determine_approach(elements),
241
- "structure_mapping": {
242
- "source_headings_to_sections": self._map_headings(elements["headings"]),
243
- "code_integration": f"{len(elements['code_blocks'])} blocks to integrate",
244
- "concepts_to_define": elements["key_concepts"][:10],
245
- "metrics_to_highlight": elements["metrics"],
246
- },
247
- "additions_needed": [
248
- "Opening quote",
249
- "Introduction with learning objectives",
250
- "Key takeaways section",
251
- "Try It Yourself exercise",
252
- "Next chapter navigation",
253
- ],
254
- "voice_adjustments": [
255
- "Convert technical jargon to accessible language",
256
- "Add narrative flow between sections",
257
- "Include 'why this matters' context",
258
- "Add real-world analogies where appropriate",
259
- ],
260
- "estimated_expansion": self._estimate_expansion(elements),
261
- }
262
-
263
- def _determine_approach(self, elements: dict) -> str:
264
- """Determine transformation approach based on content."""
265
- if elements["complexity"] == "high_code":
266
- return "code_first: Lead with examples, explain after"
267
- if elements["complexity"] == "architectural":
268
- return "concept_first: Explain architecture, then show implementation"
269
- if elements["complexity"] == "brief":
270
- return "expansion: Significantly expand with examples and context"
271
- return "balanced: Mix concepts and code throughout"
272
-
273
- def _map_headings(self, headings: list) -> list[dict]:
274
- """Map source headings to chapter sections."""
275
- mapped = []
276
- section_num = 1
277
- for h in headings:
278
- if h["level"] <= 2:
279
- mapped.append(
280
- {
281
- "source": h["text"],
282
- "target_section": f"Section {section_num}: {h['text']}",
283
- "recommendation": "Keep and expand",
284
- },
285
- )
286
- section_num += 1
287
- return mapped
288
-
289
- def _estimate_expansion(self, elements: dict) -> str:
290
- """Estimate how much expansion is needed."""
291
- source_words = elements["word_count"]
292
- if source_words < 500:
293
- return f"High expansion needed: {source_words} → ~3000 words (6x)"
294
- if source_words < 1500:
295
- return f"Moderate expansion: {source_words} → ~3500 words (2-3x)"
296
- return f"Light expansion: {source_words} → ~4000 words (1.5x)"
297
-
298
- async def _predict_transformation_issues(
299
- self,
300
- elements: dict,
301
- plan: dict,
302
- ) -> list[dict[str, Any]]:
303
- """Level 4: Predict issues before they occur."""
304
- predictions = []
305
-
306
- # Check for missing code examples
307
- if len(elements["code_blocks"]) < 3:
308
- predictions.append(
309
- {
310
- "type": "insufficient_code",
311
- "alert": (
312
- "Source has fewer than 3 code examples. "
313
- "Book chapters benefit from 5-8 code blocks for engagement."
314
- ),
315
- "probability": "high",
316
- "impact": "medium",
317
- "prevention": "Add additional examples during transformation",
318
- },
319
- )
320
-
321
- # Check for missing metrics
322
- if not elements["metrics"]:
323
- predictions.append(
324
- {
325
- "type": "missing_metrics",
326
- "alert": (
327
- "No metrics found in source. "
328
- "Readers trust content more with concrete numbers."
329
- ),
330
- "probability": "high",
331
- "impact": "medium",
332
- "prevention": "Add relevant metrics from project data",
333
- },
334
- )
335
-
336
- # Check for concept density
337
- if len(elements["key_concepts"]) > 15:
338
- predictions.append(
339
- {
340
- "type": "concept_overload",
341
- "alert": (
342
- f"Found {len(elements['key_concepts'])} key concepts. "
343
- "Consider splitting into multiple chapters or prioritizing."
344
- ),
345
- "probability": "medium",
346
- "impact": "high",
347
- "prevention": "Focus on 8-10 core concepts, defer others",
348
- },
349
- )
350
-
351
- # Check for missing examples
352
- if len(elements["examples"]) < 2:
353
- predictions.append(
354
- {
355
- "type": "insufficient_examples",
356
- "alert": (
357
- "Few practical examples found. "
358
- "Book chapters need real-world scenarios to resonate."
359
- ),
360
- "probability": "high",
361
- "impact": "high",
362
- "prevention": "Create 2-3 relatable use cases",
363
- },
364
- )
365
-
366
- return predictions
367
-
368
- def _generate_outline(
369
- self,
370
- elements: dict,
371
- chapter_num: int,
372
- chapter_title: str,
373
- ) -> str:
374
- """Generate chapter outline."""
375
- outline = f"""# Chapter {chapter_num}: {chapter_title}
376
-
377
- > "Opening quote here"
378
-
379
- ## Introduction
380
-
381
- - Why this topic matters
382
- - What you'll learn:
383
- - Learning objective 1
384
- - Learning objective 2
385
- - Learning objective 3
386
- - Connection to previous chapters
387
-
388
- ---
389
-
390
- """
391
- # Add sections from source headings
392
- for _i, h in enumerate(elements["headings"][:7], 1):
393
- if h["level"] <= 2:
394
- outline += f"""## {h["text"]}
395
-
396
- [Transform content from source]
397
- [Add code example]
398
- [Add practical application]
399
-
400
- ---
401
-
402
- """
403
-
404
- outline += """## Key Takeaways
405
-
406
- 1. Takeaway 1
407
- 2. Takeaway 2
408
- 3. Takeaway 3
409
- 4. Takeaway 4
410
- 5. Takeaway 5
411
-
412
- ---
413
-
414
- ## Try It Yourself
415
-
416
- **Exercise: [Title]**
417
-
418
- 1. Step 1
419
- 2. Step 2
420
- 3. Step 3
421
-
422
- **Expected outcome**: [Description]
423
-
424
- ---
425
-
426
- **Next:** [Chapter N+1: Title](./next-chapter.md)
427
- """
428
- return outline
429
-
430
- async def _generate_draft(
431
- self,
432
- elements: dict,
433
- outline: str,
434
- chapter_num: int,
435
- chapter_title: str,
436
- book_context: str,
437
- ) -> str:
438
- """Generate draft chapter content."""
439
- # This would ideally call an LLM for full generation
440
- # For now, return enhanced outline with guidance
441
- draft = f"""# Chapter {chapter_num}: {chapter_title}
442
-
443
- > "Quote to be selected based on chapter theme"
444
-
445
- ## Introduction
446
-
447
- [Opening hook connecting to reader's experience]
448
-
449
- Throughout this book, we've explored [previous context]. Now we turn to {chapter_title.lower()}, which [significance].
450
-
451
- **What You'll Learn:**
452
- """
453
- # Add learning objectives from concepts
454
- for _i, concept in enumerate(elements["key_concepts"][:4], 1):
455
- draft += f"- {concept}\n"
456
-
457
- draft += "\n---\n\n"
458
-
459
- # Add sections with code blocks
460
- for i, h in enumerate(elements["headings"][:6], 1):
461
- if h["level"] <= 2:
462
- draft += f"## {h['text']}\n\n"
463
- draft += "[Expand this section with narrative and examples]\n\n"
464
-
465
- # Add relevant code block if available
466
- if i <= len(elements["code_blocks"]):
467
- block = elements["code_blocks"][i - 1]
468
- draft += f"```{block['language']}\n{block['code']}\n```\n\n"
469
-
470
- draft += "---\n\n"
471
-
472
- # Add key takeaways
473
- draft += """## Key Takeaways
474
-
475
- """
476
- for i, concept in enumerate(elements["key_concepts"][:5], 1):
477
- draft += f"{i}. **{concept}** - [Expand with one-sentence summary]\n"
478
-
479
- draft += """
480
- ---
481
-
482
- ## Try It Yourself
483
-
484
- **Exercise: Apply What You've Learned**
485
-
486
- 1. [First step based on chapter content]
487
- 2. [Second step building on first]
488
- 3. [Third step completing the exercise]
489
-
490
- **Expected outcome**: [What success looks like]
491
-
492
- ---
493
-
494
- **Next:** [Next Chapter Title](./next-chapter.md)
495
- """
496
- return draft
497
-
498
- def _generate_recommendations(self, predictions: list) -> list[str]:
499
- """Generate actionable recommendations."""
500
- recs = []
501
-
502
- for pred in predictions:
503
- if pred.get("impact") in ["high", "medium"]:
504
- recs.append(f"[{pred['type'].upper()}] {pred['alert']}")
505
- recs.append(f" → Prevention: {pred['prevention']}")
506
-
507
- if not recs:
508
- recs.append("Source document is well-suited for transformation.")
509
- recs.append("Proceed with standard chapter structure.")
510
-
511
- return recs
512
-
513
- def _error_result(self, message: str) -> dict[str, Any]:
514
- """Return error result."""
515
- return {
516
- "error": message,
517
- "confidence": 0.0,
518
- "metadata": {"wizard": self.name},
519
- }