moai-adk 0.34.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 (524) hide show
  1. moai_adk/__main__.py +136 -5
  2. moai_adk/astgrep/__init__.py +37 -0
  3. moai_adk/astgrep/analyzer.py +522 -0
  4. moai_adk/astgrep/models.py +124 -0
  5. moai_adk/astgrep/rules.py +179 -0
  6. moai_adk/cli/commands/analyze.py +11 -2
  7. moai_adk/cli/commands/doctor.py +7 -1
  8. moai_adk/cli/commands/init.py +321 -11
  9. moai_adk/cli/commands/language.py +7 -1
  10. moai_adk/cli/commands/rank.py +449 -0
  11. moai_adk/cli/commands/status.py +7 -1
  12. moai_adk/cli/commands/switch.py +325 -0
  13. moai_adk/cli/commands/update.py +296 -23
  14. moai_adk/cli/prompts/init_prompts.py +362 -66
  15. moai_adk/cli/prompts/translations/__init__.py +573 -0
  16. moai_adk/cli/ui/prompts.py +61 -2
  17. moai_adk/cli/worktree/cli.py +106 -1
  18. moai_adk/cli/worktree/manager.py +155 -0
  19. moai_adk/core/config/unified.py +244 -63
  20. moai_adk/core/credentials.py +264 -0
  21. moai_adk/core/error_recovery_system.py +22 -4
  22. moai_adk/core/git/conflict_detector.py +10 -1
  23. moai_adk/core/git/event_detector.py +16 -5
  24. moai_adk/core/integration/engine.py +2 -2
  25. moai_adk/core/integration/integration_tester.py +5 -5
  26. moai_adk/core/language_config_resolver.py +9 -3
  27. moai_adk/core/merge/analyzer.py +509 -324
  28. moai_adk/core/migration/alfred_to_moai_migrator.py +7 -1
  29. moai_adk/core/migration/backup_manager.py +54 -4
  30. moai_adk/core/migration/file_migrator.py +174 -2
  31. moai_adk/core/migration/interactive_checkbox_ui.py +42 -31
  32. moai_adk/core/migration/version_detector.py +123 -19
  33. moai_adk/core/migration/version_migrator.py +44 -9
  34. moai_adk/core/model_allocator.py +241 -0
  35. moai_adk/core/project/backup_utils.py +12 -2
  36. moai_adk/core/project/initializer.py +44 -87
  37. moai_adk/core/project/phase_executor.py +95 -33
  38. moai_adk/core/project/validator.py +16 -1
  39. moai_adk/core/quality/trust_checker.py +30 -10
  40. moai_adk/core/rollback_manager.py +60 -25
  41. moai_adk/core/template/backup.py +88 -6
  42. moai_adk/core/template/config.py +33 -9
  43. moai_adk/core/template/merger.py +34 -8
  44. moai_adk/core/template/processor.py +334 -11
  45. moai_adk/core/template_engine.py +10 -1
  46. moai_adk/core/template_variable_synchronizer.py +16 -2
  47. moai_adk/core/version_sync.py +54 -6
  48. moai_adk/foundation/__init__.py +1 -20
  49. moai_adk/foundation/testing.py +1 -1
  50. moai_adk/loop/__init__.py +54 -0
  51. moai_adk/loop/controller.py +305 -0
  52. moai_adk/loop/feedback.py +230 -0
  53. moai_adk/loop/state.py +209 -0
  54. moai_adk/loop/storage.py +220 -0
  55. moai_adk/lsp/__init__.py +70 -0
  56. moai_adk/lsp/client.py +320 -0
  57. moai_adk/lsp/models.py +261 -0
  58. moai_adk/lsp/protocol.py +404 -0
  59. moai_adk/lsp/server_manager.py +248 -0
  60. moai_adk/project/configuration.py +8 -1
  61. moai_adk/py.typed +0 -0
  62. moai_adk/ralph/__init__.py +37 -0
  63. moai_adk/ralph/engine.py +307 -0
  64. moai_adk/rank/__init__.py +21 -0
  65. moai_adk/rank/auth.py +425 -0
  66. moai_adk/rank/client.py +557 -0
  67. moai_adk/rank/config.py +147 -0
  68. moai_adk/rank/hook.py +1503 -0
  69. moai_adk/rank/py.typed +0 -0
  70. moai_adk/statusline/__init__.py +3 -0
  71. moai_adk/statusline/enhanced_output_style_detector.py +5 -5
  72. moai_adk/statusline/main.py +20 -1
  73. moai_adk/statusline/memory_collector.py +268 -0
  74. moai_adk/statusline/renderer.py +54 -38
  75. moai_adk/tag_system/__init__.py +48 -0
  76. moai_adk/tag_system/atomic_ops.py +117 -0
  77. moai_adk/tag_system/linkage.py +335 -0
  78. moai_adk/tag_system/parser.py +176 -0
  79. moai_adk/tag_system/validator.py +200 -0
  80. moai_adk/templates/.claude/agents/moai/builder-agent.md +19 -3
  81. moai_adk/templates/.claude/agents/moai/builder-command.md +62 -16
  82. moai_adk/templates/.claude/agents/moai/builder-plugin.md +763 -0
  83. moai_adk/templates/.claude/agents/moai/builder-skill.md +21 -5
  84. moai_adk/templates/.claude/agents/moai/expert-backend.md +103 -39
  85. moai_adk/templates/.claude/agents/moai/expert-debug.md +9 -3
  86. moai_adk/templates/.claude/agents/moai/expert-devops.md +16 -14
  87. moai_adk/templates/.claude/agents/moai/expert-frontend.md +45 -31
  88. moai_adk/templates/.claude/agents/moai/expert-performance.md +13 -9
  89. moai_adk/templates/.claude/agents/moai/expert-refactoring.md +228 -0
  90. moai_adk/templates/.claude/agents/moai/expert-security.md +19 -3
  91. moai_adk/templates/.claude/agents/moai/expert-testing.md +13 -9
  92. moai_adk/templates/.claude/agents/moai/manager-claude-code.md +8 -2
  93. moai_adk/templates/.claude/agents/moai/manager-docs.md +10 -5
  94. moai_adk/templates/.claude/agents/moai/manager-git.md +99 -27
  95. moai_adk/templates/.claude/agents/moai/manager-project.md +87 -7
  96. moai_adk/templates/.claude/agents/moai/manager-quality.md +22 -5
  97. moai_adk/templates/.claude/agents/moai/manager-spec.md +8 -2
  98. moai_adk/templates/.claude/agents/moai/manager-strategy.md +45 -14
  99. moai_adk/templates/.claude/agents/moai/manager-tdd.md +16 -3
  100. moai_adk/templates/.claude/commands/moai/0-project.md +239 -1185
  101. moai_adk/templates/.claude/commands/moai/1-plan.md +383 -363
  102. moai_adk/templates/.claude/commands/moai/2-run.md +254 -347
  103. moai_adk/templates/.claude/commands/moai/3-sync.md +174 -100
  104. moai_adk/templates/.claude/commands/moai/9-feedback.md +49 -33
  105. moai_adk/templates/.claude/commands/moai/alfred.md +339 -0
  106. moai_adk/templates/.claude/commands/moai/cancel-loop.md +163 -0
  107. moai_adk/templates/.claude/commands/moai/fix.md +264 -0
  108. moai_adk/templates/.claude/commands/moai/loop.md +363 -0
  109. moai_adk/templates/.claude/hooks/moai/lib/README.md +143 -0
  110. moai_adk/templates/.claude/hooks/moai/lib/__init__.py +37 -81
  111. moai_adk/templates/.claude/hooks/moai/lib/alfred_detector.py +105 -0
  112. moai_adk/templates/.claude/hooks/moai/lib/atomic_write.py +122 -0
  113. moai_adk/templates/.claude/hooks/moai/lib/checkpoint.py +4 -1
  114. moai_adk/templates/.claude/hooks/moai/lib/common.py +35 -5
  115. moai_adk/templates/.claude/hooks/moai/lib/config.py +376 -0
  116. moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +24 -28
  117. moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +14 -14
  118. moai_adk/templates/.claude/hooks/moai/lib/enhanced_output_style_detector.py +372 -0
  119. moai_adk/templates/.claude/hooks/moai/lib/exceptions.py +171 -0
  120. moai_adk/templates/.claude/hooks/moai/lib/file_utils.py +95 -0
  121. moai_adk/templates/.claude/hooks/moai/lib/git_collector.py +190 -0
  122. moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +15 -13
  123. moai_adk/templates/.claude/hooks/moai/lib/language_detector.py +298 -0
  124. moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +125 -25
  125. moai_adk/templates/.claude/hooks/moai/lib/main.py +341 -0
  126. moai_adk/templates/.claude/hooks/moai/lib/memory_collector.py +268 -0
  127. moai_adk/templates/.claude/hooks/moai/lib/metrics_tracker.py +78 -0
  128. moai_adk/templates/.claude/hooks/moai/lib/models.py +9 -7
  129. moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +204 -13
  130. moai_adk/templates/.claude/hooks/moai/lib/project.py +23 -14
  131. moai_adk/templates/.claude/hooks/moai/lib/renderer.py +359 -0
  132. moai_adk/templates/.claude/hooks/moai/lib/tag_linkage.py +333 -0
  133. moai_adk/templates/.claude/hooks/moai/lib/tag_parser.py +176 -0
  134. moai_adk/templates/.claude/hooks/moai/lib/tag_validator.py +200 -0
  135. moai_adk/templates/.claude/hooks/moai/lib/timeout.py +5 -5
  136. moai_adk/templates/.claude/hooks/moai/lib/tool_registry.py +896 -0
  137. moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +30 -18
  138. moai_adk/templates/.claude/hooks/moai/lib/update_checker.py +129 -0
  139. moai_adk/templates/.claude/hooks/moai/lib/version_reader.py +741 -0
  140. moai_adk/templates/.claude/hooks/moai/post_tool__ast_grep_scan.py +276 -0
  141. moai_adk/templates/.claude/hooks/moai/post_tool__code_formatter.py +255 -0
  142. moai_adk/templates/.claude/hooks/moai/post_tool__coverage_guard.py +325 -0
  143. moai_adk/templates/.claude/hooks/moai/post_tool__linter.py +315 -0
  144. moai_adk/templates/.claude/hooks/moai/post_tool__lsp_diagnostic.py +508 -0
  145. moai_adk/templates/.claude/hooks/moai/pre_commit__tag_validator.py +287 -0
  146. moai_adk/templates/.claude/hooks/moai/pre_tool__security_guard.py +268 -0
  147. moai_adk/templates/.claude/hooks/moai/pre_tool__tdd_enforcer.py +208 -0
  148. moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +93 -61
  149. moai_adk/templates/.claude/hooks/moai/session_end__rank_submit.py +69 -0
  150. moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +165 -70
  151. moai_adk/templates/.claude/hooks/moai/shared/utils/announcement_translator.py +206 -0
  152. moai_adk/templates/.claude/hooks/moai/stop__loop_controller.py +621 -0
  153. moai_adk/templates/.claude/output-styles/moai/alfred.md +758 -0
  154. moai_adk/templates/.claude/output-styles/moai/r2d2.md +86 -3
  155. moai_adk/templates/.claude/output-styles/moai/yoda.md +2 -2
  156. moai_adk/templates/.claude/settings.json +154 -77
  157. moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +252 -198
  158. moai_adk/templates/.claude/skills/moai-docs-generation/examples.md +169 -323
  159. moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +39 -27
  160. moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +115 -125
  161. moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +150 -150
  162. moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +182 -175
  163. moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +198 -138
  164. moai_adk/templates/.claude/skills/moai-docs-generation/reference.md +226 -320
  165. moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +43 -222
  166. moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +75 -219
  167. moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +103 -463
  168. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/component-architecture.md +723 -0
  169. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/nextjs16-patterns.md +713 -0
  170. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/performance-optimization.md +694 -0
  171. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/react19-patterns.md +591 -0
  172. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/state-management.md +680 -0
  173. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/vue35-patterns.md +802 -0
  174. moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +118 -339
  175. moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +74 -377
  176. moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +299 -70
  177. moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +205 -182
  178. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/advanced-agent-patterns.md +370 -0
  179. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-cli-reference-official.md +420 -0
  180. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +32 -22
  181. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-devcontainers-official.md +381 -0
  182. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-discover-plugins-official.md +379 -0
  183. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-headless-official.md +378 -0
  184. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +110 -0
  185. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-plugin-marketplaces-official.md +308 -0
  186. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-plugins-official.md +640 -0
  187. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sandboxing-official.md +282 -0
  188. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +425 -71
  189. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-statusline-official.md +293 -0
  190. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +325 -143
  191. moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +96 -316
  192. moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +116 -294
  193. moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-advanced.md +279 -0
  194. moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-implementation.md +267 -0
  195. moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +121 -650
  196. moai_adk/templates/.claude/skills/moai-foundation-core/modules/patterns.md +22 -0
  197. moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-ears-format.md +200 -0
  198. moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +37 -730
  199. moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-tdd-implementation.md +275 -0
  200. moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +77 -819
  201. moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-implementation.md +244 -0
  202. moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-validation.md +219 -0
  203. moai_adk/templates/.claude/skills/moai-foundation-philosopher/SKILL.md +14 -18
  204. moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +86 -270
  205. moai_adk/templates/.claude/skills/moai-framework-electron/SKILL.md +288 -0
  206. moai_adk/templates/.claude/skills/moai-framework-electron/examples.md +2082 -0
  207. moai_adk/templates/.claude/skills/moai-framework-electron/reference.md +1649 -0
  208. moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +76 -582
  209. moai_adk/templates/.claude/skills/moai-lang-cpp/examples.md +1239 -0
  210. moai_adk/templates/.claude/skills/moai-lang-cpp/modules/advanced-patterns.md +401 -0
  211. moai_adk/templates/.claude/skills/moai-lang-cpp/reference.md +1136 -0
  212. moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +82 -436
  213. moai_adk/templates/.claude/skills/moai-lang-csharp/examples.md +585 -0
  214. moai_adk/templates/.claude/skills/moai-lang-csharp/modules/aspnet-core.md +627 -0
  215. moai_adk/templates/.claude/skills/moai-lang-csharp/modules/blazor-components.md +767 -0
  216. moai_adk/templates/.claude/skills/moai-lang-csharp/modules/cqrs-validation.md +626 -0
  217. moai_adk/templates/.claude/skills/moai-lang-csharp/modules/csharp12-features.md +580 -0
  218. moai_adk/templates/.claude/skills/moai-lang-csharp/modules/efcore-patterns.md +622 -0
  219. moai_adk/templates/.claude/skills/moai-lang-csharp/reference.md +403 -0
  220. moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +65 -542
  221. moai_adk/templates/.claude/skills/moai-lang-elixir/examples.md +1171 -0
  222. moai_adk/templates/.claude/skills/moai-lang-elixir/modules/advanced-patterns.md +531 -0
  223. moai_adk/templates/.claude/skills/moai-lang-elixir/reference.md +889 -0
  224. moai_adk/templates/.claude/skills/moai-lang-flutter/SKILL.md +32 -405
  225. moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +114 -293
  226. moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +83 -307
  227. moai_adk/templates/.claude/skills/moai-lang-javascript/SKILL.md +179 -0
  228. moai_adk/templates/.claude/skills/moai-lang-javascript/examples.md +973 -0
  229. moai_adk/templates/.claude/skills/moai-lang-javascript/reference.md +1543 -0
  230. moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +42 -279
  231. moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +94 -556
  232. moai_adk/templates/.claude/skills/moai-lang-php/examples.md +1608 -0
  233. moai_adk/templates/.claude/skills/moai-lang-php/modules/advanced-patterns.md +538 -0
  234. moai_adk/templates/.claude/skills/moai-lang-php/reference.md +1323 -0
  235. moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +108 -358
  236. moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +84 -482
  237. moai_adk/templates/.claude/skills/moai-lang-r/examples.md +1154 -0
  238. moai_adk/templates/.claude/skills/moai-lang-r/modules/advanced-patterns.md +489 -0
  239. moai_adk/templates/.claude/skills/moai-lang-r/reference.md +1087 -0
  240. moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +106 -610
  241. moai_adk/templates/.claude/skills/moai-lang-ruby/examples.md +1106 -0
  242. moai_adk/templates/.claude/skills/moai-lang-ruby/modules/advanced-patterns.md +309 -0
  243. moai_adk/templates/.claude/skills/moai-lang-ruby/modules/testing-patterns.md +306 -0
  244. moai_adk/templates/.claude/skills/moai-lang-ruby/reference.md +1024 -0
  245. moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +51 -265
  246. moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +106 -442
  247. moai_adk/templates/.claude/skills/moai-lang-scala/modules/akka-actors.md +479 -0
  248. moai_adk/templates/.claude/skills/moai-lang-scala/modules/cats-effect.md +489 -0
  249. moai_adk/templates/.claude/skills/moai-lang-scala/modules/functional-programming.md +460 -0
  250. moai_adk/templates/.claude/skills/moai-lang-scala/modules/spark-data.md +498 -0
  251. moai_adk/templates/.claude/skills/moai-lang-scala/modules/zio-patterns.md +541 -0
  252. moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +88 -457
  253. moai_adk/templates/.claude/skills/moai-lang-swift/modules/combine-reactive.md +256 -0
  254. moai_adk/templates/.claude/skills/moai-lang-swift/modules/concurrency.md +270 -0
  255. moai_adk/templates/.claude/skills/moai-lang-swift/modules/swift6-features.md +265 -0
  256. moai_adk/templates/.claude/skills/moai-lang-swift/modules/swiftui-patterns.md +314 -0
  257. moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +75 -283
  258. moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +97 -252
  259. moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +64 -240
  260. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +331 -12
  261. moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +330 -37
  262. moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +90 -287
  263. moai_adk/templates/.claude/skills/moai-platform-auth0/SKILL.md +200 -206
  264. moai_adk/templates/.claude/skills/moai-platform-auth0/examples.md +2446 -0
  265. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/adaptive-mfa.md +233 -0
  266. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/akamai-integration.md +214 -0
  267. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/application-credentials.md +280 -0
  268. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/attack-protection-log-events.md +224 -0
  269. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/attack-protection-overview.md +140 -0
  270. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/bot-detection.md +144 -0
  271. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/breached-password-detection.md +187 -0
  272. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/brute-force-protection.md +189 -0
  273. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/certifications.md +282 -0
  274. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/compliance-overview.md +263 -0
  275. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/continuous-session-protection.md +307 -0
  276. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/customize-mfa.md +177 -0
  277. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/dpop-implementation.md +283 -0
  278. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/fapi-implementation.md +259 -0
  279. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/gdpr-compliance.md +313 -0
  280. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/guardian-configuration.md +269 -0
  281. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/highly-regulated-identity.md +272 -0
  282. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/jwt-fundamentals.md +248 -0
  283. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mdl-verification.md +210 -0
  284. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-api-management.md +278 -0
  285. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-factors.md +226 -0
  286. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-overview.md +174 -0
  287. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mtls-sender-constraining.md +316 -0
  288. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/ropg-flow-mfa.md +216 -0
  289. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/security-center.md +325 -0
  290. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/security-guidance.md +277 -0
  291. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/state-parameters.md +177 -0
  292. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/step-up-authentication.md +251 -0
  293. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/suspicious-ip-throttling.md +240 -0
  294. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/tenant-access-control.md +179 -0
  295. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/webauthn-fido.md +235 -0
  296. moai_adk/templates/.claude/skills/moai-platform-auth0/reference.md +224 -0
  297. moai_adk/templates/.claude/skills/moai-platform-clerk/SKILL.md +75 -330
  298. moai_adk/templates/.claude/skills/moai-platform-clerk/examples.md +1426 -0
  299. moai_adk/templates/.claude/skills/moai-platform-clerk/modules/advanced-patterns.md +417 -0
  300. moai_adk/templates/.claude/skills/moai-platform-clerk/reference.md +273 -0
  301. moai_adk/templates/.claude/skills/moai-platform-convex/SKILL.md +100 -340
  302. moai_adk/templates/.claude/skills/moai-platform-convex/examples.md +506 -0
  303. moai_adk/templates/.claude/skills/moai-platform-convex/modules/auth-integration.md +421 -0
  304. moai_adk/templates/.claude/skills/moai-platform-convex/modules/file-storage.md +474 -0
  305. moai_adk/templates/.claude/skills/moai-platform-convex/modules/reactive-queries.md +302 -0
  306. moai_adk/templates/.claude/skills/moai-platform-convex/modules/server-functions.md +452 -0
  307. moai_adk/templates/.claude/skills/moai-platform-convex/reference.md +385 -0
  308. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/SKILL.md +113 -326
  309. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/examples.md +514 -0
  310. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/custom-claims.md +374 -0
  311. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/phone-auth.md +372 -0
  312. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/social-auth.md +339 -0
  313. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/reference.md +382 -0
  314. moai_adk/templates/.claude/skills/moai-platform-firestore/SKILL.md +71 -302
  315. moai_adk/templates/.claude/skills/moai-platform-firestore/examples.md +445 -0
  316. moai_adk/templates/.claude/skills/moai-platform-firestore/modules/offline-cache.md +392 -0
  317. moai_adk/templates/.claude/skills/moai-platform-firestore/modules/realtime-listeners.md +441 -0
  318. moai_adk/templates/.claude/skills/moai-platform-firestore/modules/security-rules.md +352 -0
  319. moai_adk/templates/.claude/skills/moai-platform-firestore/modules/transactions.md +452 -0
  320. moai_adk/templates/.claude/skills/moai-platform-firestore/reference.md +322 -0
  321. moai_adk/templates/.claude/skills/moai-platform-neon/SKILL.md +101 -412
  322. moai_adk/templates/.claude/skills/moai-platform-neon/examples.md +470 -0
  323. moai_adk/templates/.claude/skills/moai-platform-neon/modules/auto-scaling.md +349 -0
  324. moai_adk/templates/.claude/skills/moai-platform-neon/modules/branching-workflows.md +354 -0
  325. moai_adk/templates/.claude/skills/moai-platform-neon/modules/connection-pooling.md +412 -0
  326. moai_adk/templates/.claude/skills/moai-platform-neon/modules/pitr-backups.md +458 -0
  327. moai_adk/templates/.claude/skills/moai-platform-neon/reference.md +272 -0
  328. moai_adk/templates/.claude/skills/moai-platform-railway/SKILL.md +96 -327
  329. moai_adk/templates/.claude/skills/moai-platform-railway/examples.md +539 -0
  330. moai_adk/templates/.claude/skills/moai-platform-railway/modules/docker-deployment.md +261 -0
  331. moai_adk/templates/.claude/skills/moai-platform-railway/modules/multi-service.md +291 -0
  332. moai_adk/templates/.claude/skills/moai-platform-railway/modules/networking-domains.md +338 -0
  333. moai_adk/templates/.claude/skills/moai-platform-railway/modules/volumes-storage.md +353 -0
  334. moai_adk/templates/.claude/skills/moai-platform-railway/reference.md +374 -0
  335. moai_adk/templates/.claude/skills/moai-platform-supabase/SKILL.md +103 -428
  336. moai_adk/templates/.claude/skills/moai-platform-supabase/examples.md +502 -0
  337. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/auth-integration.md +384 -0
  338. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/edge-functions.md +371 -0
  339. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/postgresql-pgvector.md +231 -0
  340. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/realtime-presence.md +354 -0
  341. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/row-level-security.md +286 -0
  342. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/storage-cdn.md +319 -0
  343. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/typescript-patterns.md +453 -0
  344. moai_adk/templates/.claude/skills/moai-platform-supabase/reference.md +284 -0
  345. moai_adk/templates/.claude/skills/moai-platform-vercel/SKILL.md +96 -446
  346. moai_adk/templates/.claude/skills/moai-platform-vercel/examples.md +502 -0
  347. moai_adk/templates/.claude/skills/moai-platform-vercel/modules/analytics-speed.md +348 -0
  348. moai_adk/templates/.claude/skills/moai-platform-vercel/modules/deployment-config.md +344 -0
  349. moai_adk/templates/.claude/skills/moai-platform-vercel/modules/edge-functions.md +222 -0
  350. moai_adk/templates/.claude/skills/moai-platform-vercel/modules/isr-caching.md +306 -0
  351. moai_adk/templates/.claude/skills/moai-platform-vercel/modules/kv-storage.md +399 -0
  352. moai_adk/templates/.claude/skills/moai-platform-vercel/reference.md +360 -0
  353. moai_adk/templates/.claude/skills/moai-tool-ast-grep/SKILL.md +193 -0
  354. moai_adk/templates/.claude/skills/moai-tool-ast-grep/examples.md +1099 -0
  355. moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/language-specific.md +307 -0
  356. moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/pattern-syntax.md +237 -0
  357. moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/refactoring-patterns.md +260 -0
  358. moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/security-rules.md +239 -0
  359. moai_adk/templates/.claude/skills/moai-tool-ast-grep/reference.md +288 -0
  360. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/go.yml +90 -0
  361. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/python.yml +101 -0
  362. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/typescript.yml +83 -0
  363. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/quality/complexity-check.yml +94 -0
  364. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/quality/deprecated-apis.yml +84 -0
  365. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/secrets-detection.yml +89 -0
  366. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/sql-injection.yml +45 -0
  367. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/xss-prevention.yml +50 -0
  368. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/sgconfig.yml +54 -0
  369. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +225 -423
  370. moai_adk/templates/.claude/skills/moai-workflow-loop/SKILL.md +197 -0
  371. moai_adk/templates/.claude/skills/moai-workflow-loop/examples.md +1063 -0
  372. moai_adk/templates/.claude/skills/moai-workflow-loop/reference.md +1414 -0
  373. moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +211 -314
  374. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +15 -43
  375. moai_adk/templates/.claude/skills/moai-workflow-spec/SKILL.md +119 -316
  376. moai_adk/templates/.claude/skills/moai-workflow-spec/modules/advanced-patterns.md +237 -0
  377. moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +96 -203
  378. moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +201 -388
  379. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +52 -3
  380. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +263 -806
  381. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/context7-integration.md +286 -0
  382. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/review-workflows.md +500 -0
  383. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/relevance-analysis.md +154 -0
  384. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/safety-analysis.md +148 -0
  385. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/scoring-algorithms.md +196 -0
  386. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/timeliness-analysis.md +168 -0
  387. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/truthfulness-analysis.md +136 -0
  388. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/usability-analysis.md +153 -0
  389. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework.md +257 -0
  390. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +191 -1344
  391. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/analysis-patterns.md +340 -0
  392. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/core-classes.md +299 -0
  393. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/tool-integration.md +380 -0
  394. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/debugging/debugging-workflows.md +451 -0
  395. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/debugging/error-analysis.md +442 -0
  396. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance/optimization-patterns.md +473 -0
  397. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance/profiling-techniques.md +481 -0
  398. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/ai-optimization.md +241 -0
  399. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/bottleneck-detection.md +397 -0
  400. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/optimization-plan.md +315 -0
  401. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/profiler-core.md +277 -0
  402. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/real-time-monitoring.md +187 -0
  403. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +287 -1194
  404. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/quality-metrics.md +415 -0
  405. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/refactoring/ai-workflows.md +620 -0
  406. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/refactoring/patterns.md +692 -0
  407. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/security-analysis.md +429 -0
  408. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +262 -1192
  409. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/static-analysis.md +438 -0
  410. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd/core-classes.md +397 -0
  411. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/advanced-features.md +494 -0
  412. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/red-green-refactor.md +316 -0
  413. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/test-generation.md +471 -0
  414. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/test-patterns.md +371 -0
  415. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +227 -1222
  416. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/trust5-validation.md +428 -0
  417. moai_adk/templates/.claude/skills/moai-workflow-worktree/SKILL.md +228 -0
  418. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/integration-patterns.md +149 -0
  419. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/moai-adk-integration.md +245 -0
  420. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-advanced.md +310 -0
  421. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-development.md +202 -0
  422. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-workflows.md +302 -0
  423. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/registry-architecture.md +271 -0
  424. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/resource-optimization.md +300 -0
  425. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/tools-integration.md +280 -0
  426. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/troubleshooting.md +397 -0
  427. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/worktree-commands.md +296 -0
  428. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/worktree-management.md +217 -0
  429. moai_adk/templates/.git-hooks/pre-push +162 -59
  430. moai_adk/templates/.github/workflows/ci-universal.yml +934 -133
  431. moai_adk/templates/.gitignore +65 -107
  432. moai_adk/templates/.lsp.json +152 -0
  433. moai_adk/templates/.mcp.json +2 -20
  434. moai_adk/templates/.moai/announcements/en.json +18 -0
  435. moai_adk/templates/.moai/announcements/ja.json +18 -0
  436. moai_adk/templates/.moai/announcements/ko.json +18 -0
  437. moai_adk/templates/.moai/announcements/zh.json +18 -0
  438. moai_adk/templates/.moai/config/config.yaml +8 -2
  439. moai_adk/templates/.moai/config/multilingual-triggers.yaml +213 -0
  440. moai_adk/templates/.moai/config/sections/language.yaml +2 -2
  441. moai_adk/templates/.moai/config/sections/llm.yaml +41 -0
  442. moai_adk/templates/.moai/config/sections/pricing.yaml +30 -0
  443. moai_adk/templates/.moai/config/sections/project.yaml +2 -2
  444. moai_adk/templates/.moai/config/sections/quality.yaml +43 -5
  445. moai_adk/templates/.moai/config/sections/ralph.yaml +55 -0
  446. moai_adk/templates/.moai/config/sections/system.yaml +46 -1
  447. moai_adk/templates/.moai/config/sections/user.yaml +1 -1
  448. moai_adk/templates/.moai/config/statusline-config.yaml +2 -2
  449. moai_adk/templates/.moai/llm-configs/glm.json +22 -0
  450. moai_adk/templates/CLAUDE.ja.md +343 -0
  451. moai_adk/templates/CLAUDE.ko.md +343 -0
  452. moai_adk/templates/CLAUDE.md +200 -499
  453. moai_adk/templates/CLAUDE.zh.md +343 -0
  454. moai_adk/utils/common.py +37 -0
  455. moai_adk/version.py +1 -1
  456. moai_adk-1.1.0.dist-info/METADATA +2443 -0
  457. moai_adk-1.1.0.dist-info/RECORD +701 -0
  458. {moai_adk-0.34.0.dist-info → moai_adk-1.1.0.dist-info}/entry_points.txt +2 -0
  459. moai_adk-1.1.0.dist-info/licenses/LICENSE +99 -0
  460. moai_adk/core/config/auto_spec_config.py +0 -340
  461. moai_adk/core/hooks/post_tool_auto_spec_completion.py +0 -901
  462. moai_adk/core/spec/confidence_scoring.py +0 -680
  463. moai_adk/core/spec/ears_template_engine.py +0 -1247
  464. moai_adk/core/spec/quality_validator.py +0 -687
  465. moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +0 -670
  466. moai_adk/templates/.claude/agents/moai/expert-database.md +0 -777
  467. moai_adk/templates/.claude/agents/moai/expert-uiux.md +0 -1041
  468. moai_adk/templates/.claude/agents/moai/mcp-context7.md +0 -458
  469. moai_adk/templates/.claude/agents/moai/mcp-figma.md +0 -1607
  470. moai_adk/templates/.claude/agents/moai/mcp-notion.md +0 -789
  471. moai_adk/templates/.claude/agents/moai/mcp-playwright.md +0 -469
  472. moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +0 -1032
  473. moai_adk/templates/.claude/skills/moai-ai-nano-banana/SKILL.md +0 -438
  474. moai_adk/templates/.claude/skills/moai-ai-nano-banana/examples.md +0 -431
  475. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/design-system-tokens.md +0 -405
  476. moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +0 -336
  477. moai_adk/templates/.claude/skills/moai-mcp-figma/SKILL.md +0 -402
  478. moai_adk/templates/.claude/skills/moai-mcp-figma/advanced-patterns.md +0 -607
  479. moai_adk/templates/.claude/skills/moai-mcp-notion/SKILL.md +0 -300
  480. moai_adk/templates/.claude/skills/moai-mcp-notion/advanced-patterns.md +0 -537
  481. moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +0 -520
  482. moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +0 -574
  483. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +0 -317
  484. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +0 -663
  485. moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +0 -190
  486. moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +0 -175
  487. moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +0 -196
  488. moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +0 -17
  489. moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +0 -158
  490. moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +0 -340
  491. moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +0 -713
  492. moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +0 -538
  493. moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +0 -1336
  494. moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +0 -730
  495. moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +0 -608
  496. moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +0 -1005
  497. moai_adk/templates/.claude/skills/moai-workflow-project/test_integration_simple.py +0 -436
  498. moai_adk/templates/.claude/skills/moai-worktree/SKILL.md +0 -411
  499. moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +0 -982
  500. moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +0 -778
  501. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +0 -646
  502. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +0 -782
  503. moai_adk/templates/.moai/config/questions/_schema.yaml +0 -151
  504. moai_adk/templates/.moai/config/questions/tab0-init.yaml +0 -251
  505. moai_adk/templates/.moai/config/questions/tab1-user.yaml +0 -108
  506. moai_adk/templates/.moai/config/questions/tab2-project.yaml +0 -81
  507. moai_adk/templates/.moai/config/questions/tab3-git.yaml +0 -634
  508. moai_adk/templates/.moai/config/questions/tab4-quality.yaml +0 -170
  509. moai_adk/templates/.moai/config/questions/tab5-system.yaml +0 -87
  510. moai_adk/templates/.moai/scripts/setup-glm.py +0 -136
  511. moai_adk-0.34.0.dist-info/METADATA +0 -2999
  512. moai_adk-0.34.0.dist-info/RECORD +0 -463
  513. moai_adk-0.34.0.dist-info/licenses/LICENSE +0 -21
  514. /moai_adk/foundation/{git.py → git/__init__.py} +0 -0
  515. /moai_adk/templates/.claude/skills/moai-library-mermaid/{advanced-patterns.md → modules/advanced-patterns.md} +0 -0
  516. /moai_adk/templates/.claude/skills/moai-library-mermaid/{optimization.md → modules/optimization.md} +0 -0
  517. /moai_adk/templates/.claude/skills/moai-library-nextra/{optimization.md → modules/optimization.md} +0 -0
  518. /moai_adk/templates/.claude/skills/moai-workflow-jit-docs/{advanced-patterns.md → modules/advanced-patterns.md} +0 -0
  519. /moai_adk/templates/.claude/skills/moai-workflow-jit-docs/{optimization.md → modules/optimization.md} +0 -0
  520. /moai_adk/templates/.claude/skills/moai-workflow-testing/{advanced-patterns.md → modules/advanced-patterns.md} +0 -0
  521. /moai_adk/templates/.claude/skills/moai-workflow-testing/{optimization.md → modules/optimization.md} +0 -0
  522. /moai_adk/templates/.claude/skills/{moai-worktree → moai-workflow-worktree}/examples.md +0 -0
  523. /moai_adk/templates/.claude/skills/{moai-worktree → moai-workflow-worktree}/reference.md +0 -0
  524. {moai_adk-0.34.0.dist-info → moai_adk-1.1.0.dist-info}/WHEEL +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