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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (881) hide show
  1. moai_adk/__init__.py +2 -6
  2. moai_adk/__main__.py +267 -21
  3. moai_adk/astgrep/__init__.py +37 -0
  4. moai_adk/astgrep/analyzer.py +522 -0
  5. moai_adk/astgrep/models.py +124 -0
  6. moai_adk/astgrep/rules.py +179 -0
  7. moai_adk/cli/__init__.py +6 -2
  8. moai_adk/cli/commands/__init__.py +1 -4
  9. moai_adk/cli/commands/analyze.py +125 -0
  10. moai_adk/cli/commands/doctor.py +24 -6
  11. moai_adk/cli/commands/init.py +437 -57
  12. moai_adk/cli/commands/language.py +254 -0
  13. moai_adk/cli/commands/rank.py +449 -0
  14. moai_adk/cli/commands/status.py +15 -14
  15. moai_adk/cli/commands/switch.py +325 -0
  16. moai_adk/cli/commands/update.py +2195 -93
  17. moai_adk/cli/main.py +3 -2
  18. moai_adk/cli/prompts/init_prompts.py +457 -108
  19. moai_adk/cli/prompts/translations/__init__.py +573 -0
  20. moai_adk/cli/spec_status.py +263 -0
  21. moai_adk/cli/ui/__init__.py +44 -0
  22. moai_adk/cli/ui/progress.py +422 -0
  23. moai_adk/cli/ui/prompts.py +448 -0
  24. moai_adk/cli/ui/theme.py +129 -0
  25. moai_adk/cli/worktree/__init__.py +27 -0
  26. moai_adk/cli/worktree/__main__.py +31 -0
  27. moai_adk/cli/worktree/cli.py +788 -0
  28. moai_adk/cli/worktree/exceptions.py +89 -0
  29. moai_adk/cli/worktree/manager.py +648 -0
  30. moai_adk/cli/worktree/models.py +65 -0
  31. moai_adk/cli/worktree/registry.py +422 -0
  32. moai_adk/core/PHASE2_OPTIMIZATIONS.md +467 -0
  33. moai_adk/core/__init__.py +0 -1
  34. moai_adk/core/analysis/__init__.py +9 -0
  35. moai_adk/core/analysis/session_analyzer.py +400 -0
  36. moai_adk/core/claude_integration.py +393 -0
  37. moai_adk/core/command_helpers.py +270 -0
  38. moai_adk/core/comprehensive_monitoring_system.py +1183 -0
  39. moai_adk/core/config/__init__.py +6 -0
  40. moai_adk/core/config/migration.py +148 -17
  41. moai_adk/core/config/unified.py +617 -0
  42. moai_adk/core/context_manager.py +273 -0
  43. moai_adk/core/credentials.py +264 -0
  44. moai_adk/core/diagnostics/slash_commands.py +0 -1
  45. moai_adk/core/enterprise_features.py +1404 -0
  46. moai_adk/core/error_recovery_system.py +1920 -0
  47. moai_adk/core/event_driven_hook_system.py +1371 -0
  48. moai_adk/core/git/__init__.py +8 -1
  49. moai_adk/core/git/branch.py +0 -1
  50. moai_adk/core/git/branch_manager.py +2 -10
  51. moai_adk/core/git/checkpoint.py +1 -7
  52. moai_adk/core/git/commit.py +0 -1
  53. moai_adk/core/git/conflict_detector.py +422 -0
  54. moai_adk/core/git/event_detector.py +16 -7
  55. moai_adk/core/git/manager.py +91 -2
  56. moai_adk/core/input_validation_middleware.py +1006 -0
  57. moai_adk/core/integration/__init__.py +22 -0
  58. moai_adk/core/integration/engine.py +157 -0
  59. moai_adk/core/integration/integration_tester.py +226 -0
  60. moai_adk/core/integration/models.py +88 -0
  61. moai_adk/core/integration/utils.py +211 -0
  62. moai_adk/core/issue_creator.py +305 -0
  63. moai_adk/core/jit_context_loader.py +956 -0
  64. moai_adk/core/jit_enhanced_hook_manager.py +1987 -0
  65. moai_adk/core/language_config.py +202 -0
  66. moai_adk/core/language_config_resolver.py +578 -0
  67. moai_adk/core/language_validator.py +543 -0
  68. moai_adk/core/mcp/setup.py +116 -0
  69. moai_adk/core/merge/__init__.py +9 -0
  70. moai_adk/core/merge/analyzer.py +666 -0
  71. moai_adk/core/migration/__init__.py +18 -0
  72. moai_adk/core/migration/alfred_to_moai_migrator.py +389 -0
  73. moai_adk/core/migration/backup_manager.py +327 -0
  74. moai_adk/core/migration/custom_element_scanner.py +358 -0
  75. moai_adk/core/migration/file_migrator.py +381 -0
  76. moai_adk/core/migration/interactive_checkbox_ui.py +499 -0
  77. moai_adk/core/migration/selective_restorer.py +470 -0
  78. moai_adk/core/migration/template_utils.py +74 -0
  79. moai_adk/core/migration/user_selection_ui.py +338 -0
  80. moai_adk/core/migration/version_detector.py +243 -0
  81. moai_adk/core/migration/version_migrator.py +263 -0
  82. moai_adk/core/model_allocator.py +241 -0
  83. moai_adk/core/performance/__init__.py +6 -0
  84. moai_adk/core/performance/cache_system.py +316 -0
  85. moai_adk/core/performance/parallel_processor.py +116 -0
  86. moai_adk/core/phase_optimized_hook_scheduler.py +879 -0
  87. moai_adk/core/project/__init__.py +0 -1
  88. moai_adk/core/project/backup_utils.py +13 -8
  89. moai_adk/core/project/checker.py +2 -4
  90. moai_adk/core/project/detector.py +189 -22
  91. moai_adk/core/project/initializer.py +177 -29
  92. moai_adk/core/project/phase_executor.py +482 -48
  93. moai_adk/core/project/validator.py +22 -32
  94. moai_adk/core/quality/__init__.py +1 -1
  95. moai_adk/core/quality/trust_checker.py +66 -110
  96. moai_adk/core/quality/validators/__init__.py +1 -1
  97. moai_adk/core/quality/validators/base_validator.py +1 -1
  98. moai_adk/core/realtime_monitoring_dashboard.py +1724 -0
  99. moai_adk/core/robust_json_parser.py +611 -0
  100. moai_adk/core/rollback_manager.py +953 -0
  101. moai_adk/core/session_manager.py +651 -0
  102. moai_adk/core/skill_loading_system.py +579 -0
  103. moai_adk/core/spec_status_manager.py +478 -0
  104. moai_adk/core/template/__init__.py +0 -1
  105. moai_adk/core/template/backup.py +168 -21
  106. moai_adk/core/template/config.py +141 -45
  107. moai_adk/core/template/languages.py +0 -1
  108. moai_adk/core/template/merger.py +107 -32
  109. moai_adk/core/template/processor.py +1075 -74
  110. moai_adk/core/template_engine.py +319 -0
  111. moai_adk/core/template_variable_synchronizer.py +431 -0
  112. moai_adk/core/unified_permission_manager.py +745 -0
  113. moai_adk/core/user_behavior_analytics.py +851 -0
  114. moai_adk/core/version_sync.py +477 -0
  115. moai_adk/foundation/__init__.py +37 -0
  116. moai_adk/foundation/backend.py +1027 -0
  117. moai_adk/foundation/database.py +1115 -0
  118. moai_adk/foundation/devops.py +1585 -0
  119. moai_adk/foundation/ears.py +431 -0
  120. moai_adk/foundation/frontend.py +870 -0
  121. moai_adk/foundation/git/__init__.py +376 -0
  122. moai_adk/foundation/git/commit_templates.py +557 -0
  123. moai_adk/foundation/langs.py +484 -0
  124. moai_adk/foundation/ml_ops.py +1162 -0
  125. moai_adk/foundation/testing.py +1524 -0
  126. moai_adk/foundation/trust/trust_principles.py +676 -0
  127. moai_adk/foundation/trust/validation_checklist.py +1573 -0
  128. moai_adk/loop/__init__.py +54 -0
  129. moai_adk/loop/controller.py +305 -0
  130. moai_adk/loop/feedback.py +230 -0
  131. moai_adk/loop/state.py +209 -0
  132. moai_adk/loop/storage.py +220 -0
  133. moai_adk/lsp/__init__.py +70 -0
  134. moai_adk/lsp/client.py +320 -0
  135. moai_adk/lsp/models.py +261 -0
  136. moai_adk/lsp/protocol.py +404 -0
  137. moai_adk/lsp/server_manager.py +248 -0
  138. moai_adk/project/__init__.py +0 -0
  139. moai_adk/project/configuration.py +1091 -0
  140. moai_adk/project/documentation.py +566 -0
  141. moai_adk/project/schema.py +447 -0
  142. moai_adk/py.typed +0 -0
  143. moai_adk/ralph/__init__.py +37 -0
  144. moai_adk/ralph/engine.py +307 -0
  145. moai_adk/rank/__init__.py +21 -0
  146. moai_adk/rank/auth.py +425 -0
  147. moai_adk/rank/client.py +557 -0
  148. moai_adk/rank/config.py +147 -0
  149. moai_adk/rank/hook.py +1503 -0
  150. moai_adk/rank/py.typed +0 -0
  151. moai_adk/statusline/__init__.py +41 -0
  152. moai_adk/statusline/alfred_detector.py +105 -0
  153. moai_adk/statusline/config.py +376 -0
  154. moai_adk/statusline/enhanced_output_style_detector.py +372 -0
  155. moai_adk/statusline/git_collector.py +190 -0
  156. moai_adk/statusline/main.py +341 -0
  157. moai_adk/statusline/memory_collector.py +268 -0
  158. moai_adk/statusline/metrics_tracker.py +78 -0
  159. moai_adk/statusline/renderer.py +359 -0
  160. moai_adk/statusline/update_checker.py +129 -0
  161. moai_adk/statusline/version_reader.py +741 -0
  162. moai_adk/tag_system/__init__.py +48 -0
  163. moai_adk/tag_system/atomic_ops.py +117 -0
  164. moai_adk/tag_system/linkage.py +335 -0
  165. moai_adk/tag_system/parser.py +176 -0
  166. moai_adk/tag_system/validator.py +200 -0
  167. moai_adk/templates/.claude/agents/moai/builder-agent.md +490 -0
  168. moai_adk/templates/.claude/agents/moai/builder-command.md +1218 -0
  169. moai_adk/templates/.claude/agents/moai/builder-plugin.md +763 -0
  170. moai_adk/templates/.claude/agents/moai/builder-skill.md +682 -0
  171. moai_adk/templates/.claude/agents/moai/expert-backend.md +963 -0
  172. moai_adk/templates/.claude/agents/moai/expert-debug.md +407 -0
  173. moai_adk/templates/.claude/agents/moai/expert-devops.md +722 -0
  174. moai_adk/templates/.claude/agents/moai/expert-frontend.md +748 -0
  175. moai_adk/templates/.claude/agents/moai/expert-performance.md +661 -0
  176. moai_adk/templates/.claude/agents/moai/expert-refactoring.md +228 -0
  177. moai_adk/templates/.claude/agents/moai/expert-security.md +525 -0
  178. moai_adk/templates/.claude/agents/moai/expert-testing.md +737 -0
  179. moai_adk/templates/.claude/agents/moai/manager-claude-code.md +438 -0
  180. moai_adk/templates/.claude/agents/moai/manager-docs.md +578 -0
  181. moai_adk/templates/.claude/agents/moai/manager-git.md +1092 -0
  182. moai_adk/templates/.claude/agents/moai/manager-project.md +971 -0
  183. moai_adk/templates/.claude/agents/moai/manager-quality.md +641 -0
  184. moai_adk/templates/.claude/agents/moai/manager-spec.md +815 -0
  185. moai_adk/templates/.claude/agents/moai/manager-strategy.md +811 -0
  186. moai_adk/templates/.claude/agents/moai/manager-tdd.md +797 -0
  187. moai_adk/templates/.claude/commands/moai/0-project.md +438 -0
  188. moai_adk/templates/.claude/commands/moai/1-plan.md +1447 -0
  189. moai_adk/templates/.claude/commands/moai/2-run.md +850 -0
  190. moai_adk/templates/.claude/commands/moai/3-sync.md +1398 -0
  191. moai_adk/templates/.claude/commands/moai/9-feedback.md +330 -0
  192. moai_adk/templates/.claude/commands/moai/alfred.md +339 -0
  193. moai_adk/templates/.claude/commands/moai/cancel-loop.md +163 -0
  194. moai_adk/templates/.claude/commands/moai/fix.md +264 -0
  195. moai_adk/templates/.claude/commands/moai/loop.md +363 -0
  196. moai_adk/templates/.claude/hooks/__init__.py +8 -0
  197. moai_adk/templates/.claude/hooks/moai/__init__.py +8 -0
  198. moai_adk/templates/.claude/hooks/moai/lib/README.md +143 -0
  199. moai_adk/templates/.claude/hooks/moai/lib/__init__.py +41 -0
  200. moai_adk/templates/.claude/hooks/moai/lib/alfred_detector.py +105 -0
  201. moai_adk/templates/.claude/hooks/moai/lib/atomic_write.py +122 -0
  202. moai_adk/templates/.claude/hooks/{alfred/core → moai/lib}/checkpoint.py +13 -37
  203. moai_adk/templates/.claude/hooks/moai/lib/common.py +161 -0
  204. moai_adk/templates/.claude/hooks/moai/lib/config.py +376 -0
  205. moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +442 -0
  206. moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +639 -0
  207. moai_adk/templates/.claude/hooks/moai/lib/enhanced_output_style_detector.py +372 -0
  208. moai_adk/templates/.claude/hooks/moai/lib/example_config.json +104 -0
  209. moai_adk/templates/.claude/hooks/moai/lib/exceptions.py +171 -0
  210. moai_adk/templates/.claude/hooks/moai/lib/file_utils.py +95 -0
  211. moai_adk/templates/.claude/hooks/moai/lib/git_collector.py +190 -0
  212. moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +592 -0
  213. moai_adk/templates/.claude/hooks/moai/lib/language_detector.py +298 -0
  214. moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +417 -0
  215. moai_adk/templates/.claude/hooks/moai/lib/main.py +341 -0
  216. moai_adk/templates/.claude/hooks/moai/lib/memory_collector.py +268 -0
  217. moai_adk/templates/.claude/hooks/moai/lib/metrics_tracker.py +78 -0
  218. moai_adk/templates/.claude/hooks/moai/lib/models.py +104 -0
  219. moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +219 -0
  220. moai_adk/templates/.claude/hooks/moai/lib/project.py +777 -0
  221. moai_adk/templates/.claude/hooks/moai/lib/renderer.py +359 -0
  222. moai_adk/templates/.claude/hooks/moai/lib/tag_linkage.py +333 -0
  223. moai_adk/templates/.claude/hooks/moai/lib/tag_parser.py +176 -0
  224. moai_adk/templates/.claude/hooks/moai/lib/tag_validator.py +200 -0
  225. moai_adk/templates/.claude/hooks/moai/lib/test_hooks_improvements.py +443 -0
  226. moai_adk/templates/.claude/hooks/moai/lib/timeout.py +160 -0
  227. moai_adk/templates/.claude/hooks/moai/lib/tool_registry.py +896 -0
  228. moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +542 -0
  229. moai_adk/templates/.claude/hooks/moai/lib/update_checker.py +129 -0
  230. moai_adk/templates/.claude/hooks/moai/lib/version_reader.py +741 -0
  231. moai_adk/templates/.claude/hooks/moai/post_tool__ast_grep_scan.py +276 -0
  232. moai_adk/templates/.claude/hooks/moai/post_tool__code_formatter.py +255 -0
  233. moai_adk/templates/.claude/hooks/moai/post_tool__coverage_guard.py +325 -0
  234. moai_adk/templates/.claude/hooks/moai/post_tool__linter.py +315 -0
  235. moai_adk/templates/.claude/hooks/moai/post_tool__lsp_diagnostic.py +508 -0
  236. moai_adk/templates/.claude/hooks/moai/pre_commit__tag_validator.py +287 -0
  237. moai_adk/templates/.claude/hooks/moai/pre_tool__security_guard.py +268 -0
  238. moai_adk/templates/.claude/hooks/moai/pre_tool__tdd_enforcer.py +208 -0
  239. moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +894 -0
  240. moai_adk/templates/.claude/hooks/moai/session_end__rank_submit.py +69 -0
  241. moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +1170 -0
  242. moai_adk/templates/.claude/hooks/moai/shared/utils/announcement_translator.py +206 -0
  243. moai_adk/templates/.claude/hooks/moai/stop__loop_controller.py +621 -0
  244. moai_adk/templates/.claude/output-styles/moai/alfred.md +758 -0
  245. moai_adk/templates/.claude/output-styles/moai/r2d2.md +643 -0
  246. moai_adk/templates/.claude/output-styles/moai/yoda.md +359 -0
  247. moai_adk/templates/.claude/settings.json +177 -72
  248. moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +303 -0
  249. moai_adk/templates/.claude/skills/moai-docs-generation/examples.md +252 -0
  250. moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +56 -0
  251. moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +120 -0
  252. moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +152 -0
  253. moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +185 -0
  254. moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +207 -0
  255. moai_adk/templates/.claude/skills/moai-docs-generation/reference.md +234 -0
  256. moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +132 -281
  257. moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +610 -1525
  258. moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +423 -619
  259. moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +133 -77
  260. moai_adk/templates/.claude/skills/moai-domain-database/examples.md +817 -16
  261. moai_adk/templates/.claude/skills/moai-domain-database/modules/README.md +53 -0
  262. moai_adk/templates/.claude/skills/moai-domain-database/modules/mongodb.md +231 -0
  263. moai_adk/templates/.claude/skills/moai-domain-database/modules/postgresql.md +169 -0
  264. moai_adk/templates/.claude/skills/moai-domain-database/modules/redis.md +262 -0
  265. moai_adk/templates/.claude/skills/moai-domain-database/reference.md +532 -17
  266. moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +91 -78
  267. moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +955 -16
  268. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/component-architecture.md +723 -0
  269. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/nextjs16-patterns.md +713 -0
  270. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/performance-optimization.md +694 -0
  271. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/react19-patterns.md +591 -0
  272. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/state-management.md +680 -0
  273. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/vue35-patterns.md +802 -0
  274. moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +651 -18
  275. moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +234 -0
  276. moai_adk/templates/.claude/skills/moai-domain-uiux/examples.md +560 -0
  277. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/accessibility-wcag.md +260 -0
  278. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/component-architecture.md +228 -0
  279. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/icon-libraries.md +401 -0
  280. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/theming-system.md +373 -0
  281. moai_adk/templates/.claude/skills/moai-domain-uiux/reference.md +243 -0
  282. moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +189 -0
  283. moai_adk/templates/.claude/skills/moai-formats-data/examples.md +804 -0
  284. moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +327 -0
  285. moai_adk/templates/.claude/skills/moai-formats-data/modules/SKILL-MODULARIZATION-TEMPLATE.md +278 -0
  286. moai_adk/templates/.claude/skills/moai-formats-data/modules/caching-performance.md +459 -0
  287. moai_adk/templates/.claude/skills/moai-formats-data/modules/data-validation.md +485 -0
  288. moai_adk/templates/.claude/skills/moai-formats-data/modules/json-optimization.md +374 -0
  289. moai_adk/templates/.claude/skills/moai-formats-data/modules/toon-encoding.md +308 -0
  290. moai_adk/templates/.claude/skills/moai-formats-data/reference.md +585 -0
  291. moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +225 -0
  292. moai_adk/templates/.claude/skills/moai-foundation-claude/examples.md +732 -0
  293. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/advanced-agent-patterns.md +370 -0
  294. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/best-practices-checklist.md +616 -0
  295. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-cli-reference-official.md +420 -0
  296. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +739 -0
  297. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-devcontainers-official.md +381 -0
  298. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-discover-plugins-official.md +379 -0
  299. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-headless-official.md +378 -0
  300. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +670 -0
  301. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-iam-official.md +635 -0
  302. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-memory-official.md +543 -0
  303. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-plugin-marketplaces-official.md +308 -0
  304. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-plugins-official.md +640 -0
  305. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sandboxing-official.md +282 -0
  306. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-settings-official.md +663 -0
  307. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +467 -0
  308. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-statusline-official.md +293 -0
  309. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +420 -0
  310. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/complete-configuration-guide.md +175 -0
  311. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-examples.md +1674 -0
  312. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-formatting-guide.md +729 -0
  313. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-examples.md +1513 -0
  314. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-formatting-guide.md +1086 -0
  315. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-integration-patterns.md +1100 -0
  316. moai_adk/templates/.claude/skills/moai-foundation-claude/reference.md +209 -0
  317. moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +221 -0
  318. moai_adk/templates/.claude/skills/moai-foundation-context/examples.md +1048 -0
  319. moai_adk/templates/.claude/skills/moai-foundation-context/reference.md +246 -0
  320. moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +242 -0
  321. moai_adk/templates/.claude/skills/moai-foundation-core/examples.md +358 -0
  322. moai_adk/templates/.claude/skills/moai-foundation-core/modules/README.md +296 -0
  323. moai_adk/templates/.claude/skills/moai-foundation-core/modules/agents-reference.md +359 -0
  324. moai_adk/templates/.claude/skills/moai-foundation-core/modules/commands-reference.md +432 -0
  325. moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-advanced.md +279 -0
  326. moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-implementation.md +267 -0
  327. moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +228 -0
  328. moai_adk/templates/.claude/skills/moai-foundation-core/modules/execution-rules.md +687 -0
  329. moai_adk/templates/.claude/skills/moai-foundation-core/modules/modular-system.md +665 -0
  330. moai_adk/templates/.claude/skills/moai-foundation-core/modules/patterns.md +22 -0
  331. moai_adk/templates/.claude/skills/moai-foundation-core/modules/progressive-disclosure.md +649 -0
  332. moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-ears-format.md +200 -0
  333. moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +171 -0
  334. moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-tdd-implementation.md +275 -0
  335. moai_adk/templates/.claude/skills/moai-foundation-core/modules/token-optimization.md +708 -0
  336. moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +239 -0
  337. moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-implementation.md +244 -0
  338. moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-validation.md +219 -0
  339. moai_adk/templates/.claude/skills/moai-foundation-core/reference.md +478 -0
  340. moai_adk/templates/.claude/skills/moai-foundation-philosopher/SKILL.md +311 -0
  341. moai_adk/templates/.claude/skills/moai-foundation-philosopher/examples.md +228 -0
  342. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/assumption-matrix.md +80 -0
  343. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/cognitive-bias.md +199 -0
  344. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/first-principles.md +140 -0
  345. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/trade-off-analysis.md +154 -0
  346. moai_adk/templates/.claude/skills/moai-foundation-philosopher/reference.md +157 -0
  347. moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +180 -0
  348. moai_adk/templates/.claude/skills/moai-foundation-quality/examples.md +1232 -0
  349. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/best-practices.md +261 -0
  350. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/integration-patterns.md +194 -0
  351. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/proactive-analysis.md +229 -0
  352. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/trust5-validation.md +169 -0
  353. moai_adk/templates/.claude/skills/moai-foundation-quality/reference.md +1266 -0
  354. moai_adk/templates/.claude/skills/moai-foundation-quality/scripts/quality-gate.sh +668 -0
  355. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/github-actions-quality.yml +481 -0
  356. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/quality-config.yaml +519 -0
  357. moai_adk/templates/.claude/skills/moai-framework-electron/SKILL.md +288 -0
  358. moai_adk/templates/.claude/skills/moai-framework-electron/examples.md +2082 -0
  359. moai_adk/templates/.claude/skills/moai-framework-electron/reference.md +1649 -0
  360. moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +96 -77
  361. moai_adk/templates/.claude/skills/moai-lang-cpp/examples.md +1226 -16
  362. moai_adk/templates/.claude/skills/moai-lang-cpp/modules/advanced-patterns.md +401 -0
  363. moai_adk/templates/.claude/skills/moai-lang-cpp/reference.md +1119 -14
  364. moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +80 -79
  365. moai_adk/templates/.claude/skills/moai-lang-csharp/examples.md +572 -16
  366. moai_adk/templates/.claude/skills/moai-lang-csharp/modules/aspnet-core.md +627 -0
  367. moai_adk/templates/.claude/skills/moai-lang-csharp/modules/blazor-components.md +767 -0
  368. moai_adk/templates/.claude/skills/moai-lang-csharp/modules/cqrs-validation.md +626 -0
  369. moai_adk/templates/.claude/skills/moai-lang-csharp/modules/csharp12-features.md +580 -0
  370. moai_adk/templates/.claude/skills/moai-lang-csharp/modules/efcore-patterns.md +622 -0
  371. moai_adk/templates/.claude/skills/moai-lang-csharp/reference.md +388 -15
  372. moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +135 -0
  373. moai_adk/templates/.claude/skills/moai-lang-elixir/examples.md +1171 -0
  374. moai_adk/templates/.claude/skills/moai-lang-elixir/modules/advanced-patterns.md +531 -0
  375. moai_adk/templates/.claude/skills/moai-lang-elixir/reference.md +889 -0
  376. moai_adk/templates/.claude/skills/moai-lang-flutter/SKILL.md +104 -0
  377. moai_adk/templates/.claude/skills/moai-lang-flutter/examples.md +1090 -0
  378. moai_adk/templates/.claude/skills/moai-lang-flutter/reference.md +686 -0
  379. moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +153 -80
  380. moai_adk/templates/.claude/skills/moai-lang-go/examples.md +906 -16
  381. moai_adk/templates/.claude/skills/moai-lang-go/reference.md +721 -15
  382. moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +117 -80
  383. moai_adk/templates/.claude/skills/moai-lang-java/examples.md +851 -16
  384. moai_adk/templates/.claude/skills/moai-lang-java/reference.md +278 -18
  385. moai_adk/templates/.claude/skills/moai-lang-javascript/SKILL.md +133 -79
  386. moai_adk/templates/.claude/skills/moai-lang-javascript/examples.md +960 -16
  387. moai_adk/templates/.claude/skills/moai-lang-javascript/reference.md +1528 -17
  388. moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +100 -79
  389. moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +993 -16
  390. moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +549 -18
  391. moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +135 -76
  392. moai_adk/templates/.claude/skills/moai-lang-php/examples.md +1595 -16
  393. moai_adk/templates/.claude/skills/moai-lang-php/modules/advanced-patterns.md +538 -0
  394. moai_adk/templates/.claude/skills/moai-lang-php/reference.md +1309 -16
  395. moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +141 -341
  396. moai_adk/templates/.claude/skills/moai-lang-python/examples.md +849 -496
  397. moai_adk/templates/.claude/skills/moai-lang-python/reference.md +731 -243
  398. moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +134 -76
  399. moai_adk/templates/.claude/skills/moai-lang-r/examples.md +1141 -16
  400. moai_adk/templates/.claude/skills/moai-lang-r/modules/advanced-patterns.md +489 -0
  401. moai_adk/templates/.claude/skills/moai-lang-r/reference.md +1074 -17
  402. moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +136 -77
  403. moai_adk/templates/.claude/skills/moai-lang-ruby/examples.md +1093 -16
  404. moai_adk/templates/.claude/skills/moai-lang-ruby/modules/advanced-patterns.md +309 -0
  405. moai_adk/templates/.claude/skills/moai-lang-ruby/modules/testing-patterns.md +306 -0
  406. moai_adk/templates/.claude/skills/moai-lang-ruby/reference.md +1010 -17
  407. moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +112 -78
  408. moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +646 -16
  409. moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +491 -18
  410. moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +113 -75
  411. moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +620 -16
  412. moai_adk/templates/.claude/skills/moai-lang-scala/modules/akka-actors.md +479 -0
  413. moai_adk/templates/.claude/skills/moai-lang-scala/modules/cats-effect.md +489 -0
  414. moai_adk/templates/.claude/skills/moai-lang-scala/modules/functional-programming.md +460 -0
  415. moai_adk/templates/.claude/skills/moai-lang-scala/modules/spark-data.md +498 -0
  416. moai_adk/templates/.claude/skills/moai-lang-scala/modules/zio-patterns.md +541 -0
  417. moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +410 -17
  418. moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +88 -83
  419. moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +905 -16
  420. moai_adk/templates/.claude/skills/moai-lang-swift/modules/combine-reactive.md +256 -0
  421. moai_adk/templates/.claude/skills/moai-lang-swift/modules/concurrency.md +270 -0
  422. moai_adk/templates/.claude/skills/moai-lang-swift/modules/swift6-features.md +265 -0
  423. moai_adk/templates/.claude/skills/moai-lang-swift/modules/swiftui-patterns.md +314 -0
  424. moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +659 -17
  425. moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +115 -82
  426. moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +1076 -16
  427. moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +718 -21
  428. moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +145 -0
  429. moai_adk/templates/.claude/skills/moai-library-mermaid/examples.md +270 -0
  430. moai_adk/templates/.claude/skills/moai-library-mermaid/modules/advanced-patterns.md +465 -0
  431. moai_adk/templates/.claude/skills/moai-library-mermaid/modules/optimization.md +440 -0
  432. moai_adk/templates/.claude/skills/moai-library-mermaid/reference.md +228 -0
  433. moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +143 -0
  434. moai_adk/templates/.claude/skills/moai-library-nextra/examples.md +592 -0
  435. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-deployment-patterns.md +182 -0
  436. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +336 -0
  437. moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +350 -0
  438. moai_adk/templates/.claude/skills/moai-library-nextra/modules/content-architecture-optimization.md +162 -0
  439. moai_adk/templates/.claude/skills/moai-library-nextra/modules/deployment.md +52 -0
  440. moai_adk/templates/.claude/skills/moai-library-nextra/modules/framework-core-configuration.md +186 -0
  441. moai_adk/templates/.claude/skills/moai-library-nextra/modules/i18n-setup.md +55 -0
  442. moai_adk/templates/.claude/skills/moai-library-nextra/modules/mdx-components.md +52 -0
  443. moai_adk/templates/.claude/skills/moai-library-nextra/modules/optimization.md +303 -0
  444. moai_adk/templates/.claude/skills/moai-library-nextra/reference.md +379 -0
  445. moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +175 -0
  446. moai_adk/templates/.claude/skills/moai-library-shadcn/examples.md +575 -0
  447. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/advanced-patterns.md +394 -0
  448. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/optimization.md +278 -0
  449. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-components.md +457 -0
  450. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-theming.md +373 -0
  451. moai_adk/templates/.claude/skills/moai-library-shadcn/reference.md +74 -0
  452. moai_adk/templates/.claude/skills/moai-platform-auth0/SKILL.md +284 -0
  453. moai_adk/templates/.claude/skills/moai-platform-auth0/examples.md +2446 -0
  454. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/adaptive-mfa.md +233 -0
  455. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/akamai-integration.md +214 -0
  456. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/application-credentials.md +280 -0
  457. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/attack-protection-log-events.md +224 -0
  458. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/attack-protection-overview.md +140 -0
  459. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/bot-detection.md +144 -0
  460. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/breached-password-detection.md +187 -0
  461. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/brute-force-protection.md +189 -0
  462. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/certifications.md +282 -0
  463. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/compliance-overview.md +263 -0
  464. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/continuous-session-protection.md +307 -0
  465. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/customize-mfa.md +177 -0
  466. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/dpop-implementation.md +283 -0
  467. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/fapi-implementation.md +259 -0
  468. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/gdpr-compliance.md +313 -0
  469. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/guardian-configuration.md +269 -0
  470. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/highly-regulated-identity.md +272 -0
  471. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/jwt-fundamentals.md +248 -0
  472. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mdl-verification.md +210 -0
  473. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-api-management.md +278 -0
  474. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-factors.md +226 -0
  475. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-overview.md +174 -0
  476. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mtls-sender-constraining.md +316 -0
  477. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/ropg-flow-mfa.md +216 -0
  478. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/security-center.md +325 -0
  479. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/security-guidance.md +277 -0
  480. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/state-parameters.md +177 -0
  481. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/step-up-authentication.md +251 -0
  482. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/suspicious-ip-throttling.md +240 -0
  483. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/tenant-access-control.md +179 -0
  484. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/webauthn-fido.md +235 -0
  485. moai_adk/templates/.claude/skills/moai-platform-auth0/reference.md +224 -0
  486. moai_adk/templates/.claude/skills/moai-platform-clerk/SKILL.md +135 -0
  487. moai_adk/templates/.claude/skills/moai-platform-clerk/examples.md +1426 -0
  488. moai_adk/templates/.claude/skills/moai-platform-clerk/modules/advanced-patterns.md +417 -0
  489. moai_adk/templates/.claude/skills/moai-platform-clerk/reference.md +273 -0
  490. moai_adk/templates/.claude/skills/moai-platform-convex/SKILL.md +158 -0
  491. moai_adk/templates/.claude/skills/moai-platform-convex/examples.md +506 -0
  492. moai_adk/templates/.claude/skills/moai-platform-convex/modules/auth-integration.md +421 -0
  493. moai_adk/templates/.claude/skills/moai-platform-convex/modules/file-storage.md +474 -0
  494. moai_adk/templates/.claude/skills/moai-platform-convex/modules/reactive-queries.md +302 -0
  495. moai_adk/templates/.claude/skills/moai-platform-convex/modules/server-functions.md +452 -0
  496. moai_adk/templates/.claude/skills/moai-platform-convex/reference.md +385 -0
  497. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/SKILL.md +166 -0
  498. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/examples.md +514 -0
  499. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/custom-claims.md +374 -0
  500. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/phone-auth.md +372 -0
  501. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/social-auth.md +339 -0
  502. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/reference.md +382 -0
  503. moai_adk/templates/.claude/skills/moai-platform-firestore/SKILL.md +127 -0
  504. moai_adk/templates/.claude/skills/moai-platform-firestore/examples.md +445 -0
  505. moai_adk/templates/.claude/skills/moai-platform-firestore/modules/offline-cache.md +392 -0
  506. moai_adk/templates/.claude/skills/moai-platform-firestore/modules/realtime-listeners.md +441 -0
  507. moai_adk/templates/.claude/skills/moai-platform-firestore/modules/security-rules.md +352 -0
  508. moai_adk/templates/.claude/skills/moai-platform-firestore/modules/transactions.md +452 -0
  509. moai_adk/templates/.claude/skills/moai-platform-firestore/reference.md +322 -0
  510. moai_adk/templates/.claude/skills/moai-platform-neon/SKILL.md +156 -0
  511. moai_adk/templates/.claude/skills/moai-platform-neon/examples.md +470 -0
  512. moai_adk/templates/.claude/skills/moai-platform-neon/modules/auto-scaling.md +349 -0
  513. moai_adk/templates/.claude/skills/moai-platform-neon/modules/branching-workflows.md +354 -0
  514. moai_adk/templates/.claude/skills/moai-platform-neon/modules/connection-pooling.md +412 -0
  515. moai_adk/templates/.claude/skills/moai-platform-neon/modules/pitr-backups.md +458 -0
  516. moai_adk/templates/.claude/skills/moai-platform-neon/reference.md +272 -0
  517. moai_adk/templates/.claude/skills/moai-platform-railway/SKILL.md +146 -0
  518. moai_adk/templates/.claude/skills/moai-platform-railway/examples.md +539 -0
  519. moai_adk/templates/.claude/skills/moai-platform-railway/modules/docker-deployment.md +261 -0
  520. moai_adk/templates/.claude/skills/moai-platform-railway/modules/multi-service.md +291 -0
  521. moai_adk/templates/.claude/skills/moai-platform-railway/modules/networking-domains.md +338 -0
  522. moai_adk/templates/.claude/skills/moai-platform-railway/modules/volumes-storage.md +353 -0
  523. moai_adk/templates/.claude/skills/moai-platform-railway/reference.md +374 -0
  524. moai_adk/templates/.claude/skills/moai-platform-supabase/SKILL.md +141 -0
  525. moai_adk/templates/.claude/skills/moai-platform-supabase/examples.md +502 -0
  526. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/auth-integration.md +384 -0
  527. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/edge-functions.md +371 -0
  528. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/postgresql-pgvector.md +231 -0
  529. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/realtime-presence.md +354 -0
  530. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/row-level-security.md +286 -0
  531. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/storage-cdn.md +319 -0
  532. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/typescript-patterns.md +453 -0
  533. moai_adk/templates/.claude/skills/moai-platform-supabase/reference.md +284 -0
  534. moai_adk/templates/.claude/skills/moai-platform-vercel/SKILL.md +132 -0
  535. moai_adk/templates/.claude/skills/moai-platform-vercel/examples.md +502 -0
  536. moai_adk/templates/.claude/skills/moai-platform-vercel/modules/analytics-speed.md +348 -0
  537. moai_adk/templates/.claude/skills/moai-platform-vercel/modules/deployment-config.md +344 -0
  538. moai_adk/templates/.claude/skills/moai-platform-vercel/modules/edge-functions.md +222 -0
  539. moai_adk/templates/.claude/skills/moai-platform-vercel/modules/isr-caching.md +306 -0
  540. moai_adk/templates/.claude/skills/moai-platform-vercel/modules/kv-storage.md +399 -0
  541. moai_adk/templates/.claude/skills/moai-platform-vercel/reference.md +360 -0
  542. moai_adk/templates/.claude/skills/moai-tool-ast-grep/SKILL.md +193 -0
  543. moai_adk/templates/.claude/skills/moai-tool-ast-grep/examples.md +1099 -0
  544. moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/language-specific.md +307 -0
  545. moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/pattern-syntax.md +237 -0
  546. moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/refactoring-patterns.md +260 -0
  547. moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/security-rules.md +239 -0
  548. moai_adk/templates/.claude/skills/moai-tool-ast-grep/reference.md +288 -0
  549. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/go.yml +90 -0
  550. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/python.yml +101 -0
  551. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/typescript.yml +83 -0
  552. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/quality/complexity-check.yml +94 -0
  553. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/quality/deprecated-apis.yml +84 -0
  554. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/secrets-detection.yml +89 -0
  555. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/sql-injection.yml +45 -0
  556. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/xss-prevention.yml +50 -0
  557. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/sgconfig.yml +54 -0
  558. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +251 -0
  559. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/examples.md +544 -0
  560. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/modules/advanced-patterns.md +379 -0
  561. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/modules/optimization.md +286 -0
  562. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/reference.md +307 -0
  563. moai_adk/templates/.claude/skills/moai-workflow-loop/SKILL.md +197 -0
  564. moai_adk/templates/.claude/skills/moai-workflow-loop/examples.md +1063 -0
  565. moai_adk/templates/.claude/skills/moai-workflow-loop/reference.md +1414 -0
  566. moai_adk/templates/.claude/skills/moai-workflow-project/README.md +190 -0
  567. moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +287 -0
  568. moai_adk/templates/.claude/skills/moai-workflow-project/examples.md +547 -0
  569. moai_adk/templates/.claude/skills/moai-workflow-project/reference.md +275 -0
  570. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/config-schema.json +316 -0
  571. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +1434 -0
  572. moai_adk/templates/.claude/skills/moai-workflow-project/templates/config-template.json +71 -0
  573. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/product-template.md +44 -0
  574. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/structure-template.md +48 -0
  575. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/tech-template.md +92 -0
  576. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/config-manager-setup.json +109 -0
  577. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/language-initializer.json +228 -0
  578. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/menu-project-config.json +130 -0
  579. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/project-batch-questions.json +97 -0
  580. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/spec-workflow-setup.json +150 -0
  581. moai_adk/templates/.claude/skills/moai-workflow-spec/SKILL.md +337 -0
  582. moai_adk/templates/.claude/skills/moai-workflow-spec/examples.md +900 -0
  583. moai_adk/templates/.claude/skills/moai-workflow-spec/modules/advanced-patterns.md +237 -0
  584. moai_adk/templates/.claude/skills/moai-workflow-spec/reference.md +704 -0
  585. moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +270 -0
  586. moai_adk/templates/.claude/skills/moai-workflow-templates/examples.md +552 -0
  587. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/code-templates.md +124 -0
  588. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/feedback-templates.md +100 -0
  589. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/template-optimizer.md +138 -0
  590. moai_adk/templates/.claude/skills/moai-workflow-templates/reference.md +346 -0
  591. moai_adk/templates/.claude/skills/moai-workflow-testing/LICENSE.txt +202 -0
  592. moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +269 -0
  593. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/ai-powered-testing.py +294 -0
  594. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/console_logging.py +35 -0
  595. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/element_discovery.py +40 -0
  596. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/static_html_automation.py +34 -0
  597. moai_adk/templates/.claude/skills/moai-workflow-testing/examples.md +672 -0
  598. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +269 -0
  599. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/advanced-patterns.md +576 -0
  600. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +302 -0
  601. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/context7-integration.md +286 -0
  602. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/review-workflows.md +500 -0
  603. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/relevance-analysis.md +154 -0
  604. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/safety-analysis.md +148 -0
  605. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/scoring-algorithms.md +196 -0
  606. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/timeliness-analysis.md +168 -0
  607. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/truthfulness-analysis.md +136 -0
  608. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/usability-analysis.md +153 -0
  609. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework.md +257 -0
  610. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +263 -0
  611. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/analysis-patterns.md +340 -0
  612. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/core-classes.md +299 -0
  613. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/tool-integration.md +380 -0
  614. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/debugging/debugging-workflows.md +451 -0
  615. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/debugging/error-analysis.md +442 -0
  616. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/optimization.md +505 -0
  617. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance/optimization-patterns.md +473 -0
  618. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance/profiling-techniques.md +481 -0
  619. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/ai-optimization.md +241 -0
  620. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/bottleneck-detection.md +397 -0
  621. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/optimization-plan.md +315 -0
  622. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/profiler-core.md +277 -0
  623. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/real-time-monitoring.md +187 -0
  624. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +327 -0
  625. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/quality-metrics.md +415 -0
  626. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/refactoring/ai-workflows.md +620 -0
  627. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/refactoring/patterns.md +692 -0
  628. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/security-analysis.md +429 -0
  629. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +313 -0
  630. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/static-analysis.md +438 -0
  631. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd/core-classes.md +397 -0
  632. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/advanced-features.md +494 -0
  633. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/red-green-refactor.md +316 -0
  634. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/test-generation.md +471 -0
  635. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/test-patterns.md +371 -0
  636. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +265 -0
  637. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/trust5-validation.md +428 -0
  638. moai_adk/templates/.claude/skills/moai-workflow-testing/reference/playwright-best-practices.md +57 -0
  639. moai_adk/templates/.claude/skills/moai-workflow-testing/reference.md +440 -0
  640. moai_adk/templates/.claude/skills/moai-workflow-testing/scripts/with_server.py +218 -0
  641. moai_adk/templates/.claude/skills/moai-workflow-testing/templates/alfred-integration.md +376 -0
  642. moai_adk/templates/.claude/skills/moai-workflow-testing/workflows/enterprise-testing-workflow.py +571 -0
  643. moai_adk/templates/.claude/skills/moai-workflow-worktree/SKILL.md +228 -0
  644. moai_adk/templates/.claude/skills/moai-workflow-worktree/examples.md +606 -0
  645. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/integration-patterns.md +149 -0
  646. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/moai-adk-integration.md +245 -0
  647. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-advanced.md +310 -0
  648. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-development.md +202 -0
  649. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-workflows.md +302 -0
  650. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/registry-architecture.md +271 -0
  651. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/resource-optimization.md +300 -0
  652. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/tools-integration.md +280 -0
  653. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/troubleshooting.md +397 -0
  654. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/worktree-commands.md +296 -0
  655. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/worktree-management.md +217 -0
  656. moai_adk/templates/.claude/skills/moai-workflow-worktree/reference.md +357 -0
  657. moai_adk/templates/.git-hooks/pre-commit +128 -0
  658. moai_adk/templates/.git-hooks/pre-push +468 -0
  659. moai_adk/templates/.github/workflows/ci-universal.yml +1314 -0
  660. moai_adk/templates/.github/workflows/security-secrets-check.yml +179 -0
  661. moai_adk/templates/.github/workflows/spec-issue-sync.yml +206 -36
  662. moai_adk/templates/.gitignore +152 -13
  663. moai_adk/templates/.lsp.json +152 -0
  664. moai_adk/templates/.mcp.json +13 -0
  665. moai_adk/templates/.moai/announcements/en.json +18 -0
  666. moai_adk/templates/.moai/announcements/ja.json +18 -0
  667. moai_adk/templates/.moai/announcements/ko.json +18 -0
  668. moai_adk/templates/.moai/announcements/zh.json +18 -0
  669. moai_adk/templates/.moai/config/config.yaml +64 -0
  670. moai_adk/templates/.moai/config/multilingual-triggers.yaml +213 -0
  671. moai_adk/templates/.moai/config/sections/git-strategy.yaml +116 -0
  672. moai_adk/templates/.moai/config/sections/language.yaml +11 -0
  673. moai_adk/templates/.moai/config/sections/llm.yaml +41 -0
  674. moai_adk/templates/.moai/config/sections/pricing.yaml +30 -0
  675. moai_adk/templates/.moai/config/sections/project.yaml +13 -0
  676. moai_adk/templates/.moai/config/sections/quality.yaml +55 -0
  677. moai_adk/templates/.moai/config/sections/ralph.yaml +55 -0
  678. moai_adk/templates/.moai/config/sections/system.yaml +59 -0
  679. moai_adk/templates/.moai/config/sections/user.yaml +5 -0
  680. moai_adk/templates/.moai/config/statusline-config.yaml +92 -0
  681. moai_adk/templates/.moai/llm-configs/glm.json +22 -0
  682. moai_adk/templates/CLAUDE.ja.md +343 -0
  683. moai_adk/templates/CLAUDE.ko.md +343 -0
  684. moai_adk/templates/CLAUDE.md +274 -246
  685. moai_adk/templates/CLAUDE.zh.md +343 -0
  686. moai_adk/utils/__init__.py +24 -2
  687. moai_adk/utils/banner.py +9 -13
  688. moai_adk/utils/common.py +331 -0
  689. moai_adk/utils/link_validator.py +241 -0
  690. moai_adk/utils/logger.py +4 -9
  691. moai_adk/utils/safe_file_reader.py +206 -0
  692. moai_adk/utils/timeout.py +160 -0
  693. moai_adk/utils/toon_utils.py +256 -0
  694. moai_adk/version.py +22 -0
  695. moai_adk-1.1.0.dist-info/METADATA +2443 -0
  696. moai_adk-1.1.0.dist-info/RECORD +701 -0
  697. {moai_adk-0.8.0.dist-info → moai_adk-1.1.0.dist-info}/WHEEL +1 -1
  698. moai_adk-1.1.0.dist-info/entry_points.txt +5 -0
  699. moai_adk-1.1.0.dist-info/licenses/LICENSE +99 -0
  700. moai_adk/cli/commands/backup.py +0 -80
  701. moai_adk/templates/.claude/agents/alfred/cc-manager.md +0 -293
  702. moai_adk/templates/.claude/agents/alfred/debug-helper.md +0 -196
  703. moai_adk/templates/.claude/agents/alfred/doc-syncer.md +0 -207
  704. moai_adk/templates/.claude/agents/alfred/git-manager.md +0 -375
  705. moai_adk/templates/.claude/agents/alfred/implementation-planner.md +0 -343
  706. moai_adk/templates/.claude/agents/alfred/project-manager.md +0 -246
  707. moai_adk/templates/.claude/agents/alfred/quality-gate.md +0 -320
  708. moai_adk/templates/.claude/agents/alfred/skill-factory.md +0 -837
  709. moai_adk/templates/.claude/agents/alfred/spec-builder.md +0 -272
  710. moai_adk/templates/.claude/agents/alfred/tag-agent.md +0 -265
  711. moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +0 -311
  712. moai_adk/templates/.claude/agents/alfred/trust-checker.md +0 -352
  713. moai_adk/templates/.claude/commands/alfred/0-project.md +0 -1184
  714. moai_adk/templates/.claude/commands/alfred/1-plan.md +0 -665
  715. moai_adk/templates/.claude/commands/alfred/2-run.md +0 -488
  716. moai_adk/templates/.claude/commands/alfred/3-sync.md +0 -623
  717. moai_adk/templates/.claude/hooks/alfred/HOOK_SCHEMA_VALIDATION.md +0 -313
  718. moai_adk/templates/.claude/hooks/alfred/README.md +0 -230
  719. moai_adk/templates/.claude/hooks/alfred/alfred_hooks.py +0 -174
  720. moai_adk/templates/.claude/hooks/alfred/core/__init__.py +0 -170
  721. moai_adk/templates/.claude/hooks/alfred/core/context.py +0 -67
  722. moai_adk/templates/.claude/hooks/alfred/core/project.py +0 -416
  723. moai_adk/templates/.claude/hooks/alfred/core/tags.py +0 -198
  724. moai_adk/templates/.claude/hooks/alfred/handlers/__init__.py +0 -21
  725. moai_adk/templates/.claude/hooks/alfred/handlers/notification.py +0 -25
  726. moai_adk/templates/.claude/hooks/alfred/handlers/session.py +0 -161
  727. moai_adk/templates/.claude/hooks/alfred/handlers/tool.py +0 -90
  728. moai_adk/templates/.claude/hooks/alfred/handlers/user.py +0 -42
  729. moai_adk/templates/.claude/hooks/alfred/test_hook_output.py +0 -175
  730. moai_adk/templates/.claude/output-styles/alfred/agentic-coding.md +0 -640
  731. moai_adk/templates/.claude/output-styles/alfred/moai-adk-learning.md +0 -696
  732. moai_adk/templates/.claude/output-styles/alfred/study-with-alfred.md +0 -474
  733. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/SKILL.md +0 -113
  734. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/examples.md +0 -29
  735. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/reference.md +0 -28
  736. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/SKILL.md +0 -122
  737. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/examples.md +0 -29
  738. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/reference.md +0 -29
  739. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/SKILL.md +0 -237
  740. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/examples.md +0 -615
  741. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/reference.md +0 -653
  742. moai_adk/templates/.claude/skills/moai-alfred-language-detection/SKILL.md +0 -113
  743. moai_adk/templates/.claude/skills/moai-alfred-language-detection/examples.md +0 -29
  744. moai_adk/templates/.claude/skills/moai-alfred-language-detection/reference.md +0 -28
  745. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/SKILL.md +0 -113
  746. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/examples.md +0 -29
  747. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/reference.md +0 -28
  748. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/SKILL.md +0 -113
  749. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/examples.md +0 -29
  750. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/reference.md +0 -28
  751. moai_adk/templates/.claude/skills/moai-alfred-trust-validation/SKILL.md +0 -113
  752. moai_adk/templates/.claude/skills/moai-alfred-trust-validation/examples.md +0 -29
  753. moai_adk/templates/.claude/skills/moai-alfred-trust-validation/reference.md +0 -28
  754. moai_adk/templates/.claude/skills/moai-cc-agents/SKILL.md +0 -269
  755. moai_adk/templates/.claude/skills/moai-cc-agents/templates/agent-template.md +0 -32
  756. moai_adk/templates/.claude/skills/moai-cc-claude-md/SKILL.md +0 -298
  757. moai_adk/templates/.claude/skills/moai-cc-claude-md/templates/CLAUDE-template.md +0 -26
  758. moai_adk/templates/.claude/skills/moai-cc-commands/SKILL.md +0 -307
  759. moai_adk/templates/.claude/skills/moai-cc-commands/templates/command-template.md +0 -21
  760. moai_adk/templates/.claude/skills/moai-cc-hooks/SKILL.md +0 -252
  761. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/pre-bash-check.sh +0 -19
  762. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/preserve-permissions.sh +0 -19
  763. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/validate-bash-command.py +0 -24
  764. moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/SKILL.md +0 -199
  765. moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/templates/settings-mcp-template.json +0 -39
  766. moai_adk/templates/.claude/skills/moai-cc-memory/SKILL.md +0 -316
  767. moai_adk/templates/.claude/skills/moai-cc-memory/templates/session-summary-template.md +0 -18
  768. moai_adk/templates/.claude/skills/moai-cc-settings/SKILL.md +0 -263
  769. moai_adk/templates/.claude/skills/moai-cc-settings/templates/settings-complete-template.json +0 -30
  770. moai_adk/templates/.claude/skills/moai-cc-skills/SKILL.md +0 -291
  771. moai_adk/templates/.claude/skills/moai-cc-skills/templates/SKILL-template.md +0 -15
  772. moai_adk/templates/.claude/skills/moai-domain-cli-tool/SKILL.md +0 -123
  773. moai_adk/templates/.claude/skills/moai-domain-cli-tool/examples.md +0 -29
  774. moai_adk/templates/.claude/skills/moai-domain-cli-tool/reference.md +0 -30
  775. moai_adk/templates/.claude/skills/moai-domain-data-science/SKILL.md +0 -123
  776. moai_adk/templates/.claude/skills/moai-domain-data-science/examples.md +0 -29
  777. moai_adk/templates/.claude/skills/moai-domain-data-science/reference.md +0 -30
  778. moai_adk/templates/.claude/skills/moai-domain-devops/SKILL.md +0 -124
  779. moai_adk/templates/.claude/skills/moai-domain-devops/examples.md +0 -29
  780. moai_adk/templates/.claude/skills/moai-domain-devops/reference.md +0 -31
  781. moai_adk/templates/.claude/skills/moai-domain-ml/SKILL.md +0 -123
  782. moai_adk/templates/.claude/skills/moai-domain-ml/examples.md +0 -29
  783. moai_adk/templates/.claude/skills/moai-domain-ml/reference.md +0 -30
  784. moai_adk/templates/.claude/skills/moai-domain-mobile-app/SKILL.md +0 -123
  785. moai_adk/templates/.claude/skills/moai-domain-mobile-app/examples.md +0 -29
  786. moai_adk/templates/.claude/skills/moai-domain-mobile-app/reference.md +0 -30
  787. moai_adk/templates/.claude/skills/moai-domain-security/SKILL.md +0 -123
  788. moai_adk/templates/.claude/skills/moai-domain-security/examples.md +0 -29
  789. moai_adk/templates/.claude/skills/moai-domain-security/reference.md +0 -30
  790. moai_adk/templates/.claude/skills/moai-domain-web-api/SKILL.md +0 -123
  791. moai_adk/templates/.claude/skills/moai-domain-web-api/examples.md +0 -29
  792. moai_adk/templates/.claude/skills/moai-domain-web-api/reference.md +0 -30
  793. moai_adk/templates/.claude/skills/moai-essentials-debug/SKILL.md +0 -303
  794. moai_adk/templates/.claude/skills/moai-essentials-debug/examples.md +0 -1064
  795. moai_adk/templates/.claude/skills/moai-essentials-debug/reference.md +0 -1047
  796. moai_adk/templates/.claude/skills/moai-essentials-perf/SKILL.md +0 -113
  797. moai_adk/templates/.claude/skills/moai-essentials-perf/examples.md +0 -29
  798. moai_adk/templates/.claude/skills/moai-essentials-perf/reference.md +0 -28
  799. moai_adk/templates/.claude/skills/moai-essentials-refactor/SKILL.md +0 -113
  800. moai_adk/templates/.claude/skills/moai-essentials-refactor/examples.md +0 -29
  801. moai_adk/templates/.claude/skills/moai-essentials-refactor/reference.md +0 -28
  802. moai_adk/templates/.claude/skills/moai-essentials-review/SKILL.md +0 -113
  803. moai_adk/templates/.claude/skills/moai-essentials-review/examples.md +0 -29
  804. moai_adk/templates/.claude/skills/moai-essentials-review/reference.md +0 -28
  805. moai_adk/templates/.claude/skills/moai-foundation-ears/SKILL.md +0 -113
  806. moai_adk/templates/.claude/skills/moai-foundation-ears/examples.md +0 -29
  807. moai_adk/templates/.claude/skills/moai-foundation-ears/reference.md +0 -28
  808. moai_adk/templates/.claude/skills/moai-foundation-git/SKILL.md +0 -122
  809. moai_adk/templates/.claude/skills/moai-foundation-git/examples.md +0 -29
  810. moai_adk/templates/.claude/skills/moai-foundation-git/reference.md +0 -29
  811. moai_adk/templates/.claude/skills/moai-foundation-langs/SKILL.md +0 -113
  812. moai_adk/templates/.claude/skills/moai-foundation-langs/examples.md +0 -29
  813. moai_adk/templates/.claude/skills/moai-foundation-langs/reference.md +0 -28
  814. moai_adk/templates/.claude/skills/moai-foundation-specs/SKILL.md +0 -113
  815. moai_adk/templates/.claude/skills/moai-foundation-specs/examples.md +0 -29
  816. moai_adk/templates/.claude/skills/moai-foundation-specs/reference.md +0 -28
  817. moai_adk/templates/.claude/skills/moai-foundation-tags/SKILL.md +0 -113
  818. moai_adk/templates/.claude/skills/moai-foundation-tags/examples.md +0 -29
  819. moai_adk/templates/.claude/skills/moai-foundation-tags/reference.md +0 -28
  820. moai_adk/templates/.claude/skills/moai-foundation-trust/SKILL.md +0 -307
  821. moai_adk/templates/.claude/skills/moai-foundation-trust/examples.md +0 -0
  822. moai_adk/templates/.claude/skills/moai-foundation-trust/reference.md +0 -1099
  823. moai_adk/templates/.claude/skills/moai-lang-c/SKILL.md +0 -124
  824. moai_adk/templates/.claude/skills/moai-lang-c/examples.md +0 -29
  825. moai_adk/templates/.claude/skills/moai-lang-c/reference.md +0 -31
  826. moai_adk/templates/.claude/skills/moai-lang-dart/SKILL.md +0 -123
  827. moai_adk/templates/.claude/skills/moai-lang-dart/examples.md +0 -29
  828. moai_adk/templates/.claude/skills/moai-lang-dart/reference.md +0 -30
  829. moai_adk/templates/.claude/skills/moai-lang-shell/SKILL.md +0 -123
  830. moai_adk/templates/.claude/skills/moai-lang-shell/examples.md +0 -29
  831. moai_adk/templates/.claude/skills/moai-lang-shell/reference.md +0 -30
  832. moai_adk/templates/.claude/skills/moai-lang-sql/SKILL.md +0 -124
  833. moai_adk/templates/.claude/skills/moai-lang-sql/examples.md +0 -29
  834. moai_adk/templates/.claude/skills/moai-lang-sql/reference.md +0 -31
  835. moai_adk/templates/.claude/skills/moai-skill-factory/CHECKLIST.md +0 -482
  836. moai_adk/templates/.claude/skills/moai-skill-factory/EXAMPLES.md +0 -278
  837. moai_adk/templates/.claude/skills/moai-skill-factory/INTERACTIVE-DISCOVERY.md +0 -524
  838. moai_adk/templates/.claude/skills/moai-skill-factory/METADATA.md +0 -477
  839. moai_adk/templates/.claude/skills/moai-skill-factory/PARALLEL-ANALYSIS-REPORT.md +0 -429
  840. moai_adk/templates/.claude/skills/moai-skill-factory/PYTHON-VERSION-MATRIX.md +0 -391
  841. moai_adk/templates/.claude/skills/moai-skill-factory/SKILL-FACTORY-WORKFLOW.md +0 -431
  842. moai_adk/templates/.claude/skills/moai-skill-factory/SKILL-UPDATE-ADVISOR.md +0 -577
  843. moai_adk/templates/.claude/skills/moai-skill-factory/SKILL.md +0 -271
  844. moai_adk/templates/.claude/skills/moai-skill-factory/STEP-BY-STEP-GUIDE.md +0 -466
  845. moai_adk/templates/.claude/skills/moai-skill-factory/STRUCTURE.md +0 -583
  846. moai_adk/templates/.claude/skills/moai-skill-factory/WEB-RESEARCH.md +0 -526
  847. moai_adk/templates/.claude/skills/moai-skill-factory/reference.md +0 -465
  848. moai_adk/templates/.claude/skills/moai-skill-factory/scripts/generate-structure.sh +0 -328
  849. moai_adk/templates/.claude/skills/moai-skill-factory/scripts/validate-skill.sh +0 -312
  850. moai_adk/templates/.claude/skills/moai-skill-factory/templates/SKILL_TEMPLATE.md +0 -245
  851. moai_adk/templates/.claude/skills/moai-skill-factory/templates/examples-template.md +0 -285
  852. moai_adk/templates/.claude/skills/moai-skill-factory/templates/reference-template.md +0 -278
  853. moai_adk/templates/.claude/skills/moai-skill-factory/templates/scripts-template.sh +0 -303
  854. moai_adk/templates/.claude/skills/moai-spec-authoring/README.md +0 -137
  855. moai_adk/templates/.claude/skills/moai-spec-authoring/SKILL.md +0 -218
  856. moai_adk/templates/.claude/skills/moai-spec-authoring/examples/validate-spec.sh +0 -161
  857. moai_adk/templates/.claude/skills/moai-spec-authoring/examples.md +0 -541
  858. moai_adk/templates/.claude/skills/moai-spec-authoring/reference.md +0 -622
  859. moai_adk/templates/.github/ISSUE_TEMPLATE/spec.yml +0 -176
  860. moai_adk/templates/.github/PULL_REQUEST_TEMPLATE.md +0 -69
  861. moai_adk/templates/.github/workflows/moai-gitflow.yml +0 -256
  862. moai_adk/templates/.moai/config.json +0 -96
  863. moai_adk/templates/.moai/memory/CLAUDE-AGENTS-GUIDE.md +0 -208
  864. moai_adk/templates/.moai/memory/CLAUDE-PRACTICES.md +0 -369
  865. moai_adk/templates/.moai/memory/CLAUDE-RULES.md +0 -539
  866. moai_adk/templates/.moai/memory/CONFIG-SCHEMA.md +0 -444
  867. moai_adk/templates/.moai/memory/DEVELOPMENT-GUIDE.md +0 -344
  868. moai_adk/templates/.moai/memory/GITFLOW-PROTECTION-POLICY.md +0 -220
  869. moai_adk/templates/.moai/memory/SKILLS-DESCRIPTION-POLICY.md +0 -218
  870. moai_adk/templates/.moai/memory/SPEC-METADATA.md +0 -356
  871. moai_adk/templates/.moai/memory/config-schema.md +0 -444
  872. moai_adk/templates/.moai/memory/gitflow-protection-policy.md +0 -220
  873. moai_adk/templates/.moai/memory/spec-metadata.md +0 -356
  874. moai_adk/templates/.moai/project/product.md +0 -161
  875. moai_adk/templates/.moai/project/structure.md +0 -156
  876. moai_adk/templates/.moai/project/tech.md +0 -227
  877. moai_adk/templates/__init__.py +0 -2
  878. moai_adk-0.8.0.dist-info/METADATA +0 -1722
  879. moai_adk-0.8.0.dist-info/RECORD +0 -282
  880. moai_adk-0.8.0.dist-info/entry_points.txt +0 -2
  881. moai_adk-0.8.0.dist-info/licenses/LICENSE +0 -21
