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

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

Potentially problematic release.


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

Files changed (545) hide show
  1. moai_adk/cli/commands/init.py +4 -1
  2. moai_adk/cli/commands/update.py +31 -26
  3. moai_adk/cli/worktree/cli.py +54 -43
  4. moai_adk/cli/worktree/manager.py +17 -14
  5. moai_adk/cli/worktree/registry.py +313 -19
  6. moai_adk/core/config/unified.py +237 -63
  7. moai_adk/core/error_recovery_system.py +22 -4
  8. moai_adk/core/git/conflict_detector.py +10 -1
  9. moai_adk/core/git/event_detector.py +16 -5
  10. moai_adk/core/language_config_resolver.py +96 -3
  11. moai_adk/core/merge/analyzer.py +509 -324
  12. moai_adk/core/migration/alfred_to_moai_migrator.py +7 -1
  13. moai_adk/core/migration/backup_manager.py +54 -4
  14. moai_adk/core/migration/file_migrator.py +174 -2
  15. moai_adk/core/migration/interactive_checkbox_ui.py +42 -31
  16. moai_adk/core/migration/version_detector.py +123 -19
  17. moai_adk/core/migration/version_migrator.py +44 -9
  18. moai_adk/core/project/backup_utils.py +9 -1
  19. moai_adk/core/project/initializer.py +33 -96
  20. moai_adk/core/project/phase_executor.py +79 -33
  21. moai_adk/core/quality/trust_checker.py +30 -10
  22. moai_adk/core/realtime_monitoring_dashboard.py +3 -3
  23. moai_adk/core/rollback_manager.py +46 -19
  24. moai_adk/core/template/backup.py +4 -3
  25. moai_adk/core/template/config.py +33 -9
  26. moai_adk/core/template/merger.py +34 -8
  27. moai_adk/core/template/processor.py +144 -9
  28. moai_adk/core/template_engine.py +10 -1
  29. moai_adk/core/template_variable_synchronizer.py +16 -2
  30. moai_adk/core/version_sync.py +54 -6
  31. moai_adk/project/configuration.py +1 -1
  32. moai_adk/statusline/config.py +5 -2
  33. moai_adk/statusline/main.py +58 -0
  34. moai_adk/statusline/renderer.py +56 -84
  35. moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +218 -51
  36. moai_adk/templates/.claude/agents/moai/builder-agent.md +46 -11
  37. moai_adk/templates/.claude/agents/moai/builder-command.md +88 -26
  38. moai_adk/templates/.claude/agents/moai/builder-plugin.md +753 -0
  39. moai_adk/templates/.claude/agents/moai/builder-skill.md +79 -8
  40. moai_adk/templates/.claude/agents/moai/expert-backend.md +100 -28
  41. moai_adk/templates/.claude/agents/moai/expert-database.md +20 -12
  42. moai_adk/templates/.claude/agents/moai/expert-debug.md +19 -8
  43. moai_adk/templates/.claude/agents/moai/expert-devops.md +36 -25
  44. moai_adk/templates/.claude/agents/moai/expert-frontend.md +99 -38
  45. moai_adk/templates/.claude/agents/moai/expert-performance.md +661 -0
  46. moai_adk/templates/.claude/agents/moai/expert-refactoring.md +218 -0
  47. moai_adk/templates/.claude/agents/moai/expert-security.md +55 -4
  48. moai_adk/templates/.claude/agents/moai/expert-testing.md +737 -0
  49. moai_adk/templates/.claude/agents/moai/expert-uiux.md +20 -11
  50. moai_adk/templates/.claude/agents/moai/manager-claude-code.md +13 -4
  51. moai_adk/templates/.claude/agents/moai/manager-docs.md +15 -7
  52. moai_adk/templates/.claude/agents/moai/manager-git.md +192 -37
  53. moai_adk/templates/.claude/agents/moai/manager-project.md +13 -7
  54. moai_adk/templates/.claude/agents/moai/manager-quality.md +48 -6
  55. moai_adk/templates/.claude/agents/moai/manager-spec.md +110 -8
  56. moai_adk/templates/.claude/agents/moai/manager-strategy.md +203 -17
  57. moai_adk/templates/.claude/agents/moai/manager-tdd.md +217 -23
  58. moai_adk/templates/.claude/agents/moai/mcp-context7.md +102 -7
  59. moai_adk/templates/.claude/agents/moai/mcp-figma.md +107 -86
  60. moai_adk/templates/.claude/agents/moai/mcp-notion.md +50 -4
  61. moai_adk/templates/.claude/agents/moai/mcp-playwright.md +52 -4
  62. moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +49 -5
  63. moai_adk/templates/.claude/commands/moai/0-project.md +503 -307
  64. moai_adk/templates/.claude/commands/moai/1-plan.md +255 -323
  65. moai_adk/templates/.claude/commands/moai/2-run.md +257 -315
  66. moai_adk/templates/.claude/commands/moai/3-sync.md +421 -56
  67. moai_adk/templates/.claude/commands/moai/9-feedback.md +40 -34
  68. moai_adk/templates/.claude/hooks/moai/__init__.py +0 -0
  69. moai_adk/templates/.claude/hooks/moai/lib/README.md +143 -0
  70. moai_adk/templates/.claude/hooks/moai/lib/__init__.py +19 -0
  71. moai_adk/templates/.claude/hooks/moai/lib/checkpoint.py +4 -1
  72. moai_adk/templates/.claude/hooks/moai/lib/common.py +35 -5
  73. moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +12 -14
  74. moai_adk/templates/.claude/hooks/moai/lib/exceptions.py +171 -0
  75. moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +1 -1
  76. moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +104 -14
  77. moai_adk/templates/.claude/hooks/moai/lib/models.py +9 -7
  78. moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +204 -13
  79. moai_adk/templates/.claude/hooks/moai/lib/project.py +23 -14
  80. moai_adk/templates/.claude/hooks/moai/lib/tool_registry.py +804 -0
  81. moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +14 -2
  82. moai_adk/templates/.claude/hooks/moai/post_tool__ast_grep_scan.py +256 -0
  83. moai_adk/templates/.claude/hooks/moai/post_tool__code_formatter.py +253 -0
  84. moai_adk/templates/.claude/hooks/moai/post_tool__linter.py +307 -0
  85. moai_adk/templates/.claude/hooks/moai/pre_tool__security_guard.py +231 -0
  86. moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +40 -24
  87. moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +248 -32
  88. moai_adk/templates/.claude/output-styles/moai/r2d2.md +265 -2
  89. moai_adk/templates/.claude/output-styles/moai/yoda.md +23 -2
  90. moai_adk/templates/.claude/settings.json +44 -6
  91. moai_adk/templates/.claude/skills/moai-ai-nano-banana/SKILL.md +303 -0
  92. moai_adk/templates/.claude/skills/moai-ai-nano-banana/examples.md +431 -0
  93. moai_adk/templates/.claude/skills/moai-ai-nano-banana/reference.md +139 -0
  94. moai_adk/templates/.claude/skills/moai-ai-nano-banana/scripts/batch_generate.py +560 -0
  95. moai_adk/templates/.claude/skills/moai-ai-nano-banana/scripts/generate_image.py +362 -0
  96. moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +252 -196
  97. moai_adk/templates/.claude/skills/moai-docs-generation/examples.md +252 -0
  98. moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +39 -27
  99. moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +115 -125
  100. moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +150 -150
  101. moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +182 -175
  102. moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +198 -138
  103. moai_adk/templates/.claude/skills/moai-docs-generation/reference.md +234 -0
  104. moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +19 -13
  105. moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +718 -0
  106. moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +464 -0
  107. moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +21 -14
  108. moai_adk/templates/.claude/skills/moai-domain-database/examples.md +830 -0
  109. moai_adk/templates/.claude/skills/moai-domain-database/reference.md +545 -0
  110. moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +124 -425
  111. moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +968 -0
  112. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/component-architecture.md +723 -0
  113. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/nextjs16-patterns.md +713 -0
  114. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/performance-optimization.md +694 -0
  115. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/react19-patterns.md +591 -0
  116. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/state-management.md +680 -0
  117. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/vue35-patterns.md +802 -0
  118. moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +664 -0
  119. moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +17 -15
  120. moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +105 -315
  121. moai_adk/templates/.claude/skills/moai-formats-data/examples.md +804 -0
  122. moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +299 -70
  123. moai_adk/templates/.claude/skills/moai-formats-data/modules/toon-encoding.md +6 -6
  124. moai_adk/templates/.claude/skills/moai-formats-data/reference.md +585 -0
  125. moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +197 -154
  126. moai_adk/templates/.claude/skills/moai-foundation-claude/examples.md +732 -0
  127. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/advanced-agent-patterns.md +370 -0
  128. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-cli-reference-official.md +420 -0
  129. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-devcontainers-official.md +381 -0
  130. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-discover-plugins-official.md +379 -0
  131. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-headless-official.md +378 -0
  132. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +110 -0
  133. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-memory-official.md +2 -2
  134. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-plugin-marketplaces-official.md +308 -0
  135. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-plugins-official.md +432 -0
  136. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sandboxing-official.md +282 -0
  137. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +425 -71
  138. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-statusline-official.md +293 -0
  139. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +325 -143
  140. moai_adk/templates/.claude/skills/moai-foundation-claude/reference.md +209 -0
  141. moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +12 -1
  142. moai_adk/templates/.claude/skills/moai-foundation-context/examples.md +1048 -0
  143. moai_adk/templates/.claude/skills/moai-foundation-context/reference.md +246 -0
  144. moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +33 -134
  145. moai_adk/templates/.claude/skills/moai-foundation-core/examples.md +358 -0
  146. moai_adk/templates/.claude/skills/moai-foundation-core/modules/agents-reference.md +31 -18
  147. moai_adk/templates/.claude/skills/moai-foundation-core/modules/commands-reference.md +30 -30
  148. moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-advanced.md +279 -0
  149. moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-implementation.md +267 -0
  150. moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +121 -650
  151. moai_adk/templates/.claude/skills/moai-foundation-core/modules/patterns.md +22 -0
  152. moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-ears-format.md +200 -0
  153. moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +37 -730
  154. moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-tdd-implementation.md +275 -0
  155. moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +77 -819
  156. moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-implementation.md +244 -0
  157. moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-validation.md +219 -0
  158. moai_adk/templates/.claude/skills/moai-foundation-core/reference.md +478 -0
  159. moai_adk/templates/.claude/skills/moai-foundation-philosopher/SKILL.md +311 -0
  160. moai_adk/templates/.claude/skills/moai-foundation-philosopher/examples.md +228 -0
  161. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/assumption-matrix.md +80 -0
  162. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/cognitive-bias.md +199 -0
  163. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/first-principles.md +140 -0
  164. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/trade-off-analysis.md +154 -0
  165. moai_adk/templates/.claude/skills/moai-foundation-philosopher/reference.md +157 -0
  166. moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +17 -16
  167. moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +431 -0
  168. moai_adk/templates/.claude/skills/moai-lang-cpp/examples.md +17 -0
  169. moai_adk/templates/.claude/skills/moai-lang-cpp/modules/advanced-patterns.md +401 -0
  170. moai_adk/templates/.claude/skills/moai-lang-cpp/reference.md +17 -0
  171. moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +194 -0
  172. moai_adk/templates/.claude/skills/moai-lang-csharp/examples.md +585 -0
  173. moai_adk/templates/.claude/skills/moai-lang-csharp/modules/aspnet-core.md +627 -0
  174. moai_adk/templates/.claude/skills/moai-lang-csharp/modules/blazor-components.md +767 -0
  175. moai_adk/templates/.claude/skills/moai-lang-csharp/modules/cqrs-validation.md +626 -0
  176. moai_adk/templates/.claude/skills/moai-lang-csharp/modules/csharp12-features.md +580 -0
  177. moai_adk/templates/.claude/skills/moai-lang-csharp/modules/efcore-patterns.md +622 -0
  178. moai_adk/templates/.claude/skills/moai-lang-csharp/reference.md +403 -0
  179. moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +395 -0
  180. moai_adk/templates/.claude/skills/moai-lang-elixir/examples.md +17 -0
  181. moai_adk/templates/.claude/skills/moai-lang-elixir/modules/advanced-patterns.md +531 -0
  182. moai_adk/templates/.claude/skills/moai-lang-elixir/reference.md +17 -0
  183. moai_adk/templates/.claude/skills/moai-lang-flutter/SKILL.md +473 -0
  184. moai_adk/templates/.claude/skills/moai-lang-flutter/examples.md +1090 -0
  185. moai_adk/templates/.claude/skills/moai-lang-flutter/reference.md +686 -0
  186. moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +378 -0
  187. moai_adk/templates/.claude/skills/moai-lang-go/examples.md +919 -0
  188. moai_adk/templates/.claude/skills/moai-lang-go/reference.md +737 -0
  189. moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +387 -0
  190. moai_adk/templates/.claude/skills/moai-lang-java/examples.md +864 -0
  191. moai_adk/templates/.claude/skills/moai-lang-java/reference.md +291 -0
  192. moai_adk/templates/.claude/skills/moai-lang-javascript/SKILL.md +419 -0
  193. moai_adk/templates/.claude/skills/moai-lang-javascript/examples.md +973 -0
  194. moai_adk/templates/.claude/skills/moai-lang-javascript/reference.md +1543 -0
  195. moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +384 -0
  196. moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +1006 -0
  197. moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +562 -0
  198. moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +505 -0
  199. moai_adk/templates/.claude/skills/moai-lang-php/examples.md +17 -0
  200. moai_adk/templates/.claude/skills/moai-lang-php/modules/advanced-patterns.md +538 -0
  201. moai_adk/templates/.claude/skills/moai-lang-php/reference.md +17 -0
  202. moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +490 -0
  203. moai_adk/templates/.claude/skills/moai-lang-python/examples.md +977 -0
  204. moai_adk/templates/.claude/skills/moai-lang-python/reference.md +804 -0
  205. moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +390 -0
  206. moai_adk/templates/.claude/skills/moai-lang-r/examples.md +17 -0
  207. moai_adk/templates/.claude/skills/moai-lang-r/modules/advanced-patterns.md +489 -0
  208. moai_adk/templates/.claude/skills/moai-lang-r/reference.md +17 -0
  209. moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +433 -0
  210. moai_adk/templates/.claude/skills/moai-lang-ruby/examples.md +17 -0
  211. moai_adk/templates/.claude/skills/moai-lang-ruby/modules/advanced-patterns.md +309 -0
  212. moai_adk/templates/.claude/skills/moai-lang-ruby/modules/testing-patterns.md +306 -0
  213. moai_adk/templates/.claude/skills/moai-lang-ruby/reference.md +17 -0
  214. moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +378 -0
  215. moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +659 -0
  216. moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +504 -0
  217. moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +212 -0
  218. moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +633 -0
  219. moai_adk/templates/.claude/skills/moai-lang-scala/modules/akka-actors.md +479 -0
  220. moai_adk/templates/.claude/skills/moai-lang-scala/modules/cats-effect.md +489 -0
  221. moai_adk/templates/.claude/skills/moai-lang-scala/modules/functional-programming.md +460 -0
  222. moai_adk/templates/.claude/skills/moai-lang-scala/modules/spark-data.md +498 -0
  223. moai_adk/templates/.claude/skills/moai-lang-scala/modules/zio-patterns.md +541 -0
  224. moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +423 -0
  225. moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +192 -0
  226. moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +918 -0
  227. moai_adk/templates/.claude/skills/moai-lang-swift/modules/combine-reactive.md +256 -0
  228. moai_adk/templates/.claude/skills/moai-lang-swift/modules/concurrency.md +270 -0
  229. moai_adk/templates/.claude/skills/moai-lang-swift/modules/swift6-features.md +265 -0
  230. moai_adk/templates/.claude/skills/moai-lang-swift/modules/swiftui-patterns.md +314 -0
  231. moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +672 -0
  232. moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +365 -0
  233. moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +1089 -0
  234. moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +731 -0
  235. moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +94 -227
  236. moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +26 -6
  237. moai_adk/templates/.claude/skills/moai-library-nextra/examples.md +592 -0
  238. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +331 -12
  239. moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +330 -37
  240. moai_adk/templates/.claude/skills/moai-library-nextra/reference.md +379 -0
  241. moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +17 -13
  242. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-theming.md +1 -1
  243. moai_adk/templates/.claude/skills/moai-platform-auth0/SKILL.md +284 -0
  244. moai_adk/templates/.claude/skills/moai-platform-auth0/examples.md +2446 -0
  245. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/adaptive-mfa.md +233 -0
  246. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/akamai-integration.md +214 -0
  247. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/application-credentials.md +280 -0
  248. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/attack-protection-log-events.md +224 -0
  249. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/attack-protection-overview.md +140 -0
  250. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/bot-detection.md +144 -0
  251. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/breached-password-detection.md +187 -0
  252. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/brute-force-protection.md +189 -0
  253. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/certifications.md +282 -0
  254. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/compliance-overview.md +263 -0
  255. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/continuous-session-protection.md +307 -0
  256. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/customize-mfa.md +177 -0
  257. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/dpop-implementation.md +283 -0
  258. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/fapi-implementation.md +259 -0
  259. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/gdpr-compliance.md +313 -0
  260. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/guardian-configuration.md +269 -0
  261. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/highly-regulated-identity.md +272 -0
  262. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/jwt-fundamentals.md +248 -0
  263. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mdl-verification.md +210 -0
  264. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-api-management.md +278 -0
  265. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-factors.md +226 -0
  266. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-overview.md +174 -0
  267. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mtls-sender-constraining.md +316 -0
  268. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/ropg-flow-mfa.md +216 -0
  269. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/security-center.md +325 -0
  270. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/security-guidance.md +277 -0
  271. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/state-parameters.md +177 -0
  272. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/step-up-authentication.md +251 -0
  273. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/suspicious-ip-throttling.md +240 -0
  274. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/tenant-access-control.md +179 -0
  275. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/webauthn-fido.md +235 -0
  276. moai_adk/templates/.claude/skills/moai-platform-auth0/reference.md +224 -0
  277. moai_adk/templates/.claude/skills/moai-platform-clerk/SKILL.md +426 -0
  278. moai_adk/templates/.claude/skills/moai-platform-clerk/modules/advanced-patterns.md +417 -0
  279. moai_adk/templates/.claude/skills/moai-platform-clerk/reference.md +273 -0
  280. moai_adk/templates/.claude/skills/moai-platform-convex/SKILL.md +229 -0
  281. moai_adk/templates/.claude/skills/moai-platform-convex/examples.md +506 -0
  282. moai_adk/templates/.claude/skills/moai-platform-convex/modules/auth-integration.md +421 -0
  283. moai_adk/templates/.claude/skills/moai-platform-convex/modules/file-storage.md +474 -0
  284. moai_adk/templates/.claude/skills/moai-platform-convex/modules/reactive-queries.md +302 -0
  285. moai_adk/templates/.claude/skills/moai-platform-convex/modules/server-functions.md +452 -0
  286. moai_adk/templates/.claude/skills/moai-platform-convex/reference.md +385 -0
  287. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/SKILL.md +250 -0
  288. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/examples.md +514 -0
  289. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/custom-claims.md +374 -0
  290. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/phone-auth.md +372 -0
  291. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/social-auth.md +339 -0
  292. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/reference.md +382 -0
  293. moai_adk/templates/.claude/skills/moai-platform-firestore/SKILL.md +231 -0
  294. moai_adk/templates/.claude/skills/moai-platform-firestore/examples.md +445 -0
  295. moai_adk/templates/.claude/skills/moai-platform-firestore/modules/offline-cache.md +392 -0
  296. moai_adk/templates/.claude/skills/moai-platform-firestore/modules/realtime-listeners.md +441 -0
  297. moai_adk/templates/.claude/skills/moai-platform-firestore/modules/security-rules.md +352 -0
  298. moai_adk/templates/.claude/skills/moai-platform-firestore/modules/transactions.md +452 -0
  299. moai_adk/templates/.claude/skills/moai-platform-firestore/reference.md +322 -0
  300. moai_adk/templates/.claude/skills/moai-platform-neon/SKILL.md +206 -0
  301. moai_adk/templates/.claude/skills/moai-platform-neon/examples.md +470 -0
  302. moai_adk/templates/.claude/skills/moai-platform-neon/modules/auto-scaling.md +349 -0
  303. moai_adk/templates/.claude/skills/moai-platform-neon/modules/branching-workflows.md +354 -0
  304. moai_adk/templates/.claude/skills/moai-platform-neon/modules/connection-pooling.md +412 -0
  305. moai_adk/templates/.claude/skills/moai-platform-neon/modules/pitr-backups.md +458 -0
  306. moai_adk/templates/.claude/skills/moai-platform-neon/reference.md +272 -0
  307. moai_adk/templates/.claude/skills/moai-platform-railway/SKILL.md +224 -0
  308. moai_adk/templates/.claude/skills/moai-platform-railway/examples.md +539 -0
  309. moai_adk/templates/.claude/skills/moai-platform-railway/modules/docker-deployment.md +261 -0
  310. moai_adk/templates/.claude/skills/moai-platform-railway/modules/multi-service.md +291 -0
  311. moai_adk/templates/.claude/skills/moai-platform-railway/modules/networking-domains.md +338 -0
  312. moai_adk/templates/.claude/skills/moai-platform-railway/modules/volumes-storage.md +353 -0
  313. moai_adk/templates/.claude/skills/moai-platform-railway/reference.md +374 -0
  314. moai_adk/templates/.claude/skills/moai-platform-supabase/SKILL.md +207 -0
  315. moai_adk/templates/.claude/skills/moai-platform-supabase/examples.md +502 -0
  316. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/auth-integration.md +384 -0
  317. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/edge-functions.md +371 -0
  318. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/postgresql-pgvector.md +231 -0
  319. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/realtime-presence.md +354 -0
  320. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/row-level-security.md +286 -0
  321. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/storage-cdn.md +319 -0
  322. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/typescript-patterns.md +453 -0
  323. moai_adk/templates/.claude/skills/moai-platform-supabase/reference.md +284 -0
  324. moai_adk/templates/.claude/skills/moai-platform-vercel/SKILL.md +210 -0
  325. moai_adk/templates/.claude/skills/moai-platform-vercel/examples.md +502 -0
  326. moai_adk/templates/.claude/skills/moai-platform-vercel/modules/analytics-speed.md +348 -0
  327. moai_adk/templates/.claude/skills/moai-platform-vercel/modules/deployment-config.md +344 -0
  328. moai_adk/templates/.claude/skills/moai-platform-vercel/modules/edge-functions.md +222 -0
  329. moai_adk/templates/.claude/skills/moai-platform-vercel/modules/isr-caching.md +306 -0
  330. moai_adk/templates/.claude/skills/moai-platform-vercel/modules/kv-storage.md +399 -0
  331. moai_adk/templates/.claude/skills/moai-platform-vercel/reference.md +360 -0
  332. moai_adk/templates/.claude/skills/moai-plugin-builder/SKILL.md +474 -0
  333. moai_adk/templates/.claude/skills/moai-plugin-builder/examples.md +621 -0
  334. moai_adk/templates/.claude/skills/moai-plugin-builder/modules/migration.md +341 -0
  335. moai_adk/templates/.claude/skills/moai-plugin-builder/modules/validation.md +373 -0
  336. moai_adk/templates/.claude/skills/moai-plugin-builder/reference.md +464 -0
  337. moai_adk/templates/.claude/skills/moai-tool-ast-grep/SKILL.md +307 -0
  338. moai_adk/templates/.claude/skills/moai-tool-ast-grep/examples.md +1099 -0
  339. moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/language-specific.md +307 -0
  340. moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/pattern-syntax.md +237 -0
  341. moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/refactoring-patterns.md +260 -0
  342. moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/security-rules.md +239 -0
  343. moai_adk/templates/.claude/skills/moai-tool-ast-grep/reference.md +288 -0
  344. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/go.yml +90 -0
  345. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/python.yml +101 -0
  346. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/typescript.yml +83 -0
  347. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/quality/complexity-check.yml +94 -0
  348. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/quality/deprecated-apis.yml +84 -0
  349. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/secrets-detection.yml +89 -0
  350. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/sql-injection.yml +45 -0
  351. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/xss-prevention.yml +50 -0
  352. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/sgconfig.yml +54 -0
  353. moai_adk/templates/.claude/skills/moai-tool-opencode/SKILL.md +215 -0
  354. moai_adk/templates/.claude/skills/moai-tool-opencode/examples.md +697 -0
  355. moai_adk/templates/.claude/skills/moai-tool-opencode/index.md +96 -0
  356. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/acp.md +115 -0
  357. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/agents.md +241 -0
  358. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/commands.md +197 -0
  359. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/custom-tools.md +197 -0
  360. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/formatters.md +164 -0
  361. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/keybinds.md +150 -0
  362. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/lsp-servers.md +156 -0
  363. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/mcp-servers.md +214 -0
  364. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/models.md +197 -0
  365. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/permissions.md +162 -0
  366. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/rules.md +129 -0
  367. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/skills.md +192 -0
  368. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/themes.md +200 -0
  369. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/tools.md +169 -0
  370. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/core/config.md +211 -0
  371. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/core/enterprise.md +68 -0
  372. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/core/intro.md +127 -0
  373. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/core/migration-1.0.md +82 -0
  374. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/core/network.md +72 -0
  375. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/core/providers.md +310 -0
  376. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/core/troubleshooting.md +124 -0
  377. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/develop/ecosystem.md +75 -0
  378. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/develop/plugins.md +218 -0
  379. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/develop/sdk.md +266 -0
  380. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/develop/server.md +207 -0
  381. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/usage/cli.md +159 -0
  382. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/usage/github.md +181 -0
  383. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/usage/gitlab.md +122 -0
  384. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/usage/ide.md +74 -0
  385. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/usage/share.md +106 -0
  386. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/usage/tui.md +129 -0
  387. moai_adk/templates/.claude/skills/moai-tool-opencode/modules/usage/zen.md +118 -0
  388. moai_adk/templates/.claude/skills/moai-tool-opencode/reference.md +790 -0
  389. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +190 -424
  390. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/examples.md +544 -0
  391. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/reference.md +307 -0
  392. moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +188 -314
  393. moai_adk/templates/.claude/skills/moai-workflow-project/examples.md +547 -0
  394. moai_adk/templates/.claude/skills/moai-workflow-project/reference.md +275 -0
  395. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +284 -212
  396. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/product-template.md +2 -2
  397. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/structure-template.md +1 -1
  398. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/tech-template.md +22 -1
  399. moai_adk/templates/.claude/skills/moai-workflow-spec/SKILL.md +337 -0
  400. moai_adk/templates/.claude/skills/moai-workflow-spec/examples.md +900 -0
  401. moai_adk/templates/.claude/skills/moai-workflow-spec/modules/advanced-patterns.md +237 -0
  402. moai_adk/templates/.claude/skills/moai-workflow-spec/reference.md +704 -0
  403. moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +13 -0
  404. moai_adk/templates/.claude/skills/moai-workflow-templates/examples.md +552 -0
  405. moai_adk/templates/.claude/skills/moai-workflow-templates/reference.md +346 -0
  406. moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +222 -367
  407. moai_adk/templates/.claude/skills/moai-workflow-testing/examples.md +672 -0
  408. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +52 -3
  409. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +263 -806
  410. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/context7-integration.md +286 -0
  411. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/review-workflows.md +500 -0
  412. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/relevance-analysis.md +154 -0
  413. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/safety-analysis.md +148 -0
  414. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/scoring-algorithms.md +196 -0
  415. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/timeliness-analysis.md +168 -0
  416. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/truthfulness-analysis.md +136 -0
  417. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/usability-analysis.md +153 -0
  418. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework.md +257 -0
  419. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +191 -1344
  420. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/analysis-patterns.md +340 -0
  421. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/core-classes.md +299 -0
  422. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/tool-integration.md +380 -0
  423. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/debugging/debugging-workflows.md +451 -0
  424. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/debugging/error-analysis.md +442 -0
  425. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance/optimization-patterns.md +473 -0
  426. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance/profiling-techniques.md +481 -0
  427. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/ai-optimization.md +241 -0
  428. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/bottleneck-detection.md +397 -0
  429. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/optimization-plan.md +315 -0
  430. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/profiler-core.md +277 -0
  431. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/real-time-monitoring.md +187 -0
  432. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +287 -1194
  433. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/quality-metrics.md +415 -0
  434. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/refactoring/ai-workflows.md +620 -0
  435. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/refactoring/patterns.md +692 -0
  436. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/security-analysis.md +429 -0
  437. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +262 -1192
  438. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/static-analysis.md +438 -0
  439. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd/core-classes.md +397 -0
  440. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/advanced-features.md +494 -0
  441. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/red-green-refactor.md +316 -0
  442. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/test-generation.md +471 -0
  443. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/test-patterns.md +371 -0
  444. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +227 -1222
  445. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/trust5-validation.md +428 -0
  446. moai_adk/templates/.claude/skills/moai-workflow-testing/reference.md +440 -0
  447. moai_adk/templates/.claude/skills/moai-workflow-worktree/SKILL.md +228 -0
  448. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/integration-patterns.md +149 -0
  449. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/moai-adk-integration.md +245 -0
  450. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-advanced.md +310 -0
  451. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-development.md +202 -0
  452. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-workflows.md +302 -0
  453. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/registry-architecture.md +271 -0
  454. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/resource-optimization.md +300 -0
  455. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/tools-integration.md +280 -0
  456. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/troubleshooting.md +397 -0
  457. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/worktree-commands.md +296 -0
  458. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/worktree-management.md +217 -0
  459. moai_adk/templates/.git-hooks/pre-push +168 -50
  460. moai_adk/templates/.gitignore +0 -3
  461. moai_adk/templates/.lsp.json +152 -0
  462. moai_adk/templates/.mcp.json +5 -12
  463. moai_adk/templates/.moai/config/config.yaml +20 -306
  464. moai_adk/templates/.moai/config/multilingual-triggers.yaml +213 -0
  465. moai_adk/templates/.moai/config/questions/_schema.yaml +105 -10
  466. moai_adk/templates/.moai/config/questions/tab0-init.yaml +259 -0
  467. moai_adk/templates/.moai/config/questions/tab1-user.yaml +4 -5
  468. moai_adk/templates/.moai/config/questions/tab2-project.yaml +12 -55
  469. moai_adk/templates/.moai/config/questions/tab3-git.yaml +111 -21
  470. moai_adk/templates/.moai/config/questions/tab4-quality.yaml +34 -18
  471. moai_adk/templates/.moai/config/questions/tab5-system.yaml +19 -75
  472. moai_adk/templates/.moai/config/sections/git-strategy.yaml +83 -7
  473. moai_adk/templates/.moai/config/sections/language.yaml +7 -7
  474. moai_adk/templates/.moai/config/sections/project.yaml +1 -1
  475. moai_adk/templates/.moai/config/sections/quality.yaml +7 -4
  476. moai_adk/templates/.moai/config/sections/system.yaml +11 -1
  477. moai_adk/templates/.moai/config/statusline-config.yaml +19 -13
  478. moai_adk/templates/.moai/scripts/setup-glm.py +4 -4
  479. moai_adk/templates/CLAUDE.md +578 -154
  480. moai_adk/utils/common.py +33 -0
  481. moai_adk/version.py +1 -1
  482. {moai_adk-0.32.8.dist-info → moai_adk-0.41.2.dist-info}/METADATA +905 -109
  483. moai_adk-0.41.2.dist-info/RECORD +683 -0
  484. moai_adk/core/config/auto_spec_config.py +0 -340
  485. moai_adk/core/hooks/post_tool_auto_spec_completion.py +0 -901
  486. moai_adk/core/spec/confidence_scoring.py +0 -680
  487. moai_adk/core/spec/ears_template_engine.py +0 -1247
  488. moai_adk/core/spec/quality_validator.py +0 -687
  489. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/design-system-tokens.md +0 -405
  490. moai_adk/templates/.claude/skills/moai-integration-mcp/SKILL.md +0 -352
  491. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/README.md +0 -52
  492. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/error-handling.md +0 -334
  493. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/integration-patterns.md +0 -310
  494. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/security-authentication.md +0 -256
  495. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/server-architecture.md +0 -253
  496. moai_adk/templates/.claude/skills/moai-lang-unified/README.md +0 -133
  497. moai_adk/templates/.claude/skills/moai-lang-unified/SKILL.md +0 -296
  498. moai_adk/templates/.claude/skills/moai-lang-unified/examples.md +0 -1269
  499. moai_adk/templates/.claude/skills/moai-lang-unified/reference.md +0 -331
  500. moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +0 -336
  501. moai_adk/templates/.claude/skills/moai-platform-baas/README.md +0 -186
  502. moai_adk/templates/.claude/skills/moai-platform-baas/SKILL.md +0 -290
  503. moai_adk/templates/.claude/skills/moai-platform-baas/examples.md +0 -1225
  504. moai_adk/templates/.claude/skills/moai-platform-baas/reference.md +0 -567
  505. moai_adk/templates/.claude/skills/moai-platform-baas/scripts/provider-selector.py +0 -323
  506. moai_adk/templates/.claude/skills/moai-platform-baas/templates/stack-config.yaml +0 -204
  507. moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +0 -520
  508. moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +0 -574
  509. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +0 -317
  510. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +0 -663
  511. moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +0 -190
  512. moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +0 -135
  513. moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +0 -196
  514. moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +0 -17
  515. moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +0 -158
  516. moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +0 -340
  517. moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +0 -713
  518. moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +0 -538
  519. moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +0 -1336
  520. moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +0 -730
  521. moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +0 -608
  522. moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +0 -1005
  523. moai_adk/templates/.claude/skills/moai-workflow-project/test_integration_simple.py +0 -436
  524. moai_adk/templates/.claude/skills/moai-worktree/SKILL.md +0 -410
  525. moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +0 -982
  526. moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +0 -778
  527. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +0 -646
  528. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +0 -782
  529. moai_adk/templates/.moai/cache/personalization.json +0 -10
  530. moai_adk/templates/.moai/config/presets/manual.yaml +0 -28
  531. moai_adk/templates/.moai/config/presets/personal.yaml +0 -30
  532. moai_adk/templates/.moai/config/presets/team.yaml +0 -33
  533. moai_adk-0.32.8.dist-info/RECORD +0 -396
  534. /moai_adk/templates/.claude/skills/moai-library-mermaid/{advanced-patterns.md → modules/advanced-patterns.md} +0 -0
  535. /moai_adk/templates/.claude/skills/moai-library-mermaid/{optimization.md → modules/optimization.md} +0 -0
  536. /moai_adk/templates/.claude/skills/moai-library-nextra/{optimization.md → modules/optimization.md} +0 -0
  537. /moai_adk/templates/.claude/skills/moai-workflow-jit-docs/{advanced-patterns.md → modules/advanced-patterns.md} +0 -0
  538. /moai_adk/templates/.claude/skills/moai-workflow-jit-docs/{optimization.md → modules/optimization.md} +0 -0
  539. /moai_adk/templates/.claude/skills/moai-workflow-testing/{advanced-patterns.md → modules/advanced-patterns.md} +0 -0
  540. /moai_adk/templates/.claude/skills/moai-workflow-testing/{optimization.md → modules/optimization.md} +0 -0
  541. /moai_adk/templates/.claude/skills/{moai-worktree → moai-workflow-worktree}/examples.md +0 -0
  542. /moai_adk/templates/.claude/skills/{moai-worktree → moai-workflow-worktree}/reference.md +0 -0
  543. {moai_adk-0.32.8.dist-info → moai_adk-0.41.2.dist-info}/WHEEL +0 -0
  544. {moai_adk-0.32.8.dist-info → moai_adk-0.41.2.dist-info}/entry_points.txt +0 -0
  545. {moai_adk-0.32.8.dist-info → moai_adk-0.41.2.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,973 @@
1
+ # JavaScript Production-Ready Examples
2
+
3
+ ## Full-Stack Application Setup
4
+
5
+ ### Project Structure
6
+
7
+ ```
8
+ my-api/
9
+ ├── src/
10
+ │ ├── index.js # Application entry point
11
+ │ ├── config/
12
+ │ │ ├── index.js # Configuration loader
13
+ │ │ └── database.js # Database configuration
14
+ │ ├── api/
15
+ │ │ ├── routes/
16
+ │ │ │ ├── index.js # Route aggregator
17
+ │ │ │ ├── users.js # User routes
18
+ │ │ │ └── posts.js # Post routes
19
+ │ │ └── middleware/
20
+ │ │ ├── auth.js # Authentication
21
+ │ │ ├── validate.js # Request validation
22
+ │ │ └── errorHandler.js
23
+ │ ├── services/
24
+ │ │ ├── userService.js # Business logic
25
+ │ │ └── postService.js
26
+ │ ├── repositories/
27
+ │ │ ├── userRepository.js # Data access
28
+ │ │ └── postRepository.js
29
+ │ └── utils/
30
+ │ ├── logger.js
31
+ │ └── helpers.js
32
+ ├── test/
33
+ │ ├── unit/
34
+ │ ├── integration/
35
+ │ └── fixtures/
36
+ ├── package.json
37
+ ├── eslint.config.js
38
+ ├── vitest.config.js
39
+ └── Dockerfile
40
+ ```
41
+
42
+ ### package.json
43
+
44
+ ```json
45
+ {
46
+ "name": "my-api",
47
+ "version": "1.0.0",
48
+ "type": "module",
49
+ "engines": {
50
+ "node": ">=22.0.0"
51
+ },
52
+ "scripts": {
53
+ "dev": "node --watch src/index.js",
54
+ "start": "node src/index.js",
55
+ "test": "vitest",
56
+ "test:coverage": "vitest run --coverage",
57
+ "test:e2e": "vitest run --config vitest.e2e.config.js",
58
+ "lint": "eslint src/",
59
+ "lint:fix": "eslint src/ --fix",
60
+ "format": "biome format --write src/",
61
+ "check": "biome check src/",
62
+ "typecheck": "tsc --noEmit"
63
+ },
64
+ "dependencies": {
65
+ "fastify": "^5.0.0",
66
+ "@fastify/cors": "^10.0.0",
67
+ "@fastify/helmet": "^12.0.0",
68
+ "@fastify/rate-limit": "^10.0.0",
69
+ "@fastify/swagger": "^9.0.0",
70
+ "@fastify/swagger-ui": "^5.0.0",
71
+ "zod": "^3.23.0",
72
+ "pg": "^8.13.0",
73
+ "pino": "^9.5.0",
74
+ "pino-pretty": "^13.0.0",
75
+ "dotenv": "^16.4.0"
76
+ },
77
+ "devDependencies": {
78
+ "@biomejs/biome": "^1.9.0",
79
+ "eslint": "^9.15.0",
80
+ "@eslint/js": "^9.15.0",
81
+ "globals": "^15.12.0",
82
+ "vitest": "^2.1.0",
83
+ "@vitest/coverage-v8": "^2.1.0",
84
+ "typescript": "^5.7.0",
85
+ "@types/node": "^22.10.0"
86
+ }
87
+ }
88
+ ```
89
+
90
+ ---
91
+
92
+ ## Fastify Complete API Example
93
+
94
+ ### src/index.js
95
+
96
+ ```javascript
97
+ import Fastify from 'fastify';
98
+ import cors from '@fastify/cors';
99
+ import helmet from '@fastify/helmet';
100
+ import rateLimit from '@fastify/rate-limit';
101
+ import swagger from '@fastify/swagger';
102
+ import swaggerUi from '@fastify/swagger-ui';
103
+ import { config } from './config/index.js';
104
+ import { routes } from './api/routes/index.js';
105
+ import { errorHandler } from './api/middleware/errorHandler.js';
106
+ import { logger } from './utils/logger.js';
107
+
108
+ const app = Fastify({
109
+ logger: logger,
110
+ disableRequestLogging: false,
111
+ });
112
+
113
+ // Security plugins
114
+ await app.register(helmet);
115
+ await app.register(cors, {
116
+ origin: config.corsOrigins,
117
+ credentials: true,
118
+ });
119
+ await app.register(rateLimit, {
120
+ max: 100,
121
+ timeWindow: '1 minute',
122
+ });
123
+
124
+ // API documentation
125
+ await app.register(swagger, {
126
+ openapi: {
127
+ info: {
128
+ title: 'My API',
129
+ description: 'API documentation',
130
+ version: '1.0.0',
131
+ },
132
+ servers: [{ url: config.apiUrl }],
133
+ components: {
134
+ securitySchemes: {
135
+ bearerAuth: {
136
+ type: 'http',
137
+ scheme: 'bearer',
138
+ bearerFormat: 'JWT',
139
+ },
140
+ },
141
+ },
142
+ },
143
+ });
144
+ await app.register(swaggerUi, { routePrefix: '/docs' });
145
+
146
+ // Routes
147
+ await app.register(routes, { prefix: '/api/v1' });
148
+
149
+ // Error handling
150
+ app.setErrorHandler(errorHandler);
151
+
152
+ // Health check
153
+ app.get('/health', async () => ({ status: 'ok', timestamp: new Date().toISOString() }));
154
+
155
+ // Start server
156
+ const start = async () => {
157
+ try {
158
+ await app.listen({ port: config.port, host: '0.0.0.0' });
159
+ app.log.info(`Server running on http://localhost:${config.port}`);
160
+ } catch (err) {
161
+ app.log.error(err);
162
+ process.exit(1);
163
+ }
164
+ };
165
+
166
+ start();
167
+
168
+ export { app };
169
+ ```
170
+
171
+ ### src/config/index.js
172
+
173
+ ```javascript
174
+ import { z } from 'zod';
175
+ import 'dotenv/config';
176
+
177
+ const envSchema = z.object({
178
+ NODE_ENV: z.enum(['development', 'production', 'test']).default('development'),
179
+ PORT: z.string().transform(Number).default('3000'),
180
+ DATABASE_URL: z.string().url(),
181
+ JWT_SECRET: z.string().min(32),
182
+ CORS_ORIGINS: z.string().default('http://localhost:3000'),
183
+ API_URL: z.string().url().default('http://localhost:3000'),
184
+ LOG_LEVEL: z.enum(['debug', 'info', 'warn', 'error']).default('info'),
185
+ });
186
+
187
+ const parsed = envSchema.safeParse(process.env);
188
+
189
+ if (!parsed.success) {
190
+ console.error('Invalid environment variables:');
191
+ console.error(parsed.error.flatten().fieldErrors);
192
+ process.exit(1);
193
+ }
194
+
195
+ export const config = {
196
+ nodeEnv: parsed.data.NODE_ENV,
197
+ port: parsed.data.PORT,
198
+ databaseUrl: parsed.data.DATABASE_URL,
199
+ jwtSecret: parsed.data.JWT_SECRET,
200
+ corsOrigins: parsed.data.CORS_ORIGINS.split(','),
201
+ apiUrl: parsed.data.API_URL,
202
+ logLevel: parsed.data.LOG_LEVEL,
203
+ isDev: parsed.data.NODE_ENV === 'development',
204
+ isProd: parsed.data.NODE_ENV === 'production',
205
+ };
206
+ ```
207
+
208
+ ### src/api/routes/users.js
209
+
210
+ ```javascript
211
+ import { z } from 'zod';
212
+ import { userService } from '../../services/userService.js';
213
+ import { authenticate } from '../middleware/auth.js';
214
+
215
+ const createUserSchema = z.object({
216
+ name: z.string().min(2).max(100),
217
+ email: z.string().email(),
218
+ password: z.string().min(8).max(100),
219
+ });
220
+
221
+ const updateUserSchema = z.object({
222
+ name: z.string().min(2).max(100).optional(),
223
+ email: z.string().email().optional(),
224
+ });
225
+
226
+ const idParamSchema = z.object({
227
+ id: z.string().uuid(),
228
+ });
229
+
230
+ const querySchema = z.object({
231
+ page: z.string().transform(Number).default('1'),
232
+ limit: z.string().transform(Number).default('10'),
233
+ search: z.string().optional(),
234
+ });
235
+
236
+ export async function userRoutes(fastify) {
237
+ // List users
238
+ fastify.get('/', {
239
+ schema: {
240
+ tags: ['Users'],
241
+ querystring: querySchema,
242
+ response: {
243
+ 200: {
244
+ type: 'object',
245
+ properties: {
246
+ users: { type: 'array' },
247
+ pagination: { type: 'object' },
248
+ },
249
+ },
250
+ },
251
+ },
252
+ handler: async (request, reply) => {
253
+ const query = querySchema.parse(request.query);
254
+ const result = await userService.list(query);
255
+ return result;
256
+ },
257
+ });
258
+
259
+ // Get user by ID
260
+ fastify.get('/:id', {
261
+ schema: {
262
+ tags: ['Users'],
263
+ params: idParamSchema,
264
+ },
265
+ handler: async (request, reply) => {
266
+ const { id } = idParamSchema.parse(request.params);
267
+ const user = await userService.getById(id);
268
+ if (!user) {
269
+ return reply.code(404).send({ error: 'User not found' });
270
+ }
271
+ return user;
272
+ },
273
+ });
274
+
275
+ // Create user
276
+ fastify.post('/', {
277
+ schema: {
278
+ tags: ['Users'],
279
+ body: createUserSchema,
280
+ },
281
+ handler: async (request, reply) => {
282
+ const data = createUserSchema.parse(request.body);
283
+ const user = await userService.create(data);
284
+ return reply.code(201).send(user);
285
+ },
286
+ });
287
+
288
+ // Update user (protected)
289
+ fastify.put('/:id', {
290
+ preHandler: [authenticate],
291
+ schema: {
292
+ tags: ['Users'],
293
+ security: [{ bearerAuth: [] }],
294
+ params: idParamSchema,
295
+ body: updateUserSchema,
296
+ },
297
+ handler: async (request, reply) => {
298
+ const { id } = idParamSchema.parse(request.params);
299
+ const data = updateUserSchema.parse(request.body);
300
+ const user = await userService.update(id, data);
301
+ return user;
302
+ },
303
+ });
304
+
305
+ // Delete user (protected)
306
+ fastify.delete('/:id', {
307
+ preHandler: [authenticate],
308
+ schema: {
309
+ tags: ['Users'],
310
+ security: [{ bearerAuth: [] }],
311
+ params: idParamSchema,
312
+ },
313
+ handler: async (request, reply) => {
314
+ const { id } = idParamSchema.parse(request.params);
315
+ await userService.delete(id);
316
+ return reply.code(204).send();
317
+ },
318
+ });
319
+ }
320
+ ```
321
+
322
+ ### src/services/userService.js
323
+
324
+ ```javascript
325
+ import { userRepository } from '../repositories/userRepository.js';
326
+ import { hashPassword, verifyPassword } from '../utils/crypto.js';
327
+
328
+ class UserService {
329
+ async list({ page, limit, search }) {
330
+ const offset = (page - 1) * limit;
331
+ const [users, total] = await Promise.all([
332
+ userRepository.findMany({ offset, limit, search }),
333
+ userRepository.count({ search }),
334
+ ]);
335
+
336
+ return {
337
+ users,
338
+ pagination: {
339
+ page,
340
+ limit,
341
+ total,
342
+ totalPages: Math.ceil(total / limit),
343
+ },
344
+ };
345
+ }
346
+
347
+ async getById(id) {
348
+ return userRepository.findById(id);
349
+ }
350
+
351
+ async create(data) {
352
+ // Check for existing email
353
+ const existing = await userRepository.findByEmail(data.email);
354
+ if (existing) {
355
+ throw new Error('Email already exists');
356
+ }
357
+
358
+ // Hash password
359
+ const hashedPassword = await hashPassword(data.password);
360
+
361
+ return userRepository.create({
362
+ ...data,
363
+ password: hashedPassword,
364
+ });
365
+ }
366
+
367
+ async update(id, data) {
368
+ const user = await userRepository.findById(id);
369
+ if (!user) {
370
+ throw new Error('User not found');
371
+ }
372
+
373
+ if (data.email && data.email !== user.email) {
374
+ const existing = await userRepository.findByEmail(data.email);
375
+ if (existing) {
376
+ throw new Error('Email already exists');
377
+ }
378
+ }
379
+
380
+ return userRepository.update(id, data);
381
+ }
382
+
383
+ async delete(id) {
384
+ const user = await userRepository.findById(id);
385
+ if (!user) {
386
+ throw new Error('User not found');
387
+ }
388
+ return userRepository.delete(id);
389
+ }
390
+
391
+ async authenticate(email, password) {
392
+ const user = await userRepository.findByEmail(email);
393
+ if (!user) {
394
+ return null;
395
+ }
396
+
397
+ const valid = await verifyPassword(password, user.password);
398
+ if (!valid) {
399
+ return null;
400
+ }
401
+
402
+ return user;
403
+ }
404
+ }
405
+
406
+ export const userService = new UserService();
407
+ ```
408
+
409
+ ### src/repositories/userRepository.js
410
+
411
+ ```javascript
412
+ import { db } from '../config/database.js';
413
+
414
+ class UserRepository {
415
+ async findMany({ offset, limit, search }) {
416
+ let query = `
417
+ SELECT id, name, email, created_at, updated_at
418
+ FROM users
419
+ `;
420
+ const params = [];
421
+
422
+ if (search) {
423
+ query += ` WHERE name ILIKE $1 OR email ILIKE $1`;
424
+ params.push(`%${search}%`);
425
+ }
426
+
427
+ query += ` ORDER BY created_at DESC LIMIT $${params.length + 1} OFFSET $${params.length + 2}`;
428
+ params.push(limit, offset);
429
+
430
+ const result = await db.query(query, params);
431
+ return result.rows;
432
+ }
433
+
434
+ async count({ search }) {
435
+ let query = `SELECT COUNT(*) FROM users`;
436
+ const params = [];
437
+
438
+ if (search) {
439
+ query += ` WHERE name ILIKE $1 OR email ILIKE $1`;
440
+ params.push(`%${search}%`);
441
+ }
442
+
443
+ const result = await db.query(query, params);
444
+ return parseInt(result.rows[0].count);
445
+ }
446
+
447
+ async findById(id) {
448
+ const result = await db.query(
449
+ `SELECT id, name, email, created_at, updated_at FROM users WHERE id = $1`,
450
+ [id]
451
+ );
452
+ return result.rows[0] || null;
453
+ }
454
+
455
+ async findByEmail(email) {
456
+ const result = await db.query(
457
+ `SELECT id, name, email, password, created_at, updated_at FROM users WHERE email = $1`,
458
+ [email]
459
+ );
460
+ return result.rows[0] || null;
461
+ }
462
+
463
+ async create(data) {
464
+ const result = await db.query(
465
+ `INSERT INTO users (name, email, password)
466
+ VALUES ($1, $2, $3)
467
+ RETURNING id, name, email, created_at, updated_at`,
468
+ [data.name, data.email, data.password]
469
+ );
470
+ return result.rows[0];
471
+ }
472
+
473
+ async update(id, data) {
474
+ const fields = [];
475
+ const values = [];
476
+ let paramIndex = 1;
477
+
478
+ for (const [key, value] of Object.entries(data)) {
479
+ if (value !== undefined) {
480
+ fields.push(`${key} = $${paramIndex}`);
481
+ values.push(value);
482
+ paramIndex++;
483
+ }
484
+ }
485
+
486
+ if (fields.length === 0) {
487
+ return this.findById(id);
488
+ }
489
+
490
+ fields.push(`updated_at = NOW()`);
491
+ values.push(id);
492
+
493
+ const result = await db.query(
494
+ `UPDATE users SET ${fields.join(', ')} WHERE id = $${paramIndex}
495
+ RETURNING id, name, email, created_at, updated_at`,
496
+ values
497
+ );
498
+ return result.rows[0];
499
+ }
500
+
501
+ async delete(id) {
502
+ await db.query(`DELETE FROM users WHERE id = $1`, [id]);
503
+ }
504
+ }
505
+
506
+ export const userRepository = new UserRepository();
507
+ ```
508
+
509
+ ---
510
+
511
+ ## Testing Examples
512
+
513
+ ### vitest.config.js
514
+
515
+ ```javascript
516
+ import { defineConfig } from 'vitest/config';
517
+
518
+ export default defineConfig({
519
+ test: {
520
+ globals: true,
521
+ environment: 'node',
522
+ include: ['test/**/*.test.js'],
523
+ coverage: {
524
+ provider: 'v8',
525
+ reporter: ['text', 'json', 'html'],
526
+ include: ['src/**/*.js'],
527
+ exclude: ['src/index.js'],
528
+ thresholds: {
529
+ lines: 80,
530
+ functions: 80,
531
+ branches: 75,
532
+ statements: 80,
533
+ },
534
+ },
535
+ setupFiles: ['test/setup.js'],
536
+ },
537
+ });
538
+ ```
539
+
540
+ ### test/setup.js
541
+
542
+ ```javascript
543
+ import { beforeAll, afterAll, afterEach, vi } from 'vitest';
544
+
545
+ // Mock environment variables
546
+ process.env.NODE_ENV = 'test';
547
+ process.env.DATABASE_URL = 'postgres://test:test@localhost:5432/test';
548
+ process.env.JWT_SECRET = 'test-secret-key-at-least-32-characters';
549
+ process.env.PORT = '3001';
550
+
551
+ // Global test setup
552
+ beforeAll(async () => {
553
+ // Setup test database, start test server, etc.
554
+ });
555
+
556
+ afterAll(async () => {
557
+ // Cleanup
558
+ });
559
+
560
+ afterEach(() => {
561
+ vi.clearAllMocks();
562
+ });
563
+ ```
564
+
565
+ ### test/unit/userService.test.js
566
+
567
+ ```javascript
568
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
569
+ import { userService } from '../../src/services/userService.js';
570
+ import { userRepository } from '../../src/repositories/userRepository.js';
571
+
572
+ // Mock repository
573
+ vi.mock('../../src/repositories/userRepository.js', () => ({
574
+ userRepository: {
575
+ findMany: vi.fn(),
576
+ count: vi.fn(),
577
+ findById: vi.fn(),
578
+ findByEmail: vi.fn(),
579
+ create: vi.fn(),
580
+ update: vi.fn(),
581
+ delete: vi.fn(),
582
+ },
583
+ }));
584
+
585
+ // Mock crypto utilities
586
+ vi.mock('../../src/utils/crypto.js', () => ({
587
+ hashPassword: vi.fn((p) => `hashed_${p}`),
588
+ verifyPassword: vi.fn((plain, hashed) => hashed === `hashed_${plain}`),
589
+ }));
590
+
591
+ describe('UserService', () => {
592
+ const mockUser = {
593
+ id: '123e4567-e89b-12d3-a456-426614174000',
594
+ name: 'John Doe',
595
+ email: 'john@example.com',
596
+ created_at: new Date(),
597
+ updated_at: new Date(),
598
+ };
599
+
600
+ beforeEach(() => {
601
+ vi.clearAllMocks();
602
+ });
603
+
604
+ describe('list', () => {
605
+ it('returns paginated users', async () => {
606
+ userRepository.findMany.mockResolvedValue([mockUser]);
607
+ userRepository.count.mockResolvedValue(1);
608
+
609
+ const result = await userService.list({ page: 1, limit: 10 });
610
+
611
+ expect(result.users).toHaveLength(1);
612
+ expect(result.pagination).toEqual({
613
+ page: 1,
614
+ limit: 10,
615
+ total: 1,
616
+ totalPages: 1,
617
+ });
618
+ });
619
+
620
+ it('calculates offset correctly', async () => {
621
+ userRepository.findMany.mockResolvedValue([]);
622
+ userRepository.count.mockResolvedValue(0);
623
+
624
+ await userService.list({ page: 3, limit: 20 });
625
+
626
+ expect(userRepository.findMany).toHaveBeenCalledWith({
627
+ offset: 40,
628
+ limit: 20,
629
+ search: undefined,
630
+ });
631
+ });
632
+ });
633
+
634
+ describe('create', () => {
635
+ it('creates user with hashed password', async () => {
636
+ userRepository.findByEmail.mockResolvedValue(null);
637
+ userRepository.create.mockResolvedValue(mockUser);
638
+
639
+ const result = await userService.create({
640
+ name: 'John Doe',
641
+ email: 'john@example.com',
642
+ password: 'password123',
643
+ });
644
+
645
+ expect(userRepository.create).toHaveBeenCalledWith({
646
+ name: 'John Doe',
647
+ email: 'john@example.com',
648
+ password: 'hashed_password123',
649
+ });
650
+ expect(result).toEqual(mockUser);
651
+ });
652
+
653
+ it('throws on duplicate email', async () => {
654
+ userRepository.findByEmail.mockResolvedValue(mockUser);
655
+
656
+ await expect(
657
+ userService.create({
658
+ name: 'Jane',
659
+ email: 'john@example.com',
660
+ password: 'password',
661
+ })
662
+ ).rejects.toThrow('Email already exists');
663
+ });
664
+ });
665
+
666
+ describe('authenticate', () => {
667
+ it('returns user on valid credentials', async () => {
668
+ const userWithPassword = { ...mockUser, password: 'hashed_password123' };
669
+ userRepository.findByEmail.mockResolvedValue(userWithPassword);
670
+
671
+ const result = await userService.authenticate('john@example.com', 'password123');
672
+
673
+ expect(result).toEqual(userWithPassword);
674
+ });
675
+
676
+ it('returns null on invalid password', async () => {
677
+ const userWithPassword = { ...mockUser, password: 'hashed_password123' };
678
+ userRepository.findByEmail.mockResolvedValue(userWithPassword);
679
+
680
+ const result = await userService.authenticate('john@example.com', 'wrongpassword');
681
+
682
+ expect(result).toBeNull();
683
+ });
684
+
685
+ it('returns null on non-existent user', async () => {
686
+ userRepository.findByEmail.mockResolvedValue(null);
687
+
688
+ const result = await userService.authenticate('unknown@example.com', 'password');
689
+
690
+ expect(result).toBeNull();
691
+ });
692
+ });
693
+ });
694
+ ```
695
+
696
+ ### test/integration/users.test.js
697
+
698
+ ```javascript
699
+ import { describe, it, expect, beforeAll, afterAll, beforeEach } from 'vitest';
700
+ import { app } from '../../src/index.js';
701
+ import { db } from '../../src/config/database.js';
702
+
703
+ describe('Users API', () => {
704
+ beforeAll(async () => {
705
+ await app.ready();
706
+ });
707
+
708
+ afterAll(async () => {
709
+ await app.close();
710
+ await db.end();
711
+ });
712
+
713
+ beforeEach(async () => {
714
+ // Clean up database
715
+ await db.query('DELETE FROM users');
716
+ });
717
+
718
+ describe('POST /api/v1/users', () => {
719
+ it('creates a new user', async () => {
720
+ const response = await app.inject({
721
+ method: 'POST',
722
+ url: '/api/v1/users',
723
+ payload: {
724
+ name: 'John Doe',
725
+ email: 'john@example.com',
726
+ password: 'password123',
727
+ },
728
+ });
729
+
730
+ expect(response.statusCode).toBe(201);
731
+ const body = JSON.parse(response.body);
732
+ expect(body).toMatchObject({
733
+ name: 'John Doe',
734
+ email: 'john@example.com',
735
+ });
736
+ expect(body.id).toBeDefined();
737
+ expect(body.password).toBeUndefined();
738
+ });
739
+
740
+ it('returns 400 for invalid email', async () => {
741
+ const response = await app.inject({
742
+ method: 'POST',
743
+ url: '/api/v1/users',
744
+ payload: {
745
+ name: 'John Doe',
746
+ email: 'invalid-email',
747
+ password: 'password123',
748
+ },
749
+ });
750
+
751
+ expect(response.statusCode).toBe(400);
752
+ });
753
+ });
754
+
755
+ describe('GET /api/v1/users', () => {
756
+ it('returns paginated users', async () => {
757
+ // Create test users
758
+ await db.query(
759
+ `INSERT INTO users (name, email, password) VALUES
760
+ ('User 1', 'user1@test.com', 'hashed'),
761
+ ('User 2', 'user2@test.com', 'hashed')`
762
+ );
763
+
764
+ const response = await app.inject({
765
+ method: 'GET',
766
+ url: '/api/v1/users?page=1&limit=10',
767
+ });
768
+
769
+ expect(response.statusCode).toBe(200);
770
+ const body = JSON.parse(response.body);
771
+ expect(body.users).toHaveLength(2);
772
+ expect(body.pagination.total).toBe(2);
773
+ });
774
+ });
775
+ });
776
+ ```
777
+
778
+ ---
779
+
780
+ ## Hono Edge Example
781
+
782
+ ### src/index.js (Edge/Serverless)
783
+
784
+ ```javascript
785
+ import { Hono } from 'hono';
786
+ import { cors } from 'hono/cors';
787
+ import { logger } from 'hono/logger';
788
+ import { secureHeaders } from 'hono/secure-headers';
789
+ import { prettyJSON } from 'hono/pretty-json';
790
+ import { compress } from 'hono/compress';
791
+ import { cache } from 'hono/cache';
792
+ import { jwt } from 'hono/jwt';
793
+ import { zValidator } from '@hono/zod-validator';
794
+ import { z } from 'zod';
795
+
796
+ const app = new Hono();
797
+
798
+ // Middleware
799
+ app.use('*', logger());
800
+ app.use('*', secureHeaders());
801
+ app.use('*', compress());
802
+ app.use('/api/*', cors());
803
+ app.use('/api/*', prettyJSON());
804
+
805
+ // Cache static responses
806
+ app.get('/api/health', cache({ cacheName: 'health', cacheControl: 'max-age=60' }));
807
+
808
+ // Health check
809
+ app.get('/api/health', (c) => c.json({ status: 'ok', timestamp: Date.now() }));
810
+
811
+ // JWT protected routes
812
+ app.use('/api/protected/*', jwt({ secret: Bun.env.JWT_SECRET }));
813
+
814
+ // Validation schemas
815
+ const createPostSchema = z.object({
816
+ title: z.string().min(1).max(200),
817
+ content: z.string().min(1),
818
+ tags: z.array(z.string()).optional(),
819
+ });
820
+
821
+ // Routes with validation
822
+ app.post('/api/posts',
823
+ jwt({ secret: Bun.env.JWT_SECRET }),
824
+ zValidator('json', createPostSchema),
825
+ async (c) => {
826
+ const payload = c.get('jwtPayload');
827
+ const data = c.req.valid('json');
828
+
829
+ // Create post logic
830
+ const post = {
831
+ id: crypto.randomUUID(),
832
+ ...data,
833
+ authorId: payload.sub,
834
+ createdAt: new Date().toISOString(),
835
+ };
836
+
837
+ return c.json(post, 201);
838
+ }
839
+ );
840
+
841
+ app.get('/api/posts', async (c) => {
842
+ const page = Number(c.req.query('page') || '1');
843
+ const limit = Number(c.req.query('limit') || '10');
844
+
845
+ // Fetch posts logic
846
+ return c.json({
847
+ posts: [],
848
+ pagination: { page, limit, total: 0 },
849
+ });
850
+ });
851
+
852
+ // Error handling
853
+ app.onError((err, c) => {
854
+ console.error(`${err}`);
855
+ return c.json({ error: err.message }, 500);
856
+ });
857
+
858
+ app.notFound((c) => c.json({ error: 'Not Found' }, 404));
859
+
860
+ // Export for different runtimes
861
+ export default app;
862
+
863
+ // Bun
864
+ // Bun.serve({ port: 3000, fetch: app.fetch });
865
+
866
+ // Node.js
867
+ // import { serve } from '@hono/node-server';
868
+ // serve({ fetch: app.fetch, port: 3000 });
869
+ ```
870
+
871
+ ---
872
+
873
+ ## ESLint 9 Flat Config
874
+
875
+ ### eslint.config.js
876
+
877
+ ```javascript
878
+ import js from '@eslint/js';
879
+ import globals from 'globals';
880
+
881
+ export default [
882
+ {
883
+ ignores: ['dist/', 'node_modules/', 'coverage/'],
884
+ },
885
+ js.configs.recommended,
886
+ {
887
+ files: ['**/*.js'],
888
+ languageOptions: {
889
+ ecmaVersion: 2025,
890
+ sourceType: 'module',
891
+ globals: {
892
+ ...globals.node,
893
+ ...globals.es2025,
894
+ },
895
+ },
896
+ rules: {
897
+ // Best practices
898
+ 'no-unused-vars': ['error', { argsIgnorePattern: '^_', varsIgnorePattern: '^_' }],
899
+ 'no-console': ['warn', { allow: ['warn', 'error', 'info'] }],
900
+ 'prefer-const': 'error',
901
+ 'no-var': 'error',
902
+ 'object-shorthand': 'error',
903
+ 'prefer-template': 'error',
904
+ 'prefer-arrow-callback': 'error',
905
+
906
+ // Code style
907
+ 'arrow-body-style': ['error', 'as-needed'],
908
+ 'no-multiple-empty-lines': ['error', { max: 1 }],
909
+ 'eol-last': ['error', 'always'],
910
+
911
+ // Error prevention
912
+ 'no-return-await': 'error',
913
+ 'require-await': 'error',
914
+ 'no-async-promise-executor': 'error',
915
+ 'no-promise-executor-return': 'error',
916
+ },
917
+ },
918
+ {
919
+ files: ['test/**/*.js'],
920
+ languageOptions: {
921
+ globals: {
922
+ ...globals.vitest,
923
+ },
924
+ },
925
+ rules: {
926
+ 'no-unused-expressions': 'off',
927
+ },
928
+ },
929
+ ];
930
+ ```
931
+
932
+ ---
933
+
934
+ ## Dockerfile
935
+
936
+ ```dockerfile
937
+ # Build stage
938
+ FROM node:22-alpine AS builder
939
+ WORKDIR /app
940
+ COPY package*.json ./
941
+ RUN npm ci --only=production
942
+
943
+ # Production stage
944
+ FROM node:22-alpine
945
+ WORKDIR /app
946
+
947
+ # Security: run as non-root user
948
+ RUN addgroup -g 1001 -S nodejs && \
949
+ adduser -S nodejs -u 1001
950
+
951
+ COPY --from=builder /app/node_modules ./node_modules
952
+ COPY . .
953
+
954
+ # Set ownership
955
+ RUN chown -R nodejs:nodejs /app
956
+
957
+ USER nodejs
958
+
959
+ ENV NODE_ENV=production
960
+ ENV PORT=3000
961
+
962
+ EXPOSE 3000
963
+
964
+ HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
965
+ CMD wget --no-verbose --tries=1 --spider http://localhost:3000/health || exit 1
966
+
967
+ CMD ["node", "src/index.js"]
968
+ ```
969
+
970
+ ---
971
+
972
+ Last Updated: 2025-12-22
973
+ Version: 1.0.0