moai-adk 0.32.8__py3-none-any.whl → 0.41.2__py3-none-any.whl

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

Potentially problematic release.


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

Files changed (545) hide show
  1. moai_adk/cli/commands/init.py +4 -1
  2. moai_adk/cli/commands/update.py +31 -26
  3. moai_adk/cli/worktree/cli.py +54 -43
  4. moai_adk/cli/worktree/manager.py +17 -14
  5. moai_adk/cli/worktree/registry.py +313 -19
  6. moai_adk/core/config/unified.py +237 -63
  7. moai_adk/core/error_recovery_system.py +22 -4
  8. moai_adk/core/git/conflict_detector.py +10 -1
  9. moai_adk/core/git/event_detector.py +16 -5
  10. moai_adk/core/language_config_resolver.py +96 -3
  11. moai_adk/core/merge/analyzer.py +509 -324
  12. moai_adk/core/migration/alfred_to_moai_migrator.py +7 -1
  13. moai_adk/core/migration/backup_manager.py +54 -4
  14. moai_adk/core/migration/file_migrator.py +174 -2
  15. moai_adk/core/migration/interactive_checkbox_ui.py +42 -31
  16. moai_adk/core/migration/version_detector.py +123 -19
  17. moai_adk/core/migration/version_migrator.py +44 -9
  18. moai_adk/core/project/backup_utils.py +9 -1
  19. moai_adk/core/project/initializer.py +33 -96
  20. moai_adk/core/project/phase_executor.py +79 -33
  21. moai_adk/core/quality/trust_checker.py +30 -10
  22. moai_adk/core/realtime_monitoring_dashboard.py +3 -3
  23. moai_adk/core/rollback_manager.py +46 -19
  24. moai_adk/core/template/backup.py +4 -3
  25. moai_adk/core/template/config.py +33 -9
  26. moai_adk/core/template/merger.py +34 -8
  27. moai_adk/core/template/processor.py +144 -9
  28. moai_adk/core/template_engine.py +10 -1
  29. moai_adk/core/template_variable_synchronizer.py +16 -2
  30. moai_adk/core/version_sync.py +54 -6
  31. moai_adk/project/configuration.py +1 -1
  32. moai_adk/statusline/config.py +5 -2
  33. moai_adk/statusline/main.py +58 -0
  34. moai_adk/statusline/renderer.py +56 -84
  35. moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +218 -51
  36. moai_adk/templates/.claude/agents/moai/builder-agent.md +46 -11
  37. moai_adk/templates/.claude/agents/moai/builder-command.md +88 -26
  38. moai_adk/templates/.claude/agents/moai/builder-plugin.md +753 -0
  39. moai_adk/templates/.claude/agents/moai/builder-skill.md +79 -8
  40. moai_adk/templates/.claude/agents/moai/expert-backend.md +100 -28
  41. moai_adk/templates/.claude/agents/moai/expert-database.md +20 -12
  42. moai_adk/templates/.claude/agents/moai/expert-debug.md +19 -8
  43. moai_adk/templates/.claude/agents/moai/expert-devops.md +36 -25
  44. moai_adk/templates/.claude/agents/moai/expert-frontend.md +99 -38
  45. moai_adk/templates/.claude/agents/moai/expert-performance.md +661 -0
  46. moai_adk/templates/.claude/agents/moai/expert-refactoring.md +218 -0
  47. moai_adk/templates/.claude/agents/moai/expert-security.md +55 -4
  48. moai_adk/templates/.claude/agents/moai/expert-testing.md +737 -0
  49. moai_adk/templates/.claude/agents/moai/expert-uiux.md +20 -11
  50. moai_adk/templates/.claude/agents/moai/manager-claude-code.md +13 -4
  51. moai_adk/templates/.claude/agents/moai/manager-docs.md +15 -7
  52. moai_adk/templates/.claude/agents/moai/manager-git.md +192 -37
  53. moai_adk/templates/.claude/agents/moai/manager-project.md +13 -7
  54. moai_adk/templates/.claude/agents/moai/manager-quality.md +48 -6
  55. moai_adk/templates/.claude/agents/moai/manager-spec.md +110 -8
  56. moai_adk/templates/.claude/agents/moai/manager-strategy.md +203 -17
  57. moai_adk/templates/.claude/agents/moai/manager-tdd.md +217 -23
  58. moai_adk/templates/.claude/agents/moai/mcp-context7.md +102 -7
  59. moai_adk/templates/.claude/agents/moai/mcp-figma.md +107 -86
  60. moai_adk/templates/.claude/agents/moai/mcp-notion.md +50 -4
  61. moai_adk/templates/.claude/agents/moai/mcp-playwright.md +52 -4
  62. moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +49 -5
  63. moai_adk/templates/.claude/commands/moai/0-project.md +503 -307
  64. moai_adk/templates/.claude/commands/moai/1-plan.md +255 -323
  65. moai_adk/templates/.claude/commands/moai/2-run.md +257 -315
  66. moai_adk/templates/.claude/commands/moai/3-sync.md +421 -56
  67. moai_adk/templates/.claude/commands/moai/9-feedback.md +40 -34
  68. moai_adk/templates/.claude/hooks/moai/__init__.py +0 -0
  69. moai_adk/templates/.claude/hooks/moai/lib/README.md +143 -0
  70. moai_adk/templates/.claude/hooks/moai/lib/__init__.py +19 -0
  71. moai_adk/templates/.claude/hooks/moai/lib/checkpoint.py +4 -1
  72. moai_adk/templates/.claude/hooks/moai/lib/common.py +35 -5
  73. moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +12 -14
  74. moai_adk/templates/.claude/hooks/moai/lib/exceptions.py +171 -0
  75. moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +1 -1
  76. moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +104 -14
  77. moai_adk/templates/.claude/hooks/moai/lib/models.py +9 -7
  78. moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +204 -13
  79. moai_adk/templates/.claude/hooks/moai/lib/project.py +23 -14
  80. moai_adk/templates/.claude/hooks/moai/lib/tool_registry.py +804 -0
  81. moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +14 -2
  82. moai_adk/templates/.claude/hooks/moai/post_tool__ast_grep_scan.py +256 -0
  83. moai_adk/templates/.claude/hooks/moai/post_tool__code_formatter.py +253 -0
  84. moai_adk/templates/.claude/hooks/moai/post_tool__linter.py +307 -0
  85. moai_adk/templates/.claude/hooks/moai/pre_tool__security_guard.py +231 -0
  86. moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +40 -24
  87. moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +248 -32
  88. moai_adk/templates/.claude/output-styles/moai/r2d2.md +265 -2
  89. moai_adk/templates/.claude/output-styles/moai/yoda.md +23 -2
  90. moai_adk/templates/.claude/settings.json +44 -6
  91. moai_adk/templates/.claude/skills/moai-ai-nano-banana/SKILL.md +303 -0
  92. moai_adk/templates/.claude/skills/moai-ai-nano-banana/examples.md +431 -0
  93. moai_adk/templates/.claude/skills/moai-ai-nano-banana/reference.md +139 -0
  94. moai_adk/templates/.claude/skills/moai-ai-nano-banana/scripts/batch_generate.py +560 -0
  95. moai_adk/templates/.claude/skills/moai-ai-nano-banana/scripts/generate_image.py +362 -0
  96. moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +252 -196
  97. moai_adk/templates/.claude/skills/moai-docs-generation/examples.md +252 -0
  98. moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +39 -27
  99. moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +115 -125
  100. moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +150 -150
  101. moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +182 -175
  102. moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +198 -138
  103. moai_adk/templates/.claude/skills/moai-docs-generation/reference.md +234 -0
  104. moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +19 -13
  105. moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +718 -0
  106. moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +464 -0
  107. moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +21 -14
  108. moai_adk/templates/.claude/skills/moai-domain-database/examples.md +830 -0
  109. moai_adk/templates/.claude/skills/moai-domain-database/reference.md +545 -0
  110. moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +124 -425
  111. moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +968 -0
  112. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/component-architecture.md +723 -0
  113. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/nextjs16-patterns.md +713 -0
  114. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/performance-optimization.md +694 -0
  115. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/react19-patterns.md +591 -0
  116. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/state-management.md +680 -0
  117. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/vue35-patterns.md +802 -0
  118. moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +664 -0
  119. moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +17 -15
  120. moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +105 -315
  121. moai_adk/templates/.claude/skills/moai-formats-data/examples.md +804 -0
  122. moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +299 -70
  123. moai_adk/templates/.claude/skills/moai-formats-data/modules/toon-encoding.md +6 -6
  124. moai_adk/templates/.claude/skills/moai-formats-data/reference.md +585 -0
  125. moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +197 -154
  126. moai_adk/templates/.claude/skills/moai-foundation-claude/examples.md +732 -0
  127. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/advanced-agent-patterns.md +370 -0
  128. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-cli-reference-official.md +420 -0
  129. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-devcontainers-official.md +381 -0
  130. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-discover-plugins-official.md +379 -0
  131. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-headless-official.md +378 -0
  132. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +110 -0
  133. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-memory-official.md +2 -2
  134. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-plugin-marketplaces-official.md +308 -0
  135. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-plugins-official.md +432 -0
  136. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sandboxing-official.md +282 -0
  137. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +425 -71
  138. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-statusline-official.md +293 -0
  139. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +325 -143
  140. moai_adk/templates/.claude/skills/moai-foundation-claude/reference.md +209 -0
  141. moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +12 -1
  142. moai_adk/templates/.claude/skills/moai-foundation-context/examples.md +1048 -0
  143. moai_adk/templates/.claude/skills/moai-foundation-context/reference.md +246 -0
  144. moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +33 -134
  145. moai_adk/templates/.claude/skills/moai-foundation-core/examples.md +358 -0
  146. moai_adk/templates/.claude/skills/moai-foundation-core/modules/agents-reference.md +31 -18
  147. moai_adk/templates/.claude/skills/moai-foundation-core/modules/commands-reference.md +30 -30
  148. moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-advanced.md +279 -0
  149. moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-implementation.md +267 -0
  150. moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +121 -650
  151. moai_adk/templates/.claude/skills/moai-foundation-core/modules/patterns.md +22 -0
  152. moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-ears-format.md +200 -0
  153. moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +37 -730
  154. moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-tdd-implementation.md +275 -0
  155. moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +77 -819
  156. moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-implementation.md +244 -0
  157. moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-validation.md +219 -0
  158. moai_adk/templates/.claude/skills/moai-foundation-core/reference.md +478 -0
  159. moai_adk/templates/.claude/skills/moai-foundation-philosopher/SKILL.md +311 -0
  160. moai_adk/templates/.claude/skills/moai-foundation-philosopher/examples.md +228 -0
  161. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/assumption-matrix.md +80 -0
  162. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/cognitive-bias.md +199 -0
  163. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/first-principles.md +140 -0
  164. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/trade-off-analysis.md +154 -0
  165. moai_adk/templates/.claude/skills/moai-foundation-philosopher/reference.md +157 -0
  166. moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +17 -16
  167. moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +431 -0
  168. moai_adk/templates/.claude/skills/moai-lang-cpp/examples.md +17 -0
  169. moai_adk/templates/.claude/skills/moai-lang-cpp/modules/advanced-patterns.md +401 -0
  170. moai_adk/templates/.claude/skills/moai-lang-cpp/reference.md +17 -0
  171. moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +194 -0
  172. moai_adk/templates/.claude/skills/moai-lang-csharp/examples.md +585 -0
  173. moai_adk/templates/.claude/skills/moai-lang-csharp/modules/aspnet-core.md +627 -0
  174. moai_adk/templates/.claude/skills/moai-lang-csharp/modules/blazor-components.md +767 -0
  175. moai_adk/templates/.claude/skills/moai-lang-csharp/modules/cqrs-validation.md +626 -0
  176. moai_adk/templates/.claude/skills/moai-lang-csharp/modules/csharp12-features.md +580 -0
  177. moai_adk/templates/.claude/skills/moai-lang-csharp/modules/efcore-patterns.md +622 -0
  178. moai_adk/templates/.claude/skills/moai-lang-csharp/reference.md +403 -0
  179. moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +395 -0
  180. moai_adk/templates/.claude/skills/moai-lang-elixir/examples.md +17 -0
  181. moai_adk/templates/.claude/skills/moai-lang-elixir/modules/advanced-patterns.md +531 -0
  182. moai_adk/templates/.claude/skills/moai-lang-elixir/reference.md +17 -0
  183. moai_adk/templates/.claude/skills/moai-lang-flutter/SKILL.md +473 -0
  184. moai_adk/templates/.claude/skills/moai-lang-flutter/examples.md +1090 -0
  185. moai_adk/templates/.claude/skills/moai-lang-flutter/reference.md +686 -0
  186. moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +378 -0
  187. moai_adk/templates/.claude/skills/moai-lang-go/examples.md +919 -0
  188. moai_adk/templates/.claude/skills/moai-lang-go/reference.md +737 -0
  189. moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +387 -0
  190. moai_adk/templates/.claude/skills/moai-lang-java/examples.md +864 -0
  191. moai_adk/templates/.claude/skills/moai-lang-java/reference.md +291 -0
  192. moai_adk/templates/.claude/skills/moai-lang-javascript/SKILL.md +419 -0
  193. moai_adk/templates/.claude/skills/moai-lang-javascript/examples.md +973 -0
  194. moai_adk/templates/.claude/skills/moai-lang-javascript/reference.md +1543 -0
  195. moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +384 -0
  196. moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +1006 -0
  197. moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +562 -0
  198. moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +505 -0
  199. moai_adk/templates/.claude/skills/moai-lang-php/examples.md +17 -0
  200. moai_adk/templates/.claude/skills/moai-lang-php/modules/advanced-patterns.md +538 -0
  201. moai_adk/templates/.claude/skills/moai-lang-php/reference.md +17 -0
  202. moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +490 -0
  203. moai_adk/templates/.claude/skills/moai-lang-python/examples.md +977 -0
  204. moai_adk/templates/.claude/skills/moai-lang-python/reference.md +804 -0
  205. moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +390 -0
  206. moai_adk/templates/.claude/skills/moai-lang-r/examples.md +17 -0
  207. moai_adk/templates/.claude/skills/moai-lang-r/modules/advanced-patterns.md +489 -0
  208. moai_adk/templates/.claude/skills/moai-lang-r/reference.md +17 -0
  209. moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +433 -0
  210. moai_adk/templates/.claude/skills/moai-lang-ruby/examples.md +17 -0
  211. moai_adk/templates/.claude/skills/moai-lang-ruby/modules/advanced-patterns.md +309 -0
  212. moai_adk/templates/.claude/skills/moai-lang-ruby/modules/testing-patterns.md +306 -0
  213. moai_adk/templates/.claude/skills/moai-lang-ruby/reference.md +17 -0
  214. moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +378 -0
  215. moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +659 -0
  216. moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +504 -0
  217. moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +212 -0
  218. moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +633 -0
  219. moai_adk/templates/.claude/skills/moai-lang-scala/modules/akka-actors.md +479 -0
  220. moai_adk/templates/.claude/skills/moai-lang-scala/modules/cats-effect.md +489 -0
  221. moai_adk/templates/.claude/skills/moai-lang-scala/modules/functional-programming.md +460 -0
  222. moai_adk/templates/.claude/skills/moai-lang-scala/modules/spark-data.md +498 -0
  223. moai_adk/templates/.claude/skills/moai-lang-scala/modules/zio-patterns.md +541 -0
  224. moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +423 -0
  225. moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +192 -0
  226. moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +918 -0
  227. moai_adk/templates/.claude/skills/moai-lang-swift/modules/combine-reactive.md +256 -0
  228. moai_adk/templates/.claude/skills/moai-lang-swift/modules/concurrency.md +270 -0
  229. moai_adk/templates/.claude/skills/moai-lang-swift/modules/swift6-features.md +265 -0
  230. moai_adk/templates/.claude/skills/moai-lang-swift/modules/swiftui-patterns.md +314 -0
  231. moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +672 -0
  232. moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +365 -0
  233. moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +1089 -0
  234. moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +731 -0
  235. moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +94 -227
  236. moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +26 -6
  237. moai_adk/templates/.claude/skills/moai-library-nextra/examples.md +592 -0
  238. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +331 -12
  239. moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +330 -37
  240. moai_adk/templates/.claude/skills/moai-library-nextra/reference.md +379 -0
  241. moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +17 -13
  242. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-theming.md +1 -1
  243. moai_adk/templates/.claude/skills/moai-platform-auth0/SKILL.md +284 -0
  244. moai_adk/templates/.claude/skills/moai-platform-auth0/examples.md +2446 -0
  245. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/adaptive-mfa.md +233 -0
  246. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/akamai-integration.md +214 -0
  247. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/application-credentials.md +280 -0
  248. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/attack-protection-log-events.md +224 -0
  249. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/attack-protection-overview.md +140 -0
  250. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/bot-detection.md +144 -0
  251. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/breached-password-detection.md +187 -0
  252. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/brute-force-protection.md +189 -0
  253. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/certifications.md +282 -0
  254. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/compliance-overview.md +263 -0
  255. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/continuous-session-protection.md +307 -0
  256. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/customize-mfa.md +177 -0
  257. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/dpop-implementation.md +283 -0
  258. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/fapi-implementation.md +259 -0
  259. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/gdpr-compliance.md +313 -0
  260. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/guardian-configuration.md +269 -0
  261. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/highly-regulated-identity.md +272 -0
  262. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/jwt-fundamentals.md +248 -0
  263. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mdl-verification.md +210 -0
  264. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-api-management.md +278 -0
  265. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-factors.md +226 -0
  266. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-overview.md +174 -0
  267. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mtls-sender-constraining.md +316 -0
  268. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/ropg-flow-mfa.md +216 -0
  269. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/security-center.md +325 -0
  270. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/security-guidance.md +277 -0
  271. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/state-parameters.md +177 -0
  272. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/step-up-authentication.md +251 -0
  273. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/suspicious-ip-throttling.md +240 -0
  274. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/tenant-access-control.md +179 -0
  275. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/webauthn-fido.md +235 -0
  276. moai_adk/templates/.claude/skills/moai-platform-auth0/reference.md +224 -0
  277. moai_adk/templates/.claude/skills/moai-platform-clerk/SKILL.md +426 -0
  278. moai_adk/templates/.claude/skills/moai-platform-clerk/modules/advanced-patterns.md +417 -0
  279. moai_adk/templates/.claude/skills/moai-platform-clerk/reference.md +273 -0
  280. moai_adk/templates/.claude/skills/moai-platform-convex/SKILL.md +229 -0
  281. moai_adk/templates/.claude/skills/moai-platform-convex/examples.md +506 -0
  282. moai_adk/templates/.claude/skills/moai-platform-convex/modules/auth-integration.md +421 -0
  283. moai_adk/templates/.claude/skills/moai-platform-convex/modules/file-storage.md +474 -0
  284. moai_adk/templates/.claude/skills/moai-platform-convex/modules/reactive-queries.md +302 -0
  285. moai_adk/templates/.claude/skills/moai-platform-convex/modules/server-functions.md +452 -0
  286. moai_adk/templates/.claude/skills/moai-platform-convex/reference.md +385 -0
  287. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/SKILL.md +250 -0
  288. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/examples.md +514 -0
  289. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/custom-claims.md +374 -0
  290. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/phone-auth.md +372 -0
  291. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/social-auth.md +339 -0
  292. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/reference.md +382 -0
  293. moai_adk/templates/.claude/skills/moai-platform-firestore/SKILL.md +231 -0
  294. moai_adk/templates/.claude/skills/moai-platform-firestore/examples.md +445 -0
  295. moai_adk/templates/.claude/skills/moai-platform-firestore/modules/offline-cache.md +392 -0
  296. moai_adk/templates/.claude/skills/moai-platform-firestore/modules/realtime-listeners.md +441 -0
  297. moai_adk/templates/.claude/skills/moai-platform-firestore/modules/security-rules.md +352 -0
  298. moai_adk/templates/.claude/skills/moai-platform-firestore/modules/transactions.md +452 -0
  299. moai_adk/templates/.claude/skills/moai-platform-firestore/reference.md +322 -0
  300. moai_adk/templates/.claude/skills/moai-platform-neon/SKILL.md +206 -0
  301. moai_adk/templates/.claude/skills/moai-platform-neon/examples.md +470 -0
  302. moai_adk/templates/.claude/skills/moai-platform-neon/modules/auto-scaling.md +349 -0
  303. moai_adk/templates/.claude/skills/moai-platform-neon/modules/branching-workflows.md +354 -0
  304. moai_adk/templates/.claude/skills/moai-platform-neon/modules/connection-pooling.md +412 -0
  305. moai_adk/templates/.claude/skills/moai-platform-neon/modules/pitr-backups.md +458 -0
  306. moai_adk/templates/.claude/skills/moai-platform-neon/reference.md +272 -0
  307. moai_adk/templates/.claude/skills/moai-platform-railway/SKILL.md +224 -0
  308. moai_adk/templates/.claude/skills/moai-platform-railway/examples.md +539 -0
  309. moai_adk/templates/.claude/skills/moai-platform-railway/modules/docker-deployment.md +261 -0
  310. moai_adk/templates/.claude/skills/moai-platform-railway/modules/multi-service.md +291 -0
  311. moai_adk/templates/.claude/skills/moai-platform-railway/modules/networking-domains.md +338 -0
  312. moai_adk/templates/.claude/skills/moai-platform-railway/modules/volumes-storage.md +353 -0
  313. moai_adk/templates/.claude/skills/moai-platform-railway/reference.md +374 -0
  314. moai_adk/templates/.claude/skills/moai-platform-supabase/SKILL.md +207 -0
  315. moai_adk/templates/.claude/skills/moai-platform-supabase/examples.md +502 -0
  316. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/auth-integration.md +384 -0
  317. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/edge-functions.md +371 -0
  318. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/postgresql-pgvector.md +231 -0
  319. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/realtime-presence.md +354 -0
  320. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/row-level-security.md +286 -0
  321. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/storage-cdn.md +319 -0
  322. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/typescript-patterns.md +453 -0
  323. moai_adk/templates/.claude/skills/moai-platform-supabase/reference.md +284 -0
  324. moai_adk/templates/.claude/skills/moai-platform-vercel/SKILL.md +210 -0
  325. moai_adk/templates/.claude/skills/moai-platform-vercel/examples.md +502 -0
  326. moai_adk/templates/.claude/skills/moai-platform-vercel/modules/analytics-speed.md +348 -0
  327. moai_adk/templates/.claude/skills/moai-platform-vercel/modules/deployment-config.md +344 -0
  328. moai_adk/templates/.claude/skills/moai-platform-vercel/modules/edge-functions.md +222 -0
  329. moai_adk/templates/.claude/skills/moai-platform-vercel/modules/isr-caching.md +306 -0
  330. moai_adk/templates/.claude/skills/moai-platform-vercel/modules/kv-storage.md +399 -0
  331. moai_adk/templates/.claude/skills/moai-platform-vercel/reference.md +360 -0
  332. moai_adk/templates/.claude/skills/moai-plugin-builder/SKILL.md +474 -0
  333. moai_adk/templates/.claude/skills/moai-plugin-builder/examples.md +621 -0
  334. moai_adk/templates/.claude/skills/moai-plugin-builder/modules/migration.md +341 -0
  335. moai_adk/templates/.claude/skills/moai-plugin-builder/modules/validation.md +373 -0
  336. moai_adk/templates/.claude/skills/moai-plugin-builder/reference.md +464 -0
  337. moai_adk/templates/.claude/skills/moai-tool-ast-grep/SKILL.md +307 -0
  338. moai_adk/templates/.claude/skills/moai-tool-ast-grep/examples.md +1099 -0
  339. moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/language-specific.md +307 -0
  340. moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/pattern-syntax.md +237 -0
  341. moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/refactoring-patterns.md +260 -0
  342. moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/security-rules.md +239 -0
  343. moai_adk/templates/.claude/skills/moai-tool-ast-grep/reference.md +288 -0
  344. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/go.yml +90 -0
  345. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/python.yml +101 -0
  346. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/typescript.yml +83 -0
  347. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/quality/complexity-check.yml +94 -0
  348. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/quality/deprecated-apis.yml +84 -0
  349. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/secrets-detection.yml +89 -0
  350. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/sql-injection.yml +45 -0
  351. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/xss-prevention.yml +50 -0
  352. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/sgconfig.yml +54 -0
  353. moai_adk/templates/.claude/skills/moai-tool-opencode/SKILL.md +215 -0
  354. moai_adk/templates/.claude/skills/moai-tool-opencode/examples.md +697 -0
  355. moai_adk/templates/.claude/skills/moai-tool-opencode/index.md +96 -0
  356. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/acp.md +115 -0
  357. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/agents.md +241 -0
  358. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/commands.md +197 -0
  359. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/custom-tools.md +197 -0
  360. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/formatters.md +164 -0
  361. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/keybinds.md +150 -0
  362. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/lsp-servers.md +156 -0
  363. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/mcp-servers.md +214 -0
  364. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/models.md +197 -0
  365. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/permissions.md +162 -0
  366. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/rules.md +129 -0
  367. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/skills.md +192 -0
  368. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/themes.md +200 -0
  369. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/tools.md +169 -0
  370. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/core/config.md +211 -0
  371. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/core/enterprise.md +68 -0
  372. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/core/intro.md +127 -0
  373. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/core/migration-1.0.md +82 -0
  374. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/core/network.md +72 -0
  375. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/core/providers.md +310 -0
  376. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/core/troubleshooting.md +124 -0
  377. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/develop/ecosystem.md +75 -0
  378. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/develop/plugins.md +218 -0
  379. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/develop/sdk.md +266 -0
  380. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/develop/server.md +207 -0
  381. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/usage/cli.md +159 -0
  382. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/usage/github.md +181 -0
  383. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/usage/gitlab.md +122 -0
  384. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/usage/ide.md +74 -0
  385. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/usage/share.md +106 -0
  386. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/usage/tui.md +129 -0
  387. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/usage/zen.md +118 -0
  388. moai_adk/templates/.claude/skills/moai-tool-opencode/reference.md +790 -0
  389. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +190 -424
  390. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/examples.md +544 -0
  391. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/reference.md +307 -0
  392. moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +188 -314
  393. moai_adk/templates/.claude/skills/moai-workflow-project/examples.md +547 -0
  394. moai_adk/templates/.claude/skills/moai-workflow-project/reference.md +275 -0
  395. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +284 -212
  396. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/product-template.md +2 -2
  397. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/structure-template.md +1 -1
  398. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/tech-template.md +22 -1
  399. moai_adk/templates/.claude/skills/moai-workflow-spec/SKILL.md +337 -0
  400. moai_adk/templates/.claude/skills/moai-workflow-spec/examples.md +900 -0
  401. moai_adk/templates/.claude/skills/moai-workflow-spec/modules/advanced-patterns.md +237 -0
  402. moai_adk/templates/.claude/skills/moai-workflow-spec/reference.md +704 -0
  403. moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +13 -0
  404. moai_adk/templates/.claude/skills/moai-workflow-templates/examples.md +552 -0
  405. moai_adk/templates/.claude/skills/moai-workflow-templates/reference.md +346 -0
  406. moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +222 -367
  407. moai_adk/templates/.claude/skills/moai-workflow-testing/examples.md +672 -0
  408. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +52 -3
  409. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +263 -806
  410. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/context7-integration.md +286 -0
  411. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/review-workflows.md +500 -0
  412. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/relevance-analysis.md +154 -0
  413. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/safety-analysis.md +148 -0
  414. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/scoring-algorithms.md +196 -0
  415. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/timeliness-analysis.md +168 -0
  416. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/truthfulness-analysis.md +136 -0
  417. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/usability-analysis.md +153 -0
  418. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework.md +257 -0
  419. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +191 -1344
  420. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/analysis-patterns.md +340 -0
  421. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/core-classes.md +299 -0
  422. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/tool-integration.md +380 -0
  423. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/debugging/debugging-workflows.md +451 -0
  424. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/debugging/error-analysis.md +442 -0
  425. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance/optimization-patterns.md +473 -0
  426. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance/profiling-techniques.md +481 -0
  427. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/ai-optimization.md +241 -0
  428. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/bottleneck-detection.md +397 -0
  429. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/optimization-plan.md +315 -0
  430. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/profiler-core.md +277 -0
  431. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/real-time-monitoring.md +187 -0
  432. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +287 -1194
  433. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/quality-metrics.md +415 -0
  434. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/refactoring/ai-workflows.md +620 -0
  435. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/refactoring/patterns.md +692 -0
  436. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/security-analysis.md +429 -0
  437. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +262 -1192
  438. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/static-analysis.md +438 -0
  439. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd/core-classes.md +397 -0
  440. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/advanced-features.md +494 -0
  441. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/red-green-refactor.md +316 -0
  442. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/test-generation.md +471 -0
  443. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/test-patterns.md +371 -0
  444. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +227 -1222
  445. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/trust5-validation.md +428 -0
  446. moai_adk/templates/.claude/skills/moai-workflow-testing/reference.md +440 -0
  447. moai_adk/templates/.claude/skills/moai-workflow-worktree/SKILL.md +228 -0
  448. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/integration-patterns.md +149 -0
  449. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/moai-adk-integration.md +245 -0
  450. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-advanced.md +310 -0
  451. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-development.md +202 -0
  452. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-workflows.md +302 -0
  453. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/registry-architecture.md +271 -0
  454. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/resource-optimization.md +300 -0
  455. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/tools-integration.md +280 -0
  456. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/troubleshooting.md +397 -0
  457. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/worktree-commands.md +296 -0
  458. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/worktree-management.md +217 -0
  459. moai_adk/templates/.git-hooks/pre-push +168 -50
  460. moai_adk/templates/.gitignore +0 -3
  461. moai_adk/templates/.lsp.json +152 -0
  462. moai_adk/templates/.mcp.json +5 -12
  463. moai_adk/templates/.moai/config/config.yaml +20 -306
  464. moai_adk/templates/.moai/config/multilingual-triggers.yaml +213 -0
  465. moai_adk/templates/.moai/config/questions/_schema.yaml +105 -10
  466. moai_adk/templates/.moai/config/questions/tab0-init.yaml +259 -0
  467. moai_adk/templates/.moai/config/questions/tab1-user.yaml +4 -5
  468. moai_adk/templates/.moai/config/questions/tab2-project.yaml +12 -55
  469. moai_adk/templates/.moai/config/questions/tab3-git.yaml +111 -21
  470. moai_adk/templates/.moai/config/questions/tab4-quality.yaml +34 -18
  471. moai_adk/templates/.moai/config/questions/tab5-system.yaml +19 -75
  472. moai_adk/templates/.moai/config/sections/git-strategy.yaml +83 -7
  473. moai_adk/templates/.moai/config/sections/language.yaml +7 -7
  474. moai_adk/templates/.moai/config/sections/project.yaml +1 -1
  475. moai_adk/templates/.moai/config/sections/quality.yaml +7 -4
  476. moai_adk/templates/.moai/config/sections/system.yaml +11 -1
  477. moai_adk/templates/.moai/config/statusline-config.yaml +19 -13
  478. moai_adk/templates/.moai/scripts/setup-glm.py +4 -4
  479. moai_adk/templates/CLAUDE.md +578 -154
  480. moai_adk/utils/common.py +33 -0
  481. moai_adk/version.py +1 -1
  482. {moai_adk-0.32.8.dist-info → moai_adk-0.41.2.dist-info}/METADATA +905 -109
  483. moai_adk-0.41.2.dist-info/RECORD +683 -0
  484. moai_adk/core/config/auto_spec_config.py +0 -340
  485. moai_adk/core/hooks/post_tool_auto_spec_completion.py +0 -901
  486. moai_adk/core/spec/confidence_scoring.py +0 -680
  487. moai_adk/core/spec/ears_template_engine.py +0 -1247
  488. moai_adk/core/spec/quality_validator.py +0 -687
  489. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/design-system-tokens.md +0 -405
  490. moai_adk/templates/.claude/skills/moai-integration-mcp/SKILL.md +0 -352
  491. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/README.md +0 -52
  492. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/error-handling.md +0 -334
  493. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/integration-patterns.md +0 -310
  494. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/security-authentication.md +0 -256
  495. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/server-architecture.md +0 -253
  496. moai_adk/templates/.claude/skills/moai-lang-unified/README.md +0 -133
  497. moai_adk/templates/.claude/skills/moai-lang-unified/SKILL.md +0 -296
  498. moai_adk/templates/.claude/skills/moai-lang-unified/examples.md +0 -1269
  499. moai_adk/templates/.claude/skills/moai-lang-unified/reference.md +0 -331
  500. moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +0 -336
  501. moai_adk/templates/.claude/skills/moai-platform-baas/README.md +0 -186
  502. moai_adk/templates/.claude/skills/moai-platform-baas/SKILL.md +0 -290
  503. moai_adk/templates/.claude/skills/moai-platform-baas/examples.md +0 -1225
  504. moai_adk/templates/.claude/skills/moai-platform-baas/reference.md +0 -567
  505. moai_adk/templates/.claude/skills/moai-platform-baas/scripts/provider-selector.py +0 -323
  506. moai_adk/templates/.claude/skills/moai-platform-baas/templates/stack-config.yaml +0 -204
  507. moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +0 -520
  508. moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +0 -574
  509. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +0 -317
  510. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +0 -663
  511. moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +0 -190
  512. moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +0 -135
  513. moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +0 -196
  514. moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +0 -17
  515. moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +0 -158
  516. moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +0 -340
  517. moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +0 -713
  518. moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +0 -538
  519. moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +0 -1336
  520. moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +0 -730
  521. moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +0 -608
  522. moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +0 -1005
  523. moai_adk/templates/.claude/skills/moai-workflow-project/test_integration_simple.py +0 -436
  524. moai_adk/templates/.claude/skills/moai-worktree/SKILL.md +0 -410
  525. moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +0 -982
  526. moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +0 -778
  527. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +0 -646
  528. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +0 -782
  529. moai_adk/templates/.moai/cache/personalization.json +0 -10
  530. moai_adk/templates/.moai/config/presets/manual.yaml +0 -28
  531. moai_adk/templates/.moai/config/presets/personal.yaml +0 -30
  532. moai_adk/templates/.moai/config/presets/team.yaml +0 -33
  533. moai_adk-0.32.8.dist-info/RECORD +0 -396
  534. /moai_adk/templates/.claude/skills/moai-library-mermaid/{advanced-patterns.md → modules/advanced-patterns.md} +0 -0
  535. /moai_adk/templates/.claude/skills/moai-library-mermaid/{optimization.md → modules/optimization.md} +0 -0
  536. /moai_adk/templates/.claude/skills/moai-library-nextra/{optimization.md → modules/optimization.md} +0 -0
  537. /moai_adk/templates/.claude/skills/moai-workflow-jit-docs/{advanced-patterns.md → modules/advanced-patterns.md} +0 -0
  538. /moai_adk/templates/.claude/skills/moai-workflow-jit-docs/{optimization.md → modules/optimization.md} +0 -0
  539. /moai_adk/templates/.claude/skills/moai-workflow-testing/{advanced-patterns.md → modules/advanced-patterns.md} +0 -0
  540. /moai_adk/templates/.claude/skills/moai-workflow-testing/{optimization.md → modules/optimization.md} +0 -0
  541. /moai_adk/templates/.claude/skills/{moai-worktree → moai-workflow-worktree}/examples.md +0 -0
  542. /moai_adk/templates/.claude/skills/{moai-worktree → moai-workflow-worktree}/reference.md +0 -0
  543. {moai_adk-0.32.8.dist-info → moai_adk-0.41.2.dist-info}/WHEEL +0 -0
  544. {moai_adk-0.32.8.dist-info → moai_adk-0.41.2.dist-info}/entry_points.txt +0 -0
  545. {moai_adk-0.32.8.dist-info → moai_adk-0.41.2.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,864 @@
1
+ # Java 21 Production Examples
2
+
3
+ ## Complete REST API Implementation
4
+
5
+ ### Spring Boot 3.3 User Service
6
+
7
+ UserController.java:
8
+ ```java
9
+ @RestController
10
+ @RequestMapping("/api/v1/users")
11
+ @RequiredArgsConstructor
12
+ @Validated
13
+ public class UserController {
14
+ private final UserService userService;
15
+
16
+ @GetMapping
17
+ public ResponseEntity<Page<UserDto>> listUsers(
18
+ @RequestParam(defaultValue = "0") int page,
19
+ @RequestParam(defaultValue = "20") int size,
20
+ @RequestParam(required = false) String search) {
21
+ var pageable = PageRequest.of(page, size, Sort.by("createdAt").descending());
22
+ var users = search != null
23
+ ? userService.searchUsers(search, pageable)
24
+ : userService.findAll(pageable);
25
+ return ResponseEntity.ok(users.map(UserDto::from));
26
+ }
27
+
28
+ @GetMapping("/{id}")
29
+ public ResponseEntity<UserDto> getUser(@PathVariable Long id) {
30
+ return userService.findById(id)
31
+ .map(UserDto::from)
32
+ .map(ResponseEntity::ok)
33
+ .orElse(ResponseEntity.notFound().build());
34
+ }
35
+
36
+ @PostMapping
37
+ public ResponseEntity<UserDto> createUser(
38
+ @Valid @RequestBody CreateUserRequest request) {
39
+ var user = userService.create(request);
40
+ var location = URI.create("/api/v1/users/" + user.getId());
41
+ return ResponseEntity.created(location).body(UserDto.from(user));
42
+ }
43
+
44
+ @PutMapping("/{id}")
45
+ public ResponseEntity<UserDto> updateUser(
46
+ @PathVariable Long id,
47
+ @Valid @RequestBody UpdateUserRequest request) {
48
+ return userService.update(id, request)
49
+ .map(UserDto::from)
50
+ .map(ResponseEntity::ok)
51
+ .orElse(ResponseEntity.notFound().build());
52
+ }
53
+
54
+ @DeleteMapping("/{id}")
55
+ public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
56
+ return userService.delete(id)
57
+ ? ResponseEntity.noContent().build()
58
+ : ResponseEntity.notFound().build();
59
+ }
60
+
61
+ @ExceptionHandler(DuplicateEmailException.class)
62
+ public ResponseEntity<ProblemDetail> handleDuplicateEmail(DuplicateEmailException ex) {
63
+ var problem = ProblemDetail.forStatusAndDetail(
64
+ HttpStatus.CONFLICT, ex.getMessage());
65
+ problem.setTitle("Duplicate Email");
66
+ return ResponseEntity.status(HttpStatus.CONFLICT).body(problem);
67
+ }
68
+ }
69
+ ```
70
+
71
+ UserService.java:
72
+ ```java
73
+ @Service
74
+ @RequiredArgsConstructor
75
+ @Transactional(readOnly = true)
76
+ @Slf4j
77
+ public class UserService {
78
+ private final UserRepository userRepository;
79
+ private final PasswordEncoder passwordEncoder;
80
+ private final ApplicationEventPublisher eventPublisher;
81
+
82
+ public Page<User> findAll(Pageable pageable) {
83
+ return userRepository.findAll(pageable);
84
+ }
85
+
86
+ public Page<User> searchUsers(String query, Pageable pageable) {
87
+ return userRepository.findByNameContainingIgnoreCaseOrEmailContainingIgnoreCase(
88
+ query, query, pageable);
89
+ }
90
+
91
+ public Optional<User> findById(Long id) {
92
+ return userRepository.findById(id);
93
+ }
94
+
95
+ @Transactional
96
+ public User create(CreateUserRequest request) {
97
+ log.info("Creating user with email: {}", request.email());
98
+
99
+ if (userRepository.existsByEmail(request.email())) {
100
+ throw new DuplicateEmailException(request.email());
101
+ }
102
+
103
+ var user = User.builder()
104
+ .name(request.name())
105
+ .email(request.email())
106
+ .passwordHash(passwordEncoder.encode(request.password()))
107
+ .status(UserStatus.PENDING)
108
+ .build();
109
+
110
+ var saved = userRepository.save(user);
111
+ eventPublisher.publishEvent(new UserCreatedEvent(saved.getId(), saved.getEmail()));
112
+
113
+ log.info("User created with id: {}", saved.getId());
114
+ return saved;
115
+ }
116
+
117
+ @Transactional
118
+ public Optional<User> update(Long id, UpdateUserRequest request) {
119
+ return userRepository.findById(id)
120
+ .map(user -> {
121
+ user.setName(request.name());
122
+ if (request.email() != null && !request.email().equals(user.getEmail())) {
123
+ if (userRepository.existsByEmail(request.email())) {
124
+ throw new DuplicateEmailException(request.email());
125
+ }
126
+ user.setEmail(request.email());
127
+ }
128
+ return userRepository.save(user);
129
+ });
130
+ }
131
+
132
+ @Transactional
133
+ public boolean delete(Long id) {
134
+ if (!userRepository.existsById(id)) {
135
+ return false;
136
+ }
137
+ userRepository.deleteById(id);
138
+ eventPublisher.publishEvent(new UserDeletedEvent(id));
139
+ return true;
140
+ }
141
+ }
142
+ ```
143
+
144
+ User.java (Entity):
145
+ ```java
146
+ @Entity
147
+ @Table(name = "users", indexes = {
148
+ @Index(name = "idx_users_email", columnList = "email"),
149
+ @Index(name = "idx_users_status", columnList = "status")
150
+ })
151
+ @Getter @Setter
152
+ @NoArgsConstructor
153
+ @AllArgsConstructor
154
+ @Builder
155
+ public class User {
156
+ @Id
157
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
158
+ private Long id;
159
+
160
+ @Column(nullable = false, length = 100)
161
+ private String name;
162
+
163
+ @Column(nullable = false, unique = true, length = 255)
164
+ private String email;
165
+
166
+ @Column(nullable = false)
167
+ private String passwordHash;
168
+
169
+ @Enumerated(EnumType.STRING)
170
+ @Column(nullable = false, length = 20)
171
+ private UserStatus status;
172
+
173
+ @CreatedDate
174
+ @Column(nullable = false, updatable = false)
175
+ private Instant createdAt;
176
+
177
+ @LastModifiedDate
178
+ private Instant updatedAt;
179
+
180
+ @Version
181
+ private Long version;
182
+
183
+ @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true)
184
+ @Builder.Default
185
+ private List<Order> orders = new ArrayList<>();
186
+
187
+ public void addOrder(Order order) {
188
+ orders.add(order);
189
+ order.setUser(this);
190
+ }
191
+
192
+ public void removeOrder(Order order) {
193
+ orders.remove(order);
194
+ order.setUser(null);
195
+ }
196
+
197
+ @PrePersist
198
+ protected void onCreate() {
199
+ createdAt = Instant.now();
200
+ }
201
+
202
+ @PreUpdate
203
+ protected void onUpdate() {
204
+ updatedAt = Instant.now();
205
+ }
206
+ }
207
+
208
+ public enum UserStatus {
209
+ PENDING, ACTIVE, SUSPENDED, DELETED
210
+ }
211
+ ```
212
+
213
+ UserRepository.java:
214
+ ```java
215
+ public interface UserRepository extends JpaRepository<User, Long> {
216
+ Optional<User> findByEmail(String email);
217
+
218
+ boolean existsByEmail(String email);
219
+
220
+ @Query("SELECT u FROM User u WHERE u.status = :status")
221
+ List<User> findByStatus(@Param("status") UserStatus status);
222
+
223
+ @Query("SELECT u FROM User u LEFT JOIN FETCH u.orders WHERE u.id = :id")
224
+ Optional<User> findByIdWithOrders(@Param("id") Long id);
225
+
226
+ Page<User> findByNameContainingIgnoreCaseOrEmailContainingIgnoreCase(
227
+ String name, String email, Pageable pageable);
228
+
229
+ @Modifying
230
+ @Query("UPDATE User u SET u.status = :status WHERE u.id = :id")
231
+ int updateStatus(@Param("id") Long id, @Param("status") UserStatus status);
232
+ }
233
+ ```
234
+
235
+ DTOs (Records):
236
+ ```java
237
+ public record UserDto(
238
+ Long id,
239
+ String name,
240
+ String email,
241
+ UserStatus status,
242
+ Instant createdAt,
243
+ Instant updatedAt
244
+ ) {
245
+ public static UserDto from(User user) {
246
+ return new UserDto(
247
+ user.getId(),
248
+ user.getName(),
249
+ user.getEmail(),
250
+ user.getStatus(),
251
+ user.getCreatedAt(),
252
+ user.getUpdatedAt()
253
+ );
254
+ }
255
+ }
256
+
257
+ public record CreateUserRequest(
258
+ @NotBlank(message = "Name is required")
259
+ @Size(min = 2, max = 100, message = "Name must be between 2 and 100 characters")
260
+ String name,
261
+
262
+ @NotBlank(message = "Email is required")
263
+ @Email(message = "Invalid email format")
264
+ String email,
265
+
266
+ @NotBlank(message = "Password is required")
267
+ @Size(min = 8, message = "Password must be at least 8 characters")
268
+ String password
269
+ ) {}
270
+
271
+ public record UpdateUserRequest(
272
+ @NotBlank(message = "Name is required")
273
+ @Size(min = 2, max = 100, message = "Name must be between 2 and 100 characters")
274
+ String name,
275
+
276
+ @Email(message = "Invalid email format")
277
+ String email
278
+ ) {}
279
+ ```
280
+
281
+ ---
282
+
283
+ ## Virtual Threads Examples
284
+
285
+ ### Async Service with Structured Concurrency
286
+
287
+ ```java
288
+ @Service
289
+ @RequiredArgsConstructor
290
+ @Slf4j
291
+ public class AsyncUserService {
292
+ private final UserRepository userRepository;
293
+ private final OrderRepository orderRepository;
294
+ private final NotificationService notificationService;
295
+ private final ExternalApiClient externalApiClient;
296
+
297
+ public UserWithDetails fetchUserDetails(Long userId) throws Exception {
298
+ log.info("Fetching user details for userId: {}", userId);
299
+
300
+ try (var scope = new StructuredTaskScope.ShutdownOnFailure()) {
301
+ Supplier<User> userTask = scope.fork(() ->
302
+ userRepository.findById(userId)
303
+ .orElseThrow(() -> new UserNotFoundException(userId)));
304
+
305
+ Supplier<List<Order>> ordersTask = scope.fork(() ->
306
+ orderRepository.findByUserId(userId));
307
+
308
+ Supplier<List<Notification>> notificationsTask = scope.fork(() ->
309
+ notificationService.getUnreadNotifications(userId));
310
+
311
+ Supplier<UserProfile> profileTask = scope.fork(() ->
312
+ externalApiClient.fetchUserProfile(userId));
313
+
314
+ scope.join().throwIfFailed();
315
+
316
+ return new UserWithDetails(
317
+ userTask.get(),
318
+ ordersTask.get(),
319
+ notificationsTask.get(),
320
+ profileTask.get()
321
+ );
322
+ }
323
+ }
324
+
325
+ public List<UserSummary> processUsersInParallel(List<Long> userIds) {
326
+ log.info("Processing {} users in parallel", userIds.size());
327
+
328
+ try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
329
+ var futures = userIds.stream()
330
+ .map(id -> executor.submit(() -> processUser(id)))
331
+ .toList();
332
+
333
+ return futures.stream()
334
+ .map(future -> {
335
+ try {
336
+ return future.get();
337
+ } catch (Exception e) {
338
+ log.error("Failed to process user", e);
339
+ return null;
340
+ }
341
+ })
342
+ .filter(Objects::nonNull)
343
+ .toList();
344
+ }
345
+ }
346
+
347
+ private UserSummary processUser(Long userId) {
348
+ var user = userRepository.findById(userId).orElseThrow();
349
+ var orderCount = orderRepository.countByUserId(userId);
350
+ return new UserSummary(user.getId(), user.getName(), orderCount);
351
+ }
352
+ }
353
+
354
+ public record UserWithDetails(
355
+ User user,
356
+ List<Order> orders,
357
+ List<Notification> notifications,
358
+ UserProfile profile
359
+ ) {}
360
+
361
+ public record UserSummary(Long id, String name, int orderCount) {}
362
+ ```
363
+
364
+ ### Virtual Thread Configuration
365
+
366
+ ```java
367
+ @Configuration
368
+ public class VirtualThreadConfig {
369
+
370
+ @Bean
371
+ public TomcatProtocolHandlerCustomizer<?> protocolHandlerVirtualThreadExecutorCustomizer() {
372
+ return protocolHandler -> {
373
+ protocolHandler.setExecutor(Executors.newVirtualThreadPerTaskExecutor());
374
+ };
375
+ }
376
+
377
+ @Bean
378
+ public AsyncTaskExecutor applicationTaskExecutor() {
379
+ return new TaskExecutorAdapter(Executors.newVirtualThreadPerTaskExecutor());
380
+ }
381
+ }
382
+ ```
383
+
384
+ ---
385
+
386
+ ## Testing Examples
387
+
388
+ ### Unit Tests with JUnit 5 and Mockito
389
+
390
+ ```java
391
+ @ExtendWith(MockitoExtension.class)
392
+ class UserServiceTest {
393
+ @Mock private UserRepository userRepository;
394
+ @Mock private PasswordEncoder passwordEncoder;
395
+ @Mock private ApplicationEventPublisher eventPublisher;
396
+ @InjectMocks private UserService userService;
397
+
398
+ @Nested
399
+ @DisplayName("Create User Tests")
400
+ class CreateUserTests {
401
+ @Test
402
+ @DisplayName("Should create user successfully when email is unique")
403
+ void shouldCreateUserSuccessfully() {
404
+ // Arrange
405
+ var request = new CreateUserRequest("John Doe", "john@example.com", "password123");
406
+ var savedUser = User.builder()
407
+ .id(1L)
408
+ .name("John Doe")
409
+ .email("john@example.com")
410
+ .status(UserStatus.PENDING)
411
+ .build();
412
+
413
+ when(userRepository.existsByEmail("john@example.com")).thenReturn(false);
414
+ when(passwordEncoder.encode("password123")).thenReturn("hashedPassword");
415
+ when(userRepository.save(any(User.class))).thenReturn(savedUser);
416
+
417
+ // Act
418
+ var result = userService.create(request);
419
+
420
+ // Assert
421
+ assertThat(result).isNotNull();
422
+ assertThat(result.getId()).isEqualTo(1L);
423
+ assertThat(result.getName()).isEqualTo("John Doe");
424
+ assertThat(result.getEmail()).isEqualTo("john@example.com");
425
+ assertThat(result.getStatus()).isEqualTo(UserStatus.PENDING);
426
+
427
+ verify(userRepository).save(argThat(user ->
428
+ user.getName().equals("John Doe") &&
429
+ user.getEmail().equals("john@example.com") &&
430
+ user.getPasswordHash().equals("hashedPassword")
431
+ ));
432
+ verify(eventPublisher).publishEvent(any(UserCreatedEvent.class));
433
+ }
434
+
435
+ @Test
436
+ @DisplayName("Should throw exception when email already exists")
437
+ void shouldThrowExceptionForDuplicateEmail() {
438
+ // Arrange
439
+ var request = new CreateUserRequest("John", "existing@example.com", "password");
440
+ when(userRepository.existsByEmail("existing@example.com")).thenReturn(true);
441
+
442
+ // Act & Assert
443
+ assertThatThrownBy(() -> userService.create(request))
444
+ .isInstanceOf(DuplicateEmailException.class)
445
+ .hasMessageContaining("existing@example.com");
446
+
447
+ verify(userRepository, never()).save(any());
448
+ verify(eventPublisher, never()).publishEvent(any());
449
+ }
450
+ }
451
+
452
+ @Nested
453
+ @DisplayName("Find User Tests")
454
+ class FindUserTests {
455
+ @Test
456
+ @DisplayName("Should return user when found")
457
+ void shouldReturnUserWhenFound() {
458
+ var user = User.builder().id(1L).name("John").build();
459
+ when(userRepository.findById(1L)).thenReturn(Optional.of(user));
460
+
461
+ var result = userService.findById(1L);
462
+
463
+ assertThat(result).isPresent();
464
+ assertThat(result.get().getName()).isEqualTo("John");
465
+ }
466
+
467
+ @Test
468
+ @DisplayName("Should return empty when user not found")
469
+ void shouldReturnEmptyWhenNotFound() {
470
+ when(userRepository.findById(999L)).thenReturn(Optional.empty());
471
+
472
+ var result = userService.findById(999L);
473
+
474
+ assertThat(result).isEmpty();
475
+ }
476
+ }
477
+
478
+ @ParameterizedTest
479
+ @ValueSource(strings = {"john", "doe", "example.com"})
480
+ @DisplayName("Should search users by query")
481
+ void shouldSearchUsersByQuery(String query) {
482
+ var pageable = PageRequest.of(0, 10);
483
+ var users = new PageImpl<>(List.of(
484
+ User.builder().id(1L).name("John Doe").email("john@example.com").build()
485
+ ));
486
+ when(userRepository.findByNameContainingIgnoreCaseOrEmailContainingIgnoreCase(
487
+ query, query, pageable)).thenReturn(users);
488
+
489
+ var result = userService.searchUsers(query, pageable);
490
+
491
+ assertThat(result.getContent()).hasSize(1);
492
+ }
493
+ }
494
+ ```
495
+
496
+ ### Integration Tests with TestContainers
497
+
498
+ ```java
499
+ @Testcontainers
500
+ @SpringBootTest
501
+ @AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
502
+ @Transactional
503
+ class UserRepositoryIntegrationTest {
504
+
505
+ @Container
506
+ static PostgreSQLContainer<?> postgres = new PostgreSQLContainer<>("postgres:16-alpine")
507
+ .withDatabaseName("testdb")
508
+ .withUsername("test")
509
+ .withPassword("test");
510
+
511
+ @DynamicPropertySource
512
+ static void configureProperties(DynamicPropertyRegistry registry) {
513
+ registry.add("spring.datasource.url", postgres::getJdbcUrl);
514
+ registry.add("spring.datasource.username", postgres::getUsername);
515
+ registry.add("spring.datasource.password", postgres::getPassword);
516
+ }
517
+
518
+ @Autowired
519
+ private UserRepository userRepository;
520
+
521
+ @Autowired
522
+ private TestEntityManager entityManager;
523
+
524
+ @BeforeEach
525
+ void setUp() {
526
+ userRepository.deleteAll();
527
+ }
528
+
529
+ @Test
530
+ @DisplayName("Should save and find user by email")
531
+ void shouldSaveAndFindUserByEmail() {
532
+ // Arrange
533
+ var user = User.builder()
534
+ .name("John Doe")
535
+ .email("john@example.com")
536
+ .passwordHash("hashedPassword")
537
+ .status(UserStatus.ACTIVE)
538
+ .build();
539
+
540
+ // Act
541
+ var saved = userRepository.save(user);
542
+ entityManager.flush();
543
+ entityManager.clear();
544
+
545
+ // Assert
546
+ var found = userRepository.findByEmail("john@example.com");
547
+ assertThat(found).isPresent();
548
+ assertThat(found.get().getName()).isEqualTo("John Doe");
549
+ assertThat(found.get().getId()).isEqualTo(saved.getId());
550
+ }
551
+
552
+ @Test
553
+ @DisplayName("Should check email existence correctly")
554
+ void shouldCheckEmailExistence() {
555
+ var user = User.builder()
556
+ .name("Jane")
557
+ .email("jane@example.com")
558
+ .passwordHash("hash")
559
+ .status(UserStatus.ACTIVE)
560
+ .build();
561
+ userRepository.save(user);
562
+
563
+ assertThat(userRepository.existsByEmail("jane@example.com")).isTrue();
564
+ assertThat(userRepository.existsByEmail("nonexistent@example.com")).isFalse();
565
+ }
566
+
567
+ @Test
568
+ @DisplayName("Should find users by status")
569
+ void shouldFindUsersByStatus() {
570
+ userRepository.saveAll(List.of(
571
+ User.builder().name("Active1").email("a1@test.com").passwordHash("h").status(UserStatus.ACTIVE).build(),
572
+ User.builder().name("Active2").email("a2@test.com").passwordHash("h").status(UserStatus.ACTIVE).build(),
573
+ User.builder().name("Pending").email("p@test.com").passwordHash("h").status(UserStatus.PENDING).build()
574
+ ));
575
+
576
+ var activeUsers = userRepository.findByStatus(UserStatus.ACTIVE);
577
+
578
+ assertThat(activeUsers).hasSize(2);
579
+ assertThat(activeUsers).extracting(User::getStatus)
580
+ .containsOnly(UserStatus.ACTIVE);
581
+ }
582
+
583
+ @Test
584
+ @DisplayName("Should search users with pagination")
585
+ void shouldSearchUsersWithPagination() {
586
+ userRepository.saveAll(List.of(
587
+ User.builder().name("John Smith").email("john@test.com").passwordHash("h").status(UserStatus.ACTIVE).build(),
588
+ User.builder().name("Jane Doe").email("jane@test.com").passwordHash("h").status(UserStatus.ACTIVE).build(),
589
+ User.builder().name("Bob Johnson").email("bob@test.com").passwordHash("h").status(UserStatus.ACTIVE).build()
590
+ ));
591
+
592
+ var pageable = PageRequest.of(0, 10);
593
+ var result = userRepository.findByNameContainingIgnoreCaseOrEmailContainingIgnoreCase(
594
+ "john", "john", pageable);
595
+
596
+ assertThat(result.getContent()).hasSize(2);
597
+ assertThat(result.getContent()).extracting(User::getName)
598
+ .containsExactlyInAnyOrder("John Smith", "Bob Johnson");
599
+ }
600
+ }
601
+ ```
602
+
603
+ ---
604
+
605
+ ## Spring Security Examples
606
+
607
+ ### JWT Authentication
608
+
609
+ ```java
610
+ @RestController
611
+ @RequestMapping("/api/auth")
612
+ @RequiredArgsConstructor
613
+ public class AuthController {
614
+ private final AuthenticationManager authenticationManager;
615
+ private final JwtTokenProvider tokenProvider;
616
+ private final UserService userService;
617
+
618
+ @PostMapping("/login")
619
+ public ResponseEntity<AuthResponse> login(@Valid @RequestBody LoginRequest request) {
620
+ var authentication = authenticationManager.authenticate(
621
+ new UsernamePasswordAuthenticationToken(request.email(), request.password())
622
+ );
623
+
624
+ SecurityContextHolder.getContext().setAuthentication(authentication);
625
+ var token = tokenProvider.generateToken(authentication);
626
+
627
+ return ResponseEntity.ok(new AuthResponse(token, "Bearer"));
628
+ }
629
+
630
+ @PostMapping("/register")
631
+ public ResponseEntity<UserDto> register(@Valid @RequestBody CreateUserRequest request) {
632
+ var user = userService.create(request);
633
+ return ResponseEntity.status(HttpStatus.CREATED).body(UserDto.from(user));
634
+ }
635
+
636
+ @GetMapping("/me")
637
+ public ResponseEntity<UserDto> getCurrentUser(@AuthenticationPrincipal UserDetails userDetails) {
638
+ return userService.findByEmail(userDetails.getUsername())
639
+ .map(UserDto::from)
640
+ .map(ResponseEntity::ok)
641
+ .orElse(ResponseEntity.notFound().build());
642
+ }
643
+ }
644
+
645
+ public record LoginRequest(
646
+ @NotBlank @Email String email,
647
+ @NotBlank String password
648
+ ) {}
649
+
650
+ public record AuthResponse(String token, String type) {}
651
+ ```
652
+
653
+ ### Security Configuration
654
+
655
+ ```java
656
+ @Configuration
657
+ @EnableWebSecurity
658
+ @EnableMethodSecurity
659
+ @RequiredArgsConstructor
660
+ public class SecurityConfig {
661
+ private final JwtTokenProvider tokenProvider;
662
+ private final UserDetailsService userDetailsService;
663
+
664
+ @Bean
665
+ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
666
+ return http
667
+ .csrf(AbstractHttpConfigurer::disable)
668
+ .cors(cors -> cors.configurationSource(corsConfigurationSource()))
669
+ .sessionManagement(session ->
670
+ session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
671
+ .authorizeHttpRequests(auth -> auth
672
+ .requestMatchers("/api/auth/**").permitAll()
673
+ .requestMatchers("/api/public/**").permitAll()
674
+ .requestMatchers("/actuator/health").permitAll()
675
+ .requestMatchers("/api/admin/**").hasRole("ADMIN")
676
+ .anyRequest().authenticated()
677
+ )
678
+ .addFilterBefore(jwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class)
679
+ .exceptionHandling(ex -> ex
680
+ .authenticationEntryPoint(new JwtAuthenticationEntryPoint())
681
+ .accessDeniedHandler(new JwtAccessDeniedHandler())
682
+ )
683
+ .build();
684
+ }
685
+
686
+ @Bean
687
+ public JwtAuthenticationFilter jwtAuthenticationFilter() {
688
+ return new JwtAuthenticationFilter(tokenProvider, userDetailsService);
689
+ }
690
+
691
+ @Bean
692
+ public PasswordEncoder passwordEncoder() {
693
+ return new BCryptPasswordEncoder(12);
694
+ }
695
+
696
+ @Bean
697
+ public AuthenticationManager authenticationManager(AuthenticationConfiguration config) throws Exception {
698
+ return config.getAuthenticationManager();
699
+ }
700
+
701
+ @Bean
702
+ public CorsConfigurationSource corsConfigurationSource() {
703
+ var configuration = new CorsConfiguration();
704
+ configuration.setAllowedOrigins(List.of("http://localhost:3000"));
705
+ configuration.setAllowedMethods(List.of("GET", "POST", "PUT", "DELETE", "OPTIONS"));
706
+ configuration.setAllowedHeaders(List.of("*"));
707
+ configuration.setAllowCredentials(true);
708
+
709
+ var source = new UrlBasedCorsConfigurationSource();
710
+ source.registerCorsConfiguration("/**", configuration);
711
+ return source;
712
+ }
713
+ }
714
+ ```
715
+
716
+ ---
717
+
718
+ ## Build Configuration Examples
719
+
720
+ ### Maven pom.xml
721
+
722
+ ```xml
723
+ <?xml version="1.0" encoding="UTF-8"?>
724
+ <project xmlns="http://maven.apache.org/POM/4.0.0"
725
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
726
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
727
+ https://maven.apache.org/xsd/maven-4.0.0.xsd">
728
+ <modelVersion>4.0.0</modelVersion>
729
+
730
+ <parent>
731
+ <groupId>org.springframework.boot</groupId>
732
+ <artifactId>spring-boot-starter-parent</artifactId>
733
+ <version>3.3.0</version>
734
+ </parent>
735
+
736
+ <groupId>com.example</groupId>
737
+ <artifactId>user-service</artifactId>
738
+ <version>1.0.0</version>
739
+
740
+ <properties>
741
+ <java.version>21</java.version>
742
+ <testcontainers.version>1.19.7</testcontainers.version>
743
+ </properties>
744
+
745
+ <dependencies>
746
+ <dependency>
747
+ <groupId>org.springframework.boot</groupId>
748
+ <artifactId>spring-boot-starter-web</artifactId>
749
+ </dependency>
750
+ <dependency>
751
+ <groupId>org.springframework.boot</groupId>
752
+ <artifactId>spring-boot-starter-data-jpa</artifactId>
753
+ </dependency>
754
+ <dependency>
755
+ <groupId>org.springframework.boot</groupId>
756
+ <artifactId>spring-boot-starter-security</artifactId>
757
+ </dependency>
758
+ <dependency>
759
+ <groupId>org.springframework.boot</groupId>
760
+ <artifactId>spring-boot-starter-validation</artifactId>
761
+ </dependency>
762
+ <dependency>
763
+ <groupId>org.springframework.boot</groupId>
764
+ <artifactId>spring-boot-starter-actuator</artifactId>
765
+ </dependency>
766
+
767
+ <dependency>
768
+ <groupId>org.postgresql</groupId>
769
+ <artifactId>postgresql</artifactId>
770
+ <scope>runtime</scope>
771
+ </dependency>
772
+ <dependency>
773
+ <groupId>org.projectlombok</groupId>
774
+ <artifactId>lombok</artifactId>
775
+ <optional>true</optional>
776
+ </dependency>
777
+ <dependency>
778
+ <groupId>io.jsonwebtoken</groupId>
779
+ <artifactId>jjwt-api</artifactId>
780
+ <version>0.12.5</version>
781
+ </dependency>
782
+
783
+ <dependency>
784
+ <groupId>org.springframework.boot</groupId>
785
+ <artifactId>spring-boot-starter-test</artifactId>
786
+ <scope>test</scope>
787
+ </dependency>
788
+ <dependency>
789
+ <groupId>org.testcontainers</groupId>
790
+ <artifactId>postgresql</artifactId>
791
+ <version>${testcontainers.version}</version>
792
+ <scope>test</scope>
793
+ </dependency>
794
+ </dependencies>
795
+
796
+ <build>
797
+ <plugins>
798
+ <plugin>
799
+ <groupId>org.springframework.boot</groupId>
800
+ <artifactId>spring-boot-maven-plugin</artifactId>
801
+ </plugin>
802
+ </plugins>
803
+ </build>
804
+ </project>
805
+ ```
806
+
807
+ ### Gradle build.gradle.kts
808
+
809
+ ```kotlin
810
+ plugins {
811
+ java
812
+ id("org.springframework.boot") version "3.3.0"
813
+ id("io.spring.dependency-management") version "1.1.4"
814
+ }
815
+
816
+ group = "com.example"
817
+ version = "1.0.0"
818
+
819
+ java {
820
+ toolchain {
821
+ languageVersion = JavaLanguageVersion.of(21)
822
+ }
823
+ }
824
+
825
+ configurations {
826
+ compileOnly {
827
+ extendsFrom(configurations.annotationProcessor.get())
828
+ }
829
+ }
830
+
831
+ repositories {
832
+ mavenCentral()
833
+ }
834
+
835
+ dependencies {
836
+ implementation("org.springframework.boot:spring-boot-starter-web")
837
+ implementation("org.springframework.boot:spring-boot-starter-data-jpa")
838
+ implementation("org.springframework.boot:spring-boot-starter-security")
839
+ implementation("org.springframework.boot:spring-boot-starter-validation")
840
+ implementation("org.springframework.boot:spring-boot-starter-actuator")
841
+ implementation("io.jsonwebtoken:jjwt-api:0.12.5")
842
+
843
+ runtimeOnly("org.postgresql:postgresql")
844
+ runtimeOnly("io.jsonwebtoken:jjwt-impl:0.12.5")
845
+ runtimeOnly("io.jsonwebtoken:jjwt-jackson:0.12.5")
846
+
847
+ compileOnly("org.projectlombok:lombok")
848
+ annotationProcessor("org.projectlombok:lombok")
849
+
850
+ testImplementation("org.springframework.boot:spring-boot-starter-test")
851
+ testImplementation("org.springframework.security:spring-security-test")
852
+ testImplementation("org.testcontainers:postgresql")
853
+ testImplementation("org.testcontainers:junit-jupiter")
854
+ }
855
+
856
+ tasks.withType<Test> {
857
+ useJUnitPlatform()
858
+ }
859
+ ```
860
+
861
+ ---
862
+
863
+ Last Updated: 2025-12-07
864
+ Version: 1.0.0