moai-adk 0.8.0__py3-none-any.whl → 0.34.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 (654) hide show
  1. moai_adk/__init__.py +2 -6
  2. moai_adk/__main__.py +136 -21
  3. moai_adk/cli/__init__.py +6 -2
  4. moai_adk/cli/commands/__init__.py +1 -4
  5. moai_adk/cli/commands/analyze.py +116 -0
  6. moai_adk/cli/commands/doctor.py +17 -5
  7. moai_adk/cli/commands/init.py +118 -48
  8. moai_adk/cli/commands/language.py +248 -0
  9. moai_adk/cli/commands/status.py +8 -13
  10. moai_adk/cli/commands/update.py +1978 -149
  11. moai_adk/cli/main.py +3 -2
  12. moai_adk/cli/prompts/init_prompts.py +144 -91
  13. moai_adk/cli/spec_status.py +263 -0
  14. moai_adk/cli/ui/__init__.py +44 -0
  15. moai_adk/cli/ui/progress.py +422 -0
  16. moai_adk/cli/ui/prompts.py +389 -0
  17. moai_adk/cli/ui/theme.py +129 -0
  18. moai_adk/cli/worktree/__init__.py +27 -0
  19. moai_adk/cli/worktree/__main__.py +31 -0
  20. moai_adk/cli/worktree/cli.py +683 -0
  21. moai_adk/cli/worktree/exceptions.py +89 -0
  22. moai_adk/cli/worktree/manager.py +493 -0
  23. moai_adk/cli/worktree/models.py +65 -0
  24. moai_adk/cli/worktree/registry.py +422 -0
  25. moai_adk/core/PHASE2_OPTIMIZATIONS.md +467 -0
  26. moai_adk/core/__init__.py +0 -1
  27. moai_adk/core/analysis/__init__.py +9 -0
  28. moai_adk/core/analysis/session_analyzer.py +400 -0
  29. moai_adk/core/claude_integration.py +393 -0
  30. moai_adk/core/command_helpers.py +270 -0
  31. moai_adk/core/comprehensive_monitoring_system.py +1183 -0
  32. moai_adk/core/config/__init__.py +6 -0
  33. moai_adk/core/config/auto_spec_config.py +340 -0
  34. moai_adk/core/config/migration.py +148 -17
  35. moai_adk/core/config/unified.py +436 -0
  36. moai_adk/core/context_manager.py +273 -0
  37. moai_adk/core/diagnostics/slash_commands.py +0 -1
  38. moai_adk/core/enterprise_features.py +1404 -0
  39. moai_adk/core/error_recovery_system.py +1902 -0
  40. moai_adk/core/event_driven_hook_system.py +1371 -0
  41. moai_adk/core/git/__init__.py +8 -1
  42. moai_adk/core/git/branch.py +0 -1
  43. moai_adk/core/git/branch_manager.py +2 -10
  44. moai_adk/core/git/checkpoint.py +1 -7
  45. moai_adk/core/git/commit.py +0 -1
  46. moai_adk/core/git/conflict_detector.py +413 -0
  47. moai_adk/core/git/event_detector.py +3 -5
  48. moai_adk/core/git/manager.py +91 -2
  49. moai_adk/core/hooks/post_tool_auto_spec_completion.py +901 -0
  50. moai_adk/core/input_validation_middleware.py +1006 -0
  51. moai_adk/core/integration/__init__.py +22 -0
  52. moai_adk/core/integration/engine.py +157 -0
  53. moai_adk/core/integration/integration_tester.py +226 -0
  54. moai_adk/core/integration/models.py +88 -0
  55. moai_adk/core/integration/utils.py +211 -0
  56. moai_adk/core/issue_creator.py +305 -0
  57. moai_adk/core/jit_context_loader.py +956 -0
  58. moai_adk/core/jit_enhanced_hook_manager.py +1987 -0
  59. moai_adk/core/language_config.py +202 -0
  60. moai_adk/core/language_config_resolver.py +572 -0
  61. moai_adk/core/language_validator.py +543 -0
  62. moai_adk/core/mcp/setup.py +116 -0
  63. moai_adk/core/merge/__init__.py +9 -0
  64. moai_adk/core/merge/analyzer.py +481 -0
  65. moai_adk/core/migration/__init__.py +18 -0
  66. moai_adk/core/migration/alfred_to_moai_migrator.py +383 -0
  67. moai_adk/core/migration/backup_manager.py +277 -0
  68. moai_adk/core/migration/custom_element_scanner.py +358 -0
  69. moai_adk/core/migration/file_migrator.py +209 -0
  70. moai_adk/core/migration/interactive_checkbox_ui.py +488 -0
  71. moai_adk/core/migration/selective_restorer.py +470 -0
  72. moai_adk/core/migration/template_utils.py +74 -0
  73. moai_adk/core/migration/user_selection_ui.py +338 -0
  74. moai_adk/core/migration/version_detector.py +139 -0
  75. moai_adk/core/migration/version_migrator.py +228 -0
  76. moai_adk/core/performance/__init__.py +6 -0
  77. moai_adk/core/performance/cache_system.py +316 -0
  78. moai_adk/core/performance/parallel_processor.py +116 -0
  79. moai_adk/core/phase_optimized_hook_scheduler.py +879 -0
  80. moai_adk/core/project/__init__.py +0 -1
  81. moai_adk/core/project/backup_utils.py +2 -7
  82. moai_adk/core/project/checker.py +2 -4
  83. moai_adk/core/project/detector.py +189 -22
  84. moai_adk/core/project/initializer.py +218 -27
  85. moai_adk/core/project/phase_executor.py +416 -44
  86. moai_adk/core/project/validator.py +7 -32
  87. moai_adk/core/quality/__init__.py +1 -1
  88. moai_adk/core/quality/trust_checker.py +37 -101
  89. moai_adk/core/quality/validators/__init__.py +1 -1
  90. moai_adk/core/quality/validators/base_validator.py +1 -1
  91. moai_adk/core/realtime_monitoring_dashboard.py +1724 -0
  92. moai_adk/core/robust_json_parser.py +611 -0
  93. moai_adk/core/rollback_manager.py +918 -0
  94. moai_adk/core/session_manager.py +651 -0
  95. moai_adk/core/skill_loading_system.py +579 -0
  96. moai_adk/core/spec/confidence_scoring.py +680 -0
  97. moai_adk/core/spec/ears_template_engine.py +1247 -0
  98. moai_adk/core/spec/quality_validator.py +687 -0
  99. moai_adk/core/spec_status_manager.py +478 -0
  100. moai_adk/core/template/__init__.py +0 -1
  101. moai_adk/core/template/backup.py +82 -17
  102. moai_adk/core/template/config.py +112 -40
  103. moai_adk/core/template/languages.py +0 -1
  104. moai_adk/core/template/merger.py +75 -26
  105. moai_adk/core/template/processor.py +750 -72
  106. moai_adk/core/template_engine.py +310 -0
  107. moai_adk/core/template_variable_synchronizer.py +417 -0
  108. moai_adk/core/unified_permission_manager.py +745 -0
  109. moai_adk/core/user_behavior_analytics.py +851 -0
  110. moai_adk/core/version_sync.py +429 -0
  111. moai_adk/foundation/__init__.py +56 -0
  112. moai_adk/foundation/backend.py +1027 -0
  113. moai_adk/foundation/database.py +1115 -0
  114. moai_adk/foundation/devops.py +1585 -0
  115. moai_adk/foundation/ears.py +431 -0
  116. moai_adk/foundation/frontend.py +870 -0
  117. moai_adk/foundation/git/commit_templates.py +557 -0
  118. moai_adk/foundation/git.py +376 -0
  119. moai_adk/foundation/langs.py +484 -0
  120. moai_adk/foundation/ml_ops.py +1162 -0
  121. moai_adk/foundation/testing.py +1524 -0
  122. moai_adk/foundation/trust/trust_principles.py +676 -0
  123. moai_adk/foundation/trust/validation_checklist.py +1573 -0
  124. moai_adk/project/__init__.py +0 -0
  125. moai_adk/project/configuration.py +1084 -0
  126. moai_adk/project/documentation.py +566 -0
  127. moai_adk/project/schema.py +447 -0
  128. moai_adk/statusline/__init__.py +38 -0
  129. moai_adk/statusline/alfred_detector.py +105 -0
  130. moai_adk/statusline/config.py +376 -0
  131. moai_adk/statusline/enhanced_output_style_detector.py +372 -0
  132. moai_adk/statusline/git_collector.py +190 -0
  133. moai_adk/statusline/main.py +322 -0
  134. moai_adk/statusline/metrics_tracker.py +78 -0
  135. moai_adk/statusline/renderer.py +343 -0
  136. moai_adk/statusline/update_checker.py +129 -0
  137. moai_adk/statusline/version_reader.py +741 -0
  138. moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +670 -0
  139. moai_adk/templates/.claude/agents/moai/builder-agent.md +474 -0
  140. moai_adk/templates/.claude/agents/moai/builder-command.md +1172 -0
  141. moai_adk/templates/.claude/agents/moai/builder-skill.md +666 -0
  142. moai_adk/templates/.claude/agents/moai/expert-backend.md +899 -0
  143. moai_adk/templates/.claude/agents/moai/expert-database.md +777 -0
  144. moai_adk/templates/.claude/agents/moai/expert-debug.md +401 -0
  145. moai_adk/templates/.claude/agents/moai/expert-devops.md +720 -0
  146. moai_adk/templates/.claude/agents/moai/expert-frontend.md +734 -0
  147. moai_adk/templates/.claude/agents/moai/expert-performance.md +657 -0
  148. moai_adk/templates/.claude/agents/moai/expert-security.md +509 -0
  149. moai_adk/templates/.claude/agents/moai/expert-testing.md +733 -0
  150. moai_adk/templates/.claude/agents/moai/expert-uiux.md +1041 -0
  151. moai_adk/templates/.claude/agents/moai/manager-claude-code.md +432 -0
  152. moai_adk/templates/.claude/agents/moai/manager-docs.md +573 -0
  153. moai_adk/templates/.claude/agents/moai/manager-git.md +1020 -0
  154. moai_adk/templates/.claude/agents/moai/manager-project.md +891 -0
  155. moai_adk/templates/.claude/agents/moai/manager-quality.md +624 -0
  156. moai_adk/templates/.claude/agents/moai/manager-spec.md +809 -0
  157. moai_adk/templates/.claude/agents/moai/manager-strategy.md +780 -0
  158. moai_adk/templates/.claude/agents/moai/manager-tdd.md +784 -0
  159. moai_adk/templates/.claude/agents/moai/mcp-context7.md +458 -0
  160. moai_adk/templates/.claude/agents/moai/mcp-figma.md +1607 -0
  161. moai_adk/templates/.claude/agents/moai/mcp-notion.md +789 -0
  162. moai_adk/templates/.claude/agents/moai/mcp-playwright.md +469 -0
  163. moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +1032 -0
  164. moai_adk/templates/.claude/commands/moai/0-project.md +1384 -0
  165. moai_adk/templates/.claude/commands/moai/1-plan.md +1427 -0
  166. moai_adk/templates/.claude/commands/moai/2-run.md +943 -0
  167. moai_adk/templates/.claude/commands/moai/3-sync.md +1324 -0
  168. moai_adk/templates/.claude/commands/moai/9-feedback.md +314 -0
  169. moai_adk/templates/.claude/hooks/__init__.py +8 -0
  170. moai_adk/templates/.claude/hooks/moai/__init__.py +8 -0
  171. moai_adk/templates/.claude/hooks/moai/lib/__init__.py +85 -0
  172. moai_adk/templates/.claude/hooks/{alfred/core → moai/lib}/checkpoint.py +10 -37
  173. moai_adk/templates/.claude/hooks/moai/lib/common.py +131 -0
  174. moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +446 -0
  175. moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +639 -0
  176. moai_adk/templates/.claude/hooks/moai/lib/example_config.json +104 -0
  177. moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +590 -0
  178. moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +317 -0
  179. moai_adk/templates/.claude/hooks/moai/lib/models.py +102 -0
  180. moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +28 -0
  181. moai_adk/templates/.claude/hooks/moai/lib/project.py +768 -0
  182. moai_adk/templates/.claude/hooks/moai/lib/test_hooks_improvements.py +443 -0
  183. moai_adk/templates/.claude/hooks/moai/lib/timeout.py +160 -0
  184. moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +530 -0
  185. moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +862 -0
  186. moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +1075 -0
  187. moai_adk/templates/.claude/output-styles/moai/r2d2.md +560 -0
  188. moai_adk/templates/.claude/output-styles/moai/yoda.md +359 -0
  189. moai_adk/templates/.claude/settings.json +78 -50
  190. moai_adk/templates/.claude/skills/moai-ai-nano-banana/SKILL.md +438 -0
  191. moai_adk/templates/.claude/skills/moai-ai-nano-banana/examples.md +431 -0
  192. moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +249 -0
  193. moai_adk/templates/.claude/skills/moai-docs-generation/examples.md +406 -0
  194. moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +44 -0
  195. moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +130 -0
  196. moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +152 -0
  197. moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +178 -0
  198. moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +147 -0
  199. moai_adk/templates/.claude/skills/moai-docs-generation/reference.md +328 -0
  200. moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +313 -283
  201. moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +610 -1525
  202. moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +423 -619
  203. moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +295 -95
  204. moai_adk/templates/.claude/skills/moai-domain-database/examples.md +817 -16
  205. moai_adk/templates/.claude/skills/moai-domain-database/modules/README.md +53 -0
  206. moai_adk/templates/.claude/skills/moai-domain-database/modules/mongodb.md +231 -0
  207. moai_adk/templates/.claude/skills/moai-domain-database/modules/postgresql.md +169 -0
  208. moai_adk/templates/.claude/skills/moai-domain-database/modules/redis.md +262 -0
  209. moai_adk/templates/.claude/skills/moai-domain-database/reference.md +532 -17
  210. moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +470 -97
  211. moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +955 -16
  212. moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +651 -18
  213. moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +455 -0
  214. moai_adk/templates/.claude/skills/moai-domain-uiux/examples.md +560 -0
  215. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/accessibility-wcag.md +260 -0
  216. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/component-architecture.md +228 -0
  217. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/design-system-tokens.md +405 -0
  218. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/icon-libraries.md +401 -0
  219. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/theming-system.md +373 -0
  220. moai_adk/templates/.claude/skills/moai-domain-uiux/reference.md +243 -0
  221. moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +492 -0
  222. moai_adk/templates/.claude/skills/moai-formats-data/examples.md +804 -0
  223. moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +98 -0
  224. moai_adk/templates/.claude/skills/moai-formats-data/modules/SKILL-MODULARIZATION-TEMPLATE.md +278 -0
  225. moai_adk/templates/.claude/skills/moai-formats-data/modules/caching-performance.md +459 -0
  226. moai_adk/templates/.claude/skills/moai-formats-data/modules/data-validation.md +485 -0
  227. moai_adk/templates/.claude/skills/moai-formats-data/modules/json-optimization.md +374 -0
  228. moai_adk/templates/.claude/skills/moai-formats-data/modules/toon-encoding.md +308 -0
  229. moai_adk/templates/.claude/skills/moai-formats-data/reference.md +585 -0
  230. moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +202 -0
  231. moai_adk/templates/.claude/skills/moai-foundation-claude/examples.md +732 -0
  232. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/best-practices-checklist.md +616 -0
  233. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +729 -0
  234. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +560 -0
  235. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-iam-official.md +635 -0
  236. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-memory-official.md +543 -0
  237. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-settings-official.md +663 -0
  238. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +113 -0
  239. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +238 -0
  240. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/complete-configuration-guide.md +175 -0
  241. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-examples.md +1674 -0
  242. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-formatting-guide.md +729 -0
  243. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-examples.md +1513 -0
  244. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-formatting-guide.md +1086 -0
  245. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-integration-patterns.md +1100 -0
  246. moai_adk/templates/.claude/skills/moai-foundation-claude/reference.md +209 -0
  247. moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +441 -0
  248. moai_adk/templates/.claude/skills/moai-foundation-context/examples.md +1048 -0
  249. moai_adk/templates/.claude/skills/moai-foundation-context/reference.md +246 -0
  250. moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +420 -0
  251. moai_adk/templates/.claude/skills/moai-foundation-core/examples.md +358 -0
  252. moai_adk/templates/.claude/skills/moai-foundation-core/modules/README.md +296 -0
  253. moai_adk/templates/.claude/skills/moai-foundation-core/modules/agents-reference.md +359 -0
  254. moai_adk/templates/.claude/skills/moai-foundation-core/modules/commands-reference.md +432 -0
  255. moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +757 -0
  256. moai_adk/templates/.claude/skills/moai-foundation-core/modules/execution-rules.md +687 -0
  257. moai_adk/templates/.claude/skills/moai-foundation-core/modules/modular-system.md +665 -0
  258. moai_adk/templates/.claude/skills/moai-foundation-core/modules/progressive-disclosure.md +649 -0
  259. moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +864 -0
  260. moai_adk/templates/.claude/skills/moai-foundation-core/modules/token-optimization.md +708 -0
  261. moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +981 -0
  262. moai_adk/templates/.claude/skills/moai-foundation-core/reference.md +478 -0
  263. moai_adk/templates/.claude/skills/moai-foundation-philosopher/SKILL.md +315 -0
  264. moai_adk/templates/.claude/skills/moai-foundation-philosopher/examples.md +228 -0
  265. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/assumption-matrix.md +80 -0
  266. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/cognitive-bias.md +199 -0
  267. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/first-principles.md +140 -0
  268. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/trade-off-analysis.md +154 -0
  269. moai_adk/templates/.claude/skills/moai-foundation-philosopher/reference.md +157 -0
  270. moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +364 -0
  271. moai_adk/templates/.claude/skills/moai-foundation-quality/examples.md +1232 -0
  272. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/best-practices.md +261 -0
  273. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/integration-patterns.md +194 -0
  274. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/proactive-analysis.md +229 -0
  275. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/trust5-validation.md +169 -0
  276. moai_adk/templates/.claude/skills/moai-foundation-quality/reference.md +1266 -0
  277. moai_adk/templates/.claude/skills/moai-foundation-quality/scripts/quality-gate.sh +668 -0
  278. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/github-actions-quality.yml +481 -0
  279. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/quality-config.yaml +519 -0
  280. moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +618 -93
  281. moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +446 -91
  282. moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +612 -0
  283. moai_adk/templates/.claude/skills/moai-lang-flutter/SKILL.md +477 -0
  284. moai_adk/templates/.claude/skills/moai-lang-flutter/examples.md +1090 -0
  285. moai_adk/templates/.claude/skills/moai-lang-flutter/reference.md +686 -0
  286. moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +346 -94
  287. moai_adk/templates/.claude/skills/moai-lang-go/examples.md +906 -16
  288. moai_adk/templates/.claude/skills/moai-lang-go/reference.md +721 -15
  289. moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +352 -91
  290. moai_adk/templates/.claude/skills/moai-lang-java/examples.md +851 -16
  291. moai_adk/templates/.claude/skills/moai-lang-java/reference.md +278 -18
  292. moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +344 -86
  293. moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +993 -16
  294. moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +549 -18
  295. moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +617 -96
  296. moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +364 -314
  297. moai_adk/templates/.claude/skills/moai-lang-python/examples.md +849 -496
  298. moai_adk/templates/.claude/skills/moai-lang-python/reference.md +731 -243
  299. moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +545 -89
  300. moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +650 -87
  301. moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +341 -93
  302. moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +646 -16
  303. moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +491 -18
  304. moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +463 -89
  305. moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +620 -16
  306. moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +410 -17
  307. moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +486 -112
  308. moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +905 -16
  309. moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +659 -17
  310. moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +333 -92
  311. moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +1076 -16
  312. moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +718 -21
  313. moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +300 -0
  314. moai_adk/templates/.claude/skills/moai-library-mermaid/advanced-patterns.md +465 -0
  315. moai_adk/templates/.claude/skills/moai-library-mermaid/examples.md +270 -0
  316. moai_adk/templates/.claude/skills/moai-library-mermaid/optimization.md +440 -0
  317. moai_adk/templates/.claude/skills/moai-library-mermaid/reference.md +228 -0
  318. moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +319 -0
  319. moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +336 -0
  320. moai_adk/templates/.claude/skills/moai-library-nextra/examples.md +592 -0
  321. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-deployment-patterns.md +182 -0
  322. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +17 -0
  323. moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +57 -0
  324. moai_adk/templates/.claude/skills/moai-library-nextra/modules/content-architecture-optimization.md +162 -0
  325. moai_adk/templates/.claude/skills/moai-library-nextra/modules/deployment.md +52 -0
  326. moai_adk/templates/.claude/skills/moai-library-nextra/modules/framework-core-configuration.md +186 -0
  327. moai_adk/templates/.claude/skills/moai-library-nextra/modules/i18n-setup.md +55 -0
  328. moai_adk/templates/.claude/skills/moai-library-nextra/modules/mdx-components.md +52 -0
  329. moai_adk/templates/.claude/skills/moai-library-nextra/optimization.md +303 -0
  330. moai_adk/templates/.claude/skills/moai-library-nextra/reference.md +379 -0
  331. moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +372 -0
  332. moai_adk/templates/.claude/skills/moai-library-shadcn/examples.md +575 -0
  333. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/advanced-patterns.md +394 -0
  334. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/optimization.md +278 -0
  335. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-components.md +457 -0
  336. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-theming.md +373 -0
  337. moai_adk/templates/.claude/skills/moai-library-shadcn/reference.md +74 -0
  338. moai_adk/templates/.claude/skills/moai-mcp-figma/SKILL.md +402 -0
  339. moai_adk/templates/.claude/skills/moai-mcp-figma/advanced-patterns.md +607 -0
  340. moai_adk/templates/.claude/skills/moai-mcp-notion/SKILL.md +300 -0
  341. moai_adk/templates/.claude/skills/moai-mcp-notion/advanced-patterns.md +537 -0
  342. moai_adk/templates/.claude/skills/moai-platform-auth0/SKILL.md +290 -0
  343. moai_adk/templates/.claude/skills/moai-platform-clerk/SKILL.md +390 -0
  344. moai_adk/templates/.claude/skills/moai-platform-convex/SKILL.md +398 -0
  345. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/SKILL.md +379 -0
  346. moai_adk/templates/.claude/skills/moai-platform-firestore/SKILL.md +358 -0
  347. moai_adk/templates/.claude/skills/moai-platform-neon/SKILL.md +467 -0
  348. moai_adk/templates/.claude/skills/moai-platform-railway/SKILL.md +377 -0
  349. moai_adk/templates/.claude/skills/moai-platform-supabase/SKILL.md +466 -0
  350. moai_adk/templates/.claude/skills/moai-platform-vercel/SKILL.md +482 -0
  351. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +449 -0
  352. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/advanced-patterns.md +379 -0
  353. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/examples.md +544 -0
  354. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/optimization.md +286 -0
  355. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/reference.md +307 -0
  356. moai_adk/templates/.claude/skills/moai-workflow-project/README.md +190 -0
  357. moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +390 -0
  358. moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +520 -0
  359. moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +574 -0
  360. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +317 -0
  361. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +663 -0
  362. moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +190 -0
  363. moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +175 -0
  364. moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +196 -0
  365. moai_adk/templates/.claude/skills/moai-workflow-project/examples.md +547 -0
  366. moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +17 -0
  367. moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +158 -0
  368. moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +340 -0
  369. moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +713 -0
  370. moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +538 -0
  371. moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +1336 -0
  372. moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +730 -0
  373. moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +608 -0
  374. moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +1005 -0
  375. moai_adk/templates/.claude/skills/moai-workflow-project/reference.md +275 -0
  376. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/config-schema.json +316 -0
  377. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +1462 -0
  378. moai_adk/templates/.claude/skills/moai-workflow-project/templates/config-template.json +71 -0
  379. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/product-template.md +44 -0
  380. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/structure-template.md +48 -0
  381. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/tech-template.md +92 -0
  382. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/config-manager-setup.json +109 -0
  383. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/language-initializer.json +228 -0
  384. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/menu-project-config.json +130 -0
  385. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/project-batch-questions.json +97 -0
  386. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/spec-workflow-setup.json +150 -0
  387. moai_adk/templates/.claude/skills/moai-workflow-project/test_integration_simple.py +436 -0
  388. moai_adk/templates/.claude/skills/moai-workflow-spec/SKILL.md +534 -0
  389. moai_adk/templates/.claude/skills/moai-workflow-spec/examples.md +900 -0
  390. moai_adk/templates/.claude/skills/moai-workflow-spec/reference.md +704 -0
  391. moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +377 -0
  392. moai_adk/templates/.claude/skills/moai-workflow-templates/examples.md +552 -0
  393. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/code-templates.md +124 -0
  394. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/feedback-templates.md +100 -0
  395. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/template-optimizer.md +138 -0
  396. moai_adk/templates/.claude/skills/moai-workflow-templates/reference.md +346 -0
  397. moai_adk/templates/.claude/skills/moai-workflow-testing/LICENSE.txt +202 -0
  398. moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +456 -0
  399. moai_adk/templates/.claude/skills/moai-workflow-testing/advanced-patterns.md +576 -0
  400. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/ai-powered-testing.py +294 -0
  401. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/console_logging.py +35 -0
  402. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/element_discovery.py +40 -0
  403. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/static_html_automation.py +34 -0
  404. moai_adk/templates/.claude/skills/moai-workflow-testing/examples.md +672 -0
  405. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +220 -0
  406. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +845 -0
  407. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +1416 -0
  408. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +1234 -0
  409. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +1243 -0
  410. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +1260 -0
  411. moai_adk/templates/.claude/skills/moai-workflow-testing/optimization.md +505 -0
  412. moai_adk/templates/.claude/skills/moai-workflow-testing/reference/playwright-best-practices.md +57 -0
  413. moai_adk/templates/.claude/skills/moai-workflow-testing/reference.md +440 -0
  414. moai_adk/templates/.claude/skills/moai-workflow-testing/scripts/with_server.py +218 -0
  415. moai_adk/templates/.claude/skills/moai-workflow-testing/templates/alfred-integration.md +376 -0
  416. moai_adk/templates/.claude/skills/moai-workflow-testing/workflows/enterprise-testing-workflow.py +571 -0
  417. moai_adk/templates/.claude/skills/moai-worktree/SKILL.md +411 -0
  418. moai_adk/templates/.claude/skills/moai-worktree/examples.md +606 -0
  419. moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +982 -0
  420. moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +778 -0
  421. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +646 -0
  422. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +782 -0
  423. moai_adk/templates/.claude/skills/moai-worktree/reference.md +357 -0
  424. moai_adk/templates/.git-hooks/pre-commit +128 -0
  425. moai_adk/templates/.git-hooks/pre-push +365 -0
  426. moai_adk/templates/.github/workflows/ci-universal.yml +513 -0
  427. moai_adk/templates/.github/workflows/security-secrets-check.yml +179 -0
  428. moai_adk/templates/.github/workflows/spec-issue-sync.yml +206 -36
  429. moai_adk/templates/.gitignore +194 -13
  430. moai_adk/templates/.mcp.json +31 -0
  431. moai_adk/templates/.moai/config/config.yaml +58 -0
  432. moai_adk/templates/.moai/config/questions/_schema.yaml +151 -0
  433. moai_adk/templates/.moai/config/questions/tab0-init.yaml +251 -0
  434. moai_adk/templates/.moai/config/questions/tab1-user.yaml +108 -0
  435. moai_adk/templates/.moai/config/questions/tab2-project.yaml +81 -0
  436. moai_adk/templates/.moai/config/questions/tab3-git.yaml +634 -0
  437. moai_adk/templates/.moai/config/questions/tab4-quality.yaml +170 -0
  438. moai_adk/templates/.moai/config/questions/tab5-system.yaml +87 -0
  439. moai_adk/templates/.moai/config/sections/git-strategy.yaml +116 -0
  440. moai_adk/templates/.moai/config/sections/language.yaml +11 -0
  441. moai_adk/templates/.moai/config/sections/project.yaml +13 -0
  442. moai_adk/templates/.moai/config/sections/quality.yaml +17 -0
  443. moai_adk/templates/.moai/config/sections/system.yaml +14 -0
  444. moai_adk/templates/.moai/config/sections/user.yaml +5 -0
  445. moai_adk/templates/.moai/config/statusline-config.yaml +92 -0
  446. moai_adk/templates/.moai/scripts/setup-glm.py +136 -0
  447. moai_adk/templates/CLAUDE.md +571 -244
  448. moai_adk/utils/__init__.py +24 -2
  449. moai_adk/utils/banner.py +9 -13
  450. moai_adk/utils/common.py +294 -0
  451. moai_adk/utils/link_validator.py +241 -0
  452. moai_adk/utils/logger.py +4 -9
  453. moai_adk/utils/safe_file_reader.py +206 -0
  454. moai_adk/utils/timeout.py +160 -0
  455. moai_adk/utils/toon_utils.py +256 -0
  456. moai_adk/version.py +22 -0
  457. moai_adk-0.34.0.dist-info/METADATA +2999 -0
  458. moai_adk-0.34.0.dist-info/RECORD +463 -0
  459. {moai_adk-0.8.0.dist-info → moai_adk-0.34.0.dist-info}/WHEEL +1 -1
  460. {moai_adk-0.8.0.dist-info → moai_adk-0.34.0.dist-info}/entry_points.txt +1 -0
  461. moai_adk/cli/commands/backup.py +0 -80
  462. moai_adk/templates/.claude/agents/alfred/cc-manager.md +0 -293
  463. moai_adk/templates/.claude/agents/alfred/debug-helper.md +0 -196
  464. moai_adk/templates/.claude/agents/alfred/doc-syncer.md +0 -207
  465. moai_adk/templates/.claude/agents/alfred/git-manager.md +0 -375
  466. moai_adk/templates/.claude/agents/alfred/implementation-planner.md +0 -343
  467. moai_adk/templates/.claude/agents/alfred/project-manager.md +0 -246
  468. moai_adk/templates/.claude/agents/alfred/quality-gate.md +0 -320
  469. moai_adk/templates/.claude/agents/alfred/skill-factory.md +0 -837
  470. moai_adk/templates/.claude/agents/alfred/spec-builder.md +0 -272
  471. moai_adk/templates/.claude/agents/alfred/tag-agent.md +0 -265
  472. moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +0 -311
  473. moai_adk/templates/.claude/agents/alfred/trust-checker.md +0 -352
  474. moai_adk/templates/.claude/commands/alfred/0-project.md +0 -1184
  475. moai_adk/templates/.claude/commands/alfred/1-plan.md +0 -665
  476. moai_adk/templates/.claude/commands/alfred/2-run.md +0 -488
  477. moai_adk/templates/.claude/commands/alfred/3-sync.md +0 -623
  478. moai_adk/templates/.claude/hooks/alfred/HOOK_SCHEMA_VALIDATION.md +0 -313
  479. moai_adk/templates/.claude/hooks/alfred/README.md +0 -230
  480. moai_adk/templates/.claude/hooks/alfred/alfred_hooks.py +0 -174
  481. moai_adk/templates/.claude/hooks/alfred/core/__init__.py +0 -170
  482. moai_adk/templates/.claude/hooks/alfred/core/context.py +0 -67
  483. moai_adk/templates/.claude/hooks/alfred/core/project.py +0 -416
  484. moai_adk/templates/.claude/hooks/alfred/core/tags.py +0 -198
  485. moai_adk/templates/.claude/hooks/alfred/handlers/__init__.py +0 -21
  486. moai_adk/templates/.claude/hooks/alfred/handlers/notification.py +0 -25
  487. moai_adk/templates/.claude/hooks/alfred/handlers/session.py +0 -161
  488. moai_adk/templates/.claude/hooks/alfred/handlers/tool.py +0 -90
  489. moai_adk/templates/.claude/hooks/alfred/handlers/user.py +0 -42
  490. moai_adk/templates/.claude/hooks/alfred/test_hook_output.py +0 -175
  491. moai_adk/templates/.claude/output-styles/alfred/agentic-coding.md +0 -640
  492. moai_adk/templates/.claude/output-styles/alfred/moai-adk-learning.md +0 -696
  493. moai_adk/templates/.claude/output-styles/alfred/study-with-alfred.md +0 -474
  494. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/SKILL.md +0 -113
  495. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/examples.md +0 -29
  496. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/reference.md +0 -28
  497. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/SKILL.md +0 -122
  498. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/examples.md +0 -29
  499. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/reference.md +0 -29
  500. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/SKILL.md +0 -237
  501. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/examples.md +0 -615
  502. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/reference.md +0 -653
  503. moai_adk/templates/.claude/skills/moai-alfred-language-detection/SKILL.md +0 -113
  504. moai_adk/templates/.claude/skills/moai-alfred-language-detection/examples.md +0 -29
  505. moai_adk/templates/.claude/skills/moai-alfred-language-detection/reference.md +0 -28
  506. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/SKILL.md +0 -113
  507. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/examples.md +0 -29
  508. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/reference.md +0 -28
  509. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/SKILL.md +0 -113
  510. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/examples.md +0 -29
  511. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/reference.md +0 -28
  512. moai_adk/templates/.claude/skills/moai-alfred-trust-validation/SKILL.md +0 -113
  513. moai_adk/templates/.claude/skills/moai-alfred-trust-validation/examples.md +0 -29
  514. moai_adk/templates/.claude/skills/moai-alfred-trust-validation/reference.md +0 -28
  515. moai_adk/templates/.claude/skills/moai-cc-agents/SKILL.md +0 -269
  516. moai_adk/templates/.claude/skills/moai-cc-agents/templates/agent-template.md +0 -32
  517. moai_adk/templates/.claude/skills/moai-cc-claude-md/SKILL.md +0 -298
  518. moai_adk/templates/.claude/skills/moai-cc-claude-md/templates/CLAUDE-template.md +0 -26
  519. moai_adk/templates/.claude/skills/moai-cc-commands/SKILL.md +0 -307
  520. moai_adk/templates/.claude/skills/moai-cc-commands/templates/command-template.md +0 -21
  521. moai_adk/templates/.claude/skills/moai-cc-hooks/SKILL.md +0 -252
  522. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/pre-bash-check.sh +0 -19
  523. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/preserve-permissions.sh +0 -19
  524. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/validate-bash-command.py +0 -24
  525. moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/SKILL.md +0 -199
  526. moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/templates/settings-mcp-template.json +0 -39
  527. moai_adk/templates/.claude/skills/moai-cc-memory/SKILL.md +0 -316
  528. moai_adk/templates/.claude/skills/moai-cc-memory/templates/session-summary-template.md +0 -18
  529. moai_adk/templates/.claude/skills/moai-cc-settings/SKILL.md +0 -263
  530. moai_adk/templates/.claude/skills/moai-cc-settings/templates/settings-complete-template.json +0 -30
  531. moai_adk/templates/.claude/skills/moai-cc-skills/SKILL.md +0 -291
  532. moai_adk/templates/.claude/skills/moai-cc-skills/templates/SKILL-template.md +0 -15
  533. moai_adk/templates/.claude/skills/moai-domain-cli-tool/SKILL.md +0 -123
  534. moai_adk/templates/.claude/skills/moai-domain-cli-tool/examples.md +0 -29
  535. moai_adk/templates/.claude/skills/moai-domain-cli-tool/reference.md +0 -30
  536. moai_adk/templates/.claude/skills/moai-domain-data-science/SKILL.md +0 -123
  537. moai_adk/templates/.claude/skills/moai-domain-data-science/examples.md +0 -29
  538. moai_adk/templates/.claude/skills/moai-domain-data-science/reference.md +0 -30
  539. moai_adk/templates/.claude/skills/moai-domain-devops/SKILL.md +0 -124
  540. moai_adk/templates/.claude/skills/moai-domain-devops/examples.md +0 -29
  541. moai_adk/templates/.claude/skills/moai-domain-devops/reference.md +0 -31
  542. moai_adk/templates/.claude/skills/moai-domain-ml/SKILL.md +0 -123
  543. moai_adk/templates/.claude/skills/moai-domain-ml/examples.md +0 -29
  544. moai_adk/templates/.claude/skills/moai-domain-ml/reference.md +0 -30
  545. moai_adk/templates/.claude/skills/moai-domain-mobile-app/SKILL.md +0 -123
  546. moai_adk/templates/.claude/skills/moai-domain-mobile-app/examples.md +0 -29
  547. moai_adk/templates/.claude/skills/moai-domain-mobile-app/reference.md +0 -30
  548. moai_adk/templates/.claude/skills/moai-domain-security/SKILL.md +0 -123
  549. moai_adk/templates/.claude/skills/moai-domain-security/examples.md +0 -29
  550. moai_adk/templates/.claude/skills/moai-domain-security/reference.md +0 -30
  551. moai_adk/templates/.claude/skills/moai-domain-web-api/SKILL.md +0 -123
  552. moai_adk/templates/.claude/skills/moai-domain-web-api/examples.md +0 -29
  553. moai_adk/templates/.claude/skills/moai-domain-web-api/reference.md +0 -30
  554. moai_adk/templates/.claude/skills/moai-essentials-debug/SKILL.md +0 -303
  555. moai_adk/templates/.claude/skills/moai-essentials-debug/examples.md +0 -1064
  556. moai_adk/templates/.claude/skills/moai-essentials-debug/reference.md +0 -1047
  557. moai_adk/templates/.claude/skills/moai-essentials-perf/SKILL.md +0 -113
  558. moai_adk/templates/.claude/skills/moai-essentials-perf/examples.md +0 -29
  559. moai_adk/templates/.claude/skills/moai-essentials-perf/reference.md +0 -28
  560. moai_adk/templates/.claude/skills/moai-essentials-refactor/SKILL.md +0 -113
  561. moai_adk/templates/.claude/skills/moai-essentials-refactor/examples.md +0 -29
  562. moai_adk/templates/.claude/skills/moai-essentials-refactor/reference.md +0 -28
  563. moai_adk/templates/.claude/skills/moai-essentials-review/SKILL.md +0 -113
  564. moai_adk/templates/.claude/skills/moai-essentials-review/examples.md +0 -29
  565. moai_adk/templates/.claude/skills/moai-essentials-review/reference.md +0 -28
  566. moai_adk/templates/.claude/skills/moai-foundation-ears/SKILL.md +0 -113
  567. moai_adk/templates/.claude/skills/moai-foundation-ears/examples.md +0 -29
  568. moai_adk/templates/.claude/skills/moai-foundation-ears/reference.md +0 -28
  569. moai_adk/templates/.claude/skills/moai-foundation-git/SKILL.md +0 -122
  570. moai_adk/templates/.claude/skills/moai-foundation-git/examples.md +0 -29
  571. moai_adk/templates/.claude/skills/moai-foundation-git/reference.md +0 -29
  572. moai_adk/templates/.claude/skills/moai-foundation-langs/SKILL.md +0 -113
  573. moai_adk/templates/.claude/skills/moai-foundation-langs/examples.md +0 -29
  574. moai_adk/templates/.claude/skills/moai-foundation-langs/reference.md +0 -28
  575. moai_adk/templates/.claude/skills/moai-foundation-specs/SKILL.md +0 -113
  576. moai_adk/templates/.claude/skills/moai-foundation-specs/examples.md +0 -29
  577. moai_adk/templates/.claude/skills/moai-foundation-specs/reference.md +0 -28
  578. moai_adk/templates/.claude/skills/moai-foundation-tags/SKILL.md +0 -113
  579. moai_adk/templates/.claude/skills/moai-foundation-tags/examples.md +0 -29
  580. moai_adk/templates/.claude/skills/moai-foundation-tags/reference.md +0 -28
  581. moai_adk/templates/.claude/skills/moai-foundation-trust/SKILL.md +0 -307
  582. moai_adk/templates/.claude/skills/moai-foundation-trust/examples.md +0 -0
  583. moai_adk/templates/.claude/skills/moai-foundation-trust/reference.md +0 -1099
  584. moai_adk/templates/.claude/skills/moai-lang-c/SKILL.md +0 -124
  585. moai_adk/templates/.claude/skills/moai-lang-c/examples.md +0 -29
  586. moai_adk/templates/.claude/skills/moai-lang-c/reference.md +0 -31
  587. moai_adk/templates/.claude/skills/moai-lang-cpp/examples.md +0 -29
  588. moai_adk/templates/.claude/skills/moai-lang-cpp/reference.md +0 -31
  589. moai_adk/templates/.claude/skills/moai-lang-csharp/examples.md +0 -29
  590. moai_adk/templates/.claude/skills/moai-lang-csharp/reference.md +0 -30
  591. moai_adk/templates/.claude/skills/moai-lang-dart/SKILL.md +0 -123
  592. moai_adk/templates/.claude/skills/moai-lang-dart/examples.md +0 -29
  593. moai_adk/templates/.claude/skills/moai-lang-dart/reference.md +0 -30
  594. moai_adk/templates/.claude/skills/moai-lang-javascript/SKILL.md +0 -125
  595. moai_adk/templates/.claude/skills/moai-lang-javascript/examples.md +0 -29
  596. moai_adk/templates/.claude/skills/moai-lang-javascript/reference.md +0 -32
  597. moai_adk/templates/.claude/skills/moai-lang-php/examples.md +0 -29
  598. moai_adk/templates/.claude/skills/moai-lang-php/reference.md +0 -30
  599. moai_adk/templates/.claude/skills/moai-lang-r/examples.md +0 -29
  600. moai_adk/templates/.claude/skills/moai-lang-r/reference.md +0 -30
  601. moai_adk/templates/.claude/skills/moai-lang-ruby/examples.md +0 -29
  602. moai_adk/templates/.claude/skills/moai-lang-ruby/reference.md +0 -31
  603. moai_adk/templates/.claude/skills/moai-lang-shell/SKILL.md +0 -123
  604. moai_adk/templates/.claude/skills/moai-lang-shell/examples.md +0 -29
  605. moai_adk/templates/.claude/skills/moai-lang-shell/reference.md +0 -30
  606. moai_adk/templates/.claude/skills/moai-lang-sql/SKILL.md +0 -124
  607. moai_adk/templates/.claude/skills/moai-lang-sql/examples.md +0 -29
  608. moai_adk/templates/.claude/skills/moai-lang-sql/reference.md +0 -31
  609. moai_adk/templates/.claude/skills/moai-skill-factory/CHECKLIST.md +0 -482
  610. moai_adk/templates/.claude/skills/moai-skill-factory/EXAMPLES.md +0 -278
  611. moai_adk/templates/.claude/skills/moai-skill-factory/INTERACTIVE-DISCOVERY.md +0 -524
  612. moai_adk/templates/.claude/skills/moai-skill-factory/METADATA.md +0 -477
  613. moai_adk/templates/.claude/skills/moai-skill-factory/PARALLEL-ANALYSIS-REPORT.md +0 -429
  614. moai_adk/templates/.claude/skills/moai-skill-factory/PYTHON-VERSION-MATRIX.md +0 -391
  615. moai_adk/templates/.claude/skills/moai-skill-factory/SKILL-FACTORY-WORKFLOW.md +0 -431
  616. moai_adk/templates/.claude/skills/moai-skill-factory/SKILL-UPDATE-ADVISOR.md +0 -577
  617. moai_adk/templates/.claude/skills/moai-skill-factory/SKILL.md +0 -271
  618. moai_adk/templates/.claude/skills/moai-skill-factory/STEP-BY-STEP-GUIDE.md +0 -466
  619. moai_adk/templates/.claude/skills/moai-skill-factory/STRUCTURE.md +0 -583
  620. moai_adk/templates/.claude/skills/moai-skill-factory/WEB-RESEARCH.md +0 -526
  621. moai_adk/templates/.claude/skills/moai-skill-factory/reference.md +0 -465
  622. moai_adk/templates/.claude/skills/moai-skill-factory/scripts/generate-structure.sh +0 -328
  623. moai_adk/templates/.claude/skills/moai-skill-factory/scripts/validate-skill.sh +0 -312
  624. moai_adk/templates/.claude/skills/moai-skill-factory/templates/SKILL_TEMPLATE.md +0 -245
  625. moai_adk/templates/.claude/skills/moai-skill-factory/templates/examples-template.md +0 -285
  626. moai_adk/templates/.claude/skills/moai-skill-factory/templates/reference-template.md +0 -278
  627. moai_adk/templates/.claude/skills/moai-skill-factory/templates/scripts-template.sh +0 -303
  628. moai_adk/templates/.claude/skills/moai-spec-authoring/README.md +0 -137
  629. moai_adk/templates/.claude/skills/moai-spec-authoring/SKILL.md +0 -218
  630. moai_adk/templates/.claude/skills/moai-spec-authoring/examples/validate-spec.sh +0 -161
  631. moai_adk/templates/.claude/skills/moai-spec-authoring/examples.md +0 -541
  632. moai_adk/templates/.claude/skills/moai-spec-authoring/reference.md +0 -622
  633. moai_adk/templates/.github/ISSUE_TEMPLATE/spec.yml +0 -176
  634. moai_adk/templates/.github/PULL_REQUEST_TEMPLATE.md +0 -69
  635. moai_adk/templates/.github/workflows/moai-gitflow.yml +0 -256
  636. moai_adk/templates/.moai/config.json +0 -96
  637. moai_adk/templates/.moai/memory/CLAUDE-AGENTS-GUIDE.md +0 -208
  638. moai_adk/templates/.moai/memory/CLAUDE-PRACTICES.md +0 -369
  639. moai_adk/templates/.moai/memory/CLAUDE-RULES.md +0 -539
  640. moai_adk/templates/.moai/memory/CONFIG-SCHEMA.md +0 -444
  641. moai_adk/templates/.moai/memory/DEVELOPMENT-GUIDE.md +0 -344
  642. moai_adk/templates/.moai/memory/GITFLOW-PROTECTION-POLICY.md +0 -220
  643. moai_adk/templates/.moai/memory/SKILLS-DESCRIPTION-POLICY.md +0 -218
  644. moai_adk/templates/.moai/memory/SPEC-METADATA.md +0 -356
  645. moai_adk/templates/.moai/memory/config-schema.md +0 -444
  646. moai_adk/templates/.moai/memory/gitflow-protection-policy.md +0 -220
  647. moai_adk/templates/.moai/memory/spec-metadata.md +0 -356
  648. moai_adk/templates/.moai/project/product.md +0 -161
  649. moai_adk/templates/.moai/project/structure.md +0 -156
  650. moai_adk/templates/.moai/project/tech.md +0 -227
  651. moai_adk/templates/__init__.py +0 -2
  652. moai_adk-0.8.0.dist-info/METADATA +0 -1722
  653. moai_adk-0.8.0.dist-info/RECORD +0 -282
  654. {moai_adk-0.8.0.dist-info → moai_adk-0.34.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,29 +1,864 @@
1
- # moai-lang-java - Working Examples
1
+ # Java 21 Production Examples
2
2
 
3
- _Last updated: 2025-10-22_
3
+ ## Complete REST API Implementation
4
4
 
5
- ## Example 1: Basic Setup
5
+ ### Spring Boot 3.3 User Service
6
6
 
7
- ```bash
8
- # Setup commands
9
- # ...
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
+ }
10
494
  ```
11
495
 
12
- ## Example 2: TDD Workflow
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
+ }
13
517
 
14
- ```bash
15
- # RED: Write failing test
16
- # GREEN: Implement feature
17
- # REFACTOR: Improve code
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
+ }
18
601
  ```
19
602
 
20
- ## Example 3: Quality Gate
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
+ }
21
855
 
22
- ```bash
23
- # Run quality checks
24
- # Verify coverage ≥85%
856
+ tasks.withType<Test> {
857
+ useJUnitPlatform()
858
+ }
25
859
  ```
26
860
 
27
861
  ---
28
862
 
29
- _For more examples, see SKILL.md reference section_
863
+ Last Updated: 2025-12-07
864
+ Version: 1.0.0