@@ -1,29 +1,1608 @@
1
- # moai-lang-php - Working Examples
1
+ # PHP Production-Ready Code Examples
2
2
 
3
- _Last updated: 2025-10-22_
3
+ ## Complete Laravel 11 Application
4
4
 
5
- ## Example 1: Basic Setup
5
+ ### Project Structure
6
6
 
7
- ```bash
8
- # Setup commands
9
- # ...
10
7
  ```
8
+ laravel_app/
9
+ ├── app/
10
+ │ ├── Console/
11
+ │ │ └── Commands/
12
+ │ │ └── ProcessOrdersCommand.php
13
+ │ ├── Events/
14
+ │ │ └── UserRegistered.php
15
+ │ ├── Http/
16
+ │ │ ├── Controllers/
17
+ │ │ │ └── Api/
18
+ │ │ │ ├── UserController.php
19
+ │ │ │ └── PostController.php
20
+ │ │ ├── Middleware/
21
+ │ │ │ └── EnsureUserIsVerified.php
22
+ │ │ ├── Requests/
23
+ │ │ │ ├── StoreUserRequest.php
24
+ │ │ │ └── UpdateUserRequest.php
25
+ │ │ └── Resources/
26
+ │ │ ├── UserResource.php
27
+ │ │ └── PostResource.php
28
+ │ ├── Jobs/
29
+ │ │ └── SendWelcomeEmail.php
30
+ │ ├── Listeners/
31
+ │ │ └── SendWelcomeNotification.php
32
+ │ ├── Models/
33
+ │ │ ├── User.php
34
+ │ │ ├── Post.php
35
+ │ │ └── Comment.php
36
+ │ ├── Repositories/
37
+ │ │ ├── UserRepository.php
38
+ │ │ └── PostRepository.php
39
+ │ ├── Services/
40
+ │ │ ├── UserService.php
41
+ │ │ └── AuthService.php
42
+ │ └── DTOs/
43
+ │ ├── UserDTO.php
44
+ │ └── PostDTO.php
45
+ ├── database/
46
+ │ ├── factories/
47
+ │ │ └── UserFactory.php
48
+ │ ├── migrations/
49
+ │ │ └── 2024_01_01_create_users_table.php
50
+ │ └── seeders/
51
+ │ └── UserSeeder.php
52
+ ├── routes/
53
+ │ ├── api.php
54
+ │ └── web.php
55
+ ├── tests/
56
+ │ ├── Feature/
57
+ │ │ └── UserApiTest.php
58
+ │ └── Unit/
59
+ │ └── UserServiceTest.php
60
+ ├── composer.json
61
+ └── Dockerfile
62
+ ```
63
+
64
+ ### Eloquent Models with Modern Features
65
+
66
+ ```php
67
+ <?php
68
+
69
+ namespace App\Models;
70
+
71
+ use App\Enums\UserRole;
72
+ use App\Enums\UserStatus;
73
+ use Illuminate\Database\Eloquent\Concerns\HasUuids;
74
+ use Illuminate\Database\Eloquent\Factories\HasFactory;
75
+ use Illuminate\Database\Eloquent\Model;
76
+ use Illuminate\Database\Eloquent\Relations\BelongsTo;
77
+ use Illuminate\Database\Eloquent\Relations\HasMany;
78
+ use Illuminate\Database\Eloquent\SoftDeletes;
79
+
80
+ class User extends Model
81
+ {
82
+ use HasFactory, SoftDeletes, HasUuids;
83
+
84
+ /**
85
+ * The attributes that are mass assignable.
86
+ */
87
+ protected $fillable = [
88
+ 'name',
89
+ 'email',
90
+ 'password',
91
+ 'role',
92
+ 'status',
93
+ 'email_verified_at',
94
+ ];
95
+
96
+ /**
97
+ * The attributes that should be hidden for serialization.
98
+ */
99
+ protected $hidden = [
100
+ 'password',
101
+ 'remember_token',
102
+ ];
103
+
104
+ /**
105
+ * Get the attributes that should be cast.
106
+ */
107
+ protected function casts(): array
108
+ {
109
+ return [
110
+ 'email_verified_at' => 'datetime',
111
+ 'password' => 'hashed',
112
+ 'role' => UserRole::class,
113
+ 'status' => UserStatus::class,
114
+ 'created_at' => 'datetime',
115
+ 'updated_at' => 'datetime',
116
+ 'deleted_at' => 'datetime',
117
+ ];
118
+ }
119
+
120
+ /**
121
+ * Get the posts for the user.
122
+ */
123
+ public function posts(): HasMany
124
+ {
125
+ return $this->hasMany(Post::class);
126
+ }
127
+
128
+ /**
129
+ * Get the comments for the user.
130
+ */
131
+ public function comments(): HasMany
132
+ {
133
+ return $this->hasMany(Comment::class);
134
+ }
135
+
136
+ /**
137
+ * Scope a query to only include active users.
138
+ */
139
+ public function scopeActive($query)
140
+ {
141
+ return $query->where('status', UserStatus::Active);
142
+ }
143
+
144
+ /**
145
+ * Scope a query to only include verified users.
146
+ */
147
+ public function scopeVerified($query)
148
+ {
149
+ return $query->whereNotNull('email_verified_at');
150
+ }
151
+
152
+ /**
153
+ * Get the user's full name.
154
+ */
155
+ public function getFullNameAttribute(): string
156
+ {
157
+ return "{$this->first_name} {$this->last_name}";
158
+ }
159
+
160
+ /**
161
+ * Check if user is admin.
162
+ */
163
+ public function isAdmin(): bool
164
+ {
165
+ return $this->role === UserRole::Admin;
166
+ }
167
+ }
168
+ ```
169
+
170
+ ```php
171
+ <?php
172
+
173
+ namespace App\Models;
174
+
175
+ use App\Enums\PostStatus;
176
+ use Illuminate\Database\Eloquent\Concerns\HasUuids;
177
+ use Illuminate\Database\Eloquent\Factories\HasFactory;
178
+ use Illuminate\Database\Eloquent\Model;
179
+ use Illuminate\Database\Eloquent\Relations\BelongsTo;
180
+ use Illuminate\Database\Eloquent\Relations\HasMany;
181
+ use Illuminate\Database\Eloquent\SoftDeletes;
182
+
183
+ class Post extends Model
184
+ {
185
+ use HasFactory, SoftDeletes, HasUuids;
186
+
187
+ protected $fillable = [
188
+ 'user_id',
189
+ 'title',
190
+ 'slug',
191
+ 'content',
192
+ 'excerpt',
193
+ 'status',
194
+ 'published_at',
195
+ ];
196
+
197
+ protected function casts(): array
198
+ {
199
+ return [
200
+ 'status' => PostStatus::class,
201
+ 'published_at' => 'datetime',
202
+ 'created_at' => 'datetime',
203
+ 'updated_at' => 'datetime',
204
+ ];
205
+ }
206
+
207
+ /**
208
+ * Get the user that owns the post.
209
+ */
210
+ public function user(): BelongsTo
211
+ {
212
+ return $this->belongsTo(User::class);
213
+ }
214
+
215
+ /**
216
+ * Get the comments for the post.
217
+ */
218
+ public function comments(): HasMany
219
+ {
220
+ return $this->hasMany(Comment::class);
221
+ }
222
+
223
+ /**
224
+ * Scope a query to only include published posts.
225
+ */
226
+ public function scopePublished($query)
227
+ {
228
+ return $query->where('status', PostStatus::Published)
229
+ ->whereNotNull('published_at')
230
+ ->where('published_at', '<=', now());
231
+ }
232
+
233
+ /**
234
+ * Scope a query to search posts.
235
+ */
236
+ public function scopeSearch($query, string $search)
237
+ {
238
+ return $query->where(function ($q) use ($search) {
239
+ $q->where('title', 'like', "%{$search}%")
240
+ ->orWhere('content', 'like', "%{$search}%");
241
+ });
242
+ }
243
+
244
+ /**
245
+ * Get the route key for the model.
246
+ */
247
+ public function getRouteKeyName(): string
248
+ {
249
+ return 'slug';
250
+ }
251
+ }
252
+ ```
253
+
254
+ ### Modern PHP 8.3 Enums
255
+
256
+ ```php
257
+ <?php
258
+
259
+ namespace App\Enums;
260
+
261
+ enum UserRole: string
262
+ {
263
+ case Admin = 'admin';
264
+ case Editor = 'editor';
265
+ case Author = 'author';
266
+ case Subscriber = 'subscriber';
267
+
268
+ /**
269
+ * Get the label for the role.
270
+ */
271
+ public function label(): string
272
+ {
273
+ return match($this) {
274
+ self::Admin => 'Administrator',
275
+ self::Editor => 'Editor',
276
+ self::Author => 'Author',
277
+ self::Subscriber => 'Subscriber',
278
+ };
279
+ }
280
+
281
+ /**
282
+ * Get all permissions for the role.
283
+ */
284
+ public function permissions(): array
285
+ {
286
+ return match($this) {
287
+ self::Admin => ['*'],
288
+ self::Editor => ['posts.create', 'posts.edit', 'posts.delete', 'posts.publish'],
289
+ self::Author => ['posts.create', 'posts.edit', 'posts.delete'],
290
+ self::Subscriber => ['posts.read'],
291
+ };
292
+ }
293
+
294
+ /**
295
+ * Check if role can perform action.
296
+ */
297
+ public function can(string $permission): bool
298
+ {
299
+ $permissions = $this->permissions();
300
+
301
+ if (in_array('*', $permissions)) {
302
+ return true;
303
+ }
304
+
305
+ return in_array($permission, $permissions);
306
+ }
307
+
308
+ /**
309
+ * Get all available roles.
310
+ */
311
+ public static function values(): array
312
+ {
313
+ return array_column(self::cases(), 'value');
314
+ }
315
+ }
316
+ ```
317
+
318
+ ```php
319
+ <?php
320
+
321
+ namespace App\Enums;
322
+
323
+ enum PostStatus: string
324
+ {
325
+ case Draft = 'draft';
326
+ case Published = 'published';
327
+ case Archived = 'archived';
328
+
329
+ public function label(): string
330
+ {
331
+ return match($this) {
332
+ self::Draft => 'Draft',
333
+ self::Published => 'Published',
334
+ self::Archived => 'Archived',
335
+ };
336
+ }
337
+
338
+ public function color(): string
339
+ {
340
+ return match($this) {
341
+ self::Draft => 'gray',
342
+ self::Published => 'green',
343
+ self::Archived => 'red',
344
+ };
345
+ }
346
+ }
347
+ ```
348
+
349
+ ### DTOs with Readonly Classes
350
+
351
+ ```php
352
+ <?php
353
+
354
+ namespace App\DTOs;
355
+
356
+ readonly class UserDTO
357
+ {
358
+ public function __construct(
359
+ public int $id,
360
+ public string $name,
361
+ public string $email,
362
+ public UserRole $role,
363
+ public UserStatus $status,
364
+ public ?\DateTimeImmutable $emailVerifiedAt = null,
365
+ ) {}
366
+
367
+ /**
368
+ * Create from Eloquent model.
369
+ */
370
+ public static function fromModel(User $user): self
371
+ {
372
+ return new self(
373
+ id: $user->id,
374
+ name: $user->name,
375
+ email: $user->email,
376
+ role: $user->role,
377
+ status: $user->status,
378
+ emailVerifiedAt: $user->email_verified_at?->toDateTimeImmutable(),
379
+ );
380
+ }
381
+
382
+ /**
383
+ * Create from array.
384
+ */
385
+ public static function fromArray(array $data): self
386
+ {
387
+ return new self(
388
+ id: $data['id'],
389
+ name: $data['name'],
390
+ email: $data['email'],
391
+ role: UserRole::from($data['role']),
392
+ status: UserStatus::from($data['status']),
393
+ emailVerifiedAt: isset($data['email_verified_at'])
394
+ ? new \DateTimeImmutable($data['email_verified_at'])
395
+ : null,
396
+ );
397
+ }
398
+
399
+ /**
400
+ * Convert to array.
401
+ */
402
+ public function toArray(): array
403
+ {
404
+ return [
405
+ 'id' => $this->id,
406
+ 'name' => $this->name,
407
+ 'email' => $this->email,
408
+ 'role' => $this->role->value,
409
+ 'status' => $this->status->value,
410
+ 'email_verified_at' => $this->emailVerifiedAt?->format('Y-m-d H:i:s'),
411
+ ];
412
+ }
413
+ }
414
+ ```
415
+
416
+ ### Repository Pattern
417
+
418
+ ```php
419
+ <?php
420
+
421
+ namespace App\Repositories;
422
+
423
+ use App\Models\User;
424
+ use App\DTOs\UserDTO;
425
+ use Illuminate\Contracts\Pagination\LengthAwarePaginator;
426
+ use Illuminate\Database\Eloquent\Collection;
427
+
428
+ class UserRepository
429
+ {
430
+ /**
431
+ * Find user by ID.
432
+ */
433
+ public function find(int $id): ?User
434
+ {
435
+ return User::find($id);
436
+ }
437
+
438
+ /**
439
+ * Find user by email.
440
+ */
441
+ public function findByEmail(string $email): ?User
442
+ {
443
+ return User::where('email', $email)->first();
444
+ }
445
+
446
+ /**
447
+ * Get all users with pagination.
448
+ */
449
+ public function paginate(int $perPage = 15): LengthAwarePaginator
450
+ {
451
+ return User::with(['posts'])
452
+ ->latest()
453
+ ->paginate($perPage);
454
+ }
455
+
456
+ /**
457
+ * Get active users.
458
+ */
459
+ public function getActive(): Collection
460
+ {
461
+ return User::active()
462
+ ->verified()
463
+ ->orderBy('name')
464
+ ->get();
465
+ }
466
+
467
+ /**
468
+ * Create a new user.
469
+ */
470
+ public function create(array $data): User
471
+ {
472
+ return User::create([
473
+ 'name' => $data['name'],
474
+ 'email' => $data['email'],
475
+ 'password' => $data['password'], // Will be hashed by cast
476
+ 'role' => $data['role'] ?? UserRole::Subscriber,
477
+ 'status' => UserStatus::Active,
478
+ ]);
479
+ }
480
+
481
+ /**
482
+ * Update user.
483
+ */
484
+ public function update(User $user, array $data): User
485
+ {
486
+ $user->update($data);
487
+ return $user->fresh();
488
+ }
489
+
490
+ /**
491
+ * Delete user (soft delete).
492
+ */
493
+ public function delete(User $user): bool
494
+ {
495
+ return $user->delete();
496
+ }
497
+
498
+ /**
499
+ * Force delete user.
500
+ */
501
+ public function forceDelete(User $user): bool
502
+ {
503
+ return $user->forceDelete();
504
+ }
505
+
506
+ /**
507
+ * Search users.
508
+ */
509
+ public function search(string $query, int $perPage = 15): LengthAwarePaginator
510
+ {
511
+ return User::where('name', 'like', "%{$query}%")
512
+ ->orWhere('email', 'like', "%{$query}%")
513
+ ->paginate($perPage);
514
+ }
515
+
516
+ /**
517
+ * Get users by role.
518
+ */
519
+ public function getByRole(UserRole $role): Collection
520
+ {
521
+ return User::where('role', $role)->get();
522
+ }
523
+ }
524
+ ```
525
+
526
+ ### Service Layer with Business Logic
527
+
528
+ ```php
529
+ <?php
530
+
531
+ namespace App\Services;
11
532
 
