moai-adk 0.8.0__py3-none-any.whl → 1.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (881) hide show
  1. moai_adk/__init__.py +2 -6
  2. moai_adk/__main__.py +267 -21
  3. moai_adk/astgrep/__init__.py +37 -0
  4. moai_adk/astgrep/analyzer.py +522 -0
  5. moai_adk/astgrep/models.py +124 -0
  6. moai_adk/astgrep/rules.py +179 -0
  7. moai_adk/cli/__init__.py +6 -2
  8. moai_adk/cli/commands/__init__.py +1 -4
  9. moai_adk/cli/commands/analyze.py +125 -0
  10. moai_adk/cli/commands/doctor.py +24 -6
  11. moai_adk/cli/commands/init.py +437 -57
  12. moai_adk/cli/commands/language.py +254 -0
  13. moai_adk/cli/commands/rank.py +449 -0
  14. moai_adk/cli/commands/status.py +15 -14
  15. moai_adk/cli/commands/switch.py +325 -0
  16. moai_adk/cli/commands/update.py +2195 -93
  17. moai_adk/cli/main.py +3 -2
  18. moai_adk/cli/prompts/init_prompts.py +457 -108
  19. moai_adk/cli/prompts/translations/__init__.py +573 -0
  20. moai_adk/cli/spec_status.py +263 -0
  21. moai_adk/cli/ui/__init__.py +44 -0
  22. moai_adk/cli/ui/progress.py +422 -0
  23. moai_adk/cli/ui/prompts.py +448 -0
  24. moai_adk/cli/ui/theme.py +129 -0
  25. moai_adk/cli/worktree/__init__.py +27 -0
  26. moai_adk/cli/worktree/__main__.py +31 -0
  27. moai_adk/cli/worktree/cli.py +788 -0
  28. moai_adk/cli/worktree/exceptions.py +89 -0
  29. moai_adk/cli/worktree/manager.py +648 -0
  30. moai_adk/cli/worktree/models.py +65 -0
  31. moai_adk/cli/worktree/registry.py +422 -0
  32. moai_adk/core/PHASE2_OPTIMIZATIONS.md +467 -0
  33. moai_adk/core/__init__.py +0 -1
  34. moai_adk/core/analysis/__init__.py +9 -0
  35. moai_adk/core/analysis/session_analyzer.py +400 -0
  36. moai_adk/core/claude_integration.py +393 -0
  37. moai_adk/core/command_helpers.py +270 -0
  38. moai_adk/core/comprehensive_monitoring_system.py +1183 -0
  39. moai_adk/core/config/__init__.py +6 -0
  40. moai_adk/core/config/migration.py +148 -17
  41. moai_adk/core/config/unified.py +617 -0
  42. moai_adk/core/context_manager.py +273 -0
  43. moai_adk/core/credentials.py +264 -0
  44. moai_adk/core/diagnostics/slash_commands.py +0 -1
  45. moai_adk/core/enterprise_features.py +1404 -0
  46. moai_adk/core/error_recovery_system.py +1920 -0
  47. moai_adk/core/event_driven_hook_system.py +1371 -0
  48. moai_adk/core/git/__init__.py +8 -1
  49. moai_adk/core/git/branch.py +0 -1
  50. moai_adk/core/git/branch_manager.py +2 -10
  51. moai_adk/core/git/checkpoint.py +1 -7
  52. moai_adk/core/git/commit.py +0 -1
  53. moai_adk/core/git/conflict_detector.py +422 -0
  54. moai_adk/core/git/event_detector.py +16 -7
  55. moai_adk/core/git/manager.py +91 -2
  56. moai_adk/core/input_validation_middleware.py +1006 -0
  57. moai_adk/core/integration/__init__.py +22 -0
  58. moai_adk/core/integration/engine.py +157 -0
  59. moai_adk/core/integration/integration_tester.py +226 -0
  60. moai_adk/core/integration/models.py +88 -0
  61. moai_adk/core/integration/utils.py +211 -0
  62. moai_adk/core/issue_creator.py +305 -0
  63. moai_adk/core/jit_context_loader.py +956 -0
  64. moai_adk/core/jit_enhanced_hook_manager.py +1987 -0
  65. moai_adk/core/language_config.py +202 -0
  66. moai_adk/core/language_config_resolver.py +578 -0
  67. moai_adk/core/language_validator.py +543 -0
  68. moai_adk/core/mcp/setup.py +116 -0
  69. moai_adk/core/merge/__init__.py +9 -0
  70. moai_adk/core/merge/analyzer.py +666 -0
  71. moai_adk/core/migration/__init__.py +18 -0
  72. moai_adk/core/migration/alfred_to_moai_migrator.py +389 -0
  73. moai_adk/core/migration/backup_manager.py +327 -0
  74. moai_adk/core/migration/custom_element_scanner.py +358 -0
  75. moai_adk/core/migration/file_migrator.py +381 -0
  76. moai_adk/core/migration/interactive_checkbox_ui.py +499 -0
  77. moai_adk/core/migration/selective_restorer.py +470 -0
  78. moai_adk/core/migration/template_utils.py +74 -0
  79. moai_adk/core/migration/user_selection_ui.py +338 -0
  80. moai_adk/core/migration/version_detector.py +243 -0
  81. moai_adk/core/migration/version_migrator.py +263 -0
  82. moai_adk/core/model_allocator.py +241 -0
  83. moai_adk/core/performance/__init__.py +6 -0
  84. moai_adk/core/performance/cache_system.py +316 -0
  85. moai_adk/core/performance/parallel_processor.py +116 -0
  86. moai_adk/core/phase_optimized_hook_scheduler.py +879 -0
  87. moai_adk/core/project/__init__.py +0 -1
  88. moai_adk/core/project/backup_utils.py +13 -8
  89. moai_adk/core/project/checker.py +2 -4
  90. moai_adk/core/project/detector.py +189 -22
  91. moai_adk/core/project/initializer.py +177 -29
  92. moai_adk/core/project/phase_executor.py +482 -48
  93. moai_adk/core/project/validator.py +22 -32
  94. moai_adk/core/quality/__init__.py +1 -1
  95. moai_adk/core/quality/trust_checker.py +66 -110
  96. moai_adk/core/quality/validators/__init__.py +1 -1
  97. moai_adk/core/quality/validators/base_validator.py +1 -1
  98. moai_adk/core/realtime_monitoring_dashboard.py +1724 -0
  99. moai_adk/core/robust_json_parser.py +611 -0
  100. moai_adk/core/rollback_manager.py +953 -0
  101. moai_adk/core/session_manager.py +651 -0
  102. moai_adk/core/skill_loading_system.py +579 -0
  103. moai_adk/core/spec_status_manager.py +478 -0
  104. moai_adk/core/template/__init__.py +0 -1
  105. moai_adk/core/template/backup.py +168 -21
  106. moai_adk/core/template/config.py +141 -45
  107. moai_adk/core/template/languages.py +0 -1
  108. moai_adk/core/template/merger.py +107 -32
  109. moai_adk/core/template/processor.py +1075 -74
  110. moai_adk/core/template_engine.py +319 -0
  111. moai_adk/core/template_variable_synchronizer.py +431 -0
  112. moai_adk/core/unified_permission_manager.py +745 -0
  113. moai_adk/core/user_behavior_analytics.py +851 -0
  114. moai_adk/core/version_sync.py +477 -0
  115. moai_adk/foundation/__init__.py +37 -0
  116. moai_adk/foundation/backend.py +1027 -0
  117. moai_adk/foundation/database.py +1115 -0
  118. moai_adk/foundation/devops.py +1585 -0
  119. moai_adk/foundation/ears.py +431 -0
  120. moai_adk/foundation/frontend.py +870 -0
  121. moai_adk/foundation/git/__init__.py +376 -0
  122. moai_adk/foundation/git/commit_templates.py +557 -0
  123. moai_adk/foundation/langs.py +484 -0
  124. moai_adk/foundation/ml_ops.py +1162 -0
  125. moai_adk/foundation/testing.py +1524 -0
  126. moai_adk/foundation/trust/trust_principles.py +676 -0
  127. moai_adk/foundation/trust/validation_checklist.py +1573 -0
  128. moai_adk/loop/__init__.py +54 -0
  129. moai_adk/loop/controller.py +305 -0
  130. moai_adk/loop/feedback.py +230 -0
  131. moai_adk/loop/state.py +209 -0
  132. moai_adk/loop/storage.py +220 -0
  133. moai_adk/lsp/__init__.py +70 -0
  134. moai_adk/lsp/client.py +320 -0
  135. moai_adk/lsp/models.py +261 -0
  136. moai_adk/lsp/protocol.py +404 -0
  137. moai_adk/lsp/server_manager.py +248 -0
  138. moai_adk/project/__init__.py +0 -0
  139. moai_adk/project/configuration.py +1091 -0
  140. moai_adk/project/documentation.py +566 -0
  141. moai_adk/project/schema.py +447 -0
  142. moai_adk/py.typed +0 -0
  143. moai_adk/ralph/__init__.py +37 -0
  144. moai_adk/ralph/engine.py +307 -0
  145. moai_adk/rank/__init__.py +21 -0
  146. moai_adk/rank/auth.py +425 -0
  147. moai_adk/rank/client.py +557 -0
  148. moai_adk/rank/config.py +147 -0
  149. moai_adk/rank/hook.py +1503 -0
  150. moai_adk/rank/py.typed +0 -0
  151. moai_adk/statusline/__init__.py +41 -0
  152. moai_adk/statusline/alfred_detector.py +105 -0
  153. moai_adk/statusline/config.py +376 -0
  154. moai_adk/statusline/enhanced_output_style_detector.py +372 -0
  155. moai_adk/statusline/git_collector.py +190 -0
  156. moai_adk/statusline/main.py +341 -0
  157. moai_adk/statusline/memory_collector.py +268 -0
  158. moai_adk/statusline/metrics_tracker.py +78 -0
  159. moai_adk/statusline/renderer.py +359 -0
  160. moai_adk/statusline/update_checker.py +129 -0
  161. moai_adk/statusline/version_reader.py +741 -0
  162. moai_adk/tag_system/__init__.py +48 -0
  163. moai_adk/tag_system/atomic_ops.py +117 -0
  164. moai_adk/tag_system/linkage.py +335 -0
  165. moai_adk/tag_system/parser.py +176 -0
  166. moai_adk/tag_system/validator.py +200 -0
  167. moai_adk/templates/.claude/agents/moai/builder-agent.md +490 -0
  168. moai_adk/templates/.claude/agents/moai/builder-command.md +1218 -0
  169. moai_adk/templates/.claude/agents/moai/builder-plugin.md +763 -0
  170. moai_adk/templates/.claude/agents/moai/builder-skill.md +682 -0
  171. moai_adk/templates/.claude/agents/moai/expert-backend.md +963 -0
  172. moai_adk/templates/.claude/agents/moai/expert-debug.md +407 -0
  173. moai_adk/templates/.claude/agents/moai/expert-devops.md +722 -0
  174. moai_adk/templates/.claude/agents/moai/expert-frontend.md +748 -0
  175. moai_adk/templates/.claude/agents/moai/expert-performance.md +661 -0
  176. moai_adk/templates/.claude/agents/moai/expert-refactoring.md +228 -0
  177. moai_adk/templates/.claude/agents/moai/expert-security.md +525 -0
  178. moai_adk/templates/.claude/agents/moai/expert-testing.md +737 -0
  179. moai_adk/templates/.claude/agents/moai/manager-claude-code.md +438 -0
  180. moai_adk/templates/.claude/agents/moai/manager-docs.md +578 -0
  181. moai_adk/templates/.claude/agents/moai/manager-git.md +1092 -0
  182. moai_adk/templates/.claude/agents/moai/manager-project.md +971 -0
  183. moai_adk/templates/.claude/agents/moai/manager-quality.md +641 -0
  184. moai_adk/templates/.claude/agents/moai/manager-spec.md +815 -0
  185. moai_adk/templates/.claude/agents/moai/manager-strategy.md +811 -0
  186. moai_adk/templates/.claude/agents/moai/manager-tdd.md +797 -0
  187. moai_adk/templates/.claude/commands/moai/0-project.md +438 -0
  188. moai_adk/templates/.claude/commands/moai/1-plan.md +1447 -0
  189. moai_adk/templates/.claude/commands/moai/2-run.md +850 -0
  190. moai_adk/templates/.claude/commands/moai/3-sync.md +1398 -0
  191. moai_adk/templates/.claude/commands/moai/9-feedback.md +330 -0
  192. moai_adk/templates/.claude/commands/moai/alfred.md +339 -0
  193. moai_adk/templates/.claude/commands/moai/cancel-loop.md +163 -0
  194. moai_adk/templates/.claude/commands/moai/fix.md +264 -0
  195. moai_adk/templates/.claude/commands/moai/loop.md +363 -0
  196. moai_adk/templates/.claude/hooks/__init__.py +8 -0
  197. moai_adk/templates/.claude/hooks/moai/__init__.py +8 -0
  198. moai_adk/templates/.claude/hooks/moai/lib/README.md +143 -0
  199. moai_adk/templates/.claude/hooks/moai/lib/__init__.py +41 -0
  200. moai_adk/templates/.claude/hooks/moai/lib/alfred_detector.py +105 -0
  201. moai_adk/templates/.claude/hooks/moai/lib/atomic_write.py +122 -0
  202. moai_adk/templates/.claude/hooks/{alfred/core → moai/lib}/checkpoint.py +13 -37
  203. moai_adk/templates/.claude/hooks/moai/lib/common.py +161 -0
  204. moai_adk/templates/.claude/hooks/moai/lib/config.py +376 -0
  205. moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +442 -0
  206. moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +639 -0
  207. moai_adk/templates/.claude/hooks/moai/lib/enhanced_output_style_detector.py +372 -0
  208. moai_adk/templates/.claude/hooks/moai/lib/example_config.json +104 -0
  209. moai_adk/templates/.claude/hooks/moai/lib/exceptions.py +171 -0
  210. moai_adk/templates/.claude/hooks/moai/lib/file_utils.py +95 -0
  211. moai_adk/templates/.claude/hooks/moai/lib/git_collector.py +190 -0
  212. moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +592 -0
  213. moai_adk/templates/.claude/hooks/moai/lib/language_detector.py +298 -0
  214. moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +417 -0
  215. moai_adk/templates/.claude/hooks/moai/lib/main.py +341 -0
  216. moai_adk/templates/.claude/hooks/moai/lib/memory_collector.py +268 -0
  217. moai_adk/templates/.claude/hooks/moai/lib/metrics_tracker.py +78 -0
  218. moai_adk/templates/.claude/hooks/moai/lib/models.py +104 -0
  219. moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +219 -0
  220. moai_adk/templates/.claude/hooks/moai/lib/project.py +777 -0
  221. moai_adk/templates/.claude/hooks/moai/lib/renderer.py +359 -0
  222. moai_adk/templates/.claude/hooks/moai/lib/tag_linkage.py +333 -0
  223. moai_adk/templates/.claude/hooks/moai/lib/tag_parser.py +176 -0
  224. moai_adk/templates/.claude/hooks/moai/lib/tag_validator.py +200 -0
  225. moai_adk/templates/.claude/hooks/moai/lib/test_hooks_improvements.py +443 -0
  226. moai_adk/templates/.claude/hooks/moai/lib/timeout.py +160 -0
  227. moai_adk/templates/.claude/hooks/moai/lib/tool_registry.py +896 -0
  228. moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +542 -0
  229. moai_adk/templates/.claude/hooks/moai/lib/update_checker.py +129 -0
  230. moai_adk/templates/.claude/hooks/moai/lib/version_reader.py +741 -0
  231. moai_adk/templates/.claude/hooks/moai/post_tool__ast_grep_scan.py +276 -0
  232. moai_adk/templates/.claude/hooks/moai/post_tool__code_formatter.py +255 -0
  233. moai_adk/templates/.claude/hooks/moai/post_tool__coverage_guard.py +325 -0
  234. moai_adk/templates/.claude/hooks/moai/post_tool__linter.py +315 -0
  235. moai_adk/templates/.claude/hooks/moai/post_tool__lsp_diagnostic.py +508 -0
  236. moai_adk/templates/.claude/hooks/moai/pre_commit__tag_validator.py +287 -0
  237. moai_adk/templates/.claude/hooks/moai/pre_tool__security_guard.py +268 -0
  238. moai_adk/templates/.claude/hooks/moai/pre_tool__tdd_enforcer.py +208 -0
  239. moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +894 -0
  240. moai_adk/templates/.claude/hooks/moai/session_end__rank_submit.py +69 -0
  241. moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +1170 -0
  242. moai_adk/templates/.claude/hooks/moai/shared/utils/announcement_translator.py +206 -0
  243. moai_adk/templates/.claude/hooks/moai/stop__loop_controller.py +621 -0
  244. moai_adk/templates/.claude/output-styles/moai/alfred.md +758 -0
  245. moai_adk/templates/.claude/output-styles/moai/r2d2.md +643 -0
  246. moai_adk/templates/.claude/output-styles/moai/yoda.md +359 -0
  247. moai_adk/templates/.claude/settings.json +177 -72
  248. moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +303 -0
  249. moai_adk/templates/.claude/skills/moai-docs-generation/examples.md +252 -0
  250. moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +56 -0
  251. moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +120 -0
  252. moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +152 -0
  253. moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +185 -0
  254. moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +207 -0
  255. moai_adk/templates/.claude/skills/moai-docs-generation/reference.md +234 -0
  256. moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +132 -281
  257. moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +610 -1525
  258. moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +423 -619
  259. moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +133 -77
  260. moai_adk/templates/.claude/skills/moai-domain-database/examples.md +817 -16
  261. moai_adk/templates/.claude/skills/moai-domain-database/modules/README.md +53 -0
  262. moai_adk/templates/.claude/skills/moai-domain-database/modules/mongodb.md +231 -0
  263. moai_adk/templates/.claude/skills/moai-domain-database/modules/postgresql.md +169 -0
  264. moai_adk/templates/.claude/skills/moai-domain-database/modules/redis.md +262 -0
  265. moai_adk/templates/.claude/skills/moai-domain-database/reference.md +532 -17
  266. moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +91 -78
  267. moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +955 -16
  268. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/component-architecture.md +723 -0
  269. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/nextjs16-patterns.md +713 -0
  270. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/performance-optimization.md +694 -0
  271. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/react19-patterns.md +591 -0
  272. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/state-management.md +680 -0
  273. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/vue35-patterns.md +802 -0
  274. moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +651 -18
  275. moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +234 -0
  276. moai_adk/templates/.claude/skills/moai-domain-uiux/examples.md +560 -0
  277. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/accessibility-wcag.md +260 -0
  278. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/component-architecture.md +228 -0
  279. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/icon-libraries.md +401 -0
  280. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/theming-system.md +373 -0
  281. moai_adk/templates/.claude/skills/moai-domain-uiux/reference.md +243 -0
  282. moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +189 -0
  283. moai_adk/templates/.claude/skills/moai-formats-data/examples.md +804 -0
  284. moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +327 -0
  285. moai_adk/templates/.claude/skills/moai-formats-data/modules/SKILL-MODULARIZATION-TEMPLATE.md +278 -0
  286. moai_adk/templates/.claude/skills/moai-formats-data/modules/caching-performance.md +459 -0
  287. moai_adk/templates/.claude/skills/moai-formats-data/modules/data-validation.md +485 -0
  288. moai_adk/templates/.claude/skills/moai-formats-data/modules/json-optimization.md +374 -0
  289. moai_adk/templates/.claude/skills/moai-formats-data/modules/toon-encoding.md +308 -0
  290. moai_adk/templates/.claude/skills/moai-formats-data/reference.md +585 -0
  291. moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +225 -0
  292. moai_adk/templates/.claude/skills/moai-foundation-claude/examples.md +732 -0
  293. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/advanced-agent-patterns.md +370 -0
  294. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/best-practices-checklist.md +616 -0
  295. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-cli-reference-official.md +420 -0
  296. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +739 -0
  297. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-devcontainers-official.md +381 -0
  298. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-discover-plugins-official.md +379 -0
  299. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-headless-official.md +378 -0
  300. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +670 -0
  301. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-iam-official.md +635 -0
  302. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-memory-official.md +543 -0
  303. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-plugin-marketplaces-official.md +308 -0
  304. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-plugins-official.md +640 -0
  305. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sandboxing-official.md +282 -0
  306. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-settings-official.md +663 -0
  307. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +467 -0
  308. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-statusline-official.md +293 -0
  309. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +420 -0
  310. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/complete-configuration-guide.md +175 -0
  311. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-examples.md +1674 -0
  312. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-formatting-guide.md +729 -0
  313. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-examples.md +1513 -0
  314. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-formatting-guide.md +1086 -0
  315. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-integration-patterns.md +1100 -0
  316. moai_adk/templates/.claude/skills/moai-foundation-claude/reference.md +209 -0
  317. moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +221 -0
  318. moai_adk/templates/.claude/skills/moai-foundation-context/examples.md +1048 -0
  319. moai_adk/templates/.claude/skills/moai-foundation-context/reference.md +246 -0
  320. moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +242 -0
  321. moai_adk/templates/.claude/skills/moai-foundation-core/examples.md +358 -0
  322. moai_adk/templates/.claude/skills/moai-foundation-core/modules/README.md +296 -0
  323. moai_adk/templates/.claude/skills/moai-foundation-core/modules/agents-reference.md +359 -0
  324. moai_adk/templates/.claude/skills/moai-foundation-core/modules/commands-reference.md +432 -0
  325. moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-advanced.md +279 -0
  326. moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-implementation.md +267 -0
  327. moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +228 -0
  328. moai_adk/templates/.claude/skills/moai-foundation-core/modules/execution-rules.md +687 -0
  329. moai_adk/templates/.claude/skills/moai-foundation-core/modules/modular-system.md +665 -0
  330. moai_adk/templates/.claude/skills/moai-foundation-core/modules/patterns.md +22 -0
  331. moai_adk/templates/.claude/skills/moai-foundation-core/modules/progressive-disclosure.md +649 -0
  332. moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-ears-format.md +200 -0
  333. moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +171 -0
  334. moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-tdd-implementation.md +275 -0
  335. moai_adk/templates/.claude/skills/moai-foundation-core/modules/token-optimization.md +708 -0
  336. moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +239 -0
  337. moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-implementation.md +244 -0
  338. moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-validation.md +219 -0
  339. moai_adk/templates/.claude/skills/moai-foundation-core/reference.md +478 -0
  340. moai_adk/templates/.claude/skills/moai-foundation-philosopher/SKILL.md +311 -0
  341. moai_adk/templates/.claude/skills/moai-foundation-philosopher/examples.md +228 -0
  342. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/assumption-matrix.md +80 -0
  343. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/cognitive-bias.md +199 -0
  344. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/first-principles.md +140 -0
  345. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/trade-off-analysis.md +154 -0
  346. moai_adk/templates/.claude/skills/moai-foundation-philosopher/reference.md +157 -0
  347. moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +180 -0
  348. moai_adk/templates/.claude/skills/moai-foundation-quality/examples.md +1232 -0
  349. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/best-practices.md +261 -0
  350. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/integration-patterns.md +194 -0
  351. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/proactive-analysis.md +229 -0
  352. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/trust5-validation.md +169 -0
  353. moai_adk/templates/.claude/skills/moai-foundation-quality/reference.md +1266 -0
  354. moai_adk/templates/.claude/skills/moai-foundation-quality/scripts/quality-gate.sh +668 -0
  355. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/github-actions-quality.yml +481 -0
  356. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/quality-config.yaml +519 -0
  357. moai_adk/templates/.claude/skills/moai-framework-electron/SKILL.md +288 -0
  358. moai_adk/templates/.claude/skills/moai-framework-electron/examples.md +2082 -0
  359. moai_adk/templates/.claude/skills/moai-framework-electron/reference.md +1649 -0
  360. moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +96 -77
  361. moai_adk/templates/.claude/skills/moai-lang-cpp/examples.md +1226 -16
  362. moai_adk/templates/.claude/skills/moai-lang-cpp/modules/advanced-patterns.md +401 -0
  363. moai_adk/templates/.claude/skills/moai-lang-cpp/reference.md +1119 -14
  364. moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +80 -79
  365. moai_adk/templates/.claude/skills/moai-lang-csharp/examples.md +572 -16
  366. moai_adk/templates/.claude/skills/moai-lang-csharp/modules/aspnet-core.md +627 -0
  367. moai_adk/templates/.claude/skills/moai-lang-csharp/modules/blazor-components.md +767 -0
  368. moai_adk/templates/.claude/skills/moai-lang-csharp/modules/cqrs-validation.md +626 -0
  369. moai_adk/templates/.claude/skills/moai-lang-csharp/modules/csharp12-features.md +580 -0
  370. moai_adk/templates/.claude/skills/moai-lang-csharp/modules/efcore-patterns.md +622 -0
  371. moai_adk/templates/.claude/skills/moai-lang-csharp/reference.md +388 -15
  372. moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +135 -0
  373. moai_adk/templates/.claude/skills/moai-lang-elixir/examples.md +1171 -0
  374. moai_adk/templates/.claude/skills/moai-lang-elixir/modules/advanced-patterns.md +531 -0
  375. moai_adk/templates/.claude/skills/moai-lang-elixir/reference.md +889 -0
  376. moai_adk/templates/.claude/skills/moai-lang-flutter/SKILL.md +104 -0
  377. moai_adk/templates/.claude/skills/moai-lang-flutter/examples.md +1090 -0
  378. moai_adk/templates/.claude/skills/moai-lang-flutter/reference.md +686 -0
  379. moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +153 -80
  380. moai_adk/templates/.claude/skills/moai-lang-go/examples.md +906 -16
  381. moai_adk/templates/.claude/skills/moai-lang-go/reference.md +721 -15
  382. moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +117 -80
  383. moai_adk/templates/.claude/skills/moai-lang-java/examples.md +851 -16
  384. moai_adk/templates/.claude/skills/moai-lang-java/reference.md +278 -18
  385. moai_adk/templates/.claude/skills/moai-lang-javascript/SKILL.md +133 -79
  386. moai_adk/templates/.claude/skills/moai-lang-javascript/examples.md +960 -16
  387. moai_adk/templates/.claude/skills/moai-lang-javascript/reference.md +1528 -17
  388. moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +100 -79
  389. moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +993 -16
  390. moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +549 -18
  391. moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +135 -76
  392. moai_adk/templates/.claude/skills/moai-lang-php/examples.md +1595 -16
  393. moai_adk/templates/.claude/skills/moai-lang-php/modules/advanced-patterns.md +538 -0
  394. moai_adk/templates/.claude/skills/moai-lang-php/reference.md +1309 -16
  395. moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +141 -341
  396. moai_adk/templates/.claude/skills/moai-lang-python/examples.md +849 -496
  397. moai_adk/templates/.claude/skills/moai-lang-python/reference.md +731 -243
  398. moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +134 -76
  399. moai_adk/templates/.claude/skills/moai-lang-r/examples.md +1141 -16
  400. moai_adk/templates/.claude/skills/moai-lang-r/modules/advanced-patterns.md +489 -0
  401. moai_adk/templates/.claude/skills/moai-lang-r/reference.md +1074 -17
  402. moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +136 -77
  403. moai_adk/templates/.claude/skills/moai-lang-ruby/examples.md +1093 -16
  404. moai_adk/templates/.claude/skills/moai-lang-ruby/modules/advanced-patterns.md +309 -0
  405. moai_adk/templates/.claude/skills/moai-lang-ruby/modules/testing-patterns.md +306 -0
  406. moai_adk/templates/.claude/skills/moai-lang-ruby/reference.md +1010 -17
  407. moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +112 -78
  408. moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +646 -16
  409. moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +491 -18
  410. moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +113 -75
  411. moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +620 -16
  412. moai_adk/templates/.claude/skills/moai-lang-scala/modules/akka-actors.md +479 -0
  413. moai_adk/templates/.claude/skills/moai-lang-scala/modules/cats-effect.md +489 -0
  414. moai_adk/templates/.claude/skills/moai-lang-scala/modules/functional-programming.md +460 -0
  415. moai_adk/templates/.claude/skills/moai-lang-scala/modules/spark-data.md +498 -0
  416. moai_adk/templates/.claude/skills/moai-lang-scala/modules/zio-patterns.md +541 -0
  417. moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +410 -17
  418. moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +88 -83
  419. moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +905 -16
  420. moai_adk/templates/.claude/skills/moai-lang-swift/modules/combine-reactive.md +256 -0
  421. moai_adk/templates/.claude/skills/moai-lang-swift/modules/concurrency.md +270 -0
  422. moai_adk/templates/.claude/skills/moai-lang-swift/modules/swift6-features.md +265 -0
  423. moai_adk/templates/.claude/skills/moai-lang-swift/modules/swiftui-patterns.md +314 -0
  424. moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +659 -17
  425. moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +115 -82
  426. moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +1076 -16
  427. moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +718 -21
  428. moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +145 -0
  429. moai_adk/templates/.claude/skills/moai-library-mermaid/examples.md +270 -0
  430. moai_adk/templates/.claude/skills/moai-library-mermaid/modules/advanced-patterns.md +465 -0
  431. moai_adk/templates/.claude/skills/moai-library-mermaid/modules/optimization.md +440 -0
  432. moai_adk/templates/.claude/skills/moai-library-mermaid/reference.md +228 -0
  433. moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +143 -0
  434. moai_adk/templates/.claude/skills/moai-library-nextra/examples.md +592 -0
  435. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-deployment-patterns.md +182 -0
  436. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +336 -0
  437. moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +350 -0
  438. moai_adk/templates/.claude/skills/moai-library-nextra/modules/content-architecture-optimization.md +162 -0
  439. moai_adk/templates/.claude/skills/moai-library-nextra/modules/deployment.md +52 -0
  440. moai_adk/templates/.claude/skills/moai-library-nextra/modules/framework-core-configuration.md +186 -0
  441. moai_adk/templates/.claude/skills/moai-library-nextra/modules/i18n-setup.md +55 -0
  442. moai_adk/templates/.claude/skills/moai-library-nextra/modules/mdx-components.md +52 -0
  443. moai_adk/templates/.claude/skills/moai-library-nextra/modules/optimization.md +303 -0
  444. moai_adk/templates/.claude/skills/moai-library-nextra/reference.md +379 -0
  445. moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +175 -0
  446. moai_adk/templates/.claude/skills/moai-library-shadcn/examples.md +575 -0
  447. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/advanced-patterns.md +394 -0
  448. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/optimization.md +278 -0
  449. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-components.md +457 -0
  450. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-theming.md +373 -0
  451. moai_adk/templates/.claude/skills/moai-library-shadcn/reference.md +74 -0
  452. moai_adk/templates/.claude/skills/moai-platform-auth0/SKILL.md +284 -0
  453. moai_adk/templates/.claude/skills/moai-platform-auth0/examples.md +2446 -0
  454. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/adaptive-mfa.md +233 -0
  455. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/akamai-integration.md +214 -0
  456. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/application-credentials.md +280 -0
  457. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/attack-protection-log-events.md +224 -0
  458. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/attack-protection-overview.md +140 -0
  459. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/bot-detection.md +144 -0
  460. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/breached-password-detection.md +187 -0
  461. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/brute-force-protection.md +189 -0
  462. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/certifications.md +282 -0
  463. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/compliance-overview.md +263 -0
  464. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/continuous-session-protection.md +307 -0
  465. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/customize-mfa.md +177 -0
  466. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/dpop-implementation.md +283 -0
  467. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/fapi-implementation.md +259 -0
  468. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/gdpr-compliance.md +313 -0
  469. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/guardian-configuration.md +269 -0
  470. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/highly-regulated-identity.md +272 -0
  471. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/jwt-fundamentals.md +248 -0
  472. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mdl-verification.md +210 -0
  473. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-api-management.md +278 -0
  474. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-factors.md +226 -0
  475. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-overview.md +174 -0
  476. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mtls-sender-constraining.md +316 -0
  477. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/ropg-flow-mfa.md +216 -0
  478. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/security-center.md +325 -0
  479. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/security-guidance.md +277 -0
  480. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/state-parameters.md +177 -0
  481. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/step-up-authentication.md +251 -0
  482. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/suspicious-ip-throttling.md +240 -0
  483. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/tenant-access-control.md +179 -0
  484. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/webauthn-fido.md +235 -0
  485. moai_adk/templates/.claude/skills/moai-platform-auth0/reference.md +224 -0
  486. moai_adk/templates/.claude/skills/moai-platform-clerk/SKILL.md +135 -0
  487. moai_adk/templates/.claude/skills/moai-platform-clerk/examples.md +1426 -0
  488. moai_adk/templates/.claude/skills/moai-platform-clerk/modules/advanced-patterns.md +417 -0
  489. moai_adk/templates/.claude/skills/moai-platform-clerk/reference.md +273 -0
  490. moai_adk/templates/.claude/skills/moai-platform-convex/SKILL.md +158 -0
  491. moai_adk/templates/.claude/skills/moai-platform-convex/examples.md +506 -0
  492. moai_adk/templates/.claude/skills/moai-platform-convex/modules/auth-integration.md +421 -0
  493. moai_adk/templates/.claude/skills/moai-platform-convex/modules/file-storage.md +474 -0
  494. moai_adk/templates/.claude/skills/moai-platform-convex/modules/reactive-queries.md +302 -0
  495. moai_adk/templates/.claude/skills/moai-platform-convex/modules/server-functions.md +452 -0
  496. moai_adk/templates/.claude/skills/moai-platform-convex/reference.md +385 -0
  497. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/SKILL.md +166 -0
  498. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/examples.md +514 -0
  499. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/custom-claims.md +374 -0
  500. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/phone-auth.md +372 -0
  501. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/social-auth.md +339 -0
  502. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/reference.md +382 -0
  503. moai_adk/templates/.claude/skills/moai-platform-firestore/SKILL.md +127 -0
  504. moai_adk/templates/.claude/skills/moai-platform-firestore/examples.md +445 -0
  505. moai_adk/templates/.claude/skills/moai-platform-firestore/modules/offline-cache.md +392 -0
  506. moai_adk/templates/.claude/skills/moai-platform-firestore/modules/realtime-listeners.md +441 -0
  507. moai_adk/templates/.claude/skills/moai-platform-firestore/modules/security-rules.md +352 -0
  508. moai_adk/templates/.claude/skills/moai-platform-firestore/modules/transactions.md +452 -0
  509. moai_adk/templates/.claude/skills/moai-platform-firestore/reference.md +322 -0
  510. moai_adk/templates/.claude/skills/moai-platform-neon/SKILL.md +156 -0
  511. moai_adk/templates/.claude/skills/moai-platform-neon/examples.md +470 -0
  512. moai_adk/templates/.claude/skills/moai-platform-neon/modules/auto-scaling.md +349 -0
  513. moai_adk/templates/.claude/skills/moai-platform-neon/modules/branching-workflows.md +354 -0
  514. moai_adk/templates/.claude/skills/moai-platform-neon/modules/connection-pooling.md +412 -0
  515. moai_adk/templates/.claude/skills/moai-platform-neon/modules/pitr-backups.md +458 -0
  516. moai_adk/templates/.claude/skills/moai-platform-neon/reference.md +272 -0
  517. moai_adk/templates/.claude/skills/moai-platform-railway/SKILL.md +146 -0
  518. moai_adk/templates/.claude/skills/moai-platform-railway/examples.md +539 -0
  519. moai_adk/templates/.claude/skills/moai-platform-railway/modules/docker-deployment.md +261 -0
  520. moai_adk/templates/.claude/skills/moai-platform-railway/modules/multi-service.md +291 -0
  521. moai_adk/templates/.claude/skills/moai-platform-railway/modules/networking-domains.md +338 -0
  522. moai_adk/templates/.claude/skills/moai-platform-railway/modules/volumes-storage.md +353 -0
  523. moai_adk/templates/.claude/skills/moai-platform-railway/reference.md +374 -0
  524. moai_adk/templates/.claude/skills/moai-platform-supabase/SKILL.md +141 -0
  525. moai_adk/templates/.claude/skills/moai-platform-supabase/examples.md +502 -0
  526. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/auth-integration.md +384 -0
  527. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/edge-functions.md +371 -0
  528. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/postgresql-pgvector.md +231 -0
  529. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/realtime-presence.md +354 -0
  530. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/row-level-security.md +286 -0
  531. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/storage-cdn.md +319 -0
  532. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/typescript-patterns.md +453 -0
  533. moai_adk/templates/.claude/skills/moai-platform-supabase/reference.md +284 -0
  534. moai_adk/templates/.claude/skills/moai-platform-vercel/SKILL.md +132 -0
  535. moai_adk/templates/.claude/skills/moai-platform-vercel/examples.md +502 -0
  536. moai_adk/templates/.claude/skills/moai-platform-vercel/modules/analytics-speed.md +348 -0
  537. moai_adk/templates/.claude/skills/moai-platform-vercel/modules/deployment-config.md +344 -0
  538. moai_adk/templates/.claude/skills/moai-platform-vercel/modules/edge-functions.md +222 -0
  539. moai_adk/templates/.claude/skills/moai-platform-vercel/modules/isr-caching.md +306 -0
  540. moai_adk/templates/.claude/skills/moai-platform-vercel/modules/kv-storage.md +399 -0
  541. moai_adk/templates/.claude/skills/moai-platform-vercel/reference.md +360 -0
  542. moai_adk/templates/.claude/skills/moai-tool-ast-grep/SKILL.md +193 -0
  543. moai_adk/templates/.claude/skills/moai-tool-ast-grep/examples.md +1099 -0
  544. moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/language-specific.md +307 -0
  545. moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/pattern-syntax.md +237 -0
  546. moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/refactoring-patterns.md +260 -0
  547. moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/security-rules.md +239 -0
  548. moai_adk/templates/.claude/skills/moai-tool-ast-grep/reference.md +288 -0
  549. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/go.yml +90 -0
  550. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/python.yml +101 -0
  551. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/typescript.yml +83 -0
  552. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/quality/complexity-check.yml +94 -0
  553. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/quality/deprecated-apis.yml +84 -0
  554. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/secrets-detection.yml +89 -0
  555. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/sql-injection.yml +45 -0
  556. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/xss-prevention.yml +50 -0
  557. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/sgconfig.yml +54 -0
  558. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +251 -0
  559. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/examples.md +544 -0
  560. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/modules/advanced-patterns.md +379 -0
  561. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/modules/optimization.md +286 -0
  562. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/reference.md +307 -0
  563. moai_adk/templates/.claude/skills/moai-workflow-loop/SKILL.md +197 -0
  564. moai_adk/templates/.claude/skills/moai-workflow-loop/examples.md +1063 -0
  565. moai_adk/templates/.claude/skills/moai-workflow-loop/reference.md +1414 -0
  566. moai_adk/templates/.claude/skills/moai-workflow-project/README.md +190 -0
  567. moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +287 -0
  568. moai_adk/templates/.claude/skills/moai-workflow-project/examples.md +547 -0
  569. moai_adk/templates/.claude/skills/moai-workflow-project/reference.md +275 -0
  570. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/config-schema.json +316 -0
  571. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +1434 -0
  572. moai_adk/templates/.claude/skills/moai-workflow-project/templates/config-template.json +71 -0
  573. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/product-template.md +44 -0
  574. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/structure-template.md +48 -0
  575. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/tech-template.md +92 -0
  576. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/config-manager-setup.json +109 -0
  577. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/language-initializer.json +228 -0
  578. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/menu-project-config.json +130 -0
  579. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/project-batch-questions.json +97 -0
  580. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/spec-workflow-setup.json +150 -0
  581. moai_adk/templates/.claude/skills/moai-workflow-spec/SKILL.md +337 -0
  582. moai_adk/templates/.claude/skills/moai-workflow-spec/examples.md +900 -0
  583. moai_adk/templates/.claude/skills/moai-workflow-spec/modules/advanced-patterns.md +237 -0
  584. moai_adk/templates/.claude/skills/moai-workflow-spec/reference.md +704 -0
  585. moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +270 -0
  586. moai_adk/templates/.claude/skills/moai-workflow-templates/examples.md +552 -0
  587. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/code-templates.md +124 -0
  588. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/feedback-templates.md +100 -0
  589. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/template-optimizer.md +138 -0
  590. moai_adk/templates/.claude/skills/moai-workflow-templates/reference.md +346 -0
  591. moai_adk/templates/.claude/skills/moai-workflow-testing/LICENSE.txt +202 -0
  592. moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +269 -0
  593. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/ai-powered-testing.py +294 -0
  594. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/console_logging.py +35 -0
  595. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/element_discovery.py +40 -0
  596. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/static_html_automation.py +34 -0
  597. moai_adk/templates/.claude/skills/moai-workflow-testing/examples.md +672 -0
  598. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +269 -0
  599. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/advanced-patterns.md +576 -0
  600. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +302 -0
  601. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/context7-integration.md +286 -0
  602. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/review-workflows.md +500 -0
  603. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/relevance-analysis.md +154 -0
  604. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/safety-analysis.md +148 -0
  605. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/scoring-algorithms.md +196 -0
  606. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/timeliness-analysis.md +168 -0
  607. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/truthfulness-analysis.md +136 -0
  608. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/usability-analysis.md +153 -0
  609. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework.md +257 -0
  610. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +263 -0
  611. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/analysis-patterns.md +340 -0
  612. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/core-classes.md +299 -0
  613. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/tool-integration.md +380 -0
  614. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/debugging/debugging-workflows.md +451 -0
  615. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/debugging/error-analysis.md +442 -0
  616. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/optimization.md +505 -0
  617. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance/optimization-patterns.md +473 -0
  618. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance/profiling-techniques.md +481 -0
  619. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/ai-optimization.md +241 -0
  620. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/bottleneck-detection.md +397 -0
  621. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/optimization-plan.md +315 -0
  622. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/profiler-core.md +277 -0
  623. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/real-time-monitoring.md +187 -0
  624. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +327 -0
  625. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/quality-metrics.md +415 -0
  626. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/refactoring/ai-workflows.md +620 -0
  627. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/refactoring/patterns.md +692 -0
  628. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/security-analysis.md +429 -0
  629. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +313 -0
  630. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/static-analysis.md +438 -0
  631. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd/core-classes.md +397 -0
  632. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/advanced-features.md +494 -0
  633. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/red-green-refactor.md +316 -0
  634. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/test-generation.md +471 -0
  635. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/test-patterns.md +371 -0
  636. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +265 -0
  637. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/trust5-validation.md +428 -0
  638. moai_adk/templates/.claude/skills/moai-workflow-testing/reference/playwright-best-practices.md +57 -0
  639. moai_adk/templates/.claude/skills/moai-workflow-testing/reference.md +440 -0
  640. moai_adk/templates/.claude/skills/moai-workflow-testing/scripts/with_server.py +218 -0
  641. moai_adk/templates/.claude/skills/moai-workflow-testing/templates/alfred-integration.md +376 -0
  642. moai_adk/templates/.claude/skills/moai-workflow-testing/workflows/enterprise-testing-workflow.py +571 -0
  643. moai_adk/templates/.claude/skills/moai-workflow-worktree/SKILL.md +228 -0
  644. moai_adk/templates/.claude/skills/moai-workflow-worktree/examples.md +606 -0
  645. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/integration-patterns.md +149 -0
  646. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/moai-adk-integration.md +245 -0
  647. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-advanced.md +310 -0
  648. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-development.md +202 -0
  649. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-workflows.md +302 -0
  650. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/registry-architecture.md +271 -0
  651. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/resource-optimization.md +300 -0
  652. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/tools-integration.md +280 -0
  653. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/troubleshooting.md +397 -0
  654. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/worktree-commands.md +296 -0
  655. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/worktree-management.md +217 -0
  656. moai_adk/templates/.claude/skills/moai-workflow-worktree/reference.md +357 -0
  657. moai_adk/templates/.git-hooks/pre-commit +128 -0
  658. moai_adk/templates/.git-hooks/pre-push +468 -0
  659. moai_adk/templates/.github/workflows/ci-universal.yml +1314 -0
  660. moai_adk/templates/.github/workflows/security-secrets-check.yml +179 -0
  661. moai_adk/templates/.github/workflows/spec-issue-sync.yml +206 -36
  662. moai_adk/templates/.gitignore +152 -13
  663. moai_adk/templates/.lsp.json +152 -0
  664. moai_adk/templates/.mcp.json +13 -0
  665. moai_adk/templates/.moai/announcements/en.json +18 -0
  666. moai_adk/templates/.moai/announcements/ja.json +18 -0
  667. moai_adk/templates/.moai/announcements/ko.json +18 -0
  668. moai_adk/templates/.moai/announcements/zh.json +18 -0
  669. moai_adk/templates/.moai/config/config.yaml +64 -0
  670. moai_adk/templates/.moai/config/multilingual-triggers.yaml +213 -0
  671. moai_adk/templates/.moai/config/sections/git-strategy.yaml +116 -0
  672. moai_adk/templates/.moai/config/sections/language.yaml +11 -0
  673. moai_adk/templates/.moai/config/sections/llm.yaml +41 -0
  674. moai_adk/templates/.moai/config/sections/pricing.yaml +30 -0
  675. moai_adk/templates/.moai/config/sections/project.yaml +13 -0
  676. moai_adk/templates/.moai/config/sections/quality.yaml +55 -0
  677. moai_adk/templates/.moai/config/sections/ralph.yaml +55 -0
  678. moai_adk/templates/.moai/config/sections/system.yaml +59 -0
  679. moai_adk/templates/.moai/config/sections/user.yaml +5 -0
  680. moai_adk/templates/.moai/config/statusline-config.yaml +92 -0
  681. moai_adk/templates/.moai/llm-configs/glm.json +22 -0
  682. moai_adk/templates/CLAUDE.ja.md +343 -0
  683. moai_adk/templates/CLAUDE.ko.md +343 -0
  684. moai_adk/templates/CLAUDE.md +274 -246
  685. moai_adk/templates/CLAUDE.zh.md +343 -0
  686. moai_adk/utils/__init__.py +24 -2
  687. moai_adk/utils/banner.py +9 -13
  688. moai_adk/utils/common.py +331 -0
  689. moai_adk/utils/link_validator.py +241 -0
  690. moai_adk/utils/logger.py +4 -9
  691. moai_adk/utils/safe_file_reader.py +206 -0
  692. moai_adk/utils/timeout.py +160 -0
  693. moai_adk/utils/toon_utils.py +256 -0
  694. moai_adk/version.py +22 -0
  695. moai_adk-1.1.0.dist-info/METADATA +2443 -0
  696. moai_adk-1.1.0.dist-info/RECORD +701 -0
  697. {moai_adk-0.8.0.dist-info → moai_adk-1.1.0.dist-info}/WHEEL +1 -1
  698. moai_adk-1.1.0.dist-info/entry_points.txt +5 -0
  699. moai_adk-1.1.0.dist-info/licenses/LICENSE +99 -0
  700. moai_adk/cli/commands/backup.py +0 -80
  701. moai_adk/templates/.claude/agents/alfred/cc-manager.md +0 -293
  702. moai_adk/templates/.claude/agents/alfred/debug-helper.md +0 -196
  703. moai_adk/templates/.claude/agents/alfred/doc-syncer.md +0 -207
  704. moai_adk/templates/.claude/agents/alfred/git-manager.md +0 -375
  705. moai_adk/templates/.claude/agents/alfred/implementation-planner.md +0 -343
  706. moai_adk/templates/.claude/agents/alfred/project-manager.md +0 -246
  707. moai_adk/templates/.claude/agents/alfred/quality-gate.md +0 -320
  708. moai_adk/templates/.claude/agents/alfred/skill-factory.md +0 -837
  709. moai_adk/templates/.claude/agents/alfred/spec-builder.md +0 -272
  710. moai_adk/templates/.claude/agents/alfred/tag-agent.md +0 -265
  711. moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +0 -311
  712. moai_adk/templates/.claude/agents/alfred/trust-checker.md +0 -352
  713. moai_adk/templates/.claude/commands/alfred/0-project.md +0 -1184
  714. moai_adk/templates/.claude/commands/alfred/1-plan.md +0 -665
  715. moai_adk/templates/.claude/commands/alfred/2-run.md +0 -488
  716. moai_adk/templates/.claude/commands/alfred/3-sync.md +0 -623
  717. moai_adk/templates/.claude/hooks/alfred/HOOK_SCHEMA_VALIDATION.md +0 -313
  718. moai_adk/templates/.claude/hooks/alfred/README.md +0 -230
  719. moai_adk/templates/.claude/hooks/alfred/alfred_hooks.py +0 -174
  720. moai_adk/templates/.claude/hooks/alfred/core/__init__.py +0 -170
  721. moai_adk/templates/.claude/hooks/alfred/core/context.py +0 -67
  722. moai_adk/templates/.claude/hooks/alfred/core/project.py +0 -416
  723. moai_adk/templates/.claude/hooks/alfred/core/tags.py +0 -198
  724. moai_adk/templates/.claude/hooks/alfred/handlers/__init__.py +0 -21
  725. moai_adk/templates/.claude/hooks/alfred/handlers/notification.py +0 -25
  726. moai_adk/templates/.claude/hooks/alfred/handlers/session.py +0 -161
  727. moai_adk/templates/.claude/hooks/alfred/handlers/tool.py +0 -90
  728. moai_adk/templates/.claude/hooks/alfred/handlers/user.py +0 -42
  729. moai_adk/templates/.claude/hooks/alfred/test_hook_output.py +0 -175
  730. moai_adk/templates/.claude/output-styles/alfred/agentic-coding.md +0 -640
  731. moai_adk/templates/.claude/output-styles/alfred/moai-adk-learning.md +0 -696
  732. moai_adk/templates/.claude/output-styles/alfred/study-with-alfred.md +0 -474
  733. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/SKILL.md +0 -113
  734. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/examples.md +0 -29
  735. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/reference.md +0 -28
  736. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/SKILL.md +0 -122
  737. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/examples.md +0 -29
  738. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/reference.md +0 -29
  739. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/SKILL.md +0 -237
  740. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/examples.md +0 -615
  741. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/reference.md +0 -653
  742. moai_adk/templates/.claude/skills/moai-alfred-language-detection/SKILL.md +0 -113
  743. moai_adk/templates/.claude/skills/moai-alfred-language-detection/examples.md +0 -29
  744. moai_adk/templates/.claude/skills/moai-alfred-language-detection/reference.md +0 -28
  745. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/SKILL.md +0 -113
  746. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/examples.md +0 -29
  747. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/reference.md +0 -28
  748. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/SKILL.md +0 -113
  749. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/examples.md +0 -29
  750. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/reference.md +0 -28
  751. moai_adk/templates/.claude/skills/moai-alfred-trust-validation/SKILL.md +0 -113
  752. moai_adk/templates/.claude/skills/moai-alfred-trust-validation/examples.md +0 -29
  753. moai_adk/templates/.claude/skills/moai-alfred-trust-validation/reference.md +0 -28
  754. moai_adk/templates/.claude/skills/moai-cc-agents/SKILL.md +0 -269
  755. moai_adk/templates/.claude/skills/moai-cc-agents/templates/agent-template.md +0 -32
  756. moai_adk/templates/.claude/skills/moai-cc-claude-md/SKILL.md +0 -298
  757. moai_adk/templates/.claude/skills/moai-cc-claude-md/templates/CLAUDE-template.md +0 -26
  758. moai_adk/templates/.claude/skills/moai-cc-commands/SKILL.md +0 -307
  759. moai_adk/templates/.claude/skills/moai-cc-commands/templates/command-template.md +0 -21
  760. moai_adk/templates/.claude/skills/moai-cc-hooks/SKILL.md +0 -252
  761. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/pre-bash-check.sh +0 -19
  762. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/preserve-permissions.sh +0 -19
  763. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/validate-bash-command.py +0 -24
  764. moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/SKILL.md +0 -199
  765. moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/templates/settings-mcp-template.json +0 -39
  766. moai_adk/templates/.claude/skills/moai-cc-memory/SKILL.md +0 -316
  767. moai_adk/templates/.claude/skills/moai-cc-memory/templates/session-summary-template.md +0 -18
  768. moai_adk/templates/.claude/skills/moai-cc-settings/SKILL.md +0 -263
  769. moai_adk/templates/.claude/skills/moai-cc-settings/templates/settings-complete-template.json +0 -30
  770. moai_adk/templates/.claude/skills/moai-cc-skills/SKILL.md +0 -291
  771. moai_adk/templates/.claude/skills/moai-cc-skills/templates/SKILL-template.md +0 -15
  772. moai_adk/templates/.claude/skills/moai-domain-cli-tool/SKILL.md +0 -123
  773. moai_adk/templates/.claude/skills/moai-domain-cli-tool/examples.md +0 -29
  774. moai_adk/templates/.claude/skills/moai-domain-cli-tool/reference.md +0 -30
  775. moai_adk/templates/.claude/skills/moai-domain-data-science/SKILL.md +0 -123
  776. moai_adk/templates/.claude/skills/moai-domain-data-science/examples.md +0 -29
  777. moai_adk/templates/.claude/skills/moai-domain-data-science/reference.md +0 -30
  778. moai_adk/templates/.claude/skills/moai-domain-devops/SKILL.md +0 -124
  779. moai_adk/templates/.claude/skills/moai-domain-devops/examples.md +0 -29
  780. moai_adk/templates/.claude/skills/moai-domain-devops/reference.md +0 -31
  781. moai_adk/templates/.claude/skills/moai-domain-ml/SKILL.md +0 -123
  782. moai_adk/templates/.claude/skills/moai-domain-ml/examples.md +0 -29
  783. moai_adk/templates/.claude/skills/moai-domain-ml/reference.md +0 -30
  784. moai_adk/templates/.claude/skills/moai-domain-mobile-app/SKILL.md +0 -123
  785. moai_adk/templates/.claude/skills/moai-domain-mobile-app/examples.md +0 -29
  786. moai_adk/templates/.claude/skills/moai-domain-mobile-app/reference.md +0 -30
  787. moai_adk/templates/.claude/skills/moai-domain-security/SKILL.md +0 -123
  788. moai_adk/templates/.claude/skills/moai-domain-security/examples.md +0 -29
  789. moai_adk/templates/.claude/skills/moai-domain-security/reference.md +0 -30
  790. moai_adk/templates/.claude/skills/moai-domain-web-api/SKILL.md +0 -123
  791. moai_adk/templates/.claude/skills/moai-domain-web-api/examples.md +0 -29
  792. moai_adk/templates/.claude/skills/moai-domain-web-api/reference.md +0 -30
  793. moai_adk/templates/.claude/skills/moai-essentials-debug/SKILL.md +0 -303
  794. moai_adk/templates/.claude/skills/moai-essentials-debug/examples.md +0 -1064
  795. moai_adk/templates/.claude/skills/moai-essentials-debug/reference.md +0 -1047
  796. moai_adk/templates/.claude/skills/moai-essentials-perf/SKILL.md +0 -113
  797. moai_adk/templates/.claude/skills/moai-essentials-perf/examples.md +0 -29
  798. moai_adk/templates/.claude/skills/moai-essentials-perf/reference.md +0 -28
  799. moai_adk/templates/.claude/skills/moai-essentials-refactor/SKILL.md +0 -113
  800. moai_adk/templates/.claude/skills/moai-essentials-refactor/examples.md +0 -29
  801. moai_adk/templates/.claude/skills/moai-essentials-refactor/reference.md +0 -28
  802. moai_adk/templates/.claude/skills/moai-essentials-review/SKILL.md +0 -113
  803. moai_adk/templates/.claude/skills/moai-essentials-review/examples.md +0 -29
  804. moai_adk/templates/.claude/skills/moai-essentials-review/reference.md +0 -28
  805. moai_adk/templates/.claude/skills/moai-foundation-ears/SKILL.md +0 -113
  806. moai_adk/templates/.claude/skills/moai-foundation-ears/examples.md +0 -29
  807. moai_adk/templates/.claude/skills/moai-foundation-ears/reference.md +0 -28
  808. moai_adk/templates/.claude/skills/moai-foundation-git/SKILL.md +0 -122
  809. moai_adk/templates/.claude/skills/moai-foundation-git/examples.md +0 -29
  810. moai_adk/templates/.claude/skills/moai-foundation-git/reference.md +0 -29
  811. moai_adk/templates/.claude/skills/moai-foundation-langs/SKILL.md +0 -113
  812. moai_adk/templates/.claude/skills/moai-foundation-langs/examples.md +0 -29
  813. moai_adk/templates/.claude/skills/moai-foundation-langs/reference.md +0 -28
  814. moai_adk/templates/.claude/skills/moai-foundation-specs/SKILL.md +0 -113
  815. moai_adk/templates/.claude/skills/moai-foundation-specs/examples.md +0 -29
  816. moai_adk/templates/.claude/skills/moai-foundation-specs/reference.md +0 -28
  817. moai_adk/templates/.claude/skills/moai-foundation-tags/SKILL.md +0 -113
  818. moai_adk/templates/.claude/skills/moai-foundation-tags/examples.md +0 -29
  819. moai_adk/templates/.claude/skills/moai-foundation-tags/reference.md +0 -28
  820. moai_adk/templates/.claude/skills/moai-foundation-trust/SKILL.md +0 -307
  821. moai_adk/templates/.claude/skills/moai-foundation-trust/examples.md +0 -0
  822. moai_adk/templates/.claude/skills/moai-foundation-trust/reference.md +0 -1099
  823. moai_adk/templates/.claude/skills/moai-lang-c/SKILL.md +0 -124
  824. moai_adk/templates/.claude/skills/moai-lang-c/examples.md +0 -29
  825. moai_adk/templates/.claude/skills/moai-lang-c/reference.md +0 -31
  826. moai_adk/templates/.claude/skills/moai-lang-dart/SKILL.md +0 -123
  827. moai_adk/templates/.claude/skills/moai-lang-dart/examples.md +0 -29
  828. moai_adk/templates/.claude/skills/moai-lang-dart/reference.md +0 -30
  829. moai_adk/templates/.claude/skills/moai-lang-shell/SKILL.md +0 -123
  830. moai_adk/templates/.claude/skills/moai-lang-shell/examples.md +0 -29
  831. moai_adk/templates/.claude/skills/moai-lang-shell/reference.md +0 -30
  832. moai_adk/templates/.claude/skills/moai-lang-sql/SKILL.md +0 -124
  833. moai_adk/templates/.claude/skills/moai-lang-sql/examples.md +0 -29
  834. moai_adk/templates/.claude/skills/moai-lang-sql/reference.md +0 -31
  835. moai_adk/templates/.claude/skills/moai-skill-factory/CHECKLIST.md +0 -482
  836. moai_adk/templates/.claude/skills/moai-skill-factory/EXAMPLES.md +0 -278
  837. moai_adk/templates/.claude/skills/moai-skill-factory/INTERACTIVE-DISCOVERY.md +0 -524
  838. moai_adk/templates/.claude/skills/moai-skill-factory/METADATA.md +0 -477
  839. moai_adk/templates/.claude/skills/moai-skill-factory/PARALLEL-ANALYSIS-REPORT.md +0 -429
  840. moai_adk/templates/.claude/skills/moai-skill-factory/PYTHON-VERSION-MATRIX.md +0 -391
  841. moai_adk/templates/.claude/skills/moai-skill-factory/SKILL-FACTORY-WORKFLOW.md +0 -431
  842. moai_adk/templates/.claude/skills/moai-skill-factory/SKILL-UPDATE-ADVISOR.md +0 -577
  843. moai_adk/templates/.claude/skills/moai-skill-factory/SKILL.md +0 -271
  844. moai_adk/templates/.claude/skills/moai-skill-factory/STEP-BY-STEP-GUIDE.md +0 -466
  845. moai_adk/templates/.claude/skills/moai-skill-factory/STRUCTURE.md +0 -583
  846. moai_adk/templates/.claude/skills/moai-skill-factory/WEB-RESEARCH.md +0 -526
  847. moai_adk/templates/.claude/skills/moai-skill-factory/reference.md +0 -465
  848. moai_adk/templates/.claude/skills/moai-skill-factory/scripts/generate-structure.sh +0 -328
  849. moai_adk/templates/.claude/skills/moai-skill-factory/scripts/validate-skill.sh +0 -312
  850. moai_adk/templates/.claude/skills/moai-skill-factory/templates/SKILL_TEMPLATE.md +0 -245
  851. moai_adk/templates/.claude/skills/moai-skill-factory/templates/examples-template.md +0 -285
  852. moai_adk/templates/.claude/skills/moai-skill-factory/templates/reference-template.md +0 -278
  853. moai_adk/templates/.claude/skills/moai-skill-factory/templates/scripts-template.sh +0 -303
  854. moai_adk/templates/.claude/skills/moai-spec-authoring/README.md +0 -137
  855. moai_adk/templates/.claude/skills/moai-spec-authoring/SKILL.md +0 -218
  856. moai_adk/templates/.claude/skills/moai-spec-authoring/examples/validate-spec.sh +0 -161
  857. moai_adk/templates/.claude/skills/moai-spec-authoring/examples.md +0 -541
  858. moai_adk/templates/.claude/skills/moai-spec-authoring/reference.md +0 -622
  859. moai_adk/templates/.github/ISSUE_TEMPLATE/spec.yml +0 -176
  860. moai_adk/templates/.github/PULL_REQUEST_TEMPLATE.md +0 -69
  861. moai_adk/templates/.github/workflows/moai-gitflow.yml +0 -256
  862. moai_adk/templates/.moai/config.json +0 -96
  863. moai_adk/templates/.moai/memory/CLAUDE-AGENTS-GUIDE.md +0 -208
  864. moai_adk/templates/.moai/memory/CLAUDE-PRACTICES.md +0 -369
  865. moai_adk/templates/.moai/memory/CLAUDE-RULES.md +0 -539
  866. moai_adk/templates/.moai/memory/CONFIG-SCHEMA.md +0 -444
  867. moai_adk/templates/.moai/memory/DEVELOPMENT-GUIDE.md +0 -344
  868. moai_adk/templates/.moai/memory/GITFLOW-PROTECTION-POLICY.md +0 -220
  869. moai_adk/templates/.moai/memory/SKILLS-DESCRIPTION-POLICY.md +0 -218
  870. moai_adk/templates/.moai/memory/SPEC-METADATA.md +0 -356
  871. moai_adk/templates/.moai/memory/config-schema.md +0 -444
  872. moai_adk/templates/.moai/memory/gitflow-protection-policy.md +0 -220
  873. moai_adk/templates/.moai/memory/spec-metadata.md +0 -356
  874. moai_adk/templates/.moai/project/product.md +0 -161
  875. moai_adk/templates/.moai/project/structure.md +0 -156
  876. moai_adk/templates/.moai/project/tech.md +0 -227
  877. moai_adk/templates/__init__.py +0 -2
  878. moai_adk-0.8.0.dist-info/METADATA +0 -1722
  879. moai_adk-0.8.0.dist-info/RECORD +0 -282
  880. moai_adk-0.8.0.dist-info/entry_points.txt +0 -2
  881. moai_adk-0.8.0.dist-info/licenses/LICENSE +0 -21
