empathy-framework 3.2.3__py3-none-any.whl → 3.8.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (328) hide show
  1. coach_wizards/__init__.py +11 -12
  2. coach_wizards/accessibility_wizard.py +12 -12
  3. coach_wizards/api_wizard.py +12 -12
  4. coach_wizards/base_wizard.py +26 -20
  5. coach_wizards/cicd_wizard.py +15 -13
  6. coach_wizards/code_reviewer_README.md +60 -0
  7. coach_wizards/code_reviewer_wizard.py +180 -0
  8. coach_wizards/compliance_wizard.py +12 -12
  9. coach_wizards/database_wizard.py +12 -12
  10. coach_wizards/debugging_wizard.py +12 -12
  11. coach_wizards/documentation_wizard.py +12 -12
  12. coach_wizards/generate_wizards.py +1 -2
  13. coach_wizards/localization_wizard.py +101 -19
  14. coach_wizards/migration_wizard.py +12 -12
  15. coach_wizards/monitoring_wizard.py +12 -12
  16. coach_wizards/observability_wizard.py +12 -12
  17. coach_wizards/performance_wizard.py +12 -12
  18. coach_wizards/prompt_engineering_wizard.py +22 -25
  19. coach_wizards/refactoring_wizard.py +12 -12
  20. coach_wizards/scaling_wizard.py +12 -12
  21. coach_wizards/security_wizard.py +12 -12
  22. coach_wizards/testing_wizard.py +12 -12
  23. {empathy_framework-3.2.3.dist-info → empathy_framework-3.8.2.dist-info}/METADATA +513 -58
  24. empathy_framework-3.8.2.dist-info/RECORD +333 -0
  25. empathy_framework-3.8.2.dist-info/entry_points.txt +22 -0
  26. {empathy_framework-3.2.3.dist-info → empathy_framework-3.8.2.dist-info}/top_level.txt +5 -1
  27. empathy_healthcare_plugin/__init__.py +1 -2
  28. empathy_healthcare_plugin/monitors/__init__.py +9 -0
  29. empathy_healthcare_plugin/monitors/clinical_protocol_monitor.py +315 -0
  30. empathy_healthcare_plugin/monitors/monitoring/__init__.py +44 -0
  31. empathy_healthcare_plugin/monitors/monitoring/protocol_checker.py +300 -0
  32. empathy_healthcare_plugin/monitors/monitoring/protocol_loader.py +214 -0
  33. empathy_healthcare_plugin/monitors/monitoring/sensor_parsers.py +306 -0
  34. empathy_healthcare_plugin/monitors/monitoring/trajectory_analyzer.py +389 -0
  35. empathy_llm_toolkit/__init__.py +7 -7
  36. empathy_llm_toolkit/agent_factory/__init__.py +53 -0
  37. empathy_llm_toolkit/agent_factory/adapters/__init__.py +85 -0
  38. empathy_llm_toolkit/agent_factory/adapters/autogen_adapter.py +312 -0
  39. empathy_llm_toolkit/agent_factory/adapters/crewai_adapter.py +454 -0
  40. empathy_llm_toolkit/agent_factory/adapters/haystack_adapter.py +298 -0
  41. empathy_llm_toolkit/agent_factory/adapters/langchain_adapter.py +362 -0
  42. empathy_llm_toolkit/agent_factory/adapters/langgraph_adapter.py +333 -0
  43. empathy_llm_toolkit/agent_factory/adapters/native.py +228 -0
  44. empathy_llm_toolkit/agent_factory/adapters/wizard_adapter.py +426 -0
  45. empathy_llm_toolkit/agent_factory/base.py +305 -0
  46. empathy_llm_toolkit/agent_factory/crews/__init__.py +67 -0
  47. empathy_llm_toolkit/agent_factory/crews/code_review.py +1113 -0
  48. empathy_llm_toolkit/agent_factory/crews/health_check.py +1246 -0
  49. empathy_llm_toolkit/agent_factory/crews/refactoring.py +1128 -0
  50. empathy_llm_toolkit/agent_factory/crews/security_audit.py +1018 -0
  51. empathy_llm_toolkit/agent_factory/decorators.py +286 -0
  52. empathy_llm_toolkit/agent_factory/factory.py +558 -0
  53. empathy_llm_toolkit/agent_factory/framework.py +192 -0
  54. empathy_llm_toolkit/agent_factory/memory_integration.py +324 -0
  55. empathy_llm_toolkit/agent_factory/resilient.py +320 -0
  56. empathy_llm_toolkit/claude_memory.py +14 -15
  57. empathy_llm_toolkit/cli/__init__.py +8 -0
  58. empathy_llm_toolkit/cli/sync_claude.py +487 -0
  59. empathy_llm_toolkit/code_health.py +177 -22
  60. empathy_llm_toolkit/config/__init__.py +29 -0
  61. empathy_llm_toolkit/config/unified.py +295 -0
  62. empathy_llm_toolkit/contextual_patterns.py +11 -12
  63. empathy_llm_toolkit/core.py +51 -49
  64. empathy_llm_toolkit/git_pattern_extractor.py +16 -12
  65. empathy_llm_toolkit/levels.py +6 -13
  66. empathy_llm_toolkit/pattern_confidence.py +14 -18
  67. empathy_llm_toolkit/pattern_resolver.py +10 -12
  68. empathy_llm_toolkit/pattern_summary.py +13 -11
  69. empathy_llm_toolkit/providers.py +194 -28
  70. empathy_llm_toolkit/routing/__init__.py +32 -0
  71. empathy_llm_toolkit/routing/model_router.py +362 -0
  72. empathy_llm_toolkit/security/IMPLEMENTATION_SUMMARY.md +413 -0
  73. empathy_llm_toolkit/security/PHASE2_COMPLETE.md +384 -0
  74. empathy_llm_toolkit/security/PHASE2_SECRETS_DETECTOR_COMPLETE.md +271 -0
  75. empathy_llm_toolkit/security/QUICK_REFERENCE.md +316 -0
  76. empathy_llm_toolkit/security/README.md +262 -0
  77. empathy_llm_toolkit/security/__init__.py +62 -0
  78. empathy_llm_toolkit/security/audit_logger.py +929 -0
  79. empathy_llm_toolkit/security/audit_logger_example.py +152 -0
  80. empathy_llm_toolkit/security/pii_scrubber.py +640 -0
  81. empathy_llm_toolkit/security/secrets_detector.py +678 -0
  82. empathy_llm_toolkit/security/secrets_detector_example.py +304 -0
  83. empathy_llm_toolkit/security/secure_memdocs.py +1192 -0
  84. empathy_llm_toolkit/security/secure_memdocs_example.py +278 -0
  85. empathy_llm_toolkit/session_status.py +18 -20
  86. empathy_llm_toolkit/state.py +20 -21
  87. empathy_llm_toolkit/wizards/__init__.py +38 -0
  88. empathy_llm_toolkit/wizards/base_wizard.py +364 -0
  89. empathy_llm_toolkit/wizards/customer_support_wizard.py +190 -0
  90. empathy_llm_toolkit/wizards/healthcare_wizard.py +362 -0
  91. empathy_llm_toolkit/wizards/patient_assessment_README.md +64 -0
  92. empathy_llm_toolkit/wizards/patient_assessment_wizard.py +193 -0
  93. empathy_llm_toolkit/wizards/technology_wizard.py +194 -0
  94. empathy_os/__init__.py +76 -77
  95. empathy_os/adaptive/__init__.py +13 -0
  96. empathy_os/adaptive/task_complexity.py +127 -0
  97. empathy_os/{monitoring.py → agent_monitoring.py} +27 -27
  98. empathy_os/cache/__init__.py +117 -0
  99. empathy_os/cache/base.py +166 -0
  100. empathy_os/cache/dependency_manager.py +253 -0
  101. empathy_os/cache/hash_only.py +248 -0
  102. empathy_os/cache/hybrid.py +390 -0
  103. empathy_os/cache/storage.py +282 -0
  104. empathy_os/cli.py +515 -109
  105. empathy_os/cli_unified.py +189 -42
  106. empathy_os/config/__init__.py +63 -0
  107. empathy_os/config/xml_config.py +239 -0
  108. empathy_os/config.py +87 -36
  109. empathy_os/coordination.py +48 -54
  110. empathy_os/core.py +90 -99
  111. empathy_os/cost_tracker.py +20 -23
  112. empathy_os/dashboard/__init__.py +15 -0
  113. empathy_os/dashboard/server.py +743 -0
  114. empathy_os/discovery.py +9 -11
  115. empathy_os/emergence.py +20 -21
  116. empathy_os/exceptions.py +18 -30
  117. empathy_os/feedback_loops.py +27 -30
  118. empathy_os/levels.py +31 -34
  119. empathy_os/leverage_points.py +27 -28
  120. empathy_os/logging_config.py +11 -12
  121. empathy_os/memory/__init__.py +195 -0
  122. empathy_os/memory/claude_memory.py +466 -0
  123. empathy_os/memory/config.py +224 -0
  124. empathy_os/memory/control_panel.py +1298 -0
  125. empathy_os/memory/edges.py +179 -0
  126. empathy_os/memory/graph.py +567 -0
  127. empathy_os/memory/long_term.py +1194 -0
  128. empathy_os/memory/nodes.py +179 -0
  129. empathy_os/memory/redis_bootstrap.py +540 -0
  130. empathy_os/memory/security/__init__.py +31 -0
  131. empathy_os/memory/security/audit_logger.py +930 -0
  132. empathy_os/memory/security/pii_scrubber.py +640 -0
  133. empathy_os/memory/security/secrets_detector.py +678 -0
  134. empathy_os/memory/short_term.py +2119 -0
  135. empathy_os/memory/storage/__init__.py +15 -0
  136. empathy_os/memory/summary_index.py +583 -0
  137. empathy_os/memory/unified.py +619 -0
  138. empathy_os/metrics/__init__.py +12 -0
  139. empathy_os/metrics/prompt_metrics.py +190 -0
  140. empathy_os/models/__init__.py +136 -0
  141. empathy_os/models/__main__.py +13 -0
  142. empathy_os/models/cli.py +655 -0
  143. empathy_os/models/empathy_executor.py +354 -0
  144. empathy_os/models/executor.py +252 -0
  145. empathy_os/models/fallback.py +671 -0
  146. empathy_os/models/provider_config.py +563 -0
  147. empathy_os/models/registry.py +382 -0
  148. empathy_os/models/tasks.py +302 -0
  149. empathy_os/models/telemetry.py +548 -0
  150. empathy_os/models/token_estimator.py +378 -0
  151. empathy_os/models/validation.py +274 -0
  152. empathy_os/monitoring/__init__.py +52 -0
  153. empathy_os/monitoring/alerts.py +23 -0
  154. empathy_os/monitoring/alerts_cli.py +268 -0
  155. empathy_os/monitoring/multi_backend.py +271 -0
  156. empathy_os/monitoring/otel_backend.py +363 -0
  157. empathy_os/optimization/__init__.py +19 -0
  158. empathy_os/optimization/context_optimizer.py +272 -0
  159. empathy_os/pattern_library.py +29 -28
  160. empathy_os/persistence.py +30 -34
  161. empathy_os/platform_utils.py +261 -0
  162. empathy_os/plugins/__init__.py +28 -0
  163. empathy_os/plugins/base.py +361 -0
  164. empathy_os/plugins/registry.py +268 -0
  165. empathy_os/project_index/__init__.py +30 -0
  166. empathy_os/project_index/cli.py +335 -0
  167. empathy_os/project_index/crew_integration.py +430 -0
  168. empathy_os/project_index/index.py +425 -0
  169. empathy_os/project_index/models.py +501 -0
  170. empathy_os/project_index/reports.py +473 -0
  171. empathy_os/project_index/scanner.py +538 -0
  172. empathy_os/prompts/__init__.py +61 -0
  173. empathy_os/prompts/config.py +77 -0
  174. empathy_os/prompts/context.py +177 -0
  175. empathy_os/prompts/parser.py +285 -0
  176. empathy_os/prompts/registry.py +313 -0
  177. empathy_os/prompts/templates.py +208 -0
  178. empathy_os/redis_config.py +144 -58
  179. empathy_os/redis_memory.py +53 -56
  180. empathy_os/resilience/__init__.py +56 -0
  181. empathy_os/resilience/circuit_breaker.py +256 -0
  182. empathy_os/resilience/fallback.py +179 -0
  183. empathy_os/resilience/health.py +300 -0
  184. empathy_os/resilience/retry.py +209 -0
  185. empathy_os/resilience/timeout.py +135 -0
  186. empathy_os/routing/__init__.py +43 -0
  187. empathy_os/routing/chain_executor.py +433 -0
  188. empathy_os/routing/classifier.py +217 -0
  189. empathy_os/routing/smart_router.py +234 -0
  190. empathy_os/routing/wizard_registry.py +307 -0
  191. empathy_os/templates.py +12 -11
  192. empathy_os/trust/__init__.py +28 -0
  193. empathy_os/trust/circuit_breaker.py +579 -0
  194. empathy_os/trust_building.py +44 -36
  195. empathy_os/validation/__init__.py +19 -0
  196. empathy_os/validation/xml_validator.py +281 -0
  197. empathy_os/wizard_factory_cli.py +170 -0
  198. empathy_os/{workflows.py → workflow_commands.py} +123 -31
  199. empathy_os/workflows/__init__.py +360 -0
  200. empathy_os/workflows/base.py +1660 -0
  201. empathy_os/workflows/bug_predict.py +962 -0
  202. empathy_os/workflows/code_review.py +960 -0
  203. empathy_os/workflows/code_review_adapters.py +310 -0
  204. empathy_os/workflows/code_review_pipeline.py +720 -0
  205. empathy_os/workflows/config.py +600 -0
  206. empathy_os/workflows/dependency_check.py +648 -0
  207. empathy_os/workflows/document_gen.py +1069 -0
  208. empathy_os/workflows/documentation_orchestrator.py +1205 -0
  209. empathy_os/workflows/health_check.py +679 -0
  210. empathy_os/workflows/keyboard_shortcuts/__init__.py +39 -0
  211. empathy_os/workflows/keyboard_shortcuts/generators.py +386 -0
  212. empathy_os/workflows/keyboard_shortcuts/parsers.py +414 -0
  213. empathy_os/workflows/keyboard_shortcuts/prompts.py +295 -0
  214. empathy_os/workflows/keyboard_shortcuts/schema.py +193 -0
  215. empathy_os/workflows/keyboard_shortcuts/workflow.py +505 -0
  216. empathy_os/workflows/manage_documentation.py +804 -0
  217. empathy_os/workflows/new_sample_workflow1.py +146 -0
  218. empathy_os/workflows/new_sample_workflow1_README.md +150 -0
  219. empathy_os/workflows/perf_audit.py +687 -0
  220. empathy_os/workflows/pr_review.py +748 -0
  221. empathy_os/workflows/progress.py +445 -0
  222. empathy_os/workflows/progress_server.py +322 -0
  223. empathy_os/workflows/refactor_plan.py +693 -0
  224. empathy_os/workflows/release_prep.py +808 -0
  225. empathy_os/workflows/research_synthesis.py +404 -0
  226. empathy_os/workflows/secure_release.py +585 -0
  227. empathy_os/workflows/security_adapters.py +297 -0
  228. empathy_os/workflows/security_audit.py +1046 -0
  229. empathy_os/workflows/step_config.py +234 -0
  230. empathy_os/workflows/test5.py +125 -0
  231. empathy_os/workflows/test5_README.md +158 -0
  232. empathy_os/workflows/test_gen.py +1855 -0
  233. empathy_os/workflows/test_lifecycle.py +526 -0
  234. empathy_os/workflows/test_maintenance.py +626 -0
  235. empathy_os/workflows/test_maintenance_cli.py +590 -0
  236. empathy_os/workflows/test_maintenance_crew.py +821 -0
  237. empathy_os/workflows/xml_enhanced_crew.py +285 -0
  238. empathy_software_plugin/__init__.py +1 -2
  239. empathy_software_plugin/cli/__init__.py +120 -0
  240. empathy_software_plugin/cli/inspect.py +362 -0
  241. empathy_software_plugin/cli.py +35 -26
  242. empathy_software_plugin/plugin.py +4 -8
  243. empathy_software_plugin/wizards/__init__.py +42 -0
  244. empathy_software_plugin/wizards/advanced_debugging_wizard.py +392 -0
  245. empathy_software_plugin/wizards/agent_orchestration_wizard.py +511 -0
  246. empathy_software_plugin/wizards/ai_collaboration_wizard.py +503 -0
  247. empathy_software_plugin/wizards/ai_context_wizard.py +441 -0
  248. empathy_software_plugin/wizards/ai_documentation_wizard.py +503 -0
  249. empathy_software_plugin/wizards/base_wizard.py +288 -0
  250. empathy_software_plugin/wizards/book_chapter_wizard.py +519 -0
  251. empathy_software_plugin/wizards/code_review_wizard.py +606 -0
  252. empathy_software_plugin/wizards/debugging/__init__.py +50 -0
  253. empathy_software_plugin/wizards/debugging/bug_risk_analyzer.py +414 -0
  254. empathy_software_plugin/wizards/debugging/config_loaders.py +442 -0
  255. empathy_software_plugin/wizards/debugging/fix_applier.py +469 -0
  256. empathy_software_plugin/wizards/debugging/language_patterns.py +383 -0
  257. empathy_software_plugin/wizards/debugging/linter_parsers.py +470 -0
  258. empathy_software_plugin/wizards/debugging/verification.py +369 -0
  259. empathy_software_plugin/wizards/enhanced_testing_wizard.py +537 -0
  260. empathy_software_plugin/wizards/memory_enhanced_debugging_wizard.py +816 -0
  261. empathy_software_plugin/wizards/multi_model_wizard.py +501 -0
  262. empathy_software_plugin/wizards/pattern_extraction_wizard.py +422 -0
  263. empathy_software_plugin/wizards/pattern_retriever_wizard.py +400 -0
  264. empathy_software_plugin/wizards/performance/__init__.py +9 -0
  265. empathy_software_plugin/wizards/performance/bottleneck_detector.py +221 -0
  266. empathy_software_plugin/wizards/performance/profiler_parsers.py +278 -0
  267. empathy_software_plugin/wizards/performance/trajectory_analyzer.py +429 -0
  268. empathy_software_plugin/wizards/performance_profiling_wizard.py +305 -0
  269. empathy_software_plugin/wizards/prompt_engineering_wizard.py +425 -0
  270. empathy_software_plugin/wizards/rag_pattern_wizard.py +461 -0
  271. empathy_software_plugin/wizards/security/__init__.py +32 -0
  272. empathy_software_plugin/wizards/security/exploit_analyzer.py +290 -0
  273. empathy_software_plugin/wizards/security/owasp_patterns.py +241 -0
  274. empathy_software_plugin/wizards/security/vulnerability_scanner.py +604 -0
  275. empathy_software_plugin/wizards/security_analysis_wizard.py +322 -0
  276. empathy_software_plugin/wizards/security_learning_wizard.py +740 -0
  277. empathy_software_plugin/wizards/tech_debt_wizard.py +726 -0
  278. empathy_software_plugin/wizards/testing/__init__.py +27 -0
  279. empathy_software_plugin/wizards/testing/coverage_analyzer.py +459 -0
  280. empathy_software_plugin/wizards/testing/quality_analyzer.py +531 -0
  281. empathy_software_plugin/wizards/testing/test_suggester.py +533 -0
  282. empathy_software_plugin/wizards/testing_wizard.py +274 -0
  283. hot_reload/README.md +473 -0
  284. hot_reload/__init__.py +62 -0
  285. hot_reload/config.py +84 -0
  286. hot_reload/integration.py +228 -0
  287. hot_reload/reloader.py +298 -0
  288. hot_reload/watcher.py +179 -0
  289. hot_reload/websocket.py +176 -0
  290. scaffolding/README.md +589 -0
  291. scaffolding/__init__.py +35 -0
  292. scaffolding/__main__.py +14 -0
  293. scaffolding/cli.py +240 -0
  294. test_generator/__init__.py +38 -0
  295. test_generator/__main__.py +14 -0
  296. test_generator/cli.py +226 -0
  297. test_generator/generator.py +325 -0
  298. test_generator/risk_analyzer.py +216 -0
  299. workflow_patterns/__init__.py +33 -0
  300. workflow_patterns/behavior.py +249 -0
  301. workflow_patterns/core.py +76 -0
  302. workflow_patterns/output.py +99 -0
  303. workflow_patterns/registry.py +255 -0
  304. workflow_patterns/structural.py +288 -0
  305. workflow_scaffolding/__init__.py +11 -0
  306. workflow_scaffolding/__main__.py +12 -0
  307. workflow_scaffolding/cli.py +206 -0
  308. workflow_scaffolding/generator.py +265 -0
  309. agents/code_inspection/patterns/inspection/recurring_B112.json +0 -18
  310. agents/code_inspection/patterns/inspection/recurring_F541.json +0 -16
  311. agents/code_inspection/patterns/inspection/recurring_FORMAT.json +0 -25
  312. agents/code_inspection/patterns/inspection/recurring_bug_20250822_def456.json +0 -16
  313. agents/code_inspection/patterns/inspection/recurring_bug_20250915_abc123.json +0 -16
  314. agents/code_inspection/patterns/inspection/recurring_bug_20251212_3c5b9951.json +0 -16
  315. agents/code_inspection/patterns/inspection/recurring_bug_20251212_97c0f72f.json +0 -16
  316. agents/code_inspection/patterns/inspection/recurring_bug_20251212_a0871d53.json +0 -16
  317. agents/code_inspection/patterns/inspection/recurring_bug_20251212_a9b6ec41.json +0 -16
  318. agents/code_inspection/patterns/inspection/recurring_bug_null_001.json +0 -16
  319. agents/code_inspection/patterns/inspection/recurring_builtin.json +0 -16
  320. agents/compliance_anticipation_agent.py +0 -1427
  321. agents/epic_integration_wizard.py +0 -541
  322. agents/trust_building_behaviors.py +0 -891
  323. empathy_framework-3.2.3.dist-info/RECORD +0 -104
  324. empathy_framework-3.2.3.dist-info/entry_points.txt +0 -7
  325. empathy_llm_toolkit/htmlcov/status.json +0 -1
  326. empathy_llm_toolkit/security/htmlcov/status.json +0 -1
  327. {empathy_framework-3.2.3.dist-info → empathy_framework-3.8.2.dist-info}/WHEEL +0 -0
  328. {empathy_framework-3.2.3.dist-info → empathy_framework-3.8.2.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,313 @@
1
+ """Built-in XML Prompt Templates Registry
2
+
3
+ Provides pre-configured XML templates for common workflows.
4
+
5
+ Copyright 2025 Smart-AI-Memory
6
+ Licensed under Fair Source License 0.9
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ from .templates import XmlPromptTemplate
12
+
13
+ # =============================================================================
14
+ # Response Format Definitions
15
+ # =============================================================================
16
+
17
+ SECURITY_AUDIT_RESPONSE = """<response>
18
+ <summary>Brief overall security assessment (1-2 sentences)</summary>
19
+ <findings>
20
+ <finding severity="critical|high|medium|low|info">
21
+ <title>Issue title</title>
22
+ <location>file:line or component</location>
23
+ <details>Description of the vulnerability and potential impact</details>
24
+ <fix>Specific remediation steps with code example if applicable</fix>
25
+ </finding>
26
+ <!-- Additional findings... -->
27
+ </findings>
28
+ <remediation-checklist>
29
+ <item>Priority action item 1</item>
30
+ <item>Priority action item 2</item>
31
+ <!-- Additional items... -->
32
+ </remediation-checklist>
33
+ </response>"""
34
+
35
+ CODE_REVIEW_RESPONSE = """<response>
36
+ <summary>Brief review summary (1-2 sentences)</summary>
37
+ <verdict>approve|approve_with_suggestions|request_changes|reject</verdict>
38
+ <findings>
39
+ <finding severity="critical|high|medium|low|info">
40
+ <title>Issue title</title>
41
+ <location>file:line</location>
42
+ <details>Description of the issue</details>
43
+ <fix>Suggested fix or improvement</fix>
44
+ </finding>
45
+ <!-- Additional findings... -->
46
+ </findings>
47
+ <suggestions>
48
+ <suggestion>Optional improvement suggestion</suggestion>
49
+ <!-- Additional suggestions... -->
50
+ </suggestions>
51
+ <remediation-checklist>
52
+ <item>Required change 1</item>
53
+ <item>Required change 2</item>
54
+ <!-- Additional items if request_changes... -->
55
+ </remediation-checklist>
56
+ </response>"""
57
+
58
+ RESEARCH_RESPONSE = """<response>
59
+ <summary>Research synthesis summary (2-3 sentences)</summary>
60
+ <key-insights>
61
+ <insight>Key insight or finding 1</insight>
62
+ <insight>Key insight or finding 2</insight>
63
+ <!-- Additional insights... -->
64
+ </key-insights>
65
+ <findings>
66
+ <finding severity="info">
67
+ <title>Topic or concept</title>
68
+ <details>Explanation with context</details>
69
+ </finding>
70
+ <!-- Additional topics if needed... -->
71
+ </findings>
72
+ <confidence level="high|medium|low">Reasoning for confidence level</confidence>
73
+ <remediation-checklist>
74
+ <item>Recommended next step 1</item>
75
+ <item>Recommended next step 2</item>
76
+ </remediation-checklist>
77
+ </response>"""
78
+
79
+ BUG_ANALYSIS_RESPONSE = """<response>
80
+ <summary>Root cause summary (1-2 sentences)</summary>
81
+ <findings>
82
+ <finding severity="critical|high|medium|low">
83
+ <title>Bug description</title>
84
+ <location>file:line where issue originates</location>
85
+ <details>Root cause analysis</details>
86
+ <fix>Recommended fix with code</fix>
87
+ </finding>
88
+ </findings>
89
+ <remediation-checklist>
90
+ <item>Fix step 1</item>
91
+ <item>Verification step</item>
92
+ <item>Test to add</item>
93
+ </remediation-checklist>
94
+ </response>"""
95
+
96
+ PERF_AUDIT_RESPONSE = """<response>
97
+ <summary>Performance assessment summary (1-2 sentences)</summary>
98
+ <performance-score>0-100</performance-score>
99
+ <findings>
100
+ <finding severity="critical|high|medium|low">
101
+ <title>Performance issue title</title>
102
+ <location>file:line or component</location>
103
+ <details>Description of the bottleneck and its impact</details>
104
+ <fix>Optimization recommendation with code example</fix>
105
+ </finding>
106
+ </findings>
107
+ <remediation-checklist>
108
+ <item>Optimization priority 1</item>
109
+ <item>Optimization priority 2</item>
110
+ </remediation-checklist>
111
+ </response>"""
112
+
113
+ REFACTOR_PLAN_RESPONSE = """<response>
114
+ <summary>Tech debt assessment (1-2 sentences)</summary>
115
+ <trajectory>increasing|stable|decreasing</trajectory>
116
+ <findings>
117
+ <finding severity="high|medium|low">
118
+ <title>Debt item description</title>
119
+ <location>file:line</location>
120
+ <details>Impact and complexity assessment</details>
121
+ <fix>Refactoring approach</fix>
122
+ </finding>
123
+ </findings>
124
+ <roadmap>
125
+ <phase priority="1|2|3">
126
+ <name>Phase name</name>
127
+ <description>What to accomplish</description>
128
+ <effort>high|medium|low</effort>
129
+ </phase>
130
+ </roadmap>
131
+ <remediation-checklist>
132
+ <item>Immediate action 1</item>
133
+ <item>Immediate action 2</item>
134
+ </remediation-checklist>
135
+ </response>"""
136
+
137
+ TEST_GEN_RESPONSE = """<response>
138
+ <summary>Test generation summary (1-2 sentences)</summary>
139
+ <coverage-improvement>Estimated coverage improvement</coverage-improvement>
140
+ <findings>
141
+ <finding severity="info">
142
+ <title>Untested area</title>
143
+ <location>file:function or class</location>
144
+ <details>Why this needs testing</details>
145
+ <fix>Test approach recommendation</fix>
146
+ </finding>
147
+ </findings>
148
+ <tests>
149
+ <test target="function or class name">
150
+ <type>unit|integration|edge-case</type>
151
+ <description>What this test verifies</description>
152
+ <code><![CDATA[
153
+ def test_example():
154
+ # Test code here
155
+ pass
156
+ ]]></code>
157
+ </test>
158
+ </tests>
159
+ <remediation-checklist>
160
+ <item>Test to add first</item>
161
+ <item>Test to add second</item>
162
+ </remediation-checklist>
163
+ </response>"""
164
+
165
+ DOC_GEN_RESPONSE = """<response>
166
+ <summary>Documentation summary (1-2 sentences)</summary>
167
+ <sections>
168
+ <section name="Section Title">
169
+ <content>Section content in markdown</content>
170
+ </section>
171
+ </sections>
172
+ <findings>
173
+ <finding severity="info">
174
+ <title>Documentation gap or improvement</title>
175
+ <details>What needs documentation</details>
176
+ </finding>
177
+ </findings>
178
+ <remediation-checklist>
179
+ <item>Documentation improvement 1</item>
180
+ <item>Documentation improvement 2</item>
181
+ </remediation-checklist>
182
+ </response>"""
183
+
184
+ RELEASE_PREP_RESPONSE = """<response>
185
+ <summary>Release readiness assessment (1-2 sentences)</summary>
186
+ <verdict>approved|blocked|needs-review</verdict>
187
+ <confidence>high|medium|low</confidence>
188
+ <findings>
189
+ <finding severity="blocker|warning|info">
190
+ <title>Issue title</title>
191
+ <location>Component or area</location>
192
+ <details>Description of the issue</details>
193
+ <fix>Required action before release</fix>
194
+ </finding>
195
+ </findings>
196
+ <checklist>
197
+ <item status="pass|fail|skip">Check description</item>
198
+ </checklist>
199
+ <remediation-checklist>
200
+ <item>Pre-release action 1</item>
201
+ <item>Pre-release action 2</item>
202
+ </remediation-checklist>
203
+ </response>"""
204
+
205
+ DEPENDENCY_CHECK_RESPONSE = """<response>
206
+ <summary>Dependency security assessment (1-2 sentences)</summary>
207
+ <risk-level>critical|high|medium|low</risk-level>
208
+ <risk-score>0-100</risk-score>
209
+ <findings>
210
+ <finding severity="critical|high|medium|low">
211
+ <title>Vulnerability or issue</title>
212
+ <location>package@version</location>
213
+ <details>CVE or issue description</details>
214
+ <fix>Upgrade or mitigation recommendation</fix>
215
+ </finding>
216
+ </findings>
217
+ <remediation-checklist>
218
+ <item>Upgrade package X to version Y</item>
219
+ <item>Review dependency Z</item>
220
+ </remediation-checklist>
221
+ </response>"""
222
+
223
+
224
+ # =============================================================================
225
+ # Built-in Templates
226
+ # =============================================================================
227
+
228
+ BUILTIN_TEMPLATES: dict[str, XmlPromptTemplate] = {
229
+ "security-audit": XmlPromptTemplate(
230
+ name="security-audit",
231
+ schema_version="1.0",
232
+ response_format=SECURITY_AUDIT_RESPONSE,
233
+ ),
234
+ "code-review": XmlPromptTemplate(
235
+ name="code-review",
236
+ schema_version="1.0",
237
+ response_format=CODE_REVIEW_RESPONSE,
238
+ ),
239
+ "research": XmlPromptTemplate(
240
+ name="research",
241
+ schema_version="1.0",
242
+ response_format=RESEARCH_RESPONSE,
243
+ ),
244
+ "bug-analysis": XmlPromptTemplate(
245
+ name="bug-analysis",
246
+ schema_version="1.0",
247
+ response_format=BUG_ANALYSIS_RESPONSE,
248
+ ),
249
+ "perf-audit": XmlPromptTemplate(
250
+ name="perf-audit",
251
+ schema_version="1.0",
252
+ response_format=PERF_AUDIT_RESPONSE,
253
+ ),
254
+ "refactor-plan": XmlPromptTemplate(
255
+ name="refactor-plan",
256
+ schema_version="1.0",
257
+ response_format=REFACTOR_PLAN_RESPONSE,
258
+ ),
259
+ "test-gen": XmlPromptTemplate(
260
+ name="test-gen",
261
+ schema_version="1.0",
262
+ response_format=TEST_GEN_RESPONSE,
263
+ ),
264
+ "doc-gen": XmlPromptTemplate(
265
+ name="doc-gen",
266
+ schema_version="1.0",
267
+ response_format=DOC_GEN_RESPONSE,
268
+ ),
269
+ "release-prep": XmlPromptTemplate(
270
+ name="release-prep",
271
+ schema_version="1.0",
272
+ response_format=RELEASE_PREP_RESPONSE,
273
+ ),
274
+ "dependency-check": XmlPromptTemplate(
275
+ name="dependency-check",
276
+ schema_version="1.0",
277
+ response_format=DEPENDENCY_CHECK_RESPONSE,
278
+ ),
279
+ }
280
+
281
+
282
+ def get_template(name: str) -> XmlPromptTemplate | None:
283
+ """Get a built-in template by name.
284
+
285
+ Args:
286
+ name: Template name (e.g., "security-audit", "code-review").
287
+
288
+ Returns:
289
+ XmlPromptTemplate if found, None otherwise.
290
+
291
+ """
292
+ return BUILTIN_TEMPLATES.get(name)
293
+
294
+
295
+ def list_templates() -> list[str]:
296
+ """List all available built-in template names.
297
+
298
+ Returns:
299
+ List of template names.
300
+
301
+ """
302
+ return list(BUILTIN_TEMPLATES.keys())
303
+
304
+
305
+ def register_template(name: str, template: XmlPromptTemplate) -> None:
306
+ """Register a custom template.
307
+
308
+ Args:
309
+ name: Template name for lookup.
310
+ template: XmlPromptTemplate instance.
311
+
312
+ """
313
+ BUILTIN_TEMPLATES[name] = template
@@ -0,0 +1,208 @@
1
+ """Prompt Templates
2
+
3
+ Provides protocol and implementations for prompt templates,
4
+ including XML-structured prompts.
5
+
6
+ Copyright 2025 Smart-AI-Memory
7
+ Licensed under Fair Source License 0.9
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ from dataclasses import dataclass, field
13
+ from typing import Any, Protocol
14
+
15
+ from .context import PromptContext
16
+
17
+
18
+ class PromptTemplate(Protocol):
19
+ """Protocol for prompt templates."""
20
+
21
+ def render(self, context: PromptContext) -> str:
22
+ """Render the template with given context.
23
+
24
+ Args:
25
+ context: The prompt context containing role, goal, instructions, etc.
26
+
27
+ Returns:
28
+ The rendered prompt string.
29
+
30
+ """
31
+ ...
32
+
33
+
34
+ @dataclass
35
+ class PlainTextPromptTemplate:
36
+ """Simple plain text prompt template.
37
+
38
+ Renders prompts in a straightforward text format without XML structure.
39
+ """
40
+
41
+ name: str
42
+ include_role: bool = True
43
+ include_constraints: bool = True
44
+
45
+ def render(self, context: PromptContext) -> str:
46
+ """Render as plain text prompt."""
47
+ parts = []
48
+
49
+ if self.include_role:
50
+ parts.append(f"You are a {context.role}.")
51
+ parts.append("")
52
+
53
+ parts.append(f"Goal: {context.goal}")
54
+ parts.append("")
55
+
56
+ if context.instructions:
57
+ parts.append("Instructions:")
58
+ for i, inst in enumerate(context.instructions, 1):
59
+ parts.append(f"{i}. {inst}")
60
+ parts.append("")
61
+
62
+ if self.include_constraints and context.constraints:
63
+ parts.append("Guidelines:")
64
+ for constraint in context.constraints:
65
+ parts.append(f"- {constraint}")
66
+ parts.append("")
67
+
68
+ if context.input_payload:
69
+ parts.append(f"Input ({context.input_type}):")
70
+ parts.append(context.input_payload)
71
+
72
+ return "\n".join(parts)
73
+
74
+
75
+ @dataclass
76
+ class XmlPromptTemplate:
77
+ """XML-structured prompt template.
78
+
79
+ Renders prompts in XML format for consistent parsing and
80
+ structured LLM interactions.
81
+ """
82
+
83
+ name: str
84
+ schema_version: str = "1.0"
85
+ response_format: str | None = None
86
+ extra_tags: dict[str, str] = field(default_factory=dict)
87
+
88
+ def render(self, context: PromptContext) -> str:
89
+ """Render XML prompt from context.
90
+
91
+ Args:
92
+ context: The prompt context.
93
+
94
+ Returns:
95
+ XML-formatted prompt string.
96
+
97
+ """
98
+ # Build instructions XML
99
+ instructions_xml = self._render_instructions(context.instructions)
100
+
101
+ # Build constraints XML
102
+ constraints_xml = self._render_constraints(context.constraints)
103
+
104
+ # Build extra context XML if present
105
+ extra_xml = self._render_extra(context.extra)
106
+
107
+ # Build input section with CDATA for safety
108
+ input_content = self._escape_cdata(context.input_payload)
109
+
110
+ prompt = f"""<request schema="{self.schema_version}">
111
+ <role>{self._escape_xml(context.role)}</role>
112
+ <goal>{self._escape_xml(context.goal)}</goal>
113
+ <instructions>
114
+ {instructions_xml}
115
+ </instructions>
116
+ <constraints>
117
+ {constraints_xml}
118
+ </constraints>{extra_xml}
119
+ <input type="{context.input_type}">
120
+ <![CDATA[
121
+ {input_content}
122
+ ]]>
123
+ </input>
124
+ </request>"""
125
+
126
+ # Add response format instructions if specified
127
+ if self.response_format:
128
+ prompt += f"\n\n{self._response_instructions()}"
129
+
130
+ return prompt
131
+
132
+ def _render_instructions(self, instructions: list[str]) -> str:
133
+ """Render instructions as XML steps."""
134
+ if not instructions:
135
+ return " <!-- No specific instructions -->"
136
+ lines = []
137
+ for i, inst in enumerate(instructions, 1):
138
+ escaped = self._escape_xml(inst)
139
+ lines.append(f" <step>{i}. {escaped}</step>")
140
+ return "\n".join(lines)
141
+
142
+ def _render_constraints(self, constraints: list[str]) -> str:
143
+ """Render constraints as XML rules."""
144
+ if not constraints:
145
+ return " <!-- No specific constraints -->"
146
+ lines = []
147
+ for constraint in constraints:
148
+ escaped = self._escape_xml(constraint)
149
+ lines.append(f" <rule>{escaped}</rule>")
150
+ return "\n".join(lines)
151
+
152
+ def _render_extra(self, extra: dict[str, Any]) -> str:
153
+ """Render extra context as XML if present."""
154
+ if not extra:
155
+ return ""
156
+
157
+ lines = ["\n <context>"]
158
+ for key, value in extra.items():
159
+ if value: # Only include non-empty values
160
+ escaped_key = self._escape_xml(str(key))
161
+ escaped_value = self._escape_xml(str(value))
162
+ lines.append(f" <{escaped_key}>{escaped_value}</{escaped_key}>")
163
+ lines.append(" </context>")
164
+
165
+ return "\n".join(lines)
166
+
167
+ def _response_instructions(self) -> str:
168
+ """Generate response format instructions."""
169
+ return f"""Please respond using ONLY this XML format (no other text before or after):
170
+
171
+ {self.response_format}
172
+
173
+ Important:
174
+ - Use the exact XML structure shown above
175
+ - Include all required tags even if empty
176
+ - Use severity values: critical, high, medium, low, info
177
+ - Wrap code examples in CDATA sections"""
178
+
179
+ def _escape_xml(self, text: str) -> str:
180
+ """Escape special XML characters."""
181
+ if not text:
182
+ return ""
183
+ return (
184
+ text.replace("&", "&amp;")
185
+ .replace("<", "&lt;")
186
+ .replace(">", "&gt;")
187
+ .replace('"', "&quot;")
188
+ .replace("'", "&apos;")
189
+ )
190
+
191
+ def _escape_cdata(self, text: str) -> str:
192
+ """Escape text for use in CDATA section.
193
+
194
+ CDATA sections can contain anything except the closing sequence ]]>
195
+ """
196
+ if not text:
197
+ return ""
198
+ # Replace ]]> with ]]]]><![CDATA[> to escape it
199
+ return text.replace("]]>", "]]]]><![CDATA[>")
200
+
201
+ def with_response_format(self, response_format: str) -> XmlPromptTemplate:
202
+ """Return a new template with the specified response format."""
203
+ return XmlPromptTemplate(
204
+ name=self.name,
205
+ schema_version=self.schema_version,
206
+ response_format=response_format,
207
+ extra_tags=self.extra_tags.copy(),
208
+ )