12
- ## Example 2: TDD Workflow
533
+ use App\DTOs\UserDTO;
534
+ use App\Events\UserRegistered;
535
+ use App\Models\User;
536
+ use App\Repositories\UserRepository;
537
+ use Illuminate\Support\Facades\DB;
538
+ use Illuminate\Support\Facades\Hash;
13
539
 
14
- ```bash
15
- # RED: Write failing test
16
- # GREEN: Implement feature
17
- # REFACTOR: Improve code
540
+ class UserService
541
+ {
542
+ public function __construct(
543
+ private readonly UserRepository $repository,
544
+ ) {}
545
+
546
+ /**
547
+ * Register a new user.
548
+ */
549
+ public function register(array $data): UserDTO
550
+ {
551
+ return DB::transaction(function () use ($data) {
552
+ $user = $this->repository->create([
553
+ 'name' => $data['name'],
554
+ 'email' => $data['email'],
555
+ 'password' => Hash::make($data['password']),
556
+ 'role' => UserRole::Subscriber,
557
+ ]);
558
+
559
+ event(new UserRegistered($user));
560
+
561
+ return UserDTO::fromModel($user);
562
+ });
563
+ }
564
+
565
+ /**
566
+ * Update user profile.
567
+ */
568
+ public function updateProfile(User $user, array $data): UserDTO
569
+ {
570
+ $updateData = [];
571
+
572
+ if (isset($data['name'])) {
573
+ $updateData['name'] = $data['name'];
574
+ }
575
+
576
+ if (isset($data['email']) && $data['email'] !== $user->email) {
577
+ $updateData['email'] = $data['email'];
578
+ $updateData['email_verified_at'] = null;
579
+ }
580
+
581
+ if (isset($data['password'])) {
582
+ $updateData['password'] = Hash::make($data['password']);
583
+ }
584
+
585
+ $updatedUser = $this->repository->update($user, $updateData);
586
+
587
+ return UserDTO::fromModel($updatedUser);
588
+ }
589
+
590
+ /**
591
+ * Verify user email.
592
+ */
593
+ public function verifyEmail(User $user): void
594
+ {
595
+ if ($user->email_verified_at !== null) {
596
+ return;
597
+ }
598
+
599
+ $user->update(['email_verified_at' => now()]);
600
+ }
601
+
602
+ /**
603
+ * Change user role.
604
+ */
605
+ public function changeRole(User $user, UserRole $newRole): UserDTO
606
+ {
607
+ $user->update(['role' => $newRole]);
608
+ return UserDTO::fromModel($user->fresh());
609
+ }
610
+
611
+ /**
612
+ * Get user statistics.
613
+ */
614
+ public function getUserStatistics(User $user): array
615
+ {
616
+ return [
617
+ 'total_posts' => $user->posts()->count(),
618
+ 'published_posts' => $user->posts()->published()->count(),
619
+ 'total_comments' => $user->comments()->count(),
620
+ 'member_since' => $user->created_at->diffForHumans(),
621
+ ];
622
+ }
623
+ }
624
+ ```
625
+
626
+ ### Form Requests with Validation
627
+
628
+ ```php
629
+ <?php
630
+
631
+ namespace App\Http\Requests;
632
+
633
+ use App\Enums\UserRole;
634
+ use Illuminate\Foundation\Http\FormRequest;
635
+ use Illuminate\Validation\Rules\Enum;
636
+ use Illuminate\Validation\Rules\Password;
637
+
638
+ class StoreUserRequest extends FormRequest
639
+ {
640
+ /**
641
+ * Determine if the user is authorized to make this request.
642
+ */
643
+ public function authorize(): bool
644
+ {
645
+ return $this->user()?->isAdmin() ?? false;
646
+ }
647
+
648
+ /**
649
+ * Get the validation rules that apply to the request.
650
+ */
651
+ public function rules(): array
652
+ {
653
+ return [
654
+ 'name' => ['required', 'string', 'max:255'],
655
+ 'email' => ['required', 'email', 'max:255', 'unique:users,email'],
656
+ 'password' => [
657
+ 'required',
658
+ 'confirmed',
659
+ Password::min(8)
660
+ ->letters()
661
+ ->mixedCase()
662
+ ->numbers()
663
+ ->symbols()
664
+ ->uncompromised(),
665
+ ],
666
+ 'role' => ['required', new Enum(UserRole::class)],
667
+ ];
668
+ }
669
+
670
+ /**
671
+ * Get custom messages for validator errors.
672
+ */
673
+ public function messages(): array
674
+ {
675
+ return [
676
+ 'name.required' => 'A name is required',
677
+ 'email.required' => 'An email address is required',
678
+ 'email.unique' => 'This email is already registered',
679
+ 'password.confirmed' => 'Password confirmation does not match',
680
+ ];
681
+ }
682
+
683
+ /**
684
+ * Get custom attributes for validator errors.
685
+ */
686
+ public function attributes(): array
687
+ {
688
+ return [
689
+ 'email' => 'email address',
690
+ ];
691
+ }
692
+
693
+ /**
694
+ * Prepare the data for validation.
695
+ */
696
+ protected function prepareForValidation(): void
697
+ {
698
+ $this->merge([
699
+ 'email' => strtolower($this->email),
700
+ ]);
701
+ }
702
+ }
703
+ ```
704
+
705
+ ```php
706
+ <?php
707
+
708
+ namespace App\Http\Requests;
709
+
710
+ use Illuminate\Foundation\Http\FormRequest;
711
+ use Illuminate\Validation\Rule;
712
+ use Illuminate\Validation\Rules\Password;
713
+
714
+ class UpdateUserRequest extends FormRequest
715
+ {
716
+ public function authorize(): bool
717
+ {
718
+ $user = $this->route('user');
719
+
720
+ // Users can update their own profile, admins can update anyone
721
+ return $this->user()?->id === $user->id
722
+ || $this->user()?->isAdmin();
723
+ }
724
+
725
+ public function rules(): array
726
+ {
727
+ $userId = $this->route('user')->id;
728
+
729
+ return [
730
+ 'name' => ['sometimes', 'string', 'max:255'],
731
+ 'email' => [
732
+ 'sometimes',
733
+ 'email',
734
+ 'max:255',
735
+ Rule::unique('users', 'email')->ignore($userId),
736
+ ],
737
+ 'password' => [
738
+ 'sometimes',
739
+ 'confirmed',
740
+ Password::min(8)->letters()->numbers(),
741
+ ],
742
+ ];
743
+ }
744
+ }
18
745
  ```