@@ -1,1633 +1,718 @@
1
- # Backend Architecture Examples
1
+ # Backend Development Examples
2
2
 
3
- ## Example 1: Microservices with Kubernetes 1.31 + Istio 1.21
3
+ Multishot prompting examples demonstrating practical backend development patterns covering API design, database integration, microservices, and security.
4
4
 
5
- ### Architecture Overview
5
+ ---
6
6
 
7
- ```
8
- ┌─────────────────────────────────────────────────────────────┐
9
- │ Istio Ingress Gateway │
10
- │ (TLS termination, routing) │
11
- └───────────────────────┬─────────────────────────────────────┘
12
-
13
- ┌───────────────┼───────────────┐
14
- │ │ │
15
- ┌────▼────┐ ┌────▼────┐ ┌────▼────┐
16
- │ User │ │ Product │ │ Order │
17
- │ Service │ │ Service │ │ Service │
18
- │ (Go) │ │ (Python)│ │ (Node) │
19
- └────┬────┘ └────┬────┘ └────┬────┘
20
- │ │ │
21
- └──────────────┼──────────────┘
22
-
23
- ┌────────▼────────┐
24
- │ PostgreSQL │
25
- │ (Primary + │
26
- │ Read Replicas)│
27
- └─────────────────┘
28
- ```
7
+ ## Example 1: RESTful API with Authentication
29
8
 
