moai-adk 0.35.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of moai-adk might be problematic. Click here for more details.

Files changed (502) hide show
  1. moai_adk/__init__.py +10 -0
  2. moai_adk/__main__.py +199 -0
  3. moai_adk/cli/__init__.py +6 -0
  4. moai_adk/cli/commands/__init__.py +17 -0
  5. moai_adk/cli/commands/analyze.py +116 -0
  6. moai_adk/cli/commands/doctor.py +272 -0
  7. moai_adk/cli/commands/init.py +372 -0
  8. moai_adk/cli/commands/language.py +248 -0
  9. moai_adk/cli/commands/status.py +104 -0
  10. moai_adk/cli/commands/update.py +2686 -0
  11. moai_adk/cli/main.py +13 -0
  12. moai_adk/cli/prompts/__init__.py +5 -0
  13. moai_adk/cli/prompts/init_prompts.py +219 -0
  14. moai_adk/cli/spec_status.py +263 -0
  15. moai_adk/cli/ui/__init__.py +44 -0
  16. moai_adk/cli/ui/progress.py +422 -0
  17. moai_adk/cli/ui/prompts.py +389 -0
  18. moai_adk/cli/ui/theme.py +129 -0
  19. moai_adk/cli/worktree/__init__.py +27 -0
  20. moai_adk/cli/worktree/__main__.py +31 -0
  21. moai_adk/cli/worktree/cli.py +683 -0
  22. moai_adk/cli/worktree/exceptions.py +89 -0
  23. moai_adk/cli/worktree/manager.py +493 -0
  24. moai_adk/cli/worktree/models.py +65 -0
  25. moai_adk/cli/worktree/registry.py +422 -0
  26. moai_adk/core/PHASE2_OPTIMIZATIONS.md +467 -0
  27. moai_adk/core/__init__.py +1 -0
  28. moai_adk/core/analysis/__init__.py +9 -0
  29. moai_adk/core/analysis/session_analyzer.py +400 -0
  30. moai_adk/core/claude_integration.py +393 -0
  31. moai_adk/core/command_helpers.py +270 -0
  32. moai_adk/core/comprehensive_monitoring_system.py +1183 -0
  33. moai_adk/core/config/__init__.py +19 -0
  34. moai_adk/core/config/auto_spec_config.py +340 -0
  35. moai_adk/core/config/migration.py +244 -0
  36. moai_adk/core/config/unified.py +436 -0
  37. moai_adk/core/context_manager.py +273 -0
  38. moai_adk/core/diagnostics/__init__.py +19 -0
  39. moai_adk/core/diagnostics/slash_commands.py +159 -0
  40. moai_adk/core/enterprise_features.py +1404 -0
  41. moai_adk/core/error_recovery_system.py +1902 -0
  42. moai_adk/core/event_driven_hook_system.py +1371 -0
  43. moai_adk/core/git/__init__.py +31 -0
  44. moai_adk/core/git/branch.py +25 -0
  45. moai_adk/core/git/branch_manager.py +129 -0
  46. moai_adk/core/git/checkpoint.py +134 -0
  47. moai_adk/core/git/commit.py +67 -0
  48. moai_adk/core/git/conflict_detector.py +413 -0
  49. moai_adk/core/git/event_detector.py +79 -0
  50. moai_adk/core/git/manager.py +216 -0
  51. moai_adk/core/hooks/post_tool_auto_spec_completion.py +901 -0
  52. moai_adk/core/input_validation_middleware.py +1006 -0
  53. moai_adk/core/integration/__init__.py +22 -0
  54. moai_adk/core/integration/engine.py +157 -0
  55. moai_adk/core/integration/integration_tester.py +226 -0
  56. moai_adk/core/integration/models.py +88 -0
  57. moai_adk/core/integration/utils.py +211 -0
  58. moai_adk/core/issue_creator.py +305 -0
  59. moai_adk/core/jit_context_loader.py +956 -0
  60. moai_adk/core/jit_enhanced_hook_manager.py +1987 -0
  61. moai_adk/core/language_config.py +202 -0
  62. moai_adk/core/language_config_resolver.py +572 -0
  63. moai_adk/core/language_validator.py +543 -0
  64. moai_adk/core/mcp/setup.py +116 -0
  65. moai_adk/core/merge/__init__.py +9 -0
  66. moai_adk/core/merge/analyzer.py +605 -0
  67. moai_adk/core/migration/__init__.py +18 -0
  68. moai_adk/core/migration/alfred_to_moai_migrator.py +383 -0
  69. moai_adk/core/migration/backup_manager.py +277 -0
  70. moai_adk/core/migration/custom_element_scanner.py +358 -0
  71. moai_adk/core/migration/file_migrator.py +209 -0
  72. moai_adk/core/migration/interactive_checkbox_ui.py +488 -0
  73. moai_adk/core/migration/selective_restorer.py +470 -0
  74. moai_adk/core/migration/template_utils.py +74 -0
  75. moai_adk/core/migration/user_selection_ui.py +338 -0
  76. moai_adk/core/migration/version_detector.py +139 -0
  77. moai_adk/core/migration/version_migrator.py +228 -0
  78. moai_adk/core/performance/__init__.py +6 -0
  79. moai_adk/core/performance/cache_system.py +316 -0
  80. moai_adk/core/performance/parallel_processor.py +116 -0
  81. moai_adk/core/phase_optimized_hook_scheduler.py +879 -0
  82. moai_adk/core/project/__init__.py +1 -0
  83. moai_adk/core/project/backup_utils.py +70 -0
  84. moai_adk/core/project/checker.py +300 -0
  85. moai_adk/core/project/detector.py +293 -0
  86. moai_adk/core/project/initializer.py +387 -0
  87. moai_adk/core/project/phase_executor.py +716 -0
  88. moai_adk/core/project/validator.py +139 -0
  89. moai_adk/core/quality/__init__.py +6 -0
  90. moai_adk/core/quality/trust_checker.py +377 -0
  91. moai_adk/core/quality/validators/__init__.py +6 -0
  92. moai_adk/core/quality/validators/base_validator.py +19 -0
  93. moai_adk/core/realtime_monitoring_dashboard.py +1724 -0
  94. moai_adk/core/robust_json_parser.py +611 -0
  95. moai_adk/core/rollback_manager.py +918 -0
  96. moai_adk/core/session_manager.py +651 -0
  97. moai_adk/core/skill_loading_system.py +579 -0
  98. moai_adk/core/spec/confidence_scoring.py +680 -0
  99. moai_adk/core/spec/ears_template_engine.py +1247 -0
  100. moai_adk/core/spec/quality_validator.py +687 -0
  101. moai_adk/core/spec_status_manager.py +478 -0
  102. moai_adk/core/template/__init__.py +7 -0
  103. moai_adk/core/template/backup.py +174 -0
  104. moai_adk/core/template/config.py +191 -0
  105. moai_adk/core/template/languages.py +43 -0
  106. moai_adk/core/template/merger.py +233 -0
  107. moai_adk/core/template/processor.py +1200 -0
  108. moai_adk/core/template_engine.py +310 -0
  109. moai_adk/core/template_variable_synchronizer.py +417 -0
  110. moai_adk/core/unified_permission_manager.py +745 -0
  111. moai_adk/core/user_behavior_analytics.py +851 -0
  112. moai_adk/core/version_sync.py +429 -0
  113. moai_adk/foundation/__init__.py +56 -0
  114. moai_adk/foundation/backend.py +1027 -0
  115. moai_adk/foundation/database.py +1115 -0
  116. moai_adk/foundation/devops.py +1585 -0
  117. moai_adk/foundation/ears.py +431 -0
  118. moai_adk/foundation/frontend.py +870 -0
  119. moai_adk/foundation/git/commit_templates.py +557 -0
  120. moai_adk/foundation/git.py +376 -0
  121. moai_adk/foundation/langs.py +484 -0
  122. moai_adk/foundation/ml_ops.py +1162 -0
  123. moai_adk/foundation/testing.py +1524 -0
  124. moai_adk/foundation/trust/trust_principles.py +676 -0
  125. moai_adk/foundation/trust/validation_checklist.py +1573 -0
  126. moai_adk/project/__init__.py +0 -0
  127. moai_adk/project/configuration.py +1084 -0
  128. moai_adk/project/documentation.py +566 -0
  129. moai_adk/project/schema.py +447 -0
  130. moai_adk/statusline/__init__.py +38 -0
  131. moai_adk/statusline/alfred_detector.py +105 -0
  132. moai_adk/statusline/config.py +376 -0
  133. moai_adk/statusline/enhanced_output_style_detector.py +372 -0
  134. moai_adk/statusline/git_collector.py +190 -0
  135. moai_adk/statusline/main.py +322 -0
  136. moai_adk/statusline/metrics_tracker.py +78 -0
  137. moai_adk/statusline/renderer.py +343 -0
  138. moai_adk/statusline/update_checker.py +129 -0
  139. moai_adk/statusline/version_reader.py +741 -0
  140. moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +714 -0
  141. moai_adk/templates/.claude/agents/moai/builder-agent.md +474 -0
  142. moai_adk/templates/.claude/agents/moai/builder-command.md +1172 -0
  143. moai_adk/templates/.claude/agents/moai/builder-plugin.md +637 -0
  144. moai_adk/templates/.claude/agents/moai/builder-skill.md +666 -0
  145. moai_adk/templates/.claude/agents/moai/expert-backend.md +899 -0
  146. moai_adk/templates/.claude/agents/moai/expert-database.md +777 -0
  147. moai_adk/templates/.claude/agents/moai/expert-debug.md +401 -0
  148. moai_adk/templates/.claude/agents/moai/expert-devops.md +720 -0
  149. moai_adk/templates/.claude/agents/moai/expert-frontend.md +734 -0
  150. moai_adk/templates/.claude/agents/moai/expert-performance.md +657 -0
  151. moai_adk/templates/.claude/agents/moai/expert-security.md +513 -0
  152. moai_adk/templates/.claude/agents/moai/expert-testing.md +733 -0
  153. moai_adk/templates/.claude/agents/moai/expert-uiux.md +1041 -0
  154. moai_adk/templates/.claude/agents/moai/manager-claude-code.md +432 -0
  155. moai_adk/templates/.claude/agents/moai/manager-docs.md +573 -0
  156. moai_adk/templates/.claude/agents/moai/manager-git.md +1060 -0
  157. moai_adk/templates/.claude/agents/moai/manager-project.md +891 -0
  158. moai_adk/templates/.claude/agents/moai/manager-quality.md +624 -0
  159. moai_adk/templates/.claude/agents/moai/manager-spec.md +809 -0
  160. moai_adk/templates/.claude/agents/moai/manager-strategy.md +780 -0
  161. moai_adk/templates/.claude/agents/moai/manager-tdd.md +784 -0
  162. moai_adk/templates/.claude/agents/moai/mcp-context7.md +458 -0
  163. moai_adk/templates/.claude/agents/moai/mcp-figma.md +1607 -0
  164. moai_adk/templates/.claude/agents/moai/mcp-notion.md +789 -0
  165. moai_adk/templates/.claude/agents/moai/mcp-playwright.md +469 -0
  166. moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +1032 -0
  167. moai_adk/templates/.claude/commands/moai/0-project.md +1386 -0
  168. moai_adk/templates/.claude/commands/moai/1-plan.md +1427 -0
  169. moai_adk/templates/.claude/commands/moai/2-run.md +943 -0
  170. moai_adk/templates/.claude/commands/moai/3-sync.md +1324 -0
  171. moai_adk/templates/.claude/commands/moai/9-feedback.md +314 -0
  172. moai_adk/templates/.claude/hooks/__init__.py +8 -0
  173. moai_adk/templates/.claude/hooks/moai/__init__.py +8 -0
  174. moai_adk/templates/.claude/hooks/moai/lib/__init__.py +85 -0
  175. moai_adk/templates/.claude/hooks/moai/lib/checkpoint.py +244 -0
  176. moai_adk/templates/.claude/hooks/moai/lib/common.py +131 -0
  177. moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +446 -0
  178. moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +639 -0
  179. moai_adk/templates/.claude/hooks/moai/lib/example_config.json +104 -0
  180. moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +590 -0
  181. moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +317 -0
  182. moai_adk/templates/.claude/hooks/moai/lib/models.py +102 -0
  183. moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +28 -0
  184. moai_adk/templates/.claude/hooks/moai/lib/project.py +768 -0
  185. moai_adk/templates/.claude/hooks/moai/lib/test_hooks_improvements.py +443 -0
  186. moai_adk/templates/.claude/hooks/moai/lib/timeout.py +160 -0
  187. moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +530 -0
  188. moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +862 -0
  189. moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +1083 -0
  190. moai_adk/templates/.claude/output-styles/moai/r2d2.md +560 -0
  191. moai_adk/templates/.claude/output-styles/moai/yoda.md +359 -0
  192. moai_adk/templates/.claude/settings.json +172 -0
  193. moai_adk/templates/.claude/skills/moai-ai-nano-banana/SKILL.md +307 -0
  194. moai_adk/templates/.claude/skills/moai-ai-nano-banana/examples.md +431 -0
  195. moai_adk/templates/.claude/skills/moai-ai-nano-banana/scripts/batch_generate.py +560 -0
  196. moai_adk/templates/.claude/skills/moai-ai-nano-banana/scripts/generate_image.py +362 -0
  197. moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +249 -0
  198. moai_adk/templates/.claude/skills/moai-docs-generation/examples.md +406 -0
  199. moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +44 -0
  200. moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +130 -0
  201. moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +152 -0
  202. moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +178 -0
  203. moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +147 -0
  204. moai_adk/templates/.claude/skills/moai-docs-generation/reference.md +328 -0
  205. moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +320 -0
  206. moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +718 -0
  207. moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +464 -0
  208. moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +323 -0
  209. moai_adk/templates/.claude/skills/moai-domain-database/examples.md +830 -0
  210. moai_adk/templates/.claude/skills/moai-domain-database/modules/README.md +53 -0
  211. moai_adk/templates/.claude/skills/moai-domain-database/modules/mongodb.md +231 -0
  212. moai_adk/templates/.claude/skills/moai-domain-database/modules/postgresql.md +169 -0
  213. moai_adk/templates/.claude/skills/moai-domain-database/modules/redis.md +262 -0
  214. moai_adk/templates/.claude/skills/moai-domain-database/reference.md +545 -0
  215. moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +497 -0
  216. moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +968 -0
  217. moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +664 -0
  218. moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +455 -0
  219. moai_adk/templates/.claude/skills/moai-domain-uiux/examples.md +560 -0
  220. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/accessibility-wcag.md +260 -0
  221. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/component-architecture.md +228 -0
  222. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/icon-libraries.md +401 -0
  223. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/theming-system.md +373 -0
  224. moai_adk/templates/.claude/skills/moai-domain-uiux/reference.md +243 -0
  225. moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +492 -0
  226. moai_adk/templates/.claude/skills/moai-formats-data/examples.md +804 -0
  227. moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +98 -0
  228. moai_adk/templates/.claude/skills/moai-formats-data/modules/SKILL-MODULARIZATION-TEMPLATE.md +278 -0
  229. moai_adk/templates/.claude/skills/moai-formats-data/modules/caching-performance.md +459 -0
  230. moai_adk/templates/.claude/skills/moai-formats-data/modules/data-validation.md +485 -0
  231. moai_adk/templates/.claude/skills/moai-formats-data/modules/json-optimization.md +374 -0
  232. moai_adk/templates/.claude/skills/moai-formats-data/modules/toon-encoding.md +308 -0
  233. moai_adk/templates/.claude/skills/moai-formats-data/reference.md +585 -0
  234. moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +202 -0
  235. moai_adk/templates/.claude/skills/moai-foundation-claude/examples.md +732 -0
  236. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/best-practices-checklist.md +616 -0
  237. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +729 -0
  238. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +560 -0
  239. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-iam-official.md +635 -0
  240. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-memory-official.md +543 -0
  241. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-settings-official.md +663 -0
  242. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +113 -0
  243. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +238 -0
  244. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/complete-configuration-guide.md +175 -0
  245. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-examples.md +1674 -0
  246. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-formatting-guide.md +729 -0
  247. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-examples.md +1513 -0
  248. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-formatting-guide.md +1086 -0
  249. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-integration-patterns.md +1100 -0
  250. moai_adk/templates/.claude/skills/moai-foundation-claude/reference.md +209 -0
  251. moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +441 -0
  252. moai_adk/templates/.claude/skills/moai-foundation-context/examples.md +1048 -0
  253. moai_adk/templates/.claude/skills/moai-foundation-context/reference.md +246 -0
  254. moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +420 -0
  255. moai_adk/templates/.claude/skills/moai-foundation-core/examples.md +358 -0
  256. moai_adk/templates/.claude/skills/moai-foundation-core/modules/README.md +296 -0
  257. moai_adk/templates/.claude/skills/moai-foundation-core/modules/agents-reference.md +359 -0
  258. moai_adk/templates/.claude/skills/moai-foundation-core/modules/commands-reference.md +432 -0
  259. moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +757 -0
  260. moai_adk/templates/.claude/skills/moai-foundation-core/modules/execution-rules.md +687 -0
  261. moai_adk/templates/.claude/skills/moai-foundation-core/modules/modular-system.md +665 -0
  262. moai_adk/templates/.claude/skills/moai-foundation-core/modules/progressive-disclosure.md +649 -0
  263. moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +864 -0
  264. moai_adk/templates/.claude/skills/moai-foundation-core/modules/token-optimization.md +708 -0
  265. moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +981 -0
  266. moai_adk/templates/.claude/skills/moai-foundation-core/reference.md +478 -0
  267. moai_adk/templates/.claude/skills/moai-foundation-philosopher/SKILL.md +315 -0
  268. moai_adk/templates/.claude/skills/moai-foundation-philosopher/examples.md +228 -0
  269. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/assumption-matrix.md +80 -0
  270. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/cognitive-bias.md +199 -0
  271. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/first-principles.md +140 -0
  272. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/trade-off-analysis.md +154 -0
  273. moai_adk/templates/.claude/skills/moai-foundation-philosopher/reference.md +157 -0
  274. moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +364 -0
  275. moai_adk/templates/.claude/skills/moai-foundation-quality/examples.md +1232 -0
  276. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/best-practices.md +261 -0
  277. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/integration-patterns.md +194 -0
  278. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/proactive-analysis.md +229 -0
  279. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/trust5-validation.md +169 -0
  280. moai_adk/templates/.claude/skills/moai-foundation-quality/reference.md +1266 -0
  281. moai_adk/templates/.claude/skills/moai-foundation-quality/scripts/quality-gate.sh +668 -0
  282. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/github-actions-quality.yml +481 -0
  283. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/quality-config.yaml +519 -0
  284. moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +649 -0
  285. moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +478 -0
  286. moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +612 -0
  287. moai_adk/templates/.claude/skills/moai-lang-flutter/SKILL.md +477 -0
  288. moai_adk/templates/.claude/skills/moai-lang-flutter/examples.md +1090 -0
  289. moai_adk/templates/.claude/skills/moai-lang-flutter/reference.md +686 -0
  290. moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +376 -0
  291. moai_adk/templates/.claude/skills/moai-lang-go/examples.md +919 -0
  292. moai_adk/templates/.claude/skills/moai-lang-go/reference.md +737 -0
  293. moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +385 -0
  294. moai_adk/templates/.claude/skills/moai-lang-java/examples.md +864 -0
  295. moai_adk/templates/.claude/skills/moai-lang-java/reference.md +291 -0
  296. moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +382 -0
  297. moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +1006 -0
  298. moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +562 -0
  299. moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +644 -0
  300. moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +481 -0
  301. moai_adk/templates/.claude/skills/moai-lang-python/examples.md +977 -0
  302. moai_adk/templates/.claude/skills/moai-lang-python/reference.md +804 -0
  303. moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +579 -0
  304. moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +687 -0
  305. moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +372 -0
  306. moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +659 -0
  307. moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +504 -0
  308. moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +497 -0
  309. moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +633 -0
  310. moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +423 -0
  311. moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +497 -0
  312. moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +918 -0
  313. moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +672 -0
  314. moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +368 -0
  315. moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +1089 -0
  316. moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +731 -0
  317. moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +300 -0
  318. moai_adk/templates/.claude/skills/moai-library-mermaid/advanced-patterns.md +465 -0
  319. moai_adk/templates/.claude/skills/moai-library-mermaid/examples.md +270 -0
  320. moai_adk/templates/.claude/skills/moai-library-mermaid/optimization.md +440 -0
  321. moai_adk/templates/.claude/skills/moai-library-mermaid/reference.md +228 -0
  322. moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +319 -0
  323. moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +336 -0
  324. moai_adk/templates/.claude/skills/moai-library-nextra/examples.md +592 -0
  325. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-deployment-patterns.md +182 -0
  326. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +17 -0
  327. moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +57 -0
  328. moai_adk/templates/.claude/skills/moai-library-nextra/modules/content-architecture-optimization.md +162 -0
  329. moai_adk/templates/.claude/skills/moai-library-nextra/modules/deployment.md +52 -0
  330. moai_adk/templates/.claude/skills/moai-library-nextra/modules/framework-core-configuration.md +186 -0
  331. moai_adk/templates/.claude/skills/moai-library-nextra/modules/i18n-setup.md +55 -0
  332. moai_adk/templates/.claude/skills/moai-library-nextra/modules/mdx-components.md +52 -0
  333. moai_adk/templates/.claude/skills/moai-library-nextra/optimization.md +303 -0
  334. moai_adk/templates/.claude/skills/moai-library-nextra/reference.md +379 -0
  335. moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +372 -0
  336. moai_adk/templates/.claude/skills/moai-library-shadcn/examples.md +575 -0
  337. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/advanced-patterns.md +394 -0
  338. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/optimization.md +278 -0
  339. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-components.md +457 -0
  340. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-theming.md +373 -0
  341. moai_adk/templates/.claude/skills/moai-library-shadcn/reference.md +74 -0
  342. moai_adk/templates/.claude/skills/moai-mcp-figma/SKILL.md +402 -0
  343. moai_adk/templates/.claude/skills/moai-mcp-figma/advanced-patterns.md +607 -0
  344. moai_adk/templates/.claude/skills/moai-mcp-notion/SKILL.md +300 -0
  345. moai_adk/templates/.claude/skills/moai-mcp-notion/advanced-patterns.md +537 -0
  346. moai_adk/templates/.claude/skills/moai-platform-auth0/SKILL.md +291 -0
  347. moai_adk/templates/.claude/skills/moai-platform-clerk/SKILL.md +390 -0
  348. moai_adk/templates/.claude/skills/moai-platform-convex/SKILL.md +398 -0
  349. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/SKILL.md +379 -0
  350. moai_adk/templates/.claude/skills/moai-platform-firestore/SKILL.md +358 -0
  351. moai_adk/templates/.claude/skills/moai-platform-neon/SKILL.md +467 -0
  352. moai_adk/templates/.claude/skills/moai-platform-railway/SKILL.md +377 -0
  353. moai_adk/templates/.claude/skills/moai-platform-supabase/SKILL.md +466 -0
  354. moai_adk/templates/.claude/skills/moai-platform-vercel/SKILL.md +482 -0
  355. moai_adk/templates/.claude/skills/moai-plugin-builder/SKILL.md +474 -0
  356. moai_adk/templates/.claude/skills/moai-plugin-builder/examples.md +621 -0
  357. moai_adk/templates/.claude/skills/moai-plugin-builder/migration.md +341 -0
  358. moai_adk/templates/.claude/skills/moai-plugin-builder/reference.md +463 -0
  359. moai_adk/templates/.claude/skills/moai-plugin-builder/validation.md +373 -0
  360. moai_adk/templates/.claude/skills/moai-security-auth0/SKILL.md +275 -0
  361. moai_adk/templates/.claude/skills/moai-security-auth0/modules/adaptive-mfa.md +233 -0
  362. moai_adk/templates/.claude/skills/moai-security-auth0/modules/akamai-integration.md +215 -0
  363. moai_adk/templates/.claude/skills/moai-security-auth0/modules/application-credentials.md +280 -0
  364. moai_adk/templates/.claude/skills/moai-security-auth0/modules/attack-protection-log-events.md +225 -0
  365. moai_adk/templates/.claude/skills/moai-security-auth0/modules/attack-protection-overview.md +140 -0
  366. moai_adk/templates/.claude/skills/moai-security-auth0/modules/bot-detection.md +144 -0
  367. moai_adk/templates/.claude/skills/moai-security-auth0/modules/breached-password-detection.md +187 -0
  368. moai_adk/templates/.claude/skills/moai-security-auth0/modules/brute-force-protection.md +189 -0
  369. moai_adk/templates/.claude/skills/moai-security-auth0/modules/certifications.md +282 -0
  370. moai_adk/templates/.claude/skills/moai-security-auth0/modules/compliance-overview.md +263 -0
  371. moai_adk/templates/.claude/skills/moai-security-auth0/modules/continuous-session-protection.md +307 -0
  372. moai_adk/templates/.claude/skills/moai-security-auth0/modules/customize-mfa.md +178 -0
  373. moai_adk/templates/.claude/skills/moai-security-auth0/modules/dpop-implementation.md +283 -0
  374. moai_adk/templates/.claude/skills/moai-security-auth0/modules/fapi-implementation.md +259 -0
  375. moai_adk/templates/.claude/skills/moai-security-auth0/modules/gdpr-compliance.md +313 -0
  376. moai_adk/templates/.claude/skills/moai-security-auth0/modules/guardian-configuration.md +269 -0
  377. moai_adk/templates/.claude/skills/moai-security-auth0/modules/highly-regulated-identity.md +272 -0
  378. moai_adk/templates/.claude/skills/moai-security-auth0/modules/jwt-fundamentals.md +248 -0
  379. moai_adk/templates/.claude/skills/moai-security-auth0/modules/mdl-verification.md +211 -0
  380. moai_adk/templates/.claude/skills/moai-security-auth0/modules/mfa-api-management.md +278 -0
  381. moai_adk/templates/.claude/skills/moai-security-auth0/modules/mfa-factors.md +226 -0
  382. moai_adk/templates/.claude/skills/moai-security-auth0/modules/mfa-overview.md +174 -0
  383. moai_adk/templates/.claude/skills/moai-security-auth0/modules/mtls-sender-constraining.md +316 -0
  384. moai_adk/templates/.claude/skills/moai-security-auth0/modules/ropg-flow-mfa.md +217 -0
  385. moai_adk/templates/.claude/skills/moai-security-auth0/modules/security-center.md +325 -0
  386. moai_adk/templates/.claude/skills/moai-security-auth0/modules/security-guidance.md +277 -0
  387. moai_adk/templates/.claude/skills/moai-security-auth0/modules/state-parameters.md +178 -0
  388. moai_adk/templates/.claude/skills/moai-security-auth0/modules/step-up-authentication.md +251 -0
  389. moai_adk/templates/.claude/skills/moai-security-auth0/modules/suspicious-ip-throttling.md +240 -0
  390. moai_adk/templates/.claude/skills/moai-security-auth0/modules/tenant-access-control.md +180 -0
  391. moai_adk/templates/.claude/skills/moai-security-auth0/modules/webauthn-fido.md +235 -0
  392. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +449 -0
  393. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/advanced-patterns.md +379 -0
  394. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/examples.md +544 -0
  395. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/optimization.md +286 -0
  396. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/reference.md +307 -0
  397. moai_adk/templates/.claude/skills/moai-workflow-project/README.md +190 -0
  398. moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +390 -0
  399. moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +520 -0
  400. moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +574 -0
  401. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +317 -0
  402. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +663 -0
  403. moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +190 -0
  404. moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +175 -0
  405. moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +196 -0
  406. moai_adk/templates/.claude/skills/moai-workflow-project/examples.md +547 -0
  407. moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +17 -0
  408. moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +158 -0
  409. moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +340 -0
  410. moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +713 -0
  411. moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +538 -0
  412. moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +1336 -0
  413. moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +730 -0
  414. moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +608 -0
  415. moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +1005 -0
  416. moai_adk/templates/.claude/skills/moai-workflow-project/reference.md +275 -0
  417. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/config-schema.json +316 -0
  418. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +1434 -0
  419. moai_adk/templates/.claude/skills/moai-workflow-project/templates/config-template.json +71 -0
  420. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/product-template.md +44 -0
  421. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/structure-template.md +48 -0
  422. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/tech-template.md +92 -0
  423. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/config-manager-setup.json +109 -0
  424. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/language-initializer.json +228 -0
  425. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/menu-project-config.json +130 -0
  426. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/project-batch-questions.json +97 -0
  427. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/spec-workflow-setup.json +150 -0
  428. moai_adk/templates/.claude/skills/moai-workflow-project/test_integration_simple.py +436 -0
  429. moai_adk/templates/.claude/skills/moai-workflow-spec/SKILL.md +534 -0
  430. moai_adk/templates/.claude/skills/moai-workflow-spec/examples.md +900 -0
  431. moai_adk/templates/.claude/skills/moai-workflow-spec/reference.md +704 -0
  432. moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +377 -0
  433. moai_adk/templates/.claude/skills/moai-workflow-templates/examples.md +552 -0
  434. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/code-templates.md +124 -0
  435. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/feedback-templates.md +100 -0
  436. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/template-optimizer.md +138 -0
  437. moai_adk/templates/.claude/skills/moai-workflow-templates/reference.md +346 -0
  438. moai_adk/templates/.claude/skills/moai-workflow-testing/LICENSE.txt +202 -0
  439. moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +456 -0
  440. moai_adk/templates/.claude/skills/moai-workflow-testing/advanced-patterns.md +576 -0
  441. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/ai-powered-testing.py +294 -0
  442. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/console_logging.py +35 -0
  443. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/element_discovery.py +40 -0
  444. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/static_html_automation.py +34 -0
  445. moai_adk/templates/.claude/skills/moai-workflow-testing/examples.md +672 -0
  446. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +220 -0
  447. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +845 -0
  448. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +1416 -0
  449. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +1234 -0
  450. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +1243 -0
  451. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +1260 -0
  452. moai_adk/templates/.claude/skills/moai-workflow-testing/optimization.md +505 -0
  453. moai_adk/templates/.claude/skills/moai-workflow-testing/reference/playwright-best-practices.md +57 -0
  454. moai_adk/templates/.claude/skills/moai-workflow-testing/reference.md +440 -0
  455. moai_adk/templates/.claude/skills/moai-workflow-testing/scripts/with_server.py +218 -0
  456. moai_adk/templates/.claude/skills/moai-workflow-testing/templates/alfred-integration.md +376 -0
  457. moai_adk/templates/.claude/skills/moai-workflow-testing/workflows/enterprise-testing-workflow.py +571 -0
  458. moai_adk/templates/.claude/skills/moai-worktree/SKILL.md +411 -0
  459. moai_adk/templates/.claude/skills/moai-worktree/examples.md +606 -0
  460. moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +982 -0
  461. moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +778 -0
  462. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +646 -0
  463. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +782 -0
  464. moai_adk/templates/.claude/skills/moai-worktree/reference.md +357 -0
  465. moai_adk/templates/.git-hooks/pre-commit +128 -0
  466. moai_adk/templates/.git-hooks/pre-push +365 -0
  467. moai_adk/templates/.github/workflows/ci-universal.yml +513 -0
  468. moai_adk/templates/.github/workflows/security-secrets-check.yml +179 -0
  469. moai_adk/templates/.github/workflows/spec-issue-sync.yml +337 -0
  470. moai_adk/templates/.gitignore +222 -0
  471. moai_adk/templates/.mcp.json +13 -0
  472. moai_adk/templates/.moai/config/config.yaml +58 -0
  473. moai_adk/templates/.moai/config/questions/_schema.yaml +174 -0
  474. moai_adk/templates/.moai/config/questions/tab0-init.yaml +251 -0
  475. moai_adk/templates/.moai/config/questions/tab1-user.yaml +107 -0
  476. moai_adk/templates/.moai/config/questions/tab2-project.yaml +79 -0
  477. moai_adk/templates/.moai/config/questions/tab3-git.yaml +632 -0
  478. moai_adk/templates/.moai/config/questions/tab4-quality.yaml +182 -0
  479. moai_adk/templates/.moai/config/questions/tab5-system.yaml +96 -0
  480. moai_adk/templates/.moai/config/sections/git-strategy.yaml +116 -0
  481. moai_adk/templates/.moai/config/sections/language.yaml +11 -0
  482. moai_adk/templates/.moai/config/sections/project.yaml +13 -0
  483. moai_adk/templates/.moai/config/sections/quality.yaml +17 -0
  484. moai_adk/templates/.moai/config/sections/system.yaml +24 -0
  485. moai_adk/templates/.moai/config/sections/user.yaml +5 -0
  486. moai_adk/templates/.moai/config/statusline-config.yaml +92 -0
  487. moai_adk/templates/.moai/scripts/setup-glm.py +136 -0
  488. moai_adk/templates/CLAUDE.md +642 -0
  489. moai_adk/utils/__init__.py +30 -0
  490. moai_adk/utils/banner.py +38 -0
  491. moai_adk/utils/common.py +294 -0
  492. moai_adk/utils/link_validator.py +241 -0
  493. moai_adk/utils/logger.py +147 -0
  494. moai_adk/utils/safe_file_reader.py +206 -0
  495. moai_adk/utils/timeout.py +160 -0
  496. moai_adk/utils/toon_utils.py +256 -0
  497. moai_adk/version.py +22 -0
  498. moai_adk-0.35.1.dist-info/METADATA +3018 -0
  499. moai_adk-0.35.1.dist-info/RECORD +502 -0
  500. moai_adk-0.35.1.dist-info/WHEEL +4 -0
  501. moai_adk-0.35.1.dist-info/entry_points.txt +3 -0
  502. moai_adk-0.35.1.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,830 @@
1
+ # Database Domain Examples
2
+
3
+ Multishot prompting examples demonstrating practical database patterns covering PostgreSQL, MongoDB, Redis, and multi-database architectures.
4
+
5
+ ---
6
+
7
+ ## Example 1: PostgreSQL Advanced Query Optimization
8
+
9
+ **Scenario**: Optimize a slow query for user analytics with proper indexing.
10
+
11
+ **Input**:
12
+ ```sql
13
+ -- Slow query: Full table scan
14
+ SELECT u.id, u.name, u.email, COUNT(o.id) as order_count, SUM(o.total) as total_spent
15
+ FROM users u
16
+ LEFT JOIN orders o ON u.id = o.user_id
17
+ WHERE u.created_at > '2024-01-01'
18
+ AND u.status = 'active'
19
+ GROUP BY u.id
20
+ ORDER BY total_spent DESC
21
+ LIMIT 100;
22
+
23
+ -- Query takes 15+ seconds on 1M users, 5M orders
24
+ ```
25
+
26
+ **Output**:
27
+ ```sql
28
+ -- Step 1: Create optimized indexes
29
+ CREATE INDEX CONCURRENTLY idx_users_status_created
30
+ ON users (status, created_at DESC)
31
+ WHERE status = 'active';
32
+
33
+ CREATE INDEX CONCURRENTLY idx_orders_user_total
34
+ ON orders (user_id, total)
35
+ INCLUDE (id);
36
+
37
+ -- Step 2: Use materialized view for frequent analytics
38
+ CREATE MATERIALIZED VIEW user_order_stats AS
39
+ SELECT
40
+ u.id,
41
+ u.name,
42
+ u.email,
43
+ COUNT(o.id) as order_count,
44
+ COALESCE(SUM(o.total), 0) as total_spent,
45
+ MAX(o.created_at) as last_order_date
46
+ FROM users u
47
+ LEFT JOIN orders o ON u.id = o.user_id
48
+ WHERE u.status = 'active'
49
+ GROUP BY u.id, u.name, u.email;
50
+
51
+ CREATE UNIQUE INDEX idx_user_order_stats_id ON user_order_stats(id);
52
+ CREATE INDEX idx_user_order_stats_total ON user_order_stats(total_spent DESC);
53
+
54
+ -- Step 3: Refresh strategy
55
+ REFRESH MATERIALIZED VIEW CONCURRENTLY user_order_stats;
56
+
57
+ -- Step 4: Optimized query (now < 100ms)
58
+ SELECT id, name, email, order_count, total_spent
59
+ FROM user_order_stats
60
+ WHERE total_spent > 0
61
+ ORDER BY total_spent DESC
62
+ LIMIT 100;
63
+ ```
64
+
65
+ **Explanation**: The optimization combines partial indexes, materialized views, and covering indexes to reduce query time from 15 seconds to under 100ms.
66
+
67
+ ---
68
+
69
+ ## Example 2: MongoDB Aggregation Pipeline for Analytics
70
+
71
+ **Scenario**: Build an analytics pipeline for e-commerce order analysis.
72
+
73
+ **Input**:
74
+ ```python
75
+ from motor.motor_asyncio import AsyncIOMotorClient
76
+ from datetime import datetime, timedelta
77
+
78
+ # Sample order document structure
79
+ order_doc = {
80
+ "_id": "order_123",
81
+ "user_id": "user_456",
82
+ "status": "completed",
83
+ "items": [
84
+ {"product_id": "prod_1", "quantity": 2, "price": 29.99},
85
+ {"product_id": "prod_2", "quantity": 1, "price": 49.99}
86
+ ],
87
+ "total": 109.97,
88
+ "created_at": datetime.utcnow(),
89
+ "shipping_address": {"city": "Seoul", "country": "KR"}
90
+ }
91
+ ```
92
+
93
+ **Output**:
94
+ ```python
95
+ from motor.motor_asyncio import AsyncIOMotorClient
96
+ from datetime import datetime, timedelta
97
+ from typing import List, Dict
98
+
99
+ class OrderAnalytics:
100
+ def __init__(self, client: AsyncIOMotorClient):
101
+ self.db = client.ecommerce
102
+ self.orders = self.db.orders
103
+
104
+ async def setup_indexes(self):
105
+ """Create optimized indexes for analytics queries."""
106
+ await self.orders.create_indexes([
107
+ {"keys": [("created_at", -1)]},
108
+ {"keys": [("user_id", 1), ("created_at", -1)]},
109
+ {"keys": [("status", 1), ("created_at", -1)]},
110
+ {"keys": [("shipping_address.country", 1), ("created_at", -1)]}
111
+ ])
112
+
113
+ async def get_daily_revenue(
114
+ self,
115
+ start_date: datetime,
116
+ end_date: datetime
117
+ ) -> List[Dict]:
118
+ """Get daily revenue breakdown."""
119
+ pipeline = [
120
+ {
121
+ "$match": {
122
+ "status": "completed",
123
+ "created_at": {
124
+ "$gte": start_date,
125
+ "$lte": end_date
126
+ }
127
+ }
128
+ },
129
+ {
130
+ "$group": {
131
+ "_id": {
132
+ "year": {"$year": "$created_at"},
133
+ "month": {"$month": "$created_at"},
134
+ "day": {"$dayOfMonth": "$created_at"}
135
+ },
136
+ "total_revenue": {"$sum": "$total"},
137
+ "order_count": {"$sum": 1},
138
+ "avg_order_value": {"$avg": "$total"}
139
+ }
140
+ },
141
+ {
142
+ "$sort": {"_id.year": 1, "_id.month": 1, "_id.day": 1}
143
+ },
144
+ {
145
+ "$project": {
146
+ "_id": 0,
147
+ "date": {
148
+ "$dateFromParts": {
149
+ "year": "$_id.year",
150
+ "month": "$_id.month",
151
+ "day": "$_id.day"
152
+ }
153
+ },
154
+ "total_revenue": {"$round": ["$total_revenue", 2]},
155
+ "order_count": 1,
156
+ "avg_order_value": {"$round": ["$avg_order_value", 2]}
157
+ }
158
+ }
159
+ ]
160
+ return await self.orders.aggregate(pipeline).to_list(None)
161
+
162
+ async def get_top_products(
163
+ self,
164
+ limit: int = 10,
165
+ days: int = 30
166
+ ) -> List[Dict]:
167
+ """Get top selling products."""
168
+ start_date = datetime.utcnow() - timedelta(days=days)
169
+
170
+ pipeline = [
171
+ {
172
+ "$match": {
173
+ "status": "completed",
174
+ "created_at": {"$gte": start_date}
175
+ }
176
+ },
177
+ {"$unwind": "$items"},
178
+ {
179
+ "$group": {
180
+ "_id": "$items.product_id",
181
+ "total_quantity": {"$sum": "$items.quantity"},
182
+ "total_revenue": {
183
+ "$sum": {
184
+ "$multiply": ["$items.quantity", "$items.price"]
185
+ }
186
+ },
187
+ "order_count": {"$sum": 1}
188
+ }
189
+ },
190
+ {"$sort": {"total_revenue": -1}},
191
+ {"$limit": limit},
192
+ {
193
+ "$lookup": {
194
+ "from": "products",
195
+ "localField": "_id",
196
+ "foreignField": "_id",
197
+ "as": "product_info"
198
+ }
199
+ },
200
+ {
201
+ "$project": {
202
+ "product_id": "$_id",
203
+ "product_name": {"$arrayElemAt": ["$product_info.name", 0]},
204
+ "total_quantity": 1,
205
+ "total_revenue": {"$round": ["$total_revenue", 2]},
206
+ "order_count": 1
207
+ }
208
+ }
209
+ ]
210
+ return await self.orders.aggregate(pipeline).to_list(None)
211
+
212
+ async def get_customer_segments(self) -> List[Dict]:
213
+ """Segment customers by order frequency and value."""
214
+ pipeline = [
215
+ {"$match": {"status": "completed"}},
216
+ {
217
+ "$group": {
218
+ "_id": "$user_id",
219
+ "total_orders": {"$sum": 1},
220
+ "total_spent": {"$sum": "$total"},
221
+ "avg_order_value": {"$avg": "$total"},
222
+ "first_order": {"$min": "$created_at"},
223
+ "last_order": {"$max": "$created_at"}
224
+ }
225
+ },
226
+ {
227
+ "$addFields": {
228
+ "segment": {
229
+ "$switch": {
230
+ "branches": [
231
+ {
232
+ "case": {
233
+ "$and": [
234
+ {"$gte": ["$total_orders", 10]},
235
+ {"$gte": ["$total_spent", 1000]}
236
+ ]
237
+ },
238
+ "then": "VIP"
239
+ },
240
+ {
241
+ "case": {
242
+ "$and": [
243
+ {"$gte": ["$total_orders", 5]},
244
+ {"$gte": ["$total_spent", 500]}
245
+ ]
246
+ },
247
+ "then": "Loyal"
248
+ },
249
+ {
250
+ "case": {"$gte": ["$total_orders", 2]},
251
+ "then": "Repeat"
252
+ }
253
+ ],
254
+ "default": "New"
255
+ }
256
+ }
257
+ }
258
+ },
259
+ {
260
+ "$group": {
261
+ "_id": "$segment",
262
+ "customer_count": {"$sum": 1},
263
+ "total_revenue": {"$sum": "$total_spent"},
264
+ "avg_orders": {"$avg": "$total_orders"},
265
+ "avg_spent": {"$avg": "$total_spent"}
266
+ }
267
+ },
268
+ {"$sort": {"total_revenue": -1}}
269
+ ]
270
+ return await self.orders.aggregate(pipeline).to_list(None)
271
+ ```
272
+
273
+ **Explanation**: This pattern demonstrates MongoDB aggregation pipelines for complex analytics with proper indexing, customer segmentation, and revenue analysis.
274
+
275
+ ---
276
+
277
+ ## Example 3: Redis Multi-Layer Caching Strategy
278
+
279
+ **Scenario**: Implement a sophisticated caching strategy with different TTLs and cache invalidation.
280
+
281
+ **Input**:
282
+ ```python
283
+ import redis.asyncio as redis
284
+ from typing import Optional, Any
285
+ from dataclasses import dataclass
286
+
287
+ @dataclass
288
+ class CacheConfig:
289
+ host: str = "localhost"
290
+ port: int = 6379
291
+ db: int = 0
292
+ default_ttl: int = 3600
293
+ ```
294
+
295
+ **Output**:
296
+ ```python
297
+ import redis.asyncio as redis
298
+ from typing import Optional, Any, Callable
299
+ from dataclasses import dataclass
300
+ from functools import wraps
301
+ import json
302
+ import hashlib
303
+ import logging
304
+
305
+ logger = logging.getLogger(__name__)
306
+
307
+ @dataclass
308
+ class CacheConfig:
309
+ host: str = "localhost"
310
+ port: int = 6379
311
+ db: int = 0
312
+ default_ttl: int = 3600
313
+
314
+ class CacheLayer:
315
+ """Multi-layer caching with different TTL strategies."""
316
+
317
+ # Cache TTL by layer
318
+ LAYER_TTL = {
319
+ "hot": 60, # 1 minute - frequently accessed
320
+ "warm": 300, # 5 minutes - moderately accessed
321
+ "cold": 3600, # 1 hour - rarely accessed
322
+ "persistent": 86400 # 24 hours - static data
323
+ }
324
+
325
+ def __init__(self, config: CacheConfig):
326
+ self.redis = redis.Redis(
327
+ host=config.host,
328
+ port=config.port,
329
+ db=config.db,
330
+ decode_responses=True
331
+ )
332
+ self.default_ttl = config.default_ttl
333
+
334
+ def _generate_key(
335
+ self,
336
+ prefix: str,
337
+ *args,
338
+ **kwargs
339
+ ) -> str:
340
+ """Generate consistent cache key."""
341
+ key_data = f"{args}:{sorted(kwargs.items())}"
342
+ key_hash = hashlib.md5(key_data.encode()).hexdigest()[:8]
343
+ return f"{prefix}:{key_hash}"
344
+
345
+ async def get(self, key: str) -> Optional[Any]:
346
+ """Get value from cache."""
347
+ value = await self.redis.get(key)
348
+ if value:
349
+ return json.loads(value)
350
+ return None
351
+
352
+ async def set(
353
+ self,
354
+ key: str,
355
+ value: Any,
356
+ layer: str = "warm"
357
+ ):
358
+ """Set value in cache with layer-specific TTL."""
359
+ ttl = self.LAYER_TTL.get(layer, self.default_ttl)
360
+ await self.redis.setex(
361
+ key,
362
+ ttl,
363
+ json.dumps(value, default=str)
364
+ )
365
+
366
+ async def delete(self, key: str):
367
+ """Delete specific key."""
368
+ await self.redis.delete(key)
369
+
370
+ async def delete_pattern(self, pattern: str):
371
+ """Delete all keys matching pattern."""
372
+ cursor = 0
373
+ while True:
374
+ cursor, keys = await self.redis.scan(
375
+ cursor=cursor,
376
+ match=pattern,
377
+ count=100
378
+ )
379
+ if keys:
380
+ await self.redis.delete(*keys)
381
+ if cursor == 0:
382
+ break
383
+
384
+ def cached(
385
+ self,
386
+ prefix: str,
387
+ layer: str = "warm"
388
+ ):
389
+ """Decorator for caching function results."""
390
+ def decorator(func: Callable):
391
+ @wraps(func)
392
+ async def wrapper(*args, **kwargs):
393
+ cache_key = self._generate_key(prefix, *args, **kwargs)
394
+
395
+ # Try cache first
396
+ cached_value = await self.get(cache_key)
397
+ if cached_value is not None:
398
+ logger.debug(f"Cache hit: {cache_key}")
399
+ return cached_value
400
+
401
+ # Execute function
402
+ result = await func(*args, **kwargs)
403
+
404
+ # Cache result
405
+ if result is not None:
406
+ await self.set(cache_key, result, layer)
407
+ logger.debug(f"Cache set: {cache_key}")
408
+
409
+ return result
410
+ return wrapper
411
+ return decorator
412
+
413
+
414
+ class UserCacheService:
415
+ """User-specific caching with invalidation patterns."""
416
+
417
+ def __init__(self, cache: CacheLayer, db_session):
418
+ self.cache = cache
419
+ self.db = db_session
420
+
421
+ @property
422
+ def _prefix(self) -> str:
423
+ return "user"
424
+
425
+ async def get_user(self, user_id: int) -> Optional[dict]:
426
+ """Get user with caching."""
427
+ cache_key = f"{self._prefix}:{user_id}"
428
+
429
+ # Check cache
430
+ cached = await self.cache.get(cache_key)
431
+ if cached:
432
+ return cached
433
+
434
+ # Query database
435
+ user = await self.db.get_user(user_id)
436
+ if user:
437
+ await self.cache.set(cache_key, user.to_dict(), "warm")
438
+
439
+ return user.to_dict() if user else None
440
+
441
+ async def get_user_profile(self, user_id: int) -> Optional[dict]:
442
+ """Get full user profile (cold cache for expensive queries)."""
443
+ cache_key = f"{self._prefix}:profile:{user_id}"
444
+
445
+ cached = await self.cache.get(cache_key)
446
+ if cached:
447
+ return cached
448
+
449
+ # Expensive query with joins
450
+ profile = await self.db.get_full_profile(user_id)
451
+ if profile:
452
+ await self.cache.set(cache_key, profile, "cold")
453
+
454
+ return profile
455
+
456
+ async def update_user(self, user_id: int, data: dict) -> dict:
457
+ """Update user and invalidate related caches."""
458
+ # Update database
459
+ user = await self.db.update_user(user_id, data)
460
+
461
+ # Invalidate caches
462
+ await self.cache.delete(f"{self._prefix}:{user_id}")
463
+ await self.cache.delete(f"{self._prefix}:profile:{user_id}")
464
+ await self.cache.delete_pattern(f"users:list:*")
465
+
466
+ return user.to_dict()
467
+
468
+ async def get_active_users_count(self) -> int:
469
+ """Get count with hot cache (frequently accessed)."""
470
+ cache_key = "users:count:active"
471
+
472
+ cached = await self.cache.get(cache_key)
473
+ if cached is not None:
474
+ return cached
475
+
476
+ count = await self.db.count_active_users()
477
+ await self.cache.set(cache_key, count, "hot")
478
+
479
+ return count
480
+
481
+
482
+ class DistributedLock:
483
+ """Redis-based distributed locking."""
484
+
485
+ def __init__(self, redis_client: redis.Redis):
486
+ self.redis = redis_client
487
+
488
+ async def acquire(
489
+ self,
490
+ lock_name: str,
491
+ timeout: int = 10,
492
+ blocking: bool = True,
493
+ block_timeout: int = 5
494
+ ) -> Optional[str]:
495
+ """Acquire a distributed lock."""
496
+ import uuid
497
+ lock_id = str(uuid.uuid4())
498
+ lock_key = f"lock:{lock_name}"
499
+
500
+ if blocking:
501
+ end_time = asyncio.get_event_loop().time() + block_timeout
502
+ while asyncio.get_event_loop().time() < end_time:
503
+ acquired = await self.redis.set(
504
+ lock_key,
505
+ lock_id,
506
+ nx=True,
507
+ ex=timeout
508
+ )
509
+ if acquired:
510
+ return lock_id
511
+ await asyncio.sleep(0.1)
512
+ return None
513
+ else:
514
+ acquired = await self.redis.set(
515
+ lock_key,
516
+ lock_id,
517
+ nx=True,
518
+ ex=timeout
519
+ )
520
+ return lock_id if acquired else None
521
+
522
+ async def release(self, lock_name: str, lock_id: str) -> bool:
523
+ """Release a distributed lock."""
524
+ lock_key = f"lock:{lock_name}"
525
+
526
+ # Lua script for atomic check-and-delete
527
+ script = """
528
+ if redis.call("get", KEYS[1]) == ARGV[1] then
529
+ return redis.call("del", KEYS[1])
530
+ else
531
+ return 0
532
+ end
533
+ """
534
+ result = await self.redis.eval(script, 1, lock_key, lock_id)
535
+ return result == 1
536
+ ```
537
+
538
+ **Explanation**: This pattern demonstrates multi-layer caching with different TTLs, cache invalidation strategies, and distributed locking for concurrent access control.
539
+
540
+ ---
541
+
542
+ ## Common Patterns
543
+
544
+ ### Pattern 1: Polyglot Persistence
545
+
546
+ Use the right database for each use case:
547
+
548
+ ```python
549
+ class DataRouter:
550
+ """Route data to appropriate database based on access pattern."""
551
+
552
+ def __init__(
553
+ self,
554
+ postgres: AsyncSession,
555
+ mongodb: AsyncIOMotorClient,
556
+ redis: redis.Redis
557
+ ):
558
+ self.postgres = postgres # Relational data
559
+ self.mongodb = mongodb # Document data
560
+ self.redis = redis # Real-time data
561
+
562
+ async def get_user_complete(self, user_id: int) -> dict:
563
+ """Aggregate data from multiple databases."""
564
+
565
+ # Structured user data from PostgreSQL
566
+ user = await self.postgres.execute(
567
+ select(User).where(User.id == user_id)
568
+ )
569
+ user_data = user.scalar_one_or_none()
570
+
571
+ if not user_data:
572
+ return None
573
+
574
+ # Flexible profile from MongoDB
575
+ profile = await self.mongodb.profiles.find_one(
576
+ {"user_id": str(user_id)}
577
+ )
578
+
579
+ # Real-time status from Redis
580
+ status = await self.redis.hgetall(f"user:status:{user_id}")
581
+
582
+ return {
583
+ "user": user_data.to_dict(),
584
+ "profile": profile,
585
+ "status": status
586
+ }
587
+
588
+ async def save_activity(self, user_id: int, activity: dict):
589
+ """Save activity to appropriate store."""
590
+
591
+ # High-frequency real-time counter in Redis
592
+ await self.redis.hincrby(
593
+ f"user:activity:{user_id}",
594
+ "page_views",
595
+ 1
596
+ )
597
+
598
+ # Activity log in MongoDB (flexible schema)
599
+ await self.mongodb.activities.insert_one({
600
+ "user_id": str(user_id),
601
+ **activity,
602
+ "timestamp": datetime.utcnow()
603
+ })
604
+ ```
605
+
606
+ ### Pattern 2: Connection Pool Management
607
+
608
+ ```python
609
+ from sqlalchemy.ext.asyncio import create_async_engine
610
+ from motor.motor_asyncio import AsyncIOMotorClient
611
+ import redis.asyncio as redis
612
+
613
+ class DatabasePool:
614
+ """Manage database connection pools."""
615
+
616
+ _instance = None
617
+
618
+ def __new__(cls):
619
+ if cls._instance is None:
620
+ cls._instance = super().__new__(cls)
621
+ return cls._instance
622
+
623
+ def __init__(self):
624
+ if hasattr(self, '_initialized'):
625
+ return
626
+ self._initialized = True
627
+
628
+ # PostgreSQL pool
629
+ self.postgres = create_async_engine(
630
+ DATABASE_URL,
631
+ pool_size=20,
632
+ max_overflow=30,
633
+ pool_pre_ping=True,
634
+ pool_recycle=3600
635
+ )
636
+
637
+ # MongoDB connection
638
+ self.mongodb = AsyncIOMotorClient(
639
+ MONGODB_URL,
640
+ maxPoolSize=50,
641
+ minPoolSize=10
642
+ )
643
+
644
+ # Redis pool
645
+ self.redis = redis.ConnectionPool.from_url(
646
+ REDIS_URL,
647
+ max_connections=100
648
+ )
649
+
650
+ async def health_check(self) -> dict:
651
+ """Check all database connections."""
652
+ results = {}
653
+
654
+ # PostgreSQL
655
+ try:
656
+ async with self.postgres.connect() as conn:
657
+ await conn.execute("SELECT 1")
658
+ results["postgres"] = "healthy"
659
+ except Exception as e:
660
+ results["postgres"] = f"unhealthy: {e}"
661
+
662
+ # MongoDB
663
+ try:
664
+ await self.mongodb.admin.command("ping")
665
+ results["mongodb"] = "healthy"
666
+ except Exception as e:
667
+ results["mongodb"] = f"unhealthy: {e}"
668
+
669
+ # Redis
670
+ try:
671
+ r = redis.Redis(connection_pool=self.redis)
672
+ await r.ping()
673
+ results["redis"] = "healthy"
674
+ except Exception as e:
675
+ results["redis"] = f"unhealthy: {e}"
676
+
677
+ return results
678
+ ```
679
+
680
+ ### Pattern 3: Database Migration Strategy
681
+
682
+ ```python
683
+ from alembic import command
684
+ from alembic.config import Config
685
+
686
+ class MigrationManager:
687
+ """Manage database migrations safely."""
688
+
689
+ def __init__(self, alembic_cfg_path: str):
690
+ self.alembic_cfg = Config(alembic_cfg_path)
691
+
692
+ def upgrade(self, revision: str = "head"):
693
+ """Apply pending migrations."""
694
+ command.upgrade(self.alembic_cfg, revision)
695
+
696
+ def downgrade(self, revision: str):
697
+ """Rollback to specific revision."""
698
+ command.downgrade(self.alembic_cfg, revision)
699
+
700
+ def create_migration(self, message: str):
701
+ """Auto-generate migration from model changes."""
702
+ command.revision(
703
+ self.alembic_cfg,
704
+ message=message,
705
+ autogenerate=True
706
+ )
707
+
708
+ def current(self) -> str:
709
+ """Get current migration revision."""
710
+ return command.current(self.alembic_cfg)
711
+ ```
712
+
713
+ ---
714
+
715
+ ## Anti-Patterns (Patterns to Avoid)
716
+
717
+ ### Anti-Pattern 1: Missing Database Indexes
718
+
719
+ **Problem**: Queries without proper indexes cause full table scans.
720
+
721
+ ```python
722
+ # Incorrect approach - no index consideration
723
+ async def find_users_by_email(email: str):
724
+ return await session.execute(
725
+ select(User).where(User.email == email)
726
+ )
727
+ ```
728
+
729
+ **Solution**: Create appropriate indexes.
730
+
731
+ ```sql
732
+ -- Correct approach - add index
733
+ CREATE UNIQUE INDEX idx_users_email ON users (email);
734
+ ```
735
+
736
+ ```python
737
+ # And verify query uses index
738
+ async def find_users_by_email(email: str):
739
+ # This will now use the index
740
+ return await session.execute(
741
+ select(User).where(User.email == email)
742
+ )
743
+ ```
744
+
745
+ ### Anti-Pattern 2: Ignoring Connection Limits
746
+
747
+ **Problem**: Opening unlimited database connections.
748
+
749
+ ```python
750
+ # Incorrect approach - new connection per request
751
+ async def get_data():
752
+ engine = create_async_engine(DATABASE_URL)
753
+ async with engine.connect() as conn:
754
+ return await conn.execute(query)
755
+ ```
756
+
757
+ **Solution**: Use connection pooling.
758
+
759
+ ```python
760
+ # Correct approach - shared connection pool
761
+ engine = create_async_engine(
762
+ DATABASE_URL,
763
+ pool_size=20,
764
+ max_overflow=10
765
+ )
766
+
767
+ async def get_data():
768
+ async with engine.connect() as conn:
769
+ return await conn.execute(query)
770
+ ```
771
+
772
+ ### Anti-Pattern 3: Caching Without Invalidation
773
+
774
+ **Problem**: Stale data in cache after updates.
775
+
776
+ ```python
777
+ # Incorrect approach - cache without invalidation
778
+ async def update_user(user_id: int, data: dict):
779
+ await db.update_user(user_id, data)
780
+ # Cache still has old data!
781
+ ```
782
+
783
+ **Solution**: Always invalidate cache on updates.
784
+
785
+ ```python
786
+ # Correct approach - invalidate on update
787
+ async def update_user(user_id: int, data: dict):
788
+ await db.update_user(user_id, data)
789
+
790
+ # Invalidate related caches
791
+ await cache.delete(f"user:{user_id}")
792
+ await cache.delete(f"user:profile:{user_id}")
793
+ await cache.delete_pattern("users:list:*")
794
+ ```
795
+
796
+ ---
797
+
798
+ ## Performance Benchmarks
799
+
800
+ ### Query Performance Comparison
801
+
802
+ ```python
803
+ # Before optimization: 15,000ms
804
+ # After indexing: 150ms
805
+ # With materialized view: 15ms
806
+ # With Redis cache: 1ms
807
+
808
+ async def benchmark_user_analytics():
809
+ import time
810
+
811
+ # Cold query (no cache)
812
+ start = time.time()
813
+ result = await get_user_analytics_no_cache(user_id=1)
814
+ cold_time = time.time() - start
815
+
816
+ # Warm query (cached)
817
+ start = time.time()
818
+ result = await get_user_analytics_cached(user_id=1)
819
+ warm_time = time.time() - start
820
+
821
+ return {
822
+ "cold_query_ms": cold_time * 1000,
823
+ "warm_query_ms": warm_time * 1000,
824
+ "speedup_factor": cold_time / warm_time
825
+ }
826
+ ```
827
+
828
+ ---
829
+
830
+ *For additional patterns and database-specific optimizations, see the `modules/` directory.*