19
746
 
20
- ## Example 3: Quality Gate
747
+ ### API Resources for Response Transformation
748
+
749
+ ```php
750
+ <?php
751
+
752
+ namespace App\Http\Resources;
753
+
754
+ use Illuminate\Http\Request;
755
+ use Illuminate\Http\Resources\Json\JsonResource;
756
+
757
+ class UserResource extends JsonResource
758
+ {
759
+ /**
760
+ * Transform the resource into an array.
761
+ */
762
+ public function toArray(Request $request): array
763
+ {
764
+ return [
765
+ 'id' => $this->id,
766
+ 'name' => $this->name,
767
+ 'email' => $this->email,
768
+ 'role' => [
769
+ 'value' => $this->role->value,
770
+ 'label' => $this->role->label(),
771
+ ],
772
+ 'status' => [
773
+ 'value' => $this->status->value,
774
+ 'label' => $this->status->label(),
775
+ ],
776
+ 'email_verified_at' => $this->email_verified_at?->toIso8601String(),
777
+ 'posts_count' => $this->whenCounted('posts'),
778
+ 'posts' => PostResource::collection($this->whenLoaded('posts')),
779
+ 'created_at' => $this->created_at->toIso8601String(),
780
+ 'updated_at' => $this->updated_at->toIso8601String(),
781
+ ];
782
+ }
783
+
784
+ /**
785
+ * Get additional data that should be returned with the resource array.
786
+ */
787
+ public function with(Request $request): array
788
+ {
789
+ return [
790
+ 'meta' => [
791
+ 'version' => '1.0.0',
792
+ ],
793
+ ];
794
+ }
795
+ }
796
+ ```
797
+
798
+ ```php
799
+ <?php
800
+
801
+ namespace App\Http\Resources;
802
+
803
+ use Illuminate\Http\Request;
804
+ use Illuminate\Http\Resources\Json\ResourceCollection;
805
+
806
+ class UserCollection extends ResourceCollection
807
+ {
808
+ /**
809
+ * Transform the resource collection into an array.
810
+ */
811
+ public function toArray(Request $request): array
812
+ {
813
+ return [
814
+ 'data' => $this->collection,
815
+ 'links' => [
816
+ 'self' => url()->current(),
817
+ ],
818
+ 'meta' => [
819
+ 'total' => $this->total(),
820
+ 'per_page' => $this->perPage(),
821
+ 'current_page' => $this->currentPage(),
822
+ 'last_page' => $this->lastPage(),
823
+ ],
824
+ ];
825
+ }
826
+ }
827
+ ```
828
+
829
+ ### API Controllers
830
+
831
+ ```php
832
+ <?php
833
+
834
+ namespace App\Http\Controllers\Api;
835
+
836
+ use App\Http\Controllers\Controller;
837
+ use App\Http\Requests\StoreUserRequest;
838
+ use App\Http\Requests\UpdateUserRequest;
839
+ use App\Http\Resources\UserResource;
840
+ use App\Http\Resources\UserCollection;
841
+ use App\Models\User;
842
+ use App\Services\UserService;
843
+ use Illuminate\Http\JsonResponse;
844
+ use Illuminate\Http\Request;
845
+
846
+ class UserController extends Controller
847
+ {
848
+ public function __construct(
849
+ private readonly UserService $userService,
850
+ ) {}
851
+
852
+ /**
853
+ * Display a listing of the resource.
854
+ */
855
+ public function index(Request $request): UserCollection
856
+ {
857
+ $perPage = $request->input('per_page', 15);
858
+ $users = User::with(['posts'])
859
+ ->latest()
860
+ ->paginate($perPage);
861
+
862
+ return new UserCollection($users);
863
+ }
864
+
865
+ /**
866
+ * Store a newly created resource in storage.
867
+ */
868
+ public function store(StoreUserRequest $request): JsonResponse
869
+ {
870
+ $userDTO = $this->userService->register($request->validated());
871
+
872
+ return response()->json(
873
+ new UserResource(User::find($userDTO->id)),
874
+ 201
875
+ );
876
+ }
877
+
878
+ /**
879
+ * Display the specified resource.
880
+ */
881
+ public function show(User $user): UserResource
882
+ {
883
+ $user->loadMissing(['posts', 'comments']);
884
+ return new UserResource($user);
885
+ }
886
+
887
+ /**
888
+ * Update the specified resource in storage.
889
+ */
890
+ public function update(UpdateUserRequest $request, User $user): UserResource
891
+ {
892
+ $userDTO = $this->userService->updateProfile($user, $request->validated());
893
+ return new UserResource(User::find($userDTO->id));
894
+ }
895
+
896
+ /**
897
+ * Remove the specified resource from storage.
898
+ */
899
+ public function destroy(User $user): JsonResponse
900
+ {
901
+ $user->delete();
902
+
903
+ return response()->json(null, 204);
904
+ }
905
+
906
+ /**
907
+ * Get current authenticated user.
908
+ */
909
+ public function me(Request $request): UserResource
910
+ {
911
+ return new UserResource($request->user());
912
+ }
913
+
914
+ /**
915
+ * Get user statistics.
916
+ */
917
+ public function statistics(User $user): JsonResponse
918
+ {
919
+ $stats = $this->userService->getUserStatistics($user);
920
+
921
+ return response()->json([
922
+ 'data' => $stats,
923
+ ]);
924
+ }
925
+ }
926
+ ```
927
+
928
+ ---
929
+
930
+ ## Queue Jobs and Events
931
+
932
+ ### Job Classes
933
+
934
+ ```php
935
+ <?php
936
+
937
+ namespace App\Jobs;
938
+
939
+ use App\Models\User;
940
+ use App\Notifications\WelcomeNotification;
941
+ use Illuminate\Bus\Queueable;
942
+ use Illuminate\Contracts\Queue\ShouldQueue;
943
+ use Illuminate\Foundation\Bus\Dispatchable;
944
+ use Illuminate\Queue\InteractsWithQueue;
945
+ use Illuminate\Queue\SerializesModels;
946
+
947
+ class SendWelcomeEmail implements ShouldQueue
948
+ {
949
+ use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
950
+
951
+ /**
952
+ * The number of times the job may be attempted.
953
+ */
954
+ public int $tries = 3;
955
+
956
+ /**
957
+ * The maximum number of unhandled exceptions to allow before failing.
958
+ */
959
+ public int $maxExceptions = 3;
960
+
961
+ /**
962
+ * The number of seconds the job can run before timing out.
963
+ */
964
+ public int $timeout = 60;
965
+
966
+ /**
967
+ * Create a new job instance.
968
+ */
969
+ public function __construct(
970
+ public User $user,
971
+ ) {}
972
+
973
+ /**
974
+ * Execute the job.
975
+ */
976
+ public function handle(): void
977
+ {
978
+ $this->user->notify(new WelcomeNotification());
979
+ }
980
+
981
+ /**
982
+ * Handle a job failure.
983
+ */
984
+ public function failed(\Throwable $exception): void
985
+ {
986
+ // Log failure or send notification
987
+ logger()->error('Welcome email failed', [
988
+ 'user_id' => $this->user->id,
989
+ 'exception' => $exception->getMessage(),
990
+ ]);
991
+ }
992
+ }
993
+ ```
994
+
995
+ ### Event Classes
996
+
997
+ ```php
998
+ <?php
999
+
1000
+ namespace App\Events;
1001
+
1002
+ use App\Models\User;
1003
+ use Illuminate\Broadcasting\Channel;
1004
+ use Illuminate\Broadcasting\InteractsWithSockets;
1005
+ use Illuminate\Broadcasting\PresenceChannel;
1006
+ use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
1007
+ use Illuminate\Foundation\Events\Dispatchable;
1008
+ use Illuminate\Queue\SerializesModels;
1009
+
1010
+ class UserRegistered implements ShouldBroadcast
1011
+ {
1012
+ use Dispatchable, InteractsWithSockets, SerializesModels;
1013
+
1014
+ /**
1015
+ * Create a new event instance.
1016
+ */
1017
+ public function __construct(
1018
+ public User $user,
1019
+ ) {}
1020
+
1021
+ /**
1022
+ * Get the channels the event should broadcast on.
1023
+ */
1024
+ public function broadcastOn(): array
1025
+ {
1026
+ return [
1027
+ new PresenceChannel('admin'),
1028
+ new Channel('users'),
1029
+ ];
1030
+ }
1031
+
1032
+ /**
1033
+ * The event's broadcast name.
1034
+ */
1035
+ public function broadcastAs(): string
1036
+ {
1037
+ return 'user.registered';
1038
+ }
1039
+
1040
+ /**
1041
+ * Get the data to broadcast.
1042
+ */
1043
+ public function broadcastWith(): array
1044
+ {
1045
+ return [
1046
+ 'id' => $this->user->id,
1047
+ 'name' => $this->user->name,
1048
+ 'email' => $this->user->email,
1049
+ 'registered_at' => now()->toIso8601String(),
1050
+ ];
1051
+ }
1052
+ }
1053
+ ```
1054
+
1055
+ ### Event Listeners
1056
+
1057
+ ```php
1058
+ <?php
1059
+
1060
+ namespace App\Listeners;
1061
+
1062
+ use App\Events\UserRegistered;
1063
+ use App\Jobs\SendWelcomeEmail;
1064
+
1065
+ class SendWelcomeNotification
1066
+ {
1067
+ /**
1068
+ * Handle the event.
1069
+ */
1070
+ public function handle(UserRegistered $event): void
1071
+ {
1072
+ // Dispatch job to queue
1073
+ SendWelcomeEmail::dispatch($event->user)
1074
+ ->onQueue('emails')
1075
+ ->delay(now()->addMinutes(5));
1076
+ }
1077
+ }
1078
+ ```
1079
+
1080
+ ---
1081
+
1082
+ ## Testing with PHPUnit and Pest
1083
+
1084
+ ### PHPUnit Feature Tests
1085
+
1086
+ ```php
1087
+ <?php
1088
+
1089
+ namespace Tests\Feature;
1090
+
1091
+ use App\Models\User;
1092
+ use App\Enums\UserRole;
1093
+ use Illuminate\Foundation\Testing\RefreshDatabase;
1094
+ use Tests\TestCase;
1095
+
1096
+ class UserApiTest extends TestCase
1097
+ {
1098
+ use RefreshDatabase;
1099
+
1100
+ /**
1101
+ * Test user registration.
1102
+ */
1103
+ public function test_can_register_user(): void
1104
+ {
1105
+ $response = $this->postJson('/api/users', [
1106
+ 'name' => 'John Doe',
1107
+ 'email' => 'john@example.com',
1108
+ 'password' => 'Password123!',
1109
+ 'password_confirmation' => 'Password123!',
1110
+ 'role' => UserRole::Subscriber->value,
1111
+ ]);
1112
+
1113
+ $response->assertStatus(201)
1114
+ ->assertJsonStructure([
1115
+ 'data' => [
1116
+ 'id',
1117
+ 'name',
1118
+ 'email',
1119
+ 'role',
1120
+ 'created_at',
1121
+ ],
1122
+ ]);
1123
+
1124
+ $this->assertDatabaseHas('users', [
1125
+ 'email' => 'john@example.com',
1126
+ ]);
1127
+ }
1128
+
1129
+ /**
1130
+ * Test duplicate email validation.
1131
+ */
1132
+ public function test_cannot_register_with_duplicate_email(): void
1133
+ {
1134
+ User::factory()->create(['email' => 'john@example.com']);
1135
+
1136
+ $response = $this->postJson('/api/users', [
1137
+ 'name' => 'Jane Doe',
1138
+ 'email' => 'john@example.com',
1139
+ 'password' => 'Password123!',
1140
+ 'password_confirmation' => 'Password123!',
1141
+ 'role' => UserRole::Subscriber->value,
1142
+ ]);
1143
+
1144
+ $response->assertStatus(422)
1145
+ ->assertJsonValidationErrors(['email']);
1146
+ }
1147
+
1148
+ /**
1149
+ * Test authentication required.
1150
+ */
1151
+ public function test_authentication_required_for_user_list(): void
1152
+ {
1153
+ $response = $this->getJson('/api/users');
1154
+
1155
+ $response->assertStatus(401);
1156
+ }
1157
+
1158
+ /**
1159
+ * Test authenticated user can fetch users.
1160
+ */
1161
+ public function test_authenticated_user_can_fetch_users(): void
1162
+ {
1163
+ $user = User::factory()->create();
1164
+ User::factory()->count(5)->create();
1165
+
1166
+ $response = $this->actingAs($user)
1167
+ ->getJson('/api/users');
1168
+
1169
+ $response->assertStatus(200)
1170
+ ->assertJsonStructure([
1171
+ 'data' => [
1172
+ '*' => ['id', 'name', 'email'],
1173
+ ],
1174
+ 'meta' => ['total', 'per_page'],
1175
+ ]);
1176
+ }
1177
+
1178
+ /**
1179
+ * Test user can update own profile.
1180
+ */
1181
+ public function test_user_can_update_own_profile(): void
1182
+ {
1183
+ $user = User::factory()->create();
1184
+
1185
+ $response = $this->actingAs($user)
1186
+ ->patchJson("/api/users/{$user->id}", [
1187
+ 'name' => 'Updated Name',
1188
+ ]);
1189
+
1190
+ $response->assertStatus(200);
1191
+
1192
+ $this->assertDatabaseHas('users', [
1193
+ 'id' => $user->id,
1194
+ 'name' => 'Updated Name',
1195
+ ]);
1196
+ }
1197
+
1198
+ /**
1199
+ * Test user cannot update other users.
1200
+ */
1201
+ public function test_user_cannot_update_other_users(): void
1202
+ {
1203
+ $user = User::factory()->create();
1204
+ $otherUser = User::factory()->create();
1205
+
1206
+ $response = $this->actingAs($user)
1207
+ ->patchJson("/api/users/{$otherUser->id}", [
1208
+ 'name' => 'Hacked Name',
1209
+ ]);
1210
+
1211
+ $response->assertStatus(403);
1212
+ }
1213
+ }
1214
+ ```
1215
+
1216
+ ### Pest Tests
1217
+
1218
+ ```php
1219
+ <?php
1220
+
1221
+ use App\Models\User;
1222
+ use App\Models\Post;
1223
+ use App\Enums\PostStatus;
1224
+
1225
+ it('can create a post', function () {
1226
+ $user = User::factory()->create();
1227
+
1228
+ $response = $this->actingAs($user)
1229
+ ->postJson('/api/posts', [
1230
+ 'title' => 'My First Post',
1231
+ 'content' => 'This is the content of my first post.',
1232
+ 'status' => PostStatus::Draft->value,
1233
+ ]);
1234
+
1235
+ $response->assertStatus(201);
1236
+
1237
+ expect(Post::count())->toBe(1);
1238
+ expect(Post::first()->user_id)->toBe($user->id);
1239
+ });
1240
+
1241
+ it('requires authentication to create post', function () {
1242
+ $response = $this->postJson('/api/posts', [
1243
+ 'title' => 'My Post',
1244
+ 'content' => 'Content here.',
1245
+ 'status' => PostStatus::Draft->value,
1246
+ ]);
1247
+
1248
+ $response->assertStatus(401);
1249
+ });
1250
+
1251
+ it('validates post data', function () {
1252
+ $user = User::factory()->create();
1253
+
1254
+ $response = $this->actingAs($user)
1255
+ ->postJson('/api/posts', [
1256
+ 'title' => '', // Empty title
1257
+ 'content' => 'Content',
1258
+ ]);
1259
+
1260
+ $response->assertStatus(422)
1261
+ ->assertJsonValidationErrors(['title']);
1262
+ });
1263
+
1264
+ it('can publish a post', function () {
1265
+ $user = User::factory()->create();
1266
+ $post = Post::factory()->for($user)->create([
1267
+ 'status' => PostStatus::Draft,
1268
+ ]);
1269
+
1270
+ $response = $this->actingAs($user)
1271
+ ->patchJson("/api/posts/{$post->id}", [
1272
+ 'status' => PostStatus::Published->value,
1273
+ ]);
1274
+
1275
+ $response->assertStatus(200);
1276
+
1277
+ expect($post->fresh()->status)->toBe(PostStatus::Published);
1278
+ });
1279
+
1280
+ it('filters published posts only', function () {
1281
+ $user = User::factory()->create();
1282
+
1283
+ Post::factory()->for($user)->count(3)->create([
1284
+ 'status' => PostStatus::Published,
1285
+ 'published_at' => now()->subDay(),
1286
+ ]);
1287
+
1288
+ Post::factory()->for($user)->count(2)->create([
1289
+ 'status' => PostStatus::Draft,
1290
+ ]);
1291
+
1292
+ $response = $this->getJson('/api/posts?status=published');
1293
+
1294
+ $response->assertStatus(200)
1295
+ ->assertJsonCount(3, 'data');
1296
+ });
1297
+
1298
+ test('post belongs to user', function () {
1299
+ $user = User::factory()->create();
1300
+ $post = Post::factory()->for($user)->create();
1301
+
1302
+ expect($post->user->id)->toBe($user->id);
1303
+ expect($user->posts)->toHaveCount(1);
1304
+ });
1305
+ ```
1306
+
1307
+ ### Unit Tests
1308
+
1309
+ ```php
1310
+ <?php
1311
+
1312
+ namespace Tests\Unit;
1313
+
1314
+ use App\DTOs\UserDTO;
1315
+ use App\Enums\UserRole;
1316
+ use App\Enums\UserStatus;
1317
+ use App\Models\User;
1318
+ use App\Repositories\UserRepository;
1319
+ use App\Services\UserService;
1320
+ use Illuminate\Foundation\Testing\RefreshDatabase;
1321
+ use Tests\TestCase;
1322
+
1323
+ class UserServiceTest extends TestCase
1324
+ {
1325
+ use RefreshDatabase;
1326
+
1327
+ private UserService $userService;
1328
+ private UserRepository $userRepository;
1329
+
1330
+ protected function setUp(): void
1331
+ {
1332
+ parent::setUp();
1333
+
1334
+ $this->userRepository = new UserRepository();
1335
+ $this->userService = new UserService($this->userRepository);
1336
+ }
1337
+
1338
+ public function test_can_register_user(): void
1339
+ {
1340
+ $data = [
1341
+ 'name' => 'John Doe',
1342
+ 'email' => 'john@example.com',
1343
+ 'password' => 'password123',
1344
+ ];
1345
+
1346
+ $userDTO = $this->userService->register($data);
1347
+
1348
+ $this->assertInstanceOf(UserDTO::class, $userDTO);
1349
+ $this->assertEquals('John Doe', $userDTO->name);
1350
+ $this->assertEquals('john@example.com', $userDTO->email);
1351
+ $this->assertDatabaseHas('users', ['email' => 'john@example.com']);
1352
+ }
1353
+
1354
+ public function test_can_update_user_profile(): void
1355
+ {
1356
+ $user = User::factory()->create();
1357
+
1358
+ $updateData = [
1359
+ 'name' => 'Updated Name',
1360
+ ];
1361
+
1362
+ $userDTO = $this->userService->updateProfile($user, $updateData);
1363
+
1364
+ $this->assertEquals('Updated Name', $userDTO->name);
1365
+ $this->assertDatabaseHas('users', [
1366
+ 'id' => $user->id,
1367
+ 'name' => 'Updated Name',
1368
+ ]);
1369
+ }
1370
+
1371
+ public function test_can_verify_email(): void
1372
+ {
1373
+ $user = User::factory()->create(['email_verified_at' => null]);
1374
+
1375
+ $this->assertNull($user->email_verified_at);
1376
+
1377
+ $this->userService->verifyEmail($user);
1378
+
1379
+ $this->assertNotNull($user->fresh()->email_verified_at);
1380
+ }
1381
+
1382
+ public function test_can_change_user_role(): void
1383
+ {
1384
+ $user = User::factory()->create(['role' => UserRole::Subscriber]);
1385
+
1386
+ $userDTO = $this->userService->changeRole($user, UserRole::Admin);
1387
+
1388
+ $this->assertEquals(UserRole::Admin, $userDTO->role);
1389
+ $this->assertDatabaseHas('users', [
1390
+ 'id' => $user->id,
1391
+ 'role' => UserRole::Admin->value,
1392
+ ]);
1393
+ }
1394
+ }
1395
+ ```
1396
+
1397
+ ---
1398
+
1399
+ ## Artisan Commands
1400
+
1401
+ ```php
1402
+ <?php
1403
+
1404
+ namespace App\Console\Commands;
1405
+
1406
+ use App\Models\User;
1407
+ use App\Services\UserService;
1408
+ use Illuminate\Console\Command;
1409
+
1410
+ class ProcessInactiveUsersCommand extends Command
1411
+ {
1412
+ /**
1413
+ * The name and signature of the console command.
1414
+ */
1415
+ protected $signature = 'users:process-inactive
1416
+ {--days=30 : Number of days of inactivity}
1417
+ {--notify : Send notification to users}
1418
+ {--delete : Delete inactive users}';
1419
+
1420
+ /**
1421
+ * The console command description.
1422
+ */
1423
+ protected $description = 'Process inactive users';
1424
+
1425
+ /**
1426
+ * Execute the console command.
1427
+ */
1428
+ public function handle(UserService $userService): int
1429
+ {
1430
+ $days = $this->option('days');
1431
+ $notify = $this->option('notify');
1432
+ $delete = $this->option('delete');
1433
+
1434
+ $this->info("Processing users inactive for {$days} days...");
1435
+
1436
+ $inactiveUsers = User::where('last_login_at', '<', now()->subDays($days))
1437
+ ->whereNull('deleted_at')
1438
+ ->get();
1439
+
1440
+ $this->info("Found {$inactiveUsers->count()} inactive users.");
1441
+
1442
+ $bar = $this->output->createProgressBar($inactiveUsers->count());
1443
+ $bar->start();
1444
+
1445
+ foreach ($inactiveUsers as $user) {
1446
+ if ($notify) {
1447
+ // Send notification
1448
+ $user->notify(new InactiveUserNotification());
1449
+ }
1450
+
1451
+ if ($delete) {
1452
+ $user->delete();
1453
+ }
1454
+
1455
+ $bar->advance();
1456
+ }
1457
+
1458
+ $bar->finish();
1459
+ $this->newLine();
1460
+
1461
+ $this->info('Processing complete!');
1462
+
1463
+ return Command::SUCCESS;
1464
+ }
1465
+ }
1466
+ ```
1467
+
1468
+ ---
1469
+
1470
+ ## Database Migrations
1471
+
1472
+ ```php
1473
+ <?php
1474
+
1475
+ use Illuminate\Database\Migrations\Migration;
1476
+ use Illuminate\Database\Schema\Blueprint;
1477
+ use Illuminate\Support\Facades\Schema;
1478
+
1479
+ return new class extends Migration
1480
+ {
1481
+ /**
1482
+ * Run the migrations.
1483
+ */
1484
+ public function up(): void
1485
+ {
1486
+ Schema::create('users', function (Blueprint $table) {
1487
+ $table->id();
1488
+ $table->uuid('uuid')->unique();
1489
+ $table->string('name');
1490
+ $table->string('email')->unique();
1491
+ $table->timestamp('email_verified_at')->nullable();
1492
+ $table->string('password');
1493
+ $table->string('role')->default('subscriber');
1494
+ $table->string('status')->default('active');
1495
+ $table->rememberToken();
1496
+ $table->timestamps();
1497
+ $table->softDeletes();
1498
+
1499
+ $table->index(['email', 'status']);
1500
+ $table->index('created_at');
1501
+ });
1502
+
1503
+ Schema::create('posts', function (Blueprint $table) {
1504
+ $table->id();
1505
+ $table->uuid('uuid')->unique();
1506
+ $table->foreignId('user_id')->constrained()->cascadeOnDelete();
1507
+ $table->string('title');
1508
+ $table->string('slug')->unique();
1509
+ $table->text('excerpt')->nullable();
1510
+ $table->longText('content');
1511
+ $table->string('status')->default('draft');
1512
+ $table->timestamp('published_at')->nullable();
1513
+ $table->timestamps();
1514
+ $table->softDeletes();
1515
+
1516
+ $table->index(['user_id', 'status']);
1517
+ $table->index('published_at');
1518
+ $table->fullText(['title', 'content']);
1519
+ });
1520
+
1521
+ Schema::create('comments', function (Blueprint $table) {
1522
+ $table->id();
1523
+ $table->foreignId('post_id')->constrained()->cascadeOnDelete();
1524
+ $table->foreignId('user_id')->constrained()->cascadeOnDelete();
1525
+ $table->text('content');
1526
+ $table->boolean('is_approved')->default(false);
1527
+ $table->timestamps();
1528
+ $table->softDeletes();
1529
+
1530
+ $table->index(['post_id', 'is_approved']);
1531
+ });
1532
+ }
1533
+
1534
+ /**
1535
+ * Reverse the migrations.
1536
+ */
1537
+ public function down(): void
1538
+ {
1539
+ Schema::dropIfExists('comments');
1540
+ Schema::dropIfExists('posts');
1541
+ Schema::dropIfExists('users');
1542
+ }
1543
+ };
1544
+ ```
1545
+
1546
+ ---
1547
+
1548
+ ## Docker Production Setup
1549
+
1550
+ ```dockerfile
1551
+ # Dockerfile
1552
+ FROM php:8.3-fpm-alpine AS base
1553
+
1554
+ # Install system dependencies
1555
+ RUN apk add --no-cache \
1556
+ nginx \
1557
+ supervisor \
1558
+ postgresql-dev \
1559
+ zip \
1560
+ unzip \
1561
+ git \
1562
+ curl
1563
+
1564
+ # Install PHP extensions
1565
+ RUN docker-php-ext-install \
1566
+ pdo \
1567
+ pdo_pgsql \
1568
+ pgsql \
1569
+ opcache \
1570
+ pcntl
1571
+
1572
+ # Install Composer
1573
+ COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
1574
+
1575
+ WORKDIR /var/www/html
1576
+
1577
+ # Copy composer files
1578
+ COPY composer.json composer.lock ./
1579
+
1580
+ # Install dependencies
1581
+ RUN composer install --no-dev --optimize-autoloader --no-scripts
1582
+
1583
+ # Copy application code
1584
+ COPY . .
1585
+
1586
+ # Set permissions
1587
+ RUN chown -R www-data:www-data /var/www/html \
1588
+ && chmod -R 755 /var/www/html/storage
1589
+
1590
+ # Production optimizations
1591
+ RUN php artisan config:cache \
1592
+ && php artisan route:cache \
1593
+ && php artisan view:cache
1594
+
1595
+ # Expose port
1596
+ EXPOSE 8000
1597
+
1598
+ # Health check
1599
+ HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
1600
+ CMD php artisan schedule:test || exit 1
21
1601
 
22
- ```bash
23
- # Run quality checks
24
- # Verify coverage ≥85%
1602
+ CMD ["php-fpm"]
25
1603
  ```
26
1604
 
27
1605
  ---
28
1606
 
29
- _For more examples, see SKILL.md reference section_
1607
+ Last Updated: 2026-01-10
1608
+ Version: 1.0.0