30
- ### Service Deployment (User Service - Go)
31
-
32
- **Dockerfile**:
33
- ```dockerfile
34
- # Multi-stage build for Go service
35
- FROM golang:1.21-alpine AS builder
36
- WORKDIR /app
37
- COPY go.mod go.sum ./
38
- RUN go mod download
39
- COPY . .
40
- RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o user-service .
41
-
42
- FROM alpine:latest
43
- RUN apk --no-cache add ca-certificates
44
- WORKDIR /root/
45
- COPY --from=builder /app/user-service .
46
- EXPOSE 8080
47
- CMD ["./user-service"]
48
- ```
9
+ **Scenario**: Create a secure user management API with JWT authentication.
49
10
 
50
- **Kubernetes Deployment**:
51
- ```yaml
52
- apiVersion: apps/v1
53
- kind: Deployment
54
- metadata:
55
- name: user-service
56
- namespace: production
57
- spec:
58
- replicas: 3
59
- selector:
60
- matchLabels:
61
- app: user-service
62
- version: v1
63
- template:
64
- metadata:
65
- labels:
66
- app: user-service
67
- version: v1
68
- annotations:
69
- prometheus.io/scrape: "true"
70
- prometheus.io/port: "8080"
71
- prometheus.io/path: "/metrics"
72
- spec:
73
- containers:
74
- - name: user-service
75
- image: user-service:v1.2.3
76
- ports:
77
- - containerPort: 8080
78
- name: http
79
- protocol: TCP
80
- env:
81
- - name: DATABASE_URL
82
- valueFrom:
83
- secretKeyRef:
84
- name: database-credentials
85
- key: url
86
- - name: OTEL_EXPORTER_OTLP_ENDPOINT
87
- value: "otel-collector:4317"
88
- resources:
89
- requests:
90
- cpu: "100m"
91
- memory: "128Mi"
92
- limits:
93
- cpu: "500m"
94
- memory: "512Mi"
95
- livenessProbe:
96
- httpGet:
97
- path: /health/live
98
- port: 8080
99
- initialDelaySeconds: 30
100
- periodSeconds: 10
101
- readinessProbe:
102
- httpGet:
103
- path: /health/ready
104
- port: 8080
105
- initialDelaySeconds: 5
106
- periodSeconds: 5
107
- ---
108
- apiVersion: v1
109
- kind: Service
110
- metadata:
111
- name: user-service
112
- namespace: production
113
- spec:
114
- selector:
115
- app: user-service
116
- ports:
117
- - port: 80
118
- targetPort: 8080
119
- protocol: TCP
120
- name: http
121
- type: ClusterIP
122
- ```
11
+ **Input**:
12
+ ```python
13
+ from fastapi import FastAPI, Depends, HTTPException, status
14
+ from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
15
+ from pydantic import BaseModel, EmailStr
16
+ from typing import List
17
+ import jwt
18
+ from datetime import datetime, timedelta
19
+
20
+ app = FastAPI(title="User Management API", version="1.0.0")
21
+ security = HTTPBearer()
22
+
23
+ # Models
24
+ class UserCreate(BaseModel):
25
+ email: EmailStr
26
+ password: str
27
+ name: str
28
+
29
+ class UserResponse(BaseModel):
30
+ id: int
31
+ email: str
32
+ name: str
33
+ created_at: datetime
34
+
35
+ class TokenResponse(BaseModel):
36
+ access_token: str
37
+ token_type: str
38
+ expires_in: int
39
+ ```
40
+
41
+ **Output**:
42
+ ```python
43
+ # Complete implementation with authentication
44
+ SECRET_KEY = "your-secret-key" # Use environment variable in production
45
+ ALGORITHM = "HS256"
46
+
47
+ def create_access_token(user_id: int) -> str:
48
+ expire = datetime.utcnow() + timedelta(hours=24)
49
+ payload = {"sub": str(user_id), "exp": expire}
50
+ return jwt.encode(payload, SECRET_KEY, algorithm=ALGORITHM)
51
+
52
+ async def get_current_user(
53
+ credentials: HTTPAuthorizationCredentials = Depends(security)
54
+ ) -> int:
55
+ try:
56
+ payload = jwt.decode(
57
+ credentials.credentials,
58
+ SECRET_KEY,
59
+ algorithms=[ALGORITHM]
60
+ )
61
+ user_id = int(payload.get("sub"))
62
+ return user_id
63
+ except jwt.ExpiredSignatureError:
64
+ raise HTTPException(
65
+ status_code=status.HTTP_401_UNAUTHORIZED,
66
+ detail="Token has expired"
67
+ )
68
+ except jwt.InvalidTokenError:
69
+ raise HTTPException(
70
+ status_code=status.HTTP_401_UNAUTHORIZED,
71
+ detail="Invalid token"
72
+ )
123
73
 
124
- ### Istio Configuration
125
-
126
- **VirtualService (Traffic Routing)**:
127
- ```yaml
128
- apiVersion: networking.istio.io/v1beta1
129
- kind: VirtualService
130
- metadata:
131
- name: user-service
132
- namespace: production
133
- spec:
134
- hosts:
135
- - user-service
136
- http:
137
- - match:
138
- - headers:
139
- x-version:
140
- exact: "v2"
141
- route:
142
- - destination:
143
- host: user-service
144
- subset: v2
145
- - route:
146
- - destination:
147
- host: user-service
148
- subset: v1
149
- weight: 90
150
- - destination:
151
- host: user-service
152
- subset: v2
153
- weight: 10 # Canary: 10% traffic to v2
154
- timeout: 5s
155
- retries:
156
- attempts: 3
157
- perTryTimeout: 2s
158
- retryOn: 5xx,reset,connect-failure,refused-stream
159
- ```
74
+ @app.post("/auth/login", response_model=TokenResponse)
75
+ async def login(email: str, password: str):
76
+ user = await user_service.authenticate(email, password)
77
+ if not user:
78
+ raise HTTPException(
79
+ status_code=status.HTTP_401_UNAUTHORIZED,
80
+ detail="Invalid credentials"
81
+ )
82
+ token = create_access_token(user.id)
83
+ return TokenResponse(
84
+ access_token=token,
85
+ token_type="bearer",
86
+ expires_in=86400
87
+ )
160
88
 
161
- **DestinationRule (Traffic Policy)**:
162
- ```yaml
163
- apiVersion: networking.istio.io/v1beta1
164
- kind: DestinationRule
165
- metadata:
166
- name: user-service
167
- namespace: production
168
- spec:
169
- host: user-service
170
- trafficPolicy:
171
- connectionPool:
172
- tcp:
173
- maxConnections: 100
174
- http:
175
- http1MaxPendingRequests: 50
176
- http2MaxRequests: 100
177
- outlierDetection:
178
- consecutiveErrors: 5
179
- interval: 30s
180
- baseEjectionTime: 30s
181
- maxEjectionPercent: 50
182
- loadBalancer:
183
- simple: LEAST_REQUEST
184
- subsets:
185
- - name: v1
186
- labels:
187
- version: v1
188
- - name: v2
189
- labels:
190
- version: v2
89
+ @app.get("/users/me", response_model=UserResponse)
90
+ async def get_current_user_profile(
91
+ user_id: int = Depends(get_current_user)
92
+ ):
93
+ user = await user_service.get_by_id(user_id)
94
+ return user
191
95
  ```
192
96
 
193
- **PeerAuthentication (mTLS)**:
194
- ```yaml
195
- apiVersion: security.istio.io/v1beta1
196
- kind: PeerAuthentication
197
- metadata:
198
- name: default
199
- namespace: production
200
- spec:
201
- mtls:
202
- mode: STRICT # Enforce mTLS for all services
203
- ```
97
+ **Explanation**: This pattern demonstrates secure JWT authentication with proper error handling, token expiration, and dependency injection for protected routes.
204
98
 
205
- **AuthorizationPolicy (RBAC)**:
206
- ```yaml
207
- apiVersion: security.istio.io/v1beta1
208
- kind: AuthorizationPolicy
209
- metadata:
210
- name: user-service-authz
211
- namespace: production
212
- spec:
213
- selector:
214
- matchLabels:
215
- app: user-service
216
- action: ALLOW
217
- rules:
218
- - from:
219
- - source:
220
- principals: ["cluster.local/ns/production/sa/order-service"]
221
- to:
222
- - operation:
223
- methods: ["GET", "POST"]
224
- paths: ["/api/users/*"]
225
- ```
226
-
227
- ### Observability Integration
99
+ ---
228
100
 
229
- **OpenTelemetry Instrumentation (Go)**:
230
- ```go
231
- package main
101
+ ## Example 2: Database Repository Pattern with Caching
232
102
 
233
- import (
234
- "context"
235
- "log"
236
- "net/http"
103
+ **Scenario**: Implement a repository pattern with Redis caching for optimal performance.
237
104
 
238
- "go.opentelemetry.io/otel"
239
- "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
240
- "go.opentelemetry.io/otel/sdk/resource"
241
- "go.opentelemetry.io/otel/sdk/trace"
242
- semconv "go.opentelemetry.io/otel/semconv/v1.21.0"
243
- "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
244
- )
105
+ **Input**:
106
+ ```python
107
+ from sqlalchemy.ext.asyncio import AsyncSession
108
+ from sqlalchemy import select
109
+ import redis.asyncio as redis
110
+ import json
111
+ from typing import Optional, List
245
112
 
246
- func initTracer() (*trace.TracerProvider, error) {
247
- exporter, err := otlptracegrpc.New(
248
- context.Background(),
249
- otlptracegrpc.WithEndpoint("otel-collector:4317"),
250
- otlptracegrpc.WithInsecure(),
251
- )
252
- if err != nil {
253
- return nil, err
254
- }
113
+ class UserRepository:
114
+ def __init__(
115
+ self,
116
+ session: AsyncSession,
117
+ cache: redis.Redis
118
+ ):
119
+ self.session = session
120
+ self.cache = cache
121
+ self.cache_ttl = 3600 # 1 hour
122
+ ```
255
123
 
256
- tp := trace.NewTracerProvider(
257
- trace.WithBatcher(exporter),
258
- trace.WithResource(resource.NewWithAttributes(
259
- semconv.SchemaURL,
260
- semconv.ServiceNameKey.String("user-service"),
261
- semconv.ServiceVersionKey.String("v1.2.3"),
262
- )),
263
- )
124
+ **Output**:
125
+ ```python
126
+ class UserRepository:
127
+ def __init__(
128
+ self,
129
+ session: AsyncSession,
130
+ cache: redis.Redis
131
+ ):
132
+ self.session = session
133
+ self.cache = cache
134
+ self.cache_ttl = 3600
135
+
136
+ async def get_by_id(self, user_id: int) -> Optional[User]:
137
+ # Try cache first
138
+ cache_key = f"user:{user_id}"
139
+ cached = await self.cache.get(cache_key)
140
+
141
+ if cached:
142
+ return User(**json.loads(cached))
143
+
144
+ # Query database
145
+ result = await self.session.execute(
146
+ select(User).where(User.id == user_id)
147
+ )
148
+ user = result.scalar_one_or_none()
149
+
150
+ if user:
151
+ # Cache the result
152
+ await self.cache.setex(
153
+ cache_key,
154
+ self.cache_ttl,
155
+ json.dumps(user.to_dict())
156
+ )
157
+
158
+ return user
159
+
160
+ async def get_all(
161
+ self,
162
+ skip: int = 0,
163
+ limit: int = 100
164
+ ) -> List[User]:
165
+ result = await self.session.execute(
166
+ select(User)
167
+ .offset(skip)
168
+ .limit(limit)
169
+ .order_by(User.created_at.desc())
170
+ )
171
+ return result.scalars().all()
264
172
 
265
- otel.SetTracerProvider(tp)
266
- return tp, nil
267
- }
173
+ async def create(self, user_data: UserCreate) -> User:
174
+ user = User(**user_data.model_dump())
175
+ self.session.add(user)
176
+ await self.session.commit()
177
+ await self.session.refresh(user)
268
178
 
269
- func main() {
270
- tp, err := initTracer()
271
- if err != nil {
272
- log.Fatal(err)
273
- }
274
- defer tp.Shutdown(context.Background())
179
+ # Invalidate list cache
180
+ await self.cache.delete("users:list:*")
275
181
 
276
- // Wrap HTTP handler with OpenTelemetry instrumentation
277
- handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
278
- w.Write([]byte("Hello, World!"))
279
- })
182
+ return user
280
183
 
281
- wrappedHandler := otelhttp.NewHandler(handler, "user-service")
282
- http.Handle("/", wrappedHandler)
184
+ async def update(
185
+ self,
186
+ user_id: int,
187
+ user_data: UserUpdate
188
+ ) -> Optional[User]:
189
+ user = await self.get_by_id(user_id)
190
+ if not user:
191
+ return None
283
192
 
284
- log.Println("User service listening on :8080")
285
- log.Fatal(http.ListenAndServe(":8080", nil))
286
- }
287
- ```
193
+ for key, value in user_data.model_dump(exclude_unset=True).items():
194
+ setattr(user, key, value)
288
195
 
289
- **Prometheus Metrics (Go)**:
290
- ```go
291
- import (
292
- "github.com/prometheus/client_golang/prometheus"
293
- "github.com/prometheus/client_golang/prometheus/promhttp"
294
- )
196
+ await self.session.commit()
295
197
 
296
- var (
297
- httpRequestsTotal = prometheus.NewCounterVec(
298
- prometheus.CounterOpts{
299
- Name: "http_requests_total",
300
- Help: "Total number of HTTP requests",
301
- },
302
- []string{"method", "endpoint", "status"},
303
- )
198
+ # Invalidate cache
199
+ await self.cache.delete(f"user:{user_id}")
304
200
 
305
- httpRequestDuration = prometheus.NewHistogramVec(
306
- prometheus.HistogramOpts{
307
- Name: "http_request_duration_seconds",
308
- Help: "HTTP request latency",
309
- Buckets: prometheus.DefBuckets,
310
- },
311
- []string{"method", "endpoint"},
312
- )
313
- )
201
+ return user
314
202
 
315
- func init() {
316
- prometheus.MustRegister(httpRequestsTotal)
317
- prometheus.MustRegister(httpRequestDuration)
318
- }
203
+ async def delete(self, user_id: int) -> bool:
204
+ user = await self.get_by_id(user_id)
205
+ if not user:
206
+ return False
319
207
 
320
- func main() {
321
- // ... OpenTelemetry setup ...
208
+ await self.session.delete(user)
209
+ await self.session.commit()
322
210
 
323
- http.Handle("/metrics", promhttp.Handler())
324
- http.ListenAndServe(":8080", nil)
325
- }
326
- ```
211
+ # Invalidate cache
212
+ await self.cache.delete(f"user:{user_id}")
327
213
 
328
- ### Database Connection Pooling
329
-
330
- **PostgreSQL with PgBouncer**:
331
- ```yaml
332
- apiVersion: apps/v1
333
- kind: Deployment
334
- metadata:
335
- name: pgbouncer
336
- spec:
337
- replicas: 2
338
- template:
339
- spec:
340
- containers:
341
- - name: pgbouncer
342
- image: pgbouncer/pgbouncer:1.21
343
- ports:
344
- - containerPort: 6432
345
- volumeMounts:
346
- - name: config
347
- mountPath: /etc/pgbouncer
348
- volumes:
349
- - name: config
350
- configMap:
351
- name: pgbouncer-config
352
- ---
353
- apiVersion: v1
354
- kind: ConfigMap
355
- metadata:
356
- name: pgbouncer-config
357
- data:
358
- pgbouncer.ini: |
359
- [databases]
360
- production = host=postgres-primary port=5432 dbname=production
361
-
362
- [pgbouncer]
363
- listen_addr = 0.0.0.0
364
- listen_port = 6432
365
- auth_type = md5
366
- auth_file = /etc/pgbouncer/userlist.txt
367
- pool_mode = transaction
368
- max_client_conn = 1000
369
- default_pool_size = 20
370
- reserve_pool_size = 5
371
- server_lifetime = 3600
372
- server_idle_timeout = 600
214
+ return True
373
215
  ```
374
216
 
375
- **Application Connection String**:
376
- ```
377
- DATABASE_URL=postgresql://user:pass@pgbouncer:6432/production?pool_size=10
378
- ```
217
+ **Explanation**: The repository pattern encapsulates data access logic with Redis caching for read operations and automatic cache invalidation on writes.
379
218
 
380
219
  ---
381
220
 
382
- ## Example 2: Event-Driven Architecture with Kafka 3.7
383
-
384
- ### Architecture Overview
221
+ ## Example 3: Event-Driven Microservice Architecture
385
222
 
386
- ```
387
- ┌──────────┐ ┌──────────┐ ┌──────────┐
388
- │ Order │───▶│ Kafka │◀───│ Payment │
389
- │ Service │ │ Cluster │ │ Service │
390
- └──────────┘ └────┬─────┘ └──────────┘
391
-
392
- ┌──────────┼──────────┐
393
- │ │ │
394
- ┌────▼───┐ ┌───▼────┐ ┌───▼────┐
395
- │ Email │ │ Invoice│ │Analytics│
396
- │Service │ │Service │ │Service │
397
- └────────┘ └────────┘ └─────────┘
398
- ```
223
+ **Scenario**: Implement an order processing service with event-driven communication.
399
224
 
400
- ### Kafka Deployment (Kubernetes)
401
-
402
- **Kafka StatefulSet**:
403
- ```yaml
404
- apiVersion: apps/v1
405
- kind: StatefulSet
406
- metadata:
407
- name: kafka
408
- spec:
409
- serviceName: kafka-headless
410
- replicas: 3
411
- selector:
412
- matchLabels:
413
- app: kafka
414
- template:
415
- metadata:
416
- labels:
417
- app: kafka
418
- spec:
419
- containers:
420
- - name: kafka
421
- image: confluentinc/cp-kafka:7.6.0 # Kafka 3.7.x
422
- ports:
423
- - containerPort: 9092
424
- name: plaintext
425
- - containerPort: 9093
426
- name: ssl
427
- env:
428
- - name: KAFKA_BROKER_ID
429
- valueFrom:
430
- fieldRef:
431
- fieldPath: metadata.name
432
- - name: KAFKA_ZOOKEEPER_CONNECT
433
- value: "zookeeper:2181"
434
- - name: KAFKA_ADVERTISED_LISTENERS
435
- value: "PLAINTEXT://$(POD_NAME).kafka-headless:9092"
436
- - name: KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR
437
- value: "3"
438
- - name: KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR
439
- value: "3"
440
- - name: KAFKA_TRANSACTION_STATE_LOG_MIN_ISR
441
- value: "2"
442
- - name: KAFKA_LOG_RETENTION_HOURS
443
- value: "168" # 7 days
444
- resources:
445
- requests:
446
- memory: "2Gi"
447
- cpu: "1000m"
448
- limits:
449
- memory: "4Gi"
450
- cpu: "2000m"
451
- volumeMounts:
452
- - name: data
453
- mountPath: /var/lib/kafka/data
454
- volumeClaimTemplates:
455
- - metadata:
456
- name: data
457
- spec:
458
- accessModes: ["ReadWriteOnce"]
459
- resources:
460
- requests:
461
- storage: 100Gi
462
- ```
463
-
464
- ### Event Sourcing Pattern
465
-
466
- **Event Definition**:
467
- ```typescript
468
- // events/order.events.ts
469
- export enum OrderEventType {
470
- ORDER_CREATED = 'order.created',
471
- ORDER_PAID = 'order.paid',
472
- ORDER_SHIPPED = 'order.shipped',
473
- ORDER_DELIVERED = 'order.delivered',
474
- ORDER_CANCELLED = 'order.cancelled',
475
- }
476
-
477
- export interface OrderEvent {
478
- eventId: string;
479
- eventType: OrderEventType;
480
- orderId: string;
481
- timestamp: Date;
482
- userId: string;
483
- data: unknown;
484
- metadata: {
485
- correlationId: string;
486
- causationId: string;
487
- };
488
- }
489
-
490
- export interface OrderCreatedEvent extends OrderEvent {
491
- eventType: OrderEventType.ORDER_CREATED;
492
- data: {
493
- items: Array<{
494
- productId: string;
495
- quantity: number;
496
- price: number;
497
- }>;
498
- totalAmount: number;
499
- shippingAddress: Address;
500
- };
501
- }
502
- ```
225
+ **Input**:
226
+ ```python
227
+ from aio_pika import connect_robust, Message, ExchangeType
228
+ import json
229
+ from dataclasses import dataclass
230
+ from datetime import datetime
231
+ from typing import Optional
503
232
 
504
- **Event Producer (Order Service - Node.js)**:
505
- ```typescript
506
- import { Kafka, Producer } from 'kafkajs';
507
- import { v4 as uuidv4 } from 'uuid';
508
-
509
- const kafka = new Kafka({
510
- clientId: 'order-service',
511
- brokers: ['kafka-0.kafka-headless:9092', 'kafka-1.kafka-headless:9092'],
512
- });
513
-
514
- const producer: Producer = kafka.producer({
515
- idempotent: true, // Prevent duplicate events
516
- maxInFlightRequests: 5,
517
- transactionalId: 'order-service-producer',
518
- });
519
-
520
- await producer.connect();
521
-
522
- export async function publishOrderCreatedEvent(order: Order): Promise<void> {
523
- const event: OrderCreatedEvent = {
524
- eventId: uuidv4(),
525
- eventType: OrderEventType.ORDER_CREATED,
526
- orderId: order.id,
527
- timestamp: new Date(),
528
- userId: order.userId,
529
- data: {
530
- items: order.items,
531
- totalAmount: order.totalAmount,
532
- shippingAddress: order.shippingAddress,
533
- },
534
- metadata: {
535
- correlationId: order.correlationId,
536
- causationId: uuidv4(),
537
- },
538
- };
539
-
540
- await producer.send({
541
- topic: 'orders',
542
- messages: [
543
- {
544
- key: order.id, // Partition by order ID
545
- value: JSON.stringify(event),
546
- headers: {
547
- 'event-type': event.eventType,
548
- 'correlation-id': event.metadata.correlationId,
549
- },
550
- },
551
- ],
552
- });
553
- }
233
+ @dataclass
234
+ class OrderCreatedEvent:
235
+ order_id: str
236
+ user_id: int
237
+ total_amount: float
238
+ items: list
239
+ created_at: datetime
554
240
  ```
555
241
 
556
- **Event Consumer (Email Service - Python)**:
242
+ **Output**:
557
243
  ```python
558
- from kafka import KafkaConsumer
559
- from kafka.errors import KafkaError
244
+ import asyncio
245
+ from aio_pika import connect_robust, Message, ExchangeType
560
246
  import json
247
+ from dataclasses import dataclass, asdict
248
+ from datetime import datetime
249
+ from typing import Optional, Callable, Dict
561
250
  import logging
562
251
 
563
252
  logger = logging.getLogger(__name__)
564
253
 
565
- consumer = KafkaConsumer(
566
- 'orders',
567
- bootstrap_servers=['kafka-0.kafka-headless:9092'],
568
- group_id='email-service',
569
- auto_offset_reset='earliest',
570
- enable_auto_commit=False,
571
- max_poll_records=100,
572
- value_deserializer=lambda m: json.loads(m.decode('utf-8')),
573
- )
574
-
575
- def process_order_created_event(event: dict):
576
- """Send order confirmation email."""
577
- try:
578
- send_email(
579
- to=event['userId'],
580
- subject=f"Order Confirmation - {event['orderId']}",
581
- body=render_template('order_confirmation.html', event=event),
254
+ @dataclass
255
+ class OrderCreatedEvent:
256
+ order_id: str
257
+ user_id: int
258
+ total_amount: float
259
+ items: list
260
+ created_at: datetime
261
+
262
+ class EventBus:
263
+ def __init__(self, amqp_url: str):
264
+ self.amqp_url = amqp_url
265
+ self.connection = None
266
+ self.channel = None
267
+ self.exchange = None
268
+ self.handlers: Dict[str, Callable] = {}
269
+
270
+ async def connect(self):
271
+ self.connection = await connect_robust(self.amqp_url)
272
+ self.channel = await self.connection.channel()
273
+ self.exchange = await self.channel.declare_exchange(
274
+ "events",
275
+ ExchangeType.TOPIC,
276
+ durable=True
277
+ )
278
+ logger.info("Connected to message broker")
279
+
280
+ async def publish(self, event_type: str, event_data: dict):
281
+ message = Message(
282
+ json.dumps({
283
+ "type": event_type,
284
+ "data": event_data,
285
+ "timestamp": datetime.utcnow().isoformat()
286
+ }).encode(),
287
+ content_type="application/json",
288
+ delivery_mode=2 # Persistent
289
+ )
290
+ await self.exchange.publish(message, routing_key=event_type)
291
+ logger.info(f"Published event: {event_type}")
292
+
293
+ async def subscribe(
294
+ self,
295
+ event_type: str,
296
+ handler: Callable,
297
+ queue_name: str
298
+ ):
299
+ queue = await self.channel.declare_queue(
300
+ queue_name,
301
+ durable=True
302
+ )
303
+ await queue.bind(self.exchange, routing_key=event_type)
304
+
305
+ async def process_message(message):
306
+ async with message.process():
307
+ try:
308
+ data = json.loads(message.body.decode())
309
+ await handler(data)
310
+ except Exception as e:
311
+ logger.error(f"Error processing message: {e}")
312
+ raise
313
+
314
+ await queue.consume(process_message)
315
+ logger.info(f"Subscribed to: {event_type}")
316
+
317
+ class OrderService:
318
+ def __init__(self, event_bus: EventBus, db_session):
319
+ self.event_bus = event_bus
320
+ self.db = db_session
321
+
322
+ async def create_order(self, order_data: dict) -> Order:
323
+ # Create order in database
324
+ order = Order(**order_data)
325
+ self.db.add(order)
326
+ await self.db.commit()
327
+
328
+ # Publish event
329
+ event = OrderCreatedEvent(
330
+ order_id=str(order.id),
331
+ user_id=order.user_id,
332
+ total_amount=order.total_amount,
333
+ items=order.items,
334
+ created_at=order.created_at
335
+ )
336
+ await self.event_bus.publish(
337
+ "order.created",
338
+ asdict(event)
582
339
  )
583
- logger.info(f"Email sent for order {event['orderId']}")
584
- except Exception as e:
585
- logger.error(f"Failed to send email: {e}")
586
- raise # Trigger retry
587
340
 
588
- for message in consumer:
589
- try:
590
- event = message.value
591
- event_type = message.headers.get('event-type')
341
+ return order
342
+
343
+ class NotificationService:
344
+ def __init__(self, event_bus: EventBus):
345
+ self.event_bus = event_bus
592
346
 
593
- if event_type == 'order.created':
594
- process_order_created_event(event)
347
+ async def start(self):
348
+ await self.event_bus.subscribe(
349
+ "order.created",
350
+ self.handle_order_created,
351
+ "notification-service-orders"
352
+ )
595
353
 
596
- # Commit offset only after successful processing
597
- consumer.commit()
354
+ async def handle_order_created(self, event_data: dict):
355
+ order_data = event_data["data"]
356
+ user_id = order_data["user_id"]
357
+ order_id = order_data["order_id"]
598
358
 
599
- except Exception as e:
600
- logger.error(f"Error processing message: {e}")
601
- # Do not commit; retry on next poll
359
+ # Send notification
360
+ await self.send_email(
361
+ user_id=user_id,
362
+ subject=f"Order {order_id} Confirmed",
363
+ body=f"Your order for ${order_data['total_amount']} has been confirmed."
364
+ )
365
+ logger.info(f"Sent order confirmation for {order_id}")
602
366
  ```
603
367
 
604
- ### CQRS Pattern
605
-
606
- **Command Model (Write Side)**:
607
- ```typescript
608
- // commands/create-order.command.ts
609
- export class CreateOrderCommand {
610
- constructor(
611
- public readonly userId: string,
612
- public readonly items: OrderItem[],
613
- public readonly shippingAddress: Address,
614
- ) {}
615
- }
616
-
617
- export class CreateOrderHandler {
618
- constructor(
619
- private readonly orderRepository: OrderRepository,
620
- private readonly eventBus: EventBus,
621
- ) {}
622
-
623
- async execute(command: CreateOrderCommand): Promise<string> {
624
- // Create order aggregate
625
- const order = Order.create(
626
- command.userId,
627
- command.items,
628
- command.shippingAddress,
629
- );
630
-
631
- // Persist to event store
632
- await this.orderRepository.save(order);
633
-
634
- // Publish domain events
635
- for (const event of order.getUncommittedEvents()) {
636
- await this.eventBus.publish(event);
637
- }
368
+ **Explanation**: This pattern demonstrates event-driven architecture with RabbitMQ, enabling loose coupling between services and reliable message delivery.
638
369
 
639
- order.markEventsAsCommitted();
640
- return order.id;
641
- }
642
- }
643
- ```
370
+ ---
644
371
 
645
- **Query Model (Read Side)**:
646
- ```typescript
647
- // queries/get-order.query.ts
648
- export class GetOrderQuery {
649
- constructor(public readonly orderId: string) {}
650
- }
651
-
652
- export class GetOrderHandler {
653
- constructor(private readonly orderReadRepository: OrderReadRepository) {}
654
-
655
- async execute(query: GetOrderQuery): Promise<OrderDTO> {
656
- // Read from optimized read model (denormalized)
657
- const order = await this.orderReadRepository.findById(query.orderId);
658
- if (!order) {
659
- throw new OrderNotFoundException(query.orderId);
660
- }
661
- return OrderDTO.fromReadModel(order);
662
- }
663
- }
664
- ```
372
+ ## Common Patterns
665
373
 
666
- **Read Model Projector (Event Handler)**:
667
- ```typescript
668
- // projections/order-projection.ts
669
- export class OrderProjection {
670
- constructor(private readonly db: Database) {}
671
-
672
- @EventHandler(OrderEventType.ORDER_CREATED)
673
- async onOrderCreated(event: OrderCreatedEvent): Promise<void> {
674
- await this.db.insert('order_read_model', {
675
- order_id: event.orderId,
676
- user_id: event.userId,
677
- status: 'CREATED',
678
- total_amount: event.data.totalAmount,
679
- created_at: event.timestamp,
680
- updated_at: event.timestamp,
681
- });
682
-
683
- // Insert order items into separate table
684
- for (const item of event.data.items) {
685
- await this.db.insert('order_item_read_model', {
686
- order_id: event.orderId,
687
- product_id: item.productId,
688
- quantity: item.quantity,
689
- price: item.price,
690
- });
691
- }
692
- }
693
-
694
- @EventHandler(OrderEventType.ORDER_PAID)
695
- async onOrderPaid(event: OrderPaidEvent): Promise<void> {
696
- await this.db.update(
697
- 'order_read_model',
698
- { order_id: event.orderId },
699
- { status: 'PAID', updated_at: event.timestamp },
700
- );
701
- }
702
- }
374
+ ### Pattern 1: Circuit Breaker for External Services
375
+
376
+ Protect your service from cascading failures:
377
+
378
+ ```python
379
+ from tenacity import (
380
+ retry,
381
+ stop_after_attempt,
382
+ wait_exponential,
383
+ retry_if_exception_type
384
+ )
385
+ import httpx
386
+ from dataclasses import dataclass
387
+ from datetime import datetime, timedelta
388
+
389
+ @dataclass
390
+ class CircuitBreakerState:
391
+ failures: int = 0
392
+ last_failure: datetime = None
393
+ is_open: bool = False
394
+
395
+ class CircuitBreaker:
396
+ def __init__(
397
+ self,
398
+ failure_threshold: int = 5,
399
+ recovery_timeout: int = 30
400
+ ):
401
+ self.failure_threshold = failure_threshold
402
+ self.recovery_timeout = timedelta(seconds=recovery_timeout)
403
+ self.state = CircuitBreakerState()
404
+
405
+ def can_execute(self) -> bool:
406
+ if not self.state.is_open:
407
+ return True
408
+
409
+ if datetime.utcnow() - self.state.last_failure > self.recovery_timeout:
410
+ self.state.is_open = False
411
+ self.state.failures = 0
412
+ return True
413
+
414
+ return False
415
+
416
+ def record_failure(self):
417
+ self.state.failures += 1
418
+ self.state.last_failure = datetime.utcnow()
419
+
420
+ if self.state.failures >= self.failure_threshold:
421
+ self.state.is_open = True
422
+
423
+ def record_success(self):
424
+ self.state.failures = 0
425
+ self.state.is_open = False
426
+
427
+ class ExternalPaymentService:
428
+ def __init__(self, base_url: str):
429
+ self.base_url = base_url
430
+ self.circuit_breaker = CircuitBreaker()
431
+ self.client = httpx.AsyncClient()
432
+
433
+ @retry(
434
+ stop=stop_after_attempt(3),
435
+ wait=wait_exponential(multiplier=1, min=1, max=10),
436
+ retry=retry_if_exception_type(httpx.TransportError)
437
+ )
438
+ async def process_payment(self, payment_data: dict) -> dict:
439
+ if not self.circuit_breaker.can_execute():
440
+ raise ServiceUnavailableError("Payment service circuit open")
441
+
442
+ try:
443
+ response = await self.client.post(
444
+ f"{self.base_url}/payments",
445
+ json=payment_data,
446
+ timeout=10.0
447
+ )
448
+ response.raise_for_status()
449
+ self.circuit_breaker.record_success()
450
+ return response.json()
451
+ except Exception as e:
452
+ self.circuit_breaker.record_failure()
453
+ raise
703
454
  ```
704
455
 
705
- ---
456
+ ### Pattern 2: Request Validation Middleware
706
457
 
707
- ## Example 3: Serverless with AWS Lambda
458
+ Comprehensive request validation:
708
459
 
709
- ### Architecture Overview
460
+ ```python
461
+ from fastapi import Request, HTTPException
462
+ from starlette.middleware.base import BaseHTTPMiddleware
463
+ from pydantic import ValidationError
464
+ import time
465
+ import logging
710
466
 
711
- ```
712
- ┌──────────┐ ┌──────────┐ ┌──────────┐
713
- │ API │───▶│ Lambda │───▶│ DynamoDB │
714
- │ Gateway │ │ Functions│ └──────────┘
715
- └──────────┘ └────┬─────┘
716
-
717
- ┌────▼────┐
718
- │ SQS │
719
- └────┬────┘
720
-
721
- ┌────▼────┐
722
- │ Lambda │
723
- │ Worker │
724
- └─────────┘
725
- ```
467
+ logger = logging.getLogger(__name__)
726
468
 
727
- ### API Lambda Function (Node.js)
728
-
729
- **handler.ts**:
730
- ```typescript
731
- import { APIGatewayProxyHandler, APIGatewayProxyEvent, APIGatewayProxyResult } from 'aws-lambda';
732
- import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
733
- import { DynamoDBDocumentClient, PutCommand, GetCommand } from '@aws-sdk/lib-dynamodb';
734
- import { SQSClient, SendMessageCommand } from '@aws-sdk/client-sqs';
735
- import { v4 as uuidv4 } from 'uuid';
736
-
737
- const client = new DynamoDBClient({});
738
- const ddb = DynamoDBDocumentClient.from(client);
739
- const sqs = new SQSClient({});
740
-
741
- export const createOrder: APIGatewayProxyHandler = async (
742
- event: APIGatewayProxyEvent
743
- ): Promise<APIGatewayProxyResult> => {
744
- try {
745
- const body = JSON.parse(event.body || '{}');
746
- const orderId = uuidv4();
747
-
748
- // Write to DynamoDB
749
- await ddb.send(
750
- new PutCommand({
751
- TableName: process.env.ORDERS_TABLE!,
752
- Item: {
753
- orderId,
754
- userId: body.userId,
755
- items: body.items,
756
- totalAmount: body.totalAmount,
757
- status: 'PENDING',
758
- createdAt: new Date().toISOString(),
759
- },
760
- })
761
- );
762
-
763
- // Send message to SQS for async processing
764
- await sqs.send(
765
- new SendMessageCommand({
766
- QueueUrl: process.env.ORDER_QUEUE_URL!,
767
- MessageBody: JSON.stringify({
768
- orderId,
769
- userId: body.userId,
770
- totalAmount: body.totalAmount,
771
- }),
772
- MessageAttributes: {
773
- eventType: {
774
- DataType: 'String',
775
- StringValue: 'ORDER_CREATED',
776
- },
777
- },
778
- })
779
- );
780
-
781
- return {
782
- statusCode: 201,
783
- headers: {
784
- 'Content-Type': 'application/json',
785
- 'Access-Control-Allow-Origin': '*',
786
- },
787
- body: JSON.stringify({ orderId }),
788
- };
789
- } catch (error) {
790
- console.error('Error creating order:', error);
791
- return {
792
- statusCode: 500,
793
- body: JSON.stringify({ error: 'Internal server error' }),
794
- };
795
- }
796
- };
797
-
798
- export const getOrder: APIGatewayProxyHandler = async (
799
- event: APIGatewayProxyEvent
800
- ): Promise<APIGatewayProxyResult> => {
801
- try {
802
- const orderId = event.pathParameters?.orderId;
803
-
804
- const result = await ddb.send(
805
- new GetCommand({
806
- TableName: process.env.ORDERS_TABLE!,
807
- Key: { orderId },
808
- })
809
- );
810
-
811
- if (!result.Item) {
812
- return {
813
- statusCode: 404,
814
- body: JSON.stringify({ error: 'Order not found' }),
815
- };
816
- }
469
+ class RequestValidationMiddleware(BaseHTTPMiddleware):
470
+ async def dispatch(self, request: Request, call_next):
471
+ start_time = time.time()
472
+ request_id = request.headers.get("X-Request-ID", str(uuid.uuid4()))
817
473
 
818
- return {
819
- statusCode: 200,
820
- headers: {
821
- 'Content-Type': 'application/json',
822
- 'Access-Control-Allow-Origin': '*',
823
- },
824
- body: JSON.stringify(result.Item),
825
- };
826
- } catch (error) {
827
- console.error('Error fetching order:', error);
828
- return {
829
- statusCode: 500,
830
- body: JSON.stringify({ error: 'Internal server error' }),
831
- };
832
- }
833
- };
834
- ```
474
+ # Add request ID to context
475
+ request.state.request_id = request_id
835
476
 
836
- **Infrastructure as Code (Terraform)**:
837
- ```hcl
838
- # lambda.tf
839
- resource "aws_lambda_function" "create_order" {
840
- filename = "lambda.zip"
841
- function_name = "create-order"
842
- role = aws_iam_role.lambda_exec.arn
843
- handler = "handler.createOrder"
844
- runtime = "nodejs20.x"
845
- memory_size = 512
846
- timeout = 30
847
-
848
- environment {
849
- variables = {
850
- ORDERS_TABLE = aws_dynamodb_table.orders.name
851
- ORDER_QUEUE_URL = aws_sqs_queue.orders.url
852
- }
853
- }
854
-
855
- tracing_config {
856
- mode = "Active" # Enable X-Ray tracing
857
- }
858
- }
859
-
860
- resource "aws_lambda_function" "get_order" {
861
- filename = "lambda.zip"
862
- function_name = "get-order"
863
- role = aws_iam_role.lambda_exec.arn
864
- handler = "handler.getOrder"
865
- runtime = "nodejs20.x"
866
- memory_size = 256
867
- timeout = 10
868
-
869
- environment {
870
- variables = {
871
- ORDERS_TABLE = aws_dynamodb_table.orders.name
872
- }
873
- }
874
-
875
- tracing_config {
876
- mode = "Active"
877
- }
878
- }
879
-
880
- # API Gateway
881
- resource "aws_apigatewayv2_api" "main" {
882
- name = "orders-api"
883
- protocol_type = "HTTP"
884
- }
885
-
886
- resource "aws_apigatewayv2_route" "create_order" {
887
- api_id = aws_apigatewayv2_api.main.id
888
- route_key = "POST /orders"
889
- target = "integrations/${aws_apigatewayv2_integration.create_order.id}"
890
- }
891
-
892
- resource "aws_apigatewayv2_route" "get_order" {
893
- api_id = aws_apigatewayv2_api.main.id
894
- route_key = "GET /orders/{orderId}"
895
- target = "integrations/${aws_apigatewayv2_integration.get_order.id}"
896
- }
897
-
898
- # DynamoDB
899
- resource "aws_dynamodb_table" "orders" {
900
- name = "orders"
901
- billing_mode = "PAY_PER_REQUEST"
902
- hash_key = "orderId"
903
-
904
- attribute {
905
- name = "orderId"
906
- type = "S"
907
- }
908
-
909
- point_in_time_recovery {
910
- enabled = true
911
- }
912
- }
913
-
914
- # SQS
915
- resource "aws_sqs_queue" "orders" {
916
- name = "orders-queue"
917
- visibility_timeout_seconds = 300
918
- message_retention_seconds = 1209600 # 14 days
919
- receive_wait_time_seconds = 20 # Long polling
920
- }
921
- ```
477
+ # Log incoming request
478
+ logger.info(f"[{request_id}] {request.method} {request.url.path}")
922
479
 
923
- ### SQS Worker Lambda (Async Processing)
924
-
925
- ```typescript
926
- import { SQSHandler, SQSEvent } from 'aws-lambda';
927
- import { DynamoDBDocumentClient, UpdateCommand } from '@aws-sdk/lib-dynamodb';
928
- import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
929
-
930
- const client = new DynamoDBClient({});
931
- const ddb = DynamoDBDocumentClient.from(client);
932
-
933
- export const processOrder: SQSHandler = async (event: SQSEvent): Promise<void> => {
934
- for (const record of event.Records) {
935
- try {
936
- const message = JSON.parse(record.body);
937
- const { orderId, userId, totalAmount } = message;
938
-
939
- // Simulate payment processing
940
- const paymentResult = await processPayment(userId, totalAmount);
941
-
942
- // Update order status
943
- await ddb.send(
944
- new UpdateCommand({
945
- TableName: process.env.ORDERS_TABLE!,
946
- Key: { orderId },
947
- UpdateExpression: 'SET #status = :status, paymentId = :paymentId',
948
- ExpressionAttributeNames: {
949
- '#status': 'status',
950
- },
951
- ExpressionAttributeValues: {
952
- ':status': paymentResult.success ? 'PAID' : 'PAYMENT_FAILED',
953
- ':paymentId': paymentResult.paymentId,
954
- },
955
- })
956
- );
957
-
958
- console.log(`Order ${orderId} processed successfully`);
959
- } catch (error) {
960
- console.error('Error processing order:', error);
961
- throw error; // Trigger SQS retry
962
- }
963
- }
964
- };
965
-
966
- async function processPayment(userId: string, amount: number): Promise<{ success: boolean; paymentId: string }> {
967
- // Simulate external payment API call
968
- await new Promise(resolve => setTimeout(resolve, 1000));
969
- return { success: true, paymentId: `pay_${Date.now()}` };
970
- }
971
- ```
480
+ try:
481
+ response = await call_next(request)
972
482
 
973
- ### Cold Start Optimization
483
+ # Add response headers
484
+ response.headers["X-Request-ID"] = request_id
485
+ response.headers["X-Response-Time"] = str(time.time() - start_time)
974
486
 
975
- **Provisioned Concurrency**:
976
- ```hcl
977
- resource "aws_lambda_provisioned_concurrency_config" "create_order" {
978
- function_name = aws_lambda_function.create_order.function_name
979
- provisioned_concurrent_executions = 5 # Keep 5 warm instances
980
- qualifier = aws_lambda_function.create_order.version
981
- }
982
- ```
487
+ logger.info(
488
+ f"[{request_id}] Completed {response.status_code} "
489
+ f"in {time.time() - start_time:.3f}s"
490
+ )
491
+
492
+ return response
983
493
 
984
- **Lambda Layers (Shared Dependencies)**:
985
- ```hcl
986
- resource "aws_lambda_layer_version" "dependencies" {
987
- filename = "layer.zip"
988
- layer_name = "shared-dependencies"
989
- compatible_runtimes = ["nodejs20.x"]
990
- description = "Shared dependencies for Lambda functions"
991
- }
992
-
993
- resource "aws_lambda_function" "create_order" {
994
- # ... other config ...
995
- layers = [aws_lambda_layer_version.dependencies.arn]
996
- }
494
+ except ValidationError as e:
495
+ logger.warning(f"[{request_id}] Validation error: {e}")
496
+ raise HTTPException(status_code=422, detail=e.errors())
497
+ except Exception as e:
498
+ logger.error(f"[{request_id}] Unexpected error: {e}")
499
+ raise
997
500
  ```
998
501
 
999
- ---
502
+ ### Pattern 3: Database Connection Pool Management
1000
503
 
1001
- ## Example 4: Observability with OpenTelemetry 1.24 + Prometheus 2.48
1002
-
1003
- ### Full Stack Observability Setup
1004
-
1005
- **OpenTelemetry Collector Deployment**:
1006
- ```yaml
1007
- apiVersion: apps/v1
1008
- kind: Deployment
1009
- metadata:
1010
- name: otel-collector
1011
- namespace: observability
1012
- spec:
1013
- replicas: 2
1014
- selector:
1015
- matchLabels:
1016
- app: otel-collector
1017
- template:
1018
- metadata:
1019
- labels:
1020
- app: otel-collector
1021
- spec:
1022
- containers:
1023
- - name: otel-collector
1024
- image: otel/opentelemetry-collector-contrib:0.92.0
1025
- ports:
1026
- - containerPort: 4317 # OTLP gRPC
1027
- - containerPort: 4318 # OTLP HTTP
1028
- - containerPort: 8889 # Prometheus metrics
1029
- volumeMounts:
1030
- - name: config
1031
- mountPath: /etc/otelcol
1032
- resources:
1033
- requests:
1034
- cpu: "200m"
1035
- memory: "256Mi"
1036
- limits:
1037
- cpu: "1000m"
1038
- memory: "1Gi"
1039
- volumes:
1040
- - name: config
1041
- configMap:
1042
- name: otel-collector-config
1043
- ---
1044
- apiVersion: v1
1045
- kind: ConfigMap
1046
- metadata:
1047
- name: otel-collector-config
1048
- namespace: observability
1049
- data:
1050
- config.yaml: |
1051
- receivers:
1052
- otlp:
1053
- protocols:
1054
- grpc:
1055
- endpoint: 0.0.0.0:4317
1056
- http:
1057
- endpoint: 0.0.0.0:4318
1058
-
1059
- processors:
1060
- batch:
1061
- timeout: 10s
1062
- send_batch_size: 1024
1063
- memory_limiter:
1064
- check_interval: 1s
1065
- limit_mib: 512
1066
- resource:
1067
- attributes:
1068
- - key: environment
1069
- value: production
1070
- action: insert
1071
-
1072
- exporters:
1073
- prometheus:
1074
- endpoint: "0.0.0.0:8889"
1075
- jaeger:
1076
- endpoint: "jaeger-collector.observability:14250"
1077
- tls:
1078
- insecure: true
1079
- elasticsearch:
1080
- endpoints: ["http://elasticsearch.observability:9200"]
1081
- logs_index: "otel-logs"
1082
-
1083
- service:
1084
- pipelines:
1085
- traces:
1086
- receivers: [otlp]
1087
- processors: [memory_limiter, batch, resource]
1088
- exporters: [jaeger]
1089
- metrics:
1090
- receivers: [otlp]
1091
- processors: [memory_limiter, batch, resource]
1092
- exporters: [prometheus]
1093
- logs:
1094
- receivers: [otlp]
1095
- processors: [memory_limiter, batch, resource]
1096
- exporters: [elasticsearch]
1097
- ```
504
+ Optimized database connections:
1098
505
 
1099
- **Application Instrumentation (Python FastAPI)**:
1100
506
  ```python
1101
- from fastapi import FastAPI
1102
- from opentelemetry import trace, metrics
1103
- from opentelemetry.sdk.trace import TracerProvider
1104
- from opentelemetry.sdk.trace.export import BatchSpanProcessor
1105
- from opentelemetry.sdk.metrics import MeterProvider
1106
- from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader
1107
- from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
1108
- from opentelemetry.exporter.otlp.proto.grpc.metric_exporter import OTLPMetricExporter
1109
- from opentelemetry.instrumentation.fastapi import FastAPIInstrumentor
1110
- from opentelemetry.instrumentation.sqlalchemy import SQLAlchemyInstrumentor
1111
-
1112
- # Setup tracing
1113
- trace_provider = TracerProvider()
1114
- trace_exporter = OTLPSpanExporter(endpoint="otel-collector:4317", insecure=True)
1115
- trace_provider.add_span_processor(BatchSpanProcessor(trace_exporter))
1116
- trace.set_tracer_provider(trace_provider)
1117
-
1118
- # Setup metrics
1119
- metric_reader = PeriodicExportingMetricReader(
1120
- OTLPMetricExporter(endpoint="otel-collector:4317", insecure=True),
1121
- export_interval_millis=30000,
1122
- )
1123
- metric_provider = MeterProvider(metric_readers=[metric_reader])
1124
- metrics.set_meter_provider(metric_provider)
1125
-
1126
- # Create app
1127
- app = FastAPI()
507
+ from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession
508
+ from sqlalchemy.orm import sessionmaker
509
+ from sqlalchemy.pool import QueuePool
510
+ from contextlib import asynccontextmanager
511
+
512
+ class DatabaseManager:
513
+ def __init__(self, database_url: str):
514
+ self.engine = create_async_engine(
515
+ database_url,
516
+ poolclass=QueuePool,
517
+ pool_size=20,
518
+ max_overflow=30,
519
+ pool_pre_ping=True,
520
+ pool_recycle=3600,
521
+ echo=False
522
+ )
523
+ self.async_session = sessionmaker(
524
+ self.engine,
525
+ class_=AsyncSession,
526
+ expire_on_commit=False
527
+ )
1128
528
 
1129
- # Auto-instrument FastAPI
1130
- FastAPIInstrumentor.instrument_app(app)
529
+ @asynccontextmanager
530
+ async def get_session(self):
531
+ session = self.async_session()
532
+ try:
533
+ yield session
534
+ await session.commit()
535
+ except Exception:
536
+ await session.rollback()
537
+ raise
538
+ finally:
539
+ await session.close()
540
+
541
+ async def health_check(self) -> bool:
542
+ try:
543
+ async with self.get_session() as session:
544
+ await session.execute("SELECT 1")
545
+ return True
546
+ except Exception:
547
+ return False
548
+ ```
1131
549
 
1132
- # Custom metrics
1133
- meter = metrics.get_meter(__name__)
1134
- order_counter = meter.create_counter(
1135
- name="orders_created_total",
1136
- description="Total number of orders created",
1137
- unit="1",
1138
- )
550
+ ---
1139
551
 
1140
- @app.post("/orders")
1141
- async def create_order(order: Order):
1142
- tracer = trace.get_tracer(__name__)
1143
- with tracer.start_as_current_span("create_order") as span:
1144
- span.set_attribute("order.id", order.id)
1145
- span.set_attribute("order.amount", order.totalAmount)
552
+ ## Anti-Patterns (Patterns to Avoid)
1146
553
 
1147
- # Business logic
1148
- result = await process_order(order)
554
+ ### Anti-Pattern 1: N+1 Query Problem
1149
555
 
1150
- # Record metric
1151
- order_counter.add(1, {"status": result.status})
556
+ **Problem**: Making individual database queries for related entities.
1152
557
 
1153
- return result
558
+ ```python
559
+ # Incorrect approach
560
+ async def get_orders_with_items():
561
+ orders = await session.execute(select(Order))
562
+ for order in orders.scalars():
563
+ # N+1 problem: one query per order
564
+ items = await session.execute(
565
+ select(OrderItem).where(OrderItem.order_id == order.id)
566
+ )
567
+ order.items = items.scalars().all()
568
+ return orders
1154
569
  ```
1155
570
 
1156
- **Grafana Dashboards (Provisioning)**:
1157
- ```yaml
1158
- # grafana-dashboard-configmap.yaml
1159
- apiVersion: v1
1160
- kind: ConfigMap
1161
- metadata:
1162
- name: grafana-dashboards
1163
- namespace: observability
1164
- data:
1165
- backend-overview.json: |
1166
- {
1167
- "dashboard": {
1168
- "title": "Backend Overview",
1169
- "panels": [
1170
- {
1171
- "title": "Request Rate",
1172
- "targets": [
1173
- {
1174
- "expr": "rate(http_requests_total[5m])"
1175
- }
1176
- ]
1177
- },
1178
- {
1179
- "title": "Error Rate",
1180
- "targets": [
1181
- {
1182
- "expr": "rate(http_requests_total{status=~\"5..\"}[5m]) / rate(http_requests_total[5m])"
1183
- }
1184
- ]
1185
- },
1186
- {
1187
- "title": "Latency (p95)",
1188
- "targets": [
1189
- {
1190
- "expr": "histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m]))"
1191
- }
1192
- ]
1193
- },
1194
- {
1195
- "title": "Active Connections",
1196
- "targets": [
1197
- {
1198
- "expr": "sum(rate(http_requests_total[1m]))"
1199
- }
1200
- ]
1201
- }
1202
- ]
1203
- }
1204
- }
1205
- ```
571
+ **Solution**: Use eager loading with joins.
1206
572
 
1207
- **Alert Rules (PrometheusRule)**:
1208
- ```yaml
1209
- apiVersion: monitoring.coreos.com/v1
1210
- kind: PrometheusRule
1211
- metadata:
1212
- name: backend-alerts
1213
- namespace: observability
1214
- spec:
1215
- groups:
1216
- - name: backend
1217
- interval: 30s
1218
- rules:
1219
- - alert: HighErrorRate
1220
- expr: |
1221
- (
1222
- rate(http_requests_total{status=~"5.."}[5m])
1223
- /
1224
- rate(http_requests_total[5m])
1225
- ) > 0.05
1226
- for: 5m
1227
- labels:
1228
- severity: critical
1229
- annotations:
1230
- summary: "High error rate detected (instance {{ $labels.instance }})"
1231
- description: "Error rate is {{ $value | humanizePercentage }} for the last 5 minutes"
1232
-
1233
- - alert: HighLatency
1234
- expr: |
1235
- histogram_quantile(0.95,
1236
- rate(http_request_duration_seconds_bucket[5m])
1237
- ) > 1.0
1238
- for: 10m
1239
- labels:
1240
- severity: warning
1241
- annotations:
1242
- summary: "High latency detected (instance {{ $labels.instance }})"
1243
- description: "P95 latency is {{ $value }}s for the last 10 minutes"
1244
-
1245
- - alert: ServiceDown
1246
- expr: up{job="backend"} == 0
1247
- for: 2m
1248
- labels:
1249
- severity: critical
1250
- annotations:
1251
- summary: "Service is down (instance {{ $labels.instance }})"
1252
- description: "Backend service has been down for more than 2 minutes"
1253
-
1254
- - alert: HighMemoryUsage
1255
- expr: |
1256
- (
1257
- container_memory_usage_bytes{pod=~"backend-.*"}
1258
- /
1259
- container_spec_memory_limit_bytes{pod=~"backend-.*"}
1260
- ) > 0.9
1261
- for: 5m
1262
- labels:
1263
- severity: warning
1264
- annotations:
1265
- summary: "High memory usage (pod {{ $labels.pod }})"
1266
- description: "Memory usage is {{ $value | humanizePercentage }}"
1267
-
1268
- - alert: PodCrashLooping
1269
- expr: rate(kube_pod_container_status_restarts_total[15m]) > 0
1270
- for: 5m
1271
- labels:
1272
- severity: critical
1273
- annotations:
1274
- summary: "Pod is crash looping (pod {{ $labels.pod }})"
1275
- description: "Pod has restarted {{ $value }} times in the last 15 minutes"
573
+ ```python
574
+ # Correct approach
575
+ async def get_orders_with_items():
576
+ result = await session.execute(
577
+ select(Order)
578
+ .options(selectinload(Order.items))
579
+ .order_by(Order.created_at.desc())
580
+ )
581
+ return result.scalars().all()
1276
582
  ```
1277
583
 
1278
- ### Distributed Tracing (Jaeger UI)
584
+ ### Anti-Pattern 2: Synchronous Operations in Async Context
1279
585
 
1280
- **Example Trace (User Request Order Payment → Email)**:
1281
- ```
1282
- Trace ID: abc123def456
1283
-
1284
- Span 1: [user-service] GET /api/users/123 (20ms)
1285
- └─ Span 2: [order-service] POST /orders (150ms)
1286
- ├─ Span 3: [postgres] SELECT * FROM users (5ms)
1287
- ├─ Span 4: [postgres] INSERT INTO orders (10ms)
1288
- └─ Span 5: [payment-service] POST /charge (100ms)
1289
- ├─ Span 6: [redis] GET payment_cache (2ms)
1290
- └─ Span 7: [stripe-api] POST /charges (90ms)
1291
- └─ Span 8: [kafka] Publish order.created (5ms)
1292
-
1293
- Span 9: [email-service] Kafka Consumer (500ms)
1294
- └─ Span 10: [smtp] Send email (480ms)
586
+ **Problem**: Blocking the event loop with synchronous operations.
587
+
588
+ ```python
589
+ # Incorrect approach
590
+ @app.get("/data")
591
+ async def get_data():
592
+ # This blocks the event loop!
593
+ data = requests.get("https://api.example.com/data")
594
+ return data.json()
1295
595
  ```
1296
596
 
1297
- **Benefits**:
1298
- - Identify bottlenecks (Span 10: SMTP is slowest)
1299
- - Visualize service dependencies
1300
- - Root cause analysis for failures
1301
- - Latency breakdown by service
597
+ **Solution**: Use async-compatible libraries.
1302
598
 
1303
- ---
599
+ ```python
600
+ # Correct approach
601
+ @app.get("/data")
602
+ async def get_data():
603
+ async with httpx.AsyncClient() as client:
604
+ response = await client.get("https://api.example.com/data")
605
+ return response.json()
606
+ ```
1304
607
 
1305
- ---
608
+ ### Anti-Pattern 3: Hardcoded Configuration
1306
609
 
1307
- ## Example 5: Harbor Registry with Image Scanning
1308
-
1309
- ### Harbor 2.10.x Deployment
1310
-
1311
- **Harbor Helm Installation**:
1312
- ```bash
1313
- helm repo add harbor https://helm.goharbor.io
1314
- helm install harbor harbor/harbor \
1315
- --namespace harbor \
1316
- --create-namespace \
1317
- --set expose.type=ingress \
1318
- --set expose.ingress.hosts.core=harbor.example.com \
1319
- --set externalURL=https://harbor.example.com \
1320
- --set persistence.enabled=true \
1321
- --set persistence.persistentVolumeClaim.registry.size=100Gi \
1322
- --set harborAdminPassword=admin123 \
1323
- --set trivy.enabled=true \
1324
- --set notary.enabled=true
1325
- ```
610
+ **Problem**: Hardcoding configuration values in code.
1326
611
 
1327
- **Trivy Scanner Configuration**:
1328
- ```yaml
1329
- apiVersion: v1
1330
- kind: ConfigMap
1331
- metadata:
1332
- name: harbor-trivy-config
1333
- namespace: harbor
1334
- data:
1335
- trivy.yaml: |
1336
- severity:
1337
- - CRITICAL
1338
- - HIGH
1339
- - MEDIUM
1340
- vuln-type:
1341
- - os
1342
- - library
1343
- skip-update: false
1344
- timeout: 5m
612
+ ```python
613
+ # Incorrect approach
614
+ DATABASE_URL = "postgresql://user:password@localhost:5432/db"
615
+ SECRET_KEY = "my-super-secret-key"
1345
616
  ```
1346
617
 
1347
- **Robot Account for CI/CD**:
1348
- ```bash
1349
- # Create robot account via Harbor API
1350
- curl -X POST "https://harbor.example.com/api/v2.0/robots" \
1351
- -H "Authorization: Basic $(echo -n admin:admin123 | base64)" \
1352
- -H "Content-Type: application/json" \
1353
- -d '{
1354
- "name": "ci-robot",
1355
- "duration": -1,
1356
- "description": "CI/CD robot account",
1357
- "permissions": [
1358
- {
1359
- "kind": "project",
1360
- "namespace": "production",
1361
- "access": [
1362
- {"resource": "repository", "action": "push"},
1363
- {"resource": "repository", "action": "pull"}
1364
- ]
1365
- }
1366
- ]
1367
- }'
1368
- ```
618
+ **Solution**: Use environment variables with validation.
1369
619
 
1370
- **GitHub Actions Integration**:
1371
- ```yaml
1372
- # .github/workflows/build.yml
1373
- name: Build and Push to Harbor
1374
- on:
1375
- push:
1376
- branches: [main]
1377
-
1378
- jobs:
1379
- build:
1380
- runs-on: ubuntu-latest
1381
- steps:
1382
- - uses: actions/checkout@v4
1383
-
1384
- - name: Login to Harbor
1385
- uses: docker/login-action@v3
1386
- with:
1387
- registry: harbor.example.com
1388
- username: robot$ci-robot
1389
- password: ${{ secrets.HARBOR_ROBOT_TOKEN }}
1390
-
1391
- - name: Build and push
1392
- uses: docker/build-push-action@v5
1393
- with:
1394
- context: .
1395
- push: true
1396
- tags: harbor.example.com/production/backend:${{ github.sha }}
1397
-
1398
- - name: Trigger Trivy scan
1399
- run: |
1400
- curl -X POST "https://harbor.example.com/api/v2.0/projects/production/repositories/backend/artifacts/${{ github.sha }}/scan" \
1401
- -H "Authorization: Basic ${{ secrets.HARBOR_BASIC_AUTH }}"
1402
-
1403
- - name: Check scan result
1404
- run: |
1405
- while true; do
1406
- STATUS=$(curl -s "https://harbor.example.com/api/v2.0/projects/production/repositories/backend/artifacts/${{ github.sha }}" \
1407
- -H "Authorization: Basic ${{ secrets.HARBOR_BASIC_AUTH }}" | jq -r '.scan_overview."application/vnd.security.vulnerability.report; version=1.1".scan_status')
1408
- if [ "$STATUS" = "Success" ]; then
1409
- CRITICAL=$(curl -s "https://harbor.example.com/api/v2.0/projects/production/repositories/backend/artifacts/${{ github.sha }}" \
1410
- -H "Authorization: Basic ${{ secrets.HARBOR_BASIC_AUTH }}" | jq -r '.scan_overview."application/vnd.security.vulnerability.report; version=1.1".summary.critical')
1411
- if [ "$CRITICAL" -gt 0 ]; then
1412
- echo "CRITICAL vulnerabilities found: $CRITICAL"
1413
- exit 1
1414
- fi
1415
- break
1416
- fi
1417
- sleep 5
1418
- done
1419
- ```
620
+ ```python
621
+ # Correct approach
622
+ from pydantic_settings import BaseSettings
1420
623
 
1421
- **Webhook for Vulnerability Notifications**:
1422
- ```yaml
1423
- apiVersion: v1
1424
- kind: ConfigMap
1425
- metadata:
1426
- name: harbor-webhook-config
1427
- data:
1428
- webhook.json: |
1429
- {
1430
- "name": "slack-vulnerabilities",
1431
- "description": "Notify Slack on critical vulnerabilities",
1432
- "events": ["SCANNING_COMPLETED"],
1433
- "targets": [
1434
- {
1435
- "type": "slack",
1436
- "address": "https://hooks.slack.com/services/YOUR/WEBHOOK/URL",
1437
- "skip_cert_verify": false
1438
- }
1439
- ],
1440
- "enabled": true
1441
- }
624
+ class Settings(BaseSettings):
625
+ database_url: str
626
+ secret_key: str
627
+ redis_url: str = "redis://localhost:6379"
628
+ debug: bool = False
629
+
630
+ class Config:
631
+ env_file = ".env"
632
+ case_sensitive = False
633
+
634
+ settings = Settings()
1442
635
  ```
1443
636
 
1444
637
  ---
1445
638
 
1446
- ## Example 6: GitOps with ArgoCD 2.10.x
639
+ ## Integration Examples
1447
640
 
1448
- ### ArgoCD Installation and Setup
641
+ ### Health Check Endpoint
1449
642
 
1450
- **Install ArgoCD**:
1451
- ```bash
1452
- kubectl create namespace argocd
1453
- kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/v2.10.0/manifests/install.yaml
643
+ ```python
644
+ from fastapi import APIRouter
645
+ from datetime import datetime
646
+
647
+ router = APIRouter(prefix="/health", tags=["Health"])
648
+
649
+ @router.get("")
650
+ async def health_check(
651
+ db: DatabaseManager = Depends(get_db),
652
+ cache: redis.Redis = Depends(get_cache)
653
+ ):
654
+ checks = {
655
+ "status": "healthy",
656
+ "timestamp": datetime.utcnow().isoformat(),
657
+ "checks": {}
658
+ }
1454
659
 
1455
- # Get admin password
1456
- kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
1457
- ```
660
+ # Database check
661
+ checks["checks"]["database"] = await db.health_check()
1458
662
 
1459
- **Application Manifest (GitOps)**:
1460
- ```yaml
1461
- # apps/backend-app.yaml
1462
- apiVersion: argoproj.io/v1alpha1
1463
- kind: Application
1464
- metadata:
1465
- name: backend-production
1466
- namespace: argocd
1467
- spec:
1468
- project: default
1469
- source:
1470
- repoURL: https://github.com/example/backend-manifests
1471
- targetRevision: main
1472
- path: production
1473
- helm:
1474
- values: |
1475
- image:
1476
- repository: harbor.example.com/production/backend
1477
- tag: latest
1478
- replicaCount: 3
1479
- resources:
1480
- requests:
1481
- cpu: 100m
1482
- memory: 128Mi
1483
- limits:
1484
- cpu: 500m
1485
- memory: 512Mi
1486
- destination:
1487
- server: https://kubernetes.default.svc
1488
- namespace: production
1489
- syncPolicy:
1490
- automated:
1491
- prune: true
1492
- selfHeal: true
1493
- syncOptions:
1494
- - CreateNamespace=true
1495
- retry:
1496
- limit: 5
1497
- backoff:
1498
- duration: 5s
1499
- factor: 2
1500
- maxDuration: 3m
1501
- ```
663
+ # Cache check
664
+ try:
665
+ await cache.ping()
666
+ checks["checks"]["cache"] = True
667
+ except Exception:
668
+ checks["checks"]["cache"] = False
1502
669
 
1503
- **AppProject for Multi-Tenancy**:
1504
- ```yaml
1505
- apiVersion: argoproj.io/v1alpha1
1506
- kind: AppProject
1507
- metadata:
1508
- name: production
1509
- namespace: argocd
1510
- spec:
1511
- description: Production environment
1512
- sourceRepos:
1513
- - 'https://github.com/example/*'
1514
- destinations:
1515
- - namespace: 'production'
1516
- server: https://kubernetes.default.svc
1517
- clusterResourceWhitelist:
1518
- - group: ''
1519
- kind: Namespace
1520
- - group: 'apps'
1521
- kind: Deployment
1522
- - group: 'v1'
1523
- kind: Service
1524
- namespaceResourceBlacklist:
1525
- - group: ''
1526
- kind: ResourceQuota
1527
- - group: ''
1528
- kind: LimitRange
1529
- roles:
1530
- - name: prod-admin
1531
- description: Admin privileges for production
1532
- policies:
1533
- - p, proj:production:prod-admin, applications, *, production/*, allow
1534
- groups:
1535
- - production-team
1536
- ```
670
+ # Overall status
671
+ if not all(checks["checks"].values()):
672
+ checks["status"] = "degraded"
1537
673
 
1538
- **Canary Rollout with Argo Rollouts**:
1539
- ```yaml
1540
- apiVersion: argoproj.io/v1alpha1
1541
- kind: Rollout
1542
- metadata:
1543
- name: backend
1544
- namespace: production
1545
- spec:
1546
- replicas: 5
1547
- strategy:
1548
- canary:
1549
- steps:
1550
- - setWeight: 20
1551
- - pause: {duration: 5m}
1552
- - setWeight: 40
1553
- - pause: {duration: 5m}
1554
- - setWeight: 60
1555
- - pause: {duration: 5m}
1556
- - setWeight: 80
1557
- - pause: {duration: 5m}
1558
- canaryService: backend-canary
1559
- stableService: backend-stable
1560
- trafficRouting:
1561
- istio:
1562
- virtualService:
1563
- name: backend
1564
- routes:
1565
- - primary
1566
- revisionHistoryLimit: 2
1567
- selector:
1568
- matchLabels:
1569
- app: backend
1570
- template:
1571
- metadata:
1572
- labels:
1573
- app: backend
1574
- spec:
1575
- containers:
1576
- - name: backend
1577
- image: harbor.example.com/production/backend:latest
1578
- ports:
1579
- - containerPort: 8080
1580
- livenessProbe:
1581
- httpGet:
1582
- path: /health/live
1583
- port: 8080
1584
- readinessProbe:
1585
- httpGet:
1586
- path: /health/ready
1587
- port: 8080
674
+ return checks
1588
675
  ```
1589
676
 
1590
- **Analysis Template (Automated Rollback)**:
1591
- ```yaml
1592
- apiVersion: argoproj.io/v1alpha1
1593
- kind: AnalysisTemplate
1594
- metadata:
1595
- name: backend-success-rate
1596
- namespace: production
1597
- spec:
1598
- metrics:
1599
- - name: success-rate
1600
- interval: 1m
1601
- successCondition: result >= 0.95
1602
- failureLimit: 3
1603
- provider:
1604
- prometheus:
1605
- address: http://prometheus.observability:9090
1606
- query: |
1607
- sum(rate(http_requests_total{app="backend",status!~"5.."}[5m]))
1608
- /
1609
- sum(rate(http_requests_total{app="backend"}[5m]))
677
+ ### Structured Logging
678
+
679
+ ```python
680
+ import structlog
681
+ from fastapi import FastAPI
682
+
683
+ def configure_logging():
684
+ structlog.configure(
685
+ processors=[
686
+ structlog.stdlib.filter_by_level,
687
+ structlog.stdlib.add_logger_name,
688
+ structlog.stdlib.add_log_level,
689
+ structlog.processors.TimeStamper(fmt="iso"),
690
+ structlog.processors.JSONRenderer()
691
+ ],
692
+ wrapper_class=structlog.stdlib.BoundLogger,
693
+ context_class=dict,
694
+ logger_factory=structlog.stdlib.LoggerFactory(),
695
+ cache_logger_on_first_use=True
696
+ )
697
+
698
+ logger = structlog.get_logger()
699
+
700
+ @app.middleware("http")
701
+ async def log_requests(request: Request, call_next):
702
+ logger.info(
703
+ "request_started",
704
+ method=request.method,
705
+ path=request.url.path,
706
+ client_ip=request.client.host
707
+ )
708
+ response = await call_next(request)
709
+ logger.info(
710
+ "request_completed",
711
+ status_code=response.status_code
712
+ )
713
+ return response
1610
714
  ```
1611
715
 
1612
716
  ---
1613
717
 
1614
- ## Summary
1615
-
1616
- These examples demonstrate production-ready backend architectures with:
1617
-
1618
- 1. **Microservices**: Kubernetes 1.31 + Istio 1.21 for orchestration, traffic management, and security
1619
- 2. **Event-Driven**: Kafka 3.7 for event streaming, CQRS for read/write separation
1620
- 3. **Serverless**: AWS Lambda for auto-scaling, cost-effective event-driven workloads
1621
- 4. **Observability**: OpenTelemetry 1.24 + Prometheus 2.48 + Jaeger 1.51 for full-stack telemetry
1622
- 5. **Container Registry**: Harbor 2.10.x with Trivy scanning for vulnerability management
1623
- 6. **GitOps**: ArgoCD 2.10.x with automated rollouts and canary deployments
1624
-
1625
- All examples include:
1626
- - Latest tool versions (2025-10-22)
1627
- - Production-grade configurations
1628
- - Security best practices (mTLS, RBAC, OWASP compliance, image scanning)
1629
- - Observability integration
1630
- - Performance optimization (connection pooling, caching, rate limiting)
1631
- - Infrastructure as Code (Kubernetes manifests, Terraform)
1632
- - CI/CD integration (GitHub Actions, ArgoCD)
1633
- - Automated deployment strategies (canary, blue-green)
718
+ *For additional patterns and advanced configurations, see the related skills and documentation.*