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,1543 @@
1
+ # JavaScript Development Reference
2
+
3
+ ## ES2024/ES2025 Complete Reference
4
+
5
+ ### ES2024 Feature Matrix
6
+
7
+ | Feature | Description | Use Case |
8
+ |---------|-------------|----------|
9
+ | Set Methods | intersection, union, difference, etc. | Collection operations |
10
+ | Promise.withResolvers | External resolve/reject access | Deferred promises |
11
+ | Immutable Arrays | toSorted, toReversed, toSpliced, with | Functional programming |
12
+ | Object.groupBy | Group array items by key | Data categorization |
13
+ | Unicode String Methods | isWellFormed, toWellFormed | Unicode validation |
14
+ | ArrayBuffer Resizing | resize, transfer methods | Memory management |
15
+
16
+ ### ES2025 Feature Matrix
17
+
18
+ | Feature | Description | Use Case |
19
+ |---------|-------------|----------|
20
+ | Import Attributes | with { type: 'json' } | JSON/CSS modules |
21
+ | RegExp.escape | Escape regex special chars | Safe regex patterns |
22
+ | Iterator Helpers | map, filter, take on iterators | Lazy iteration |
23
+ | Float16Array | 16-bit floating point arrays | ML/Graphics |
24
+ | Duplicate Named Capture Groups | Same name in regex alternation | Pattern matching |
25
+
26
+ ### Complete Set Operations
27
+
28
+ ```javascript
29
+ const setA = new Set([1, 2, 3, 4, 5]);
30
+ const setB = new Set([4, 5, 6, 7, 8]);
31
+
32
+ // Union - all elements from both sets
33
+ const union = setA.union(setB);
34
+ // Set {1, 2, 3, 4, 5, 6, 7, 8}
35
+
36
+ // Intersection - elements in both sets
37
+ const intersection = setA.intersection(setB);
38
+ // Set {4, 5}
39
+
40
+ // Difference - elements in A but not in B
41
+ const difference = setA.difference(setB);
42
+ // Set {1, 2, 3}
43
+
44
+ // Symmetric Difference - elements in either but not both
45
+ const symmetricDiff = setA.symmetricDifference(setB);
46
+ // Set {1, 2, 3, 6, 7, 8}
47
+
48
+ // Subset check - all elements of A are in B
49
+ setA.isSubsetOf(setB); // false
50
+ new Set([4, 5]).isSubsetOf(setB); // true
51
+
52
+ // Superset check - A contains all elements of B
53
+ setA.isSupersetOf(new Set([1, 2])); // true
54
+
55
+ // Disjoint check - no common elements
56
+ setA.isDisjointFrom(new Set([10, 11])); // true
57
+ ```
58
+
59
+ ### Iterator Helpers (ES2025)
60
+
61
+ ```javascript
62
+ function* fibonacci() {
63
+ let a = 0, b = 1;
64
+ while (true) {
65
+ yield a;
66
+ [a, b] = [b, a + b];
67
+ }
68
+ }
69
+
70
+ // Take first 10 Fibonacci numbers
71
+ const first10 = fibonacci().take(10).toArray();
72
+ // [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
73
+
74
+ // Filter and map
75
+ const evenFib = fibonacci()
76
+ .filter(n => n % 2 === 0)
77
+ .map(n => n * 2)
78
+ .take(5)
79
+ .toArray();
80
+ // [0, 4, 16, 68, 288]
81
+
82
+ // Reduce with iterator
83
+ const sum = fibonacci()
84
+ .take(10)
85
+ .reduce((acc, n) => acc + n, 0);
86
+ // 88
87
+
88
+ // forEach on iterator
89
+ fibonacci()
90
+ .take(5)
91
+ .forEach(n => console.log(n));
92
+
93
+ // Find on iterator
94
+ const firstOver100 = fibonacci().find(n => n > 100);
95
+ // 144
96
+
97
+ // Some and every
98
+ fibonacci().take(10).some(n => n > 10); // true
99
+ fibonacci().take(5).every(n => n < 10); // true
100
+ ```
101
+
102
+ ---
103
+
104
+ ## Node.js Runtime Reference
105
+
106
+ ### Node.js Version Comparison
107
+
108
+ | Feature | Node.js 20 LTS | Node.js 22 LTS |
109
+ |---------|----------------|----------------|
110
+ | ES Modules | Full support | Full support |
111
+ | Fetch API | Stable | Stable |
112
+ | WebSocket | Experimental | Stable (default) |
113
+ | Watch Mode | Experimental | Stable |
114
+ | TypeScript | Via loaders | Native (strip types) |
115
+ | Permission Model | Experimental | Stable |
116
+ | Test Runner | Stable | Enhanced |
117
+ | Startup Time | Baseline | 30% faster |
118
+
119
+ ### Node.js Built-in Test Runner
120
+
121
+ ```javascript
122
+ // test/user.test.js
123
+ import { test, describe, before, after, mock } from 'node:test';
124
+ import assert from 'node:assert';
125
+ import { createUser, getUser } from '../src/user.js';
126
+
127
+ describe('User Service', () => {
128
+ let mockDb;
129
+
130
+ before(() => {
131
+ mockDb = mock.fn(() => ({ id: 1, name: 'Test' }));
132
+ });
133
+
134
+ after(() => {
135
+ mock.reset();
136
+ });
137
+
138
+ test('creates user successfully', async (t) => {
139
+ const user = await createUser({ name: 'John', email: 'john@test.com' });
140
+ assert.ok(user.id);
141
+ assert.strictEqual(user.name, 'John');
142
+ });
143
+
144
+ test('throws on duplicate email', async (t) => {
145
+ await assert.rejects(
146
+ async () => createUser({ name: 'Jane', email: 'existing@test.com' }),
147
+ { code: 'DUPLICATE_EMAIL' }
148
+ );
149
+ });
150
+
151
+ test('skipped test', { skip: true }, () => {
152
+ // This test will be skipped
153
+ });
154
+
155
+ test('todo test', { todo: 'implement later' }, () => {
156
+ // This test is marked as todo
157
+ });
158
+ });
159
+ ```
160
+
161
+ Run tests:
162
+ ```bash
163
+ # Run all tests
164
+ node --test
165
+
166
+ # Run specific file
167
+ node --test test/user.test.js
168
+
169
+ # With coverage
170
+ node --test --experimental-test-coverage
171
+
172
+ # Watch mode
173
+ node --test --watch
174
+
175
+ # Parallel execution
176
+ node --test --test-concurrency=4
177
+ ```
178
+
179
+ ### Module System Deep Dive
180
+
181
+ Package.json Configuration:
182
+ ```json
183
+ {
184
+ "name": "my-package",
185
+ "version": "1.0.0",
186
+ "type": "module",
187
+ "main": "./dist/index.cjs",
188
+ "module": "./dist/index.js",
189
+ "exports": {
190
+ ".": {
191
+ "import": "./dist/index.js",
192
+ "require": "./dist/index.cjs",
193
+ "types": "./dist/index.d.ts"
194
+ },
195
+ "./utils": {
196
+ "import": "./dist/utils.js",
197
+ "require": "./dist/utils.cjs"
198
+ }
199
+ },
200
+ "engines": {
201
+ "node": ">=20.0.0"
202
+ }
203
+ }
204
+ ```
205
+
206
+ ESM/CommonJS Interoperability:
207
+ ```javascript
208
+ // ESM importing CommonJS
209
+ import cjsModule from 'commonjs-package';
210
+ import { createRequire } from 'node:module';
211
+
212
+ const require = createRequire(import.meta.url);
213
+ const cjsPackage = require('commonjs-only-package');
214
+
215
+ // Get __dirname and __filename in ESM
216
+ import { fileURLToPath } from 'node:url';
217
+ import { dirname } from 'node:path';
218
+
219
+ const __filename = fileURLToPath(import.meta.url);
220
+ const __dirname = dirname(__filename);
221
+
222
+ // Dynamic import (works in both)
223
+ const module = await import('./dynamic-module.js');
224
+ ```
225
+
226
+ ---
227
+
228
+ ## Package Manager Comparison
229
+
230
+ | Feature | npm | yarn | pnpm | bun |
231
+ |---------|-----|------|------|-----|
232
+ | Speed | Baseline | Faster | Fastest Node | Fastest overall |
233
+ | Disk Usage | High | High | Low (symlinks) | Low |
234
+ | Workspaces | Yes | Yes | Yes | Yes |
235
+ | Lockfile | package-lock.json | yarn.lock | pnpm-lock.yaml | bun.lockb |
236
+ | Plug'n'Play | No | Yes | No | No |
237
+ | Node.js Only | Yes | Yes | Yes | No (own runtime) |
238
+
239
+ ### pnpm Commands
240
+
241
+ ```bash
242
+ # Initialize
243
+ pnpm init
244
+
245
+ # Install dependencies
246
+ pnpm install
247
+ pnpm add express
248
+ pnpm add -D vitest
249
+
250
+ # Workspaces
251
+ pnpm -r install # Install all workspaces
252
+ pnpm --filter=api test # Run in specific workspace
253
+
254
+ # Performance
255
+ pnpm store prune # Clean unused packages
256
+ pnpm dedupe # Deduplicate dependencies
257
+ ```
258
+
259
+ ### Bun Commands
260
+
261
+ ```bash
262
+ # Initialize
263
+ bun init
264
+
265
+ # Install (30x faster than npm)
266
+ bun install
267
+ bun add express
268
+ bun add -d vitest
269
+
270
+ # Run scripts
271
+ bun run dev
272
+ bun run test
273
+
274
+ # Execute files directly (native TypeScript/JSX support)
275
+ bun run server.js
276
+ bun run app.ts
277
+ bun run app.tsx
278
+
279
+ # Built-in bundler
280
+ bun build ./src/index.ts --outdir=./dist
281
+ bun build ./index.html --outdir=./dist # HTML bundling
282
+ bun build --splitting # Code splitting
283
+ bun build --minify # Minification
284
+
285
+ # Compile to standalone executable
286
+ bun build --compile ./src/index.ts --outfile=myapp
287
+
288
+ # Run tests
289
+ bun test
290
+ bun test --watch
291
+ bun test --coverage
292
+ bun test --bail # Stop on first failure
293
+
294
+ # Hot reloading (state preserved)
295
+ bun --hot server.ts
296
+ ```
297
+
298
+ ---
299
+
300
+ ## Bun Complete API Reference
301
+
302
+ ### Bun.serve() - HTTP Server
303
+
304
+ Basic Server:
305
+ ```typescript
306
+ const server = Bun.serve({
307
+ port: 3000,
308
+ hostname: "0.0.0.0",
309
+ fetch(req) {
310
+ const url = new URL(req.url);
311
+ if (url.pathname === "/") return new Response("Hello!");
312
+ if (url.pathname === "/json") {
313
+ return Response.json({ message: "Hello JSON" });
314
+ }
315
+ return new Response("Not Found", { status: 404 });
316
+ },
317
+ error(error) {
318
+ return new Response(`Error: ${error.message}`, { status: 500 });
319
+ },
320
+ });
321
+ console.log(`Server running at ${server.url}`);
322
+ ```
323
+
324
+ Routes Configuration (Bun 1.2.3+):
325
+ ```typescript
326
+ Bun.serve({
327
+ routes: {
328
+ // Static routes
329
+ "/api/status": new Response("OK"),
330
+
331
+ // Dynamic routes with parameters
332
+ "/users/:id": req => new Response(`User ${req.params.id}`),
333
+
334
+ // Per-method handlers
335
+ "/api/posts": {
336
+ GET: () => Response.json({ posts: [] }),
337
+ POST: async req => {
338
+ const body = await req.json();
339
+ return Response.json({ created: true, ...body }, { status: 201 });
340
+ },
341
+ },
342
+
343
+ // Wildcard routes
344
+ "/api/*": Response.json({ error: "Not found" }, { status: 404 }),
345
+
346
+ // Static file serving
347
+ "/favicon.ico": Bun.file("./favicon.ico"),
348
+ },
349
+
350
+ // Fallback handler
351
+ fetch(req) {
352
+ return new Response("Not Found", { status: 404 });
353
+ },
354
+ });
355
+ ```
356
+
357
+ TLS/HTTPS Configuration:
358
+ ```typescript
359
+ Bun.serve({
360
+ port: 443,
361
+ tls: {
362
+ cert: Bun.file("./cert.pem"),
363
+ key: Bun.file("./key.pem"),
364
+ ca: Bun.file("./ca.pem"), // Optional CA certificate
365
+ passphrase: "secret", // Optional key passphrase
366
+ },
367
+ fetch(req) {
368
+ return new Response("Secure!");
369
+ },
370
+ });
371
+ ```
372
+
373
+ WebSocket Server with Full Options:
374
+ ```typescript
375
+ Bun.serve({
376
+ port: 3001,
377
+ fetch(req, server) {
378
+ const success = server.upgrade(req, {
379
+ data: { userId: crypto.randomUUID() }, // Per-connection data
380
+ });
381
+ if (success) return undefined;
382
+ return new Response("Upgrade failed", { status: 400 });
383
+ },
384
+ websocket: {
385
+ open(ws) {
386
+ ws.subscribe("chat"); // Subscribe to topic
387
+ console.log("Connected:", ws.data.userId);
388
+ },
389
+ message(ws, message) {
390
+ ws.publish("chat", message); // Publish to all subscribers
391
+ ws.send(`Echo: ${message}`);
392
+ },
393
+ close(ws, code, reason) {
394
+ ws.unsubscribe("chat");
395
+ console.log("Disconnected:", code, reason);
396
+ },
397
+ // Advanced options
398
+ maxPayloadLength: 16 * 1024 * 1024, // 16MB max message size
399
+ backpressureLimit: 1024 * 1024, // 1MB backpressure limit
400
+ idleTimeout: 120, // 2 minutes idle timeout
401
+ perMessageDeflate: true, // Enable compression
402
+ sendPings: true, // Send ping frames
403
+ },
404
+ });
405
+ ```
406
+
407
+ Server Metrics and Lifecycle:
408
+ ```typescript
409
+ const server = Bun.serve({
410
+ fetch(req, server) {
411
+ // Get client IP
412
+ const ip = server.requestIP(req);
413
+
414
+ // Set custom timeout for this request
415
+ server.timeout(req, 60); // 60 seconds
416
+
417
+ return Response.json({
418
+ activeRequests: server.pendingRequests,
419
+ activeWebSockets: server.pendingWebSockets,
420
+ chatUsers: server.subscriberCount("chat"),
421
+ clientIP: ip?.address,
422
+ });
423
+ },
424
+ });
425
+
426
+ // Hot reload routes without restart
427
+ server.reload({
428
+ routes: {
429
+ "/api/version": () => Response.json({ version: "2.0.0" }),
430
+ },
431
+ });
432
+
433
+ // Graceful shutdown
434
+ await server.stop(); // Wait for in-flight requests
435
+ await server.stop(true); // Force close all connections
436
+ ```
437
+
438
+ ### Bun.file() - File Operations
439
+
440
+ Reading Files:
441
+ ```typescript
442
+ const file = Bun.file("./data.txt");
443
+
444
+ // File metadata
445
+ file.size; // number of bytes
446
+ file.type; // MIME type
447
+ await file.exists(); // boolean
448
+
449
+ // Reading methods
450
+ const text = await file.text(); // string
451
+ const json = await file.json(); // parsed JSON
452
+ const bytes = await file.bytes(); // Uint8Array
453
+ const buffer = await file.arrayBuffer(); // ArrayBuffer
454
+ const stream = file.stream(); // ReadableStream
455
+
456
+ // Partial reads (HTTP Range header)
457
+ const first1KB = await file.slice(0, 1024).text();
458
+ const last500 = await file.slice(-500).text();
459
+
460
+ // File references
461
+ Bun.file(1234); // file descriptor
462
+ Bun.file(new URL(import.meta.url)); // file:// URL
463
+ Bun.file("data.json", { type: "application/json" }); // custom MIME
464
+ ```
465
+
466
+ Writing Files:
467
+ ```typescript
468
+ // Simple writes (returns bytes written)
469
+ await Bun.write("./output.txt", "Hello, Bun!");
470
+ await Bun.write("./data.json", JSON.stringify({ key: "value" }));
471
+
472
+ // Copy file
473
+ await Bun.write(Bun.file("output.txt"), Bun.file("input.txt"));
474
+
475
+ // Write from Response
476
+ const response = await fetch("https://example.com");
477
+ await Bun.write("index.html", response);
478
+
479
+ // Write to stdout
480
+ await Bun.write(Bun.stdout, "Hello stdout!\n");
481
+
482
+ // Delete file
483
+ await Bun.file("temp.txt").delete();
484
+ ```
485
+
486
+ Incremental Writing (FileSink):
487
+ ```typescript
488
+ const file = Bun.file("large-output.txt");
489
+ const writer = file.writer({ highWaterMark: 1024 * 1024 }); // 1MB buffer
490
+
491
+ writer.write("First chunk\n");
492
+ writer.write("Second chunk\n");
493
+ writer.flush(); // Flush buffer to disk
494
+ writer.end(); // Flush and close
495
+
496
+ // Control process lifecycle
497
+ writer.unref(); // Allow process to exit
498
+ writer.ref(); // Re-ref later
499
+ ```
500
+
501
+ ### Bun Shell
502
+
503
+ Basic Usage:
504
+ ```typescript
505
+ import { $ } from "bun";
506
+
507
+ // Execute commands
508
+ await $`echo "Hello World!"`;
509
+
510
+ // Get output
511
+ const text = await $`ls -la`.text();
512
+ const json = await $`cat config.json`.json();
513
+ const blob = await $`cat image.png`.blob();
514
+
515
+ // Iterate lines
516
+ for await (const line of $`cat file.txt`.lines()) {
517
+ console.log(line);
518
+ }
519
+ ```
520
+
521
+ Piping and Redirection:
522
+ ```typescript
523
+ // Pipe commands
524
+ const wordCount = await $`echo "Hello World!" | wc -w`.text();
525
+
526
+ // Redirect to file
527
+ await $`echo "Hello" > greeting.txt`;
528
+ await $`echo "More" >> greeting.txt`; // Append
529
+
530
+ // Redirect stderr
531
+ await $`command 2> error.log`;
532
+ await $`command &> all.log`; // Both stdout and stderr
533
+
534
+ // JavaScript object as stdin
535
+ const response = new Response("input data");
536
+ await $`cat < ${response} | wc -c`;
537
+ ```
538
+
539
+ Environment and Working Directory:
540
+ ```typescript
541
+ // Inline environment
542
+ await $`FOO=bar bun -e 'console.log(process.env.FOO)'`;
543
+
544
+ // Per-command environment
545
+ await $`echo $API_KEY`.env({ ...process.env, API_KEY: "secret" });
546
+
547
+ // Global environment
548
+ $.env({ NODE_ENV: "production" });
549
+
550
+ // Working directory
551
+ await $`pwd`.cwd("/tmp");
552
+ $.cwd("/home/user");
553
+ ```
554
+
555
+ Error Handling:
556
+ ```typescript
557
+ // Default: throws on non-zero exit code
558
+ try {
559
+ await $`failing-command`.text();
560
+ } catch (err) {
561
+ console.log(`Exit code: ${err.exitCode}`);
562
+ console.log(err.stdout.toString());
563
+ console.log(err.stderr.toString());
564
+ }
565
+
566
+ // Disable throwing
567
+ const { stdout, stderr, exitCode } = await $`command`.nothrow().quiet();
568
+
569
+ // Global configuration
570
+ $.nothrow(); // Don't throw by default
571
+ $.throws(true); // Restore default
572
+ ```
573
+
574
+ ### Bun SQLite
575
+
576
+ Database Connection:
577
+ ```typescript
578
+ import { Database } from "bun:sqlite";
579
+
580
+ // File-based
581
+ const db = new Database("mydb.sqlite");
582
+
583
+ // In-memory
584
+ const memoryDb = new Database(":memory:");
585
+
586
+ // Options
587
+ const db = new Database("mydb.sqlite", {
588
+ readonly: true, // Read-only mode
589
+ create: true, // Create if not exists
590
+ strict: true, // Enable strict mode
591
+ safeIntegers: true, // Return bigint for large integers
592
+ });
593
+
594
+ // Import via attribute
595
+ import db from "./mydb.sqlite" with { type: "sqlite" };
596
+
597
+ // WAL mode (recommended for performance)
598
+ db.run("PRAGMA journal_mode = WAL;");
599
+ ```
600
+
601
+ Prepared Statements:
602
+ ```typescript
603
+ // Create table
604
+ db.run(`
605
+ CREATE TABLE IF NOT EXISTS users (
606
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
607
+ name TEXT NOT NULL,
608
+ email TEXT UNIQUE
609
+ )
610
+ `);
611
+
612
+ // Prepare and execute
613
+ const insertUser = db.prepare(
614
+ "INSERT INTO users (name, email) VALUES ($name, $email)"
615
+ );
616
+ insertUser.run({ $name: "John", $email: "john@example.com" });
617
+
618
+ // Query methods
619
+ const getUser = db.prepare("SELECT * FROM users WHERE id = ?");
620
+ const user = getUser.get(1); // Single row as object
621
+ const users = getUser.all(); // All rows as array
622
+ const values = getUser.values(); // All rows as arrays
623
+ const result = getUser.run(); // { lastInsertRowid, changes }
624
+
625
+ // Iterate lazily
626
+ for (const row of getUser.iterate()) {
627
+ console.log(row);
628
+ }
629
+
630
+ // Map to class
631
+ class User {
632
+ id: number;
633
+ name: string;
634
+ get displayName() { return `User: ${this.name}`; }
635
+ }
636
+ const users = db.query("SELECT * FROM users").as(User).all();
637
+ ```
638
+
639
+ Transactions:
640
+ ```typescript
641
+ const insertUser = db.prepare("INSERT INTO users (name) VALUES (?)");
642
+
643
+ // Transaction function
644
+ const insertMany = db.transaction((names: string[]) => {
645
+ for (const name of names) {
646
+ insertUser.run(name);
647
+ }
648
+ return names.length;
649
+ });
650
+
651
+ const count = insertMany(["Alice", "Bob", "Charlie"]);
652
+
653
+ // Transaction types
654
+ insertMany(data); // BEGIN
655
+ insertMany.deferred(data); // BEGIN DEFERRED
656
+ insertMany.immediate(data); // BEGIN IMMEDIATE
657
+ insertMany.exclusive(data); // BEGIN EXCLUSIVE
658
+ ```
659
+
660
+ ### Bun Test
661
+
662
+ Test Structure:
663
+ ```typescript
664
+ import { describe, it, test, expect, beforeAll, beforeEach, afterEach, afterAll, mock } from "bun:test";
665
+
666
+ describe("User Service", () => {
667
+ beforeAll(() => { /* Setup once */ });
668
+ beforeEach(() => { /* Setup each */ });
669
+ afterEach(() => { /* Cleanup each */ });
670
+ afterAll(() => { /* Cleanup once */ });
671
+
672
+ it("should create a user", () => {
673
+ expect({ name: "John" }).toEqual({ name: "John" });
674
+ });
675
+
676
+ test("async operations", async () => {
677
+ const data = await fetchData();
678
+ expect(data).toBeDefined();
679
+ });
680
+
681
+ // Concurrent tests
682
+ test.concurrent("parallel test 1", async () => { /* ... */ });
683
+ test.concurrent("parallel test 2", async () => { /* ... */ });
684
+
685
+ // Skip and todo
686
+ test.skip("skipped test", () => { /* ... */ });
687
+ test.todo("implement later");
688
+ });
689
+ ```
690
+
691
+ Mocking:
692
+ ```typescript
693
+ import { mock, spyOn } from "bun:test";
694
+
695
+ // Mock function
696
+ const fn = mock(() => 42);
697
+ fn();
698
+ expect(fn).toHaveBeenCalled();
699
+ expect(fn).toHaveBeenCalledTimes(1);
700
+
701
+ // Spy on existing
702
+ const spy = spyOn(console, "log");
703
+ console.log("test");
704
+ expect(spy).toHaveBeenCalledWith("test");
705
+ ```
706
+
707
+ Snapshots:
708
+ ```typescript
709
+ test("snapshot", () => {
710
+ expect({ a: 1, b: 2 }).toMatchSnapshot();
711
+ });
712
+
713
+ // Update: bun test --update-snapshots
714
+ ```
715
+
716
+ Test Commands:
717
+ ```bash
718
+ bun test # Run all tests
719
+ bun test --watch # Watch mode
720
+ bun test --coverage # Code coverage
721
+ bun test --bail # Stop on first failure
722
+ bun test --timeout 10000 # 10s timeout
723
+ bun test -t "pattern" # Filter by name
724
+ bun test --concurrent # Parallel execution
725
+ bun test --reporter=junit # JUnit XML output
726
+ ```
727
+
728
+ ### Bun S3 Client
729
+
730
+ Basic Operations:
731
+ ```typescript
732
+ import { s3, S3Client } from "bun";
733
+
734
+ // Read from S3
735
+ const file = s3.file("data/config.json");
736
+ const data = await file.json();
737
+ const text = await file.text();
738
+ const bytes = await file.bytes();
739
+ const stream = file.stream();
740
+
741
+ // Partial read
742
+ const first1KB = await file.slice(0, 1024).text();
743
+
744
+ // Write to S3
745
+ await file.write("Hello World!");
746
+ await file.write(JSON.stringify(data), { type: "application/json" });
747
+
748
+ // Delete
749
+ await file.delete();
750
+
751
+ // Check existence
752
+ const exists = await file.exists();
753
+ const size = await file.size();
754
+ ```
755
+
756
+ Presigned URLs:
757
+ ```typescript
758
+ // Download URL
759
+ const downloadUrl = s3.presign("my-file.txt", {
760
+ expiresIn: 3600, // 1 hour
761
+ });
762
+
763
+ // Upload URL
764
+ const uploadUrl = s3.presign("my-file.txt", {
765
+ method: "PUT",
766
+ expiresIn: 3600,
767
+ type: "application/json",
768
+ acl: "public-read",
769
+ });
770
+ ```
771
+
772
+ S3 Client Configuration:
773
+ ```typescript
774
+ const client = new S3Client({
775
+ accessKeyId: process.env.S3_ACCESS_KEY_ID,
776
+ secretAccessKey: process.env.S3_SECRET_ACCESS_KEY,
777
+ bucket: "my-bucket",
778
+ region: "us-east-1",
779
+ // Or use endpoint for S3-compatible services
780
+ endpoint: "https://s3.us-east-1.amazonaws.com",
781
+ });
782
+
783
+ // Works with: AWS S3, Cloudflare R2, DigitalOcean Spaces,
784
+ // MinIO, Google Cloud Storage, Supabase Storage
785
+ ```
786
+
787
+ Large File Streaming:
788
+ ```typescript
789
+ const writer = s3.file("large-file.bin").writer({
790
+ retry: 3,
791
+ queueSize: 10,
792
+ partSize: 5 * 1024 * 1024, // 5MB chunks
793
+ });
794
+
795
+ for (const chunk of largeData) {
796
+ writer.write(chunk);
797
+ await writer.flush();
798
+ }
799
+ await writer.end();
800
+ ```
801
+
802
+ ### Bun Glob
803
+
804
+ Pattern Matching:
805
+ ```typescript
806
+ import { Glob } from "bun";
807
+
808
+ // Create glob instance
809
+ const glob = new Glob("**/*.ts");
810
+
811
+ // Async iteration
812
+ for await (const file of glob.scan(".")) {
813
+ console.log(file);
814
+ }
815
+
816
+ // Sync iteration
817
+ for (const file of glob.scanSync(".")) {
818
+ console.log(file);
819
+ }
820
+
821
+ // String matching
822
+ glob.match("src/index.ts"); // true
823
+ glob.match("src/index.js"); // false
824
+ ```
825
+
826
+ Scan Options:
827
+ ```typescript
828
+ const glob = new Glob("**/*.ts");
829
+
830
+ for await (const file of glob.scan({
831
+ cwd: "./src",
832
+ dot: true, // Include dotfiles
833
+ absolute: true, // Return absolute paths
834
+ followSymlinks: true, // Follow symlinks
835
+ onlyFiles: true, // Files only (default)
836
+ })) {
837
+ console.log(file);
838
+ }
839
+ ```
840
+
841
+ Pattern Syntax:
842
+ ```typescript
843
+ // Single character: ?
844
+ new Glob("???.ts").match("foo.ts"); // true
845
+
846
+ // Zero or more chars (no path sep): *
847
+ new Glob("*.ts").match("index.ts"); // true
848
+ new Glob("*.ts").match("src/index.ts"); // false
849
+
850
+ // Any chars including path sep: **
851
+ new Glob("**/*.ts").match("src/index.ts"); // true
852
+
853
+ // Character sets: [abc], [a-z], [^abc]
854
+ new Glob("ba[rz].ts").match("bar.ts"); // true
855
+ new Glob("ba[!a-z].ts").match("ba1.ts"); // true
856
+
857
+ // Alternation: {a,b,c}
858
+ new Glob("{src,lib}/**/*.ts").match("src/index.ts"); // true
859
+
860
+ // Negation: !
861
+ new Glob("!node_modules/**").match("src/index.ts"); // true
862
+ ```
863
+
864
+ ### Bun Semver
865
+
866
+ Version Comparison:
867
+ ```typescript
868
+ import { semver } from "bun";
869
+
870
+ // Check if version satisfies range
871
+ semver.satisfies("1.0.0", "^1.0.0"); // true
872
+ semver.satisfies("2.0.0", "^1.0.0"); // false
873
+ semver.satisfies("1.0.0", "~1.0.0"); // true
874
+ semver.satisfies("1.0.0", "1.0.x"); // true
875
+ semver.satisfies("1.0.0", "1.0.0 - 2.0.0"); // true
876
+
877
+ // Compare versions
878
+ semver.order("1.0.0", "1.0.0"); // 0
879
+ semver.order("1.0.0", "1.0.1"); // -1
880
+ semver.order("1.0.1", "1.0.0"); // 1
881
+
882
+ // Sort versions
883
+ const versions = ["1.0.0", "1.0.1", "1.0.0-alpha", "1.0.0-beta"];
884
+ versions.sort(semver.order);
885
+ // ["1.0.0-alpha", "1.0.0-beta", "1.0.0", "1.0.1"]
886
+ ```
887
+
888
+ ### Bun DNS
889
+
890
+ DNS Resolution:
891
+ ```typescript
892
+ import { dns } from "bun";
893
+ import * as nodeDns from "node:dns";
894
+
895
+ // Prefetch DNS (optimization)
896
+ dns.prefetch("api.example.com", 443);
897
+
898
+ // Get cache stats
899
+ const stats = dns.getCacheStats();
900
+ console.log(stats);
901
+ // { cacheHitsCompleted, cacheHitsInflight, cacheMisses, size, errors, totalCount }
902
+
903
+ // Node.js compatible API
904
+ const addrs = await nodeDns.promises.resolve4("bun.sh", { ttl: true });
905
+ // [{ address: "172.67.161.226", family: 4, ttl: 0 }, ...]
906
+ ```
907
+
908
+ ### Bun Bundler
909
+
910
+ Build API:
911
+ ```typescript
912
+ const result = await Bun.build({
913
+ entrypoints: ["./src/index.ts"],
914
+ outdir: "./dist",
915
+ target: "browser", // browser, bun, node
916
+ format: "esm", // esm, cjs, iife
917
+ splitting: true, // Code splitting
918
+ minify: true, // Full minification
919
+ sourcemap: "linked", // none, linked, external, inline
920
+
921
+ // Environment variables
922
+ env: "PUBLIC_*", // Inline PUBLIC_* vars
923
+
924
+ // External modules
925
+ external: ["lodash"],
926
+
927
+ // Custom loaders
928
+ loader: {
929
+ ".png": "dataurl",
930
+ ".txt": "file",
931
+ },
932
+
933
+ // Naming patterns
934
+ naming: {
935
+ entry: "[dir]/[name].[ext]",
936
+ chunk: "[name]-[hash].[ext]",
937
+ asset: "[name]-[hash].[ext]",
938
+ },
939
+
940
+ // Public path for CDN
941
+ publicPath: "https://cdn.example.com/",
942
+
943
+ // Define replacements
944
+ define: {
945
+ "process.env.VERSION": JSON.stringify("1.0.0"),
946
+ },
947
+
948
+ // Drop function calls
949
+ drop: ["console", "debugger"],
950
+
951
+ // Plugins
952
+ plugins: [myPlugin],
953
+ });
954
+
955
+ if (!result.success) {
956
+ console.error(result.logs);
957
+ }
958
+ ```
959
+
960
+ HTML Bundling:
961
+ ```typescript
962
+ // Build static site
963
+ await Bun.build({
964
+ entrypoints: ["./index.html", "./about.html"],
965
+ outdir: "./dist",
966
+ minify: true,
967
+ });
968
+
969
+ // Or run dev server
970
+ // bun ./index.html
971
+ ```
972
+
973
+ ### Bun Plugins
974
+
975
+ Plugin Structure:
976
+ ```typescript
977
+ import type { BunPlugin } from "bun";
978
+
979
+ const myPlugin: BunPlugin = {
980
+ name: "my-plugin",
981
+ setup(build) {
982
+ // Runs when bundle starts
983
+ build.onStart(() => {
984
+ console.log("Bundle started!");
985
+ });
986
+
987
+ // Custom module resolution
988
+ build.onResolve({ filter: /^virtual:/ }, args => {
989
+ return { path: args.path, namespace: "virtual" };
990
+ });
991
+
992
+ // Custom module loading
993
+ build.onLoad({ filter: /.*/, namespace: "virtual" }, args => {
994
+ return {
995
+ contents: `export default "Virtual module: ${args.path}"`,
996
+ loader: "js",
997
+ };
998
+ });
999
+ },
1000
+ };
1001
+
1002
+ await Bun.build({
1003
+ entrypoints: ["./index.ts"],
1004
+ plugins: [myPlugin],
1005
+ });
1006
+ ```
1007
+
1008
+ ### Bun Macros
1009
+
1010
+ Bundle-Time Execution:
1011
+ ```typescript
1012
+ // getVersion.ts
1013
+ export function getVersion() {
1014
+ const { stdout } = Bun.spawnSync({
1015
+ cmd: ["git", "rev-parse", "HEAD"],
1016
+ stdout: "pipe",
1017
+ });
1018
+ return stdout.toString().trim();
1019
+ }
1020
+
1021
+ // app.ts
1022
+ import { getVersion } from "./getVersion.ts" with { type: "macro" };
1023
+
1024
+ // Executed at bundle-time, result inlined
1025
+ console.log(`Version: ${getVersion()}`);
1026
+ ```
1027
+
1028
+ Fetch at Bundle-Time:
1029
+ ```typescript
1030
+ // fetchData.ts
1031
+ export async function fetchConfig(url: string) {
1032
+ const response = await fetch(url);
1033
+ return response.json();
1034
+ }
1035
+
1036
+ // app.ts
1037
+ import { fetchConfig } from "./fetchData.ts" with { type: "macro" };
1038
+
1039
+ // Config fetched during build, not runtime
1040
+ const config = fetchConfig("https://api.example.com/config");
1041
+ ```
1042
+
1043
+ ### Bun Hot Reloading
1044
+
1045
+ State-Preserving Reload:
1046
+ ```typescript
1047
+ // server.ts
1048
+ declare global {
1049
+ var count: number;
1050
+ }
1051
+
1052
+ globalThis.count ??= 0;
1053
+ globalThis.count++;
1054
+
1055
+ Bun.serve({
1056
+ fetch(req) {
1057
+ return new Response(`Reloaded ${globalThis.count} times`);
1058
+ },
1059
+ port: 3000,
1060
+ });
1061
+
1062
+ // Run with: bun --hot server.ts
1063
+ // Changes reload without restarting process
1064
+ // Global state (globalThis) preserved
1065
+ ```
1066
+
1067
+ ### Bun Workers
1068
+
1069
+ Web Workers:
1070
+ ```typescript
1071
+ // worker.ts
1072
+ declare var self: Worker;
1073
+
1074
+ self.onmessage = (event: MessageEvent) => {
1075
+ const result = heavyComputation(event.data);
1076
+ self.postMessage(result);
1077
+ };
1078
+
1079
+ function heavyComputation(input: number): number {
1080
+ return input * 2;
1081
+ }
1082
+
1083
+ // main.ts
1084
+ const worker = new Worker(new URL("./worker.ts", import.meta.url));
1085
+
1086
+ worker.onmessage = (event) => {
1087
+ console.log("Result:", event.data);
1088
+ };
1089
+
1090
+ worker.postMessage(42);
1091
+ ```
1092
+
1093
+ ### Bun Utilities
1094
+
1095
+ Password Hashing:
1096
+ ```typescript
1097
+ const hash = await Bun.password.hash("mypassword", {
1098
+ algorithm: "argon2id", // argon2id, argon2i, argon2d, bcrypt
1099
+ memoryCost: 65536,
1100
+ timeCost: 3,
1101
+ });
1102
+
1103
+ const isValid = await Bun.password.verify("mypassword", hash);
1104
+ ```
1105
+
1106
+ Other Utilities:
1107
+ ```typescript
1108
+ // Sleep
1109
+ await Bun.sleep(1000); // 1 second
1110
+
1111
+ // UUID v7 (time-ordered)
1112
+ const uuid = Bun.randomUUIDv7();
1113
+
1114
+ // Environment variables (auto-loads .env)
1115
+ const apiKey = Bun.env.API_KEY;
1116
+
1117
+ // Peek at promises without awaiting
1118
+ const status = Bun.peek(promise); // pending, fulfilled, rejected
1119
+
1120
+ // Deep equals
1121
+ Bun.deepEquals({ a: 1 }, { a: 1 }); // true
1122
+
1123
+ // Escape HTML
1124
+ Bun.escapeHTML("<script>alert('xss')</script>");
1125
+
1126
+ // Resolve import path
1127
+ const path = Bun.resolveSync("./module", import.meta.dir);
1128
+ ```
1129
+
1130
+ ---
1131
+
1132
+ ## Framework Reference
1133
+
1134
+ ### Express Middleware Patterns
1135
+
1136
+ ```javascript
1137
+ import express from 'express';
1138
+ import helmet from 'helmet';
1139
+ import compression from 'compression';
1140
+ import rateLimit from 'express-rate-limit';
1141
+
1142
+ const app = express();
1143
+
1144
+ // Security middleware
1145
+ app.use(helmet());
1146
+ app.use(compression());
1147
+
1148
+ // Rate limiting
1149
+ const limiter = rateLimit({
1150
+ windowMs: 15 * 60 * 1000, // 15 minutes
1151
+ max: 100, // limit each IP to 100 requests per windowMs
1152
+ standardHeaders: true,
1153
+ legacyHeaders: false,
1154
+ });
1155
+ app.use('/api/', limiter);
1156
+
1157
+ // Request logging
1158
+ app.use((req, res, next) => {
1159
+ const start = Date.now();
1160
+ res.on('finish', () => {
1161
+ console.log(`${req.method} ${req.url} ${res.statusCode} ${Date.now() - start}ms`);
1162
+ });
1163
+ next();
1164
+ });
1165
+
1166
+ // Error handling middleware
1167
+ app.use((err, req, res, next) => {
1168
+ console.error(err.stack);
1169
+ res.status(err.status || 500).json({
1170
+ error: {
1171
+ message: err.message,
1172
+ ...(process.env.NODE_ENV === 'development' && { stack: err.stack }),
1173
+ },
1174
+ });
1175
+ });
1176
+ ```
1177
+
1178
+ ### Fastify Plugin Architecture
1179
+
1180
+ ```javascript
1181
+ import Fastify from 'fastify';
1182
+ import fastifySwagger from '@fastify/swagger';
1183
+ import fastifySwaggerUi from '@fastify/swagger-ui';
1184
+ import fastifyCors from '@fastify/cors';
1185
+
1186
+ const fastify = Fastify({
1187
+ logger: {
1188
+ level: 'info',
1189
+ transport: {
1190
+ target: 'pino-pretty',
1191
+ },
1192
+ },
1193
+ });
1194
+
1195
+ // Register plugins
1196
+ await fastify.register(fastifyCors, { origin: true });
1197
+
1198
+ await fastify.register(fastifySwagger, {
1199
+ openapi: {
1200
+ info: {
1201
+ title: 'My API',
1202
+ version: '1.0.0',
1203
+ },
1204
+ },
1205
+ });
1206
+
1207
+ await fastify.register(fastifySwaggerUi, {
1208
+ routePrefix: '/docs',
1209
+ });
1210
+
1211
+ // Custom plugin
1212
+ const myPlugin = async (fastify, options) => {
1213
+ fastify.decorate('db', options.database);
1214
+
1215
+ fastify.addHook('onRequest', async (request) => {
1216
+ request.startTime = Date.now();
1217
+ });
1218
+
1219
+ fastify.addHook('onResponse', async (request, reply) => {
1220
+ const duration = Date.now() - request.startTime;
1221
+ fastify.log.info({ duration, url: request.url }, 'request completed');
1222
+ });
1223
+ };
1224
+
1225
+ fastify.register(myPlugin, { database: db });
1226
+ ```
1227
+
1228
+ ### Hono Adapters and Middleware
1229
+
1230
+ ```javascript
1231
+ import { Hono } from 'hono';
1232
+ import { serve } from '@hono/node-server';
1233
+ import { cors } from 'hono/cors';
1234
+ import { logger } from 'hono/logger';
1235
+ import { secureHeaders } from 'hono/secure-headers';
1236
+ import { jwt } from 'hono/jwt';
1237
+ import { zValidator } from '@hono/zod-validator';
1238
+ import { z } from 'zod';
1239
+
1240
+ const app = new Hono();
1241
+
1242
+ // Middleware stack
1243
+ app.use('*', logger());
1244
+ app.use('*', secureHeaders());
1245
+ app.use('/api/*', cors());
1246
+
1247
+ // JWT authentication
1248
+ app.use('/api/protected/*', jwt({ secret: process.env.JWT_SECRET }));
1249
+
1250
+ // Zod validation
1251
+ const createUserSchema = z.object({
1252
+ name: z.string().min(2).max(100),
1253
+ email: z.string().email(),
1254
+ });
1255
+
1256
+ app.post('/api/users',
1257
+ zValidator('json', createUserSchema),
1258
+ async (c) => {
1259
+ const data = c.req.valid('json');
1260
+ const user = await db.users.create(data);
1261
+ return c.json(user, 201);
1262
+ }
1263
+ );
1264
+
1265
+ // Error handling
1266
+ app.onError((err, c) => {
1267
+ console.error(err);
1268
+ return c.json({ error: err.message }, 500);
1269
+ });
1270
+
1271
+ // Not found handler
1272
+ app.notFound((c) => c.json({ error: 'Not found' }, 404));
1273
+
1274
+ // Node.js adapter
1275
+ serve({ fetch: app.fetch, port: 3000 });
1276
+
1277
+ // Or export for Cloudflare Workers, Deno, Bun
1278
+ export default app;
1279
+ ```
1280
+
1281
+ ---
1282
+
1283
+ ## Testing Reference
1284
+
1285
+ ### Vitest vs Jest Comparison
1286
+
1287
+ | Feature | Vitest | Jest |
1288
+ |---------|--------|------|
1289
+ | Speed | 4x faster cold, instant HMR | Baseline |
1290
+ | ESM Support | Native | Requires config |
1291
+ | TypeScript | Native | Via ts-jest/babel |
1292
+ | Configuration | vite.config.js | jest.config.js |
1293
+ | Watch Mode | Instant rerun | Full rerun |
1294
+ | Snapshot Testing | Yes | Yes |
1295
+ | Coverage | v8/istanbul | istanbul |
1296
+ | Concurrent Tests | Per-file default | Optional |
1297
+
1298
+ ### Vitest Mocking Patterns
1299
+
1300
+ ```javascript
1301
+ import { vi, describe, it, expect, beforeEach, afterEach } from 'vitest';
1302
+ import { fetchUser, createUser } from './user.js';
1303
+
1304
+ // Mock module
1305
+ vi.mock('./database.js', () => ({
1306
+ db: {
1307
+ users: {
1308
+ findById: vi.fn(),
1309
+ create: vi.fn(),
1310
+ },
1311
+ },
1312
+ }));
1313
+
1314
+ import { db } from './database.js';
1315
+
1316
+ describe('User functions', () => {
1317
+ beforeEach(() => {
1318
+ vi.clearAllMocks();
1319
+ });
1320
+
1321
+ afterEach(() => {
1322
+ vi.restoreAllMocks();
1323
+ });
1324
+
1325
+ it('fetches user from database', async () => {
1326
+ const mockUser = { id: 1, name: 'John' };
1327
+ db.users.findById.mockResolvedValue(mockUser);
1328
+
1329
+ const user = await fetchUser(1);
1330
+
1331
+ expect(db.users.findById).toHaveBeenCalledWith(1);
1332
+ expect(user).toEqual(mockUser);
1333
+ });
1334
+
1335
+ it('handles fetch errors', async () => {
1336
+ db.users.findById.mockRejectedValue(new Error('DB Error'));
1337
+
1338
+ await expect(fetchUser(1)).rejects.toThrow('DB Error');
1339
+ });
1340
+
1341
+ // Spy on existing implementation
1342
+ it('spies on console.log', () => {
1343
+ const spy = vi.spyOn(console, 'log');
1344
+ console.log('test');
1345
+ expect(spy).toHaveBeenCalledWith('test');
1346
+ });
1347
+
1348
+ // Timer mocks
1349
+ it('handles timers', async () => {
1350
+ vi.useFakeTimers();
1351
+
1352
+ const callback = vi.fn();
1353
+ setTimeout(callback, 1000);
1354
+
1355
+ vi.advanceTimersByTime(1000);
1356
+ expect(callback).toHaveBeenCalled();
1357
+
1358
+ vi.useRealTimers();
1359
+ });
1360
+ });
1361
+ ```
1362
+
1363
+ ---
1364
+
1365
+ ## Build Tools Reference
1366
+
1367
+ ### Vite Configuration
1368
+
1369
+ ```javascript
1370
+ // vite.config.js
1371
+ import { defineConfig } from 'vite';
1372
+ import { resolve } from 'path';
1373
+
1374
+ export default defineConfig({
1375
+ build: {
1376
+ target: 'es2022',
1377
+ outDir: 'dist',
1378
+ lib: {
1379
+ entry: resolve(__dirname, 'src/index.js'),
1380
+ name: 'MyLib',
1381
+ formats: ['es', 'cjs'],
1382
+ fileName: (format) => `index.${format === 'es' ? 'js' : 'cjs'}`,
1383
+ },
1384
+ rollupOptions: {
1385
+ external: ['express', 'fastify'],
1386
+ output: {
1387
+ manualChunks: {
1388
+ vendor: ['lodash-es'],
1389
+ },
1390
+ },
1391
+ },
1392
+ minify: 'esbuild',
1393
+ sourcemap: true,
1394
+ },
1395
+ esbuild: {
1396
+ target: 'es2022',
1397
+ keepNames: true,
1398
+ },
1399
+ server: {
1400
+ port: 3000,
1401
+ hmr: true,
1402
+ },
1403
+ });
1404
+ ```
1405
+
1406
+ ### esbuild Direct Usage
1407
+
1408
+ ```javascript
1409
+ // build.js
1410
+ import * as esbuild from 'esbuild';
1411
+
1412
+ await esbuild.build({
1413
+ entryPoints: ['src/index.js'],
1414
+ bundle: true,
1415
+ minify: true,
1416
+ sourcemap: true,
1417
+ target: ['es2022'],
1418
+ platform: 'node',
1419
+ format: 'esm',
1420
+ outdir: 'dist',
1421
+ external: ['express', 'pg'],
1422
+ define: {
1423
+ 'process.env.NODE_ENV': '"production"',
1424
+ },
1425
+ });
1426
+
1427
+ // Watch mode
1428
+ const ctx = await esbuild.context({
1429
+ entryPoints: ['src/index.js'],
1430
+ bundle: true,
1431
+ outdir: 'dist',
1432
+ });
1433
+
1434
+ await ctx.watch();
1435
+ console.log('watching...');
1436
+ ```
1437
+
1438
+ ---
1439
+
1440
+ ## Context7 Library Mappings
1441
+
1442
+ ### Primary Libraries
1443
+
1444
+ ```
1445
+ /nodejs/node - Node.js runtime
1446
+ /expressjs/express - Express web framework
1447
+ /fastify/fastify - Fastify web framework
1448
+ /honojs/hono - Hono web framework
1449
+ /koajs/koa - Koa web framework
1450
+ ```
1451
+
1452
+ ### Testing
1453
+
1454
+ ```
1455
+ /vitest-dev/vitest - Vitest testing framework
1456
+ /jestjs/jest - Jest testing framework
1457
+ /testing-library - Testing Library
1458
+ ```
1459
+
1460
+ ### Build Tools
1461
+
1462
+ ```
1463
+ /vitejs/vite - Vite build tool
1464
+ /evanw/esbuild - esbuild bundler
1465
+ /rollup/rollup - Rollup bundler
1466
+ /biomejs/biome - Biome linter/formatter
1467
+ /eslint/eslint - ESLint linter
1468
+ ```
1469
+
1470
+ ### Utilities
1471
+
1472
+ ```
1473
+ /lodash/lodash - Lodash utilities
1474
+ /date-fns/date-fns - Date utilities
1475
+ /axios/axios - HTTP client
1476
+ /prisma/prisma - Prisma ORM
1477
+ ```
1478
+
1479
+ ---
1480
+
1481
+ ## Security Best Practices
1482
+
1483
+ ### Input Validation
1484
+
1485
+ ```javascript
1486
+ import { z } from 'zod';
1487
+
1488
+ const userSchema = z.object({
1489
+ name: z.string().min(1).max(100).trim(),
1490
+ email: z.string().email().toLowerCase(),
1491
+ age: z.number().int().min(0).max(150).optional(),
1492
+ });
1493
+
1494
+ function validateUser(input) {
1495
+ const result = userSchema.safeParse(input);
1496
+ if (!result.success) {
1497
+ throw new Error(result.error.issues[0].message);
1498
+ }
1499
+ return result.data;
1500
+ }
1501
+ ```
1502
+
1503
+ ### Environment Variable Validation
1504
+
1505
+ ```javascript
1506
+ import { z } from 'zod';
1507
+
1508
+ const envSchema = z.object({
1509
+ NODE_ENV: z.enum(['development', 'production', 'test']),
1510
+ PORT: z.string().transform(Number).pipe(z.number().min(1).max(65535)),
1511
+ DATABASE_URL: z.string().url(),
1512
+ JWT_SECRET: z.string().min(32),
1513
+ });
1514
+
1515
+ const env = envSchema.parse(process.env);
1516
+ export default env;
1517
+ ```
1518
+
1519
+ ### Secure HTTP Headers
1520
+
1521
+ ```javascript
1522
+ import helmet from 'helmet';
1523
+
1524
+ app.use(helmet({
1525
+ contentSecurityPolicy: {
1526
+ directives: {
1527
+ defaultSrc: ["'self'"],
1528
+ scriptSrc: ["'self'"],
1529
+ styleSrc: ["'self'", "'unsafe-inline'"],
1530
+ imgSrc: ["'self'", "data:", "https:"],
1531
+ },
1532
+ },
1533
+ crossOriginEmbedderPolicy: true,
1534
+ crossOriginOpenerPolicy: true,
1535
+ crossOriginResourcePolicy: { policy: "same-origin" },
1536
+ hsts: { maxAge: 31536000, includeSubDomains: true },
1537
+ }));
1538
+ ```
1539
+
1540
+ ---
1541
+
1542
+ Last Updated: 2026-01-05
1543
+ Version: 1